diff --git a/Configuration/Geometry/README.md b/Configuration/Geometry/README.md
index 5cfba18ccefcf..97c1b40acd352 100644
--- a/Configuration/Geometry/README.md
+++ b/Configuration/Geometry/README.md
@@ -69,6 +69,8 @@ Tracker:
* T31: Phase2 tilted tracker. The tracker description is identical to T24/T21. The outer radius of the tracker volume is reduced to avoid a clash with the BTL geometry. The positions of the tracker components are not affected
* T32: Phase2 tilted tracker. The tracker description is identical to T25. The outer radius of the tracker volume is reduced to avoid a clash with the BTL geometry (same as T31). The positions of the tracker components are not affected. This geometry is intended as a transition step towards a realistic configuration with 3D sensors in TBPX layer1.
* T33: Phase2 tilted tracker. Identical to T32 apart from a more realistic description of the 3D sensors in TBPX layer1.
+* T34: Same as T32 with the exception of modified Tracker volume so that it touches CALO on the outer side and BeamPipe on the inner side
+* T35: Same as T33 with the exception of modified Tracker volume so that it touches CALO on the outer side and BeamPipe on the inner side
Calorimeters:
* C9: HGCal (v11 post TDR HGCal Geometry w/ corner centering for HE part) + Phase2 HCAL and EB + Tracker cables (used in 2026D49)
@@ -91,6 +93,7 @@ Muon system:
* M8: same as M7 with changed number of strips for GE21
* M9: same as M8 with GE0 replacing ME0
* M10: same as M9 but with a realistic support structure for GE0, Shield structure modified in muonYoke
+* M11: same as M10 but with a corrected eta partition sizes for GE21
Fast Timing system:
* I10: Fast Timing detector (LYSO barrel (bars along phi flat), silicon endcap), w/ passive materials, ETL in position defined in O4, material adjustments
@@ -118,17 +121,19 @@ The script also handles the common and forward elements of the geometry:
* F8: same as F6 or F7 without BRM
Several detector combinations have been generated:
-* D86 = T24+C17+M10+I14+O8+F6
-* D88 = T24+C17+M10+I15+O9+F6
-* D91 = T30+C17+M10+I15+O9+F6
-* D92 = T24+C18+M10+I15+O9+F6
-* D93 = T24+C19+M10+I15+O9+F6
+* D86 = T24+C17+M10+I14+O8+F8
+* D88 = T24+C17+M10+I15+O9+F8
+* D91 = T30+C17+M10+I15+O9+F8
+* D92 = T24+C18+M10+I15+O9+F8
+* D93 = T24+C19+M10+I15+O9+F8
* D94 = T24+C20+M10+I15+O9+F8
-* D95 = T31+C17+M10+I16+O9+F6
-* D96 = T31+C18+M10+I16+O9+F6
-* D97 = T25+C17+M10+I15+O9+F6
-* D98 = T32+C17+M10+I16+O9+F6 (Current Phase-2 baseline from CMSSW_13_2_0_pre2)
-* D99 = T32+C18+M10+I16+O9+F6
-* D100 = T33+C17+M10+I16+O9+F6
-* D101 = T32+C21+M10+I15+O9+F6
+* D95 = T31+C17+M10+I16+O9+F8
+* D96 = T31+C18+M10+I16+O9+F8
+* D97 = T25+C17+M10+I15+O9+F8
+* D98 = T32+C17+M10+I16+O9+F8 (Current Phase-2 baseline from CMSSW_13_2_0_pre2)
+* D99 = T32+C18+M10+I16+O9+F8
+* D100 = T34+C17+M11+I16+O9+F8
+* D101 = T34+C18+M11+I16+O9+F8
+* D102 = T35+C17+M11+I16+O9+F8
+* D103 = T34+C21+M11+I16+O9+F8
diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D102Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D102Reco_cff.py
new file mode 100644
index 0000000000000..349eb3e08089f
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D102Reco_cff.py
@@ -0,0 +1,59 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Configuration.Geometry.GeometryDD4hepExtended2026D102_cff import *
+
+# tracker
+from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *
+from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *
+from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *
+from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *
+from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *
+trackerGeometry.applyAlignment = True
+
+# calo
+from Geometry.CaloEventSetup.HGCalTopology_cfi import *
+from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import *
+from Geometry.CaloEventSetup.CaloTopology_cfi import *
+from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import *
+CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder",
+ SelectedCalos = cms.vstring("HCAL",
+ "ZDC",
+ "EcalBarrel",
+ "TOWER",
+ "HGCalEESensitive",
+ "HGCalHESiliconSensitive",
+ "HGCalHEScintillatorSensitive"
+ )
+)
+from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import *
+from Geometry.HcalEventSetup.HcalGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerTopology_cfi import *
+from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import *
+from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import *
+from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import *
+from Geometry.EcalMapping.EcalMapping_cfi import *
+from Geometry.EcalMapping.EcalMappingRecord_cfi import *
+
+# muon
+from Geometry.MuonNumbering.muonNumberingInitialization_cfi import *
+from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import *
+from Geometry.GEMGeometryBuilder.gemGeometry_cff import *
+from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *
+from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *
+
+# forward
+from Geometry.ForwardGeometry.ZdcGeometry_cfi import *
+
+# timing
+from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.mtdParameters_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
+from Geometry.MTDNumberingBuilder.mtdTopology_cfi import *
+from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import *
+mtdGeometry.applyAlignment = False
+
diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D102_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D102_cff.py
new file mode 100644
index 0000000000000..10fa0c418988b
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D102_cff.py
@@ -0,0 +1,17 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Configuration.Geometry.GeometryDD4hep_cff import *
+DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D102.xml")
+
+from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *
+from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_cff import *
+from Geometry.EcalCommonData.ecalSimulationParameters_cff import *
+from Geometry.HcalCommonData.hcalDDDSimConstants_cff import *
+from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import *
+from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import *
+from Geometry.MuonNumbering.muonGeometryConstants_cff import *
+from Geometry.MuonNumbering.muonOffsetESProducer_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D103Reco_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D103Reco_cff.py
new file mode 100644
index 0000000000000..a27d7451e6f0d
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D103Reco_cff.py
@@ -0,0 +1,59 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Configuration.Geometry.GeometryDD4hepExtended2026D103_cff import *
+
+# tracker
+from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *
+from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *
+from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *
+from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *
+from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *
+trackerGeometry.applyAlignment = True
+
+# calo
+from Geometry.CaloEventSetup.HGCalTopology_cfi import *
+from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import *
+from Geometry.CaloEventSetup.CaloTopology_cfi import *
+from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import *
+CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder",
+ SelectedCalos = cms.vstring("HCAL",
+ "ZDC",
+ "EcalBarrel",
+ "TOWER",
+ "HGCalEESensitive",
+ "HGCalHESiliconSensitive",
+ "HGCalHEScintillatorSensitive"
+ )
+)
+from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import *
+from Geometry.HcalEventSetup.HcalGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerTopology_cfi import *
+from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import *
+from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import *
+from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import *
+from Geometry.EcalMapping.EcalMapping_cfi import *
+from Geometry.EcalMapping.EcalMappingRecord_cfi import *
+
+# muon
+from Geometry.MuonNumbering.muonNumberingInitialization_cfi import *
+from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import *
+from Geometry.GEMGeometryBuilder.gemGeometry_cff import *
+from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *
+from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *
+
+# forward
+from Geometry.ForwardGeometry.ZdcGeometry_cfi import *
+
+# timing
+from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.mtdParameters_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
+from Geometry.MTDNumberingBuilder.mtdTopology_cfi import *
+from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import *
+mtdGeometry.applyAlignment = False
+
diff --git a/Configuration/Geometry/python/GeometryDD4hepExtended2026D103_cff.py b/Configuration/Geometry/python/GeometryDD4hepExtended2026D103_cff.py
new file mode 100644
index 0000000000000..7c16321d6b2c7
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryDD4hepExtended2026D103_cff.py
@@ -0,0 +1,17 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Configuration.Geometry.GeometryDD4hep_cff import *
+DDDetectorESProducer.confGeomXMLFiles = cms.FileInPath("Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D103.xml")
+
+from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *
+from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_cff import *
+from Geometry.EcalCommonData.ecalSimulationParameters_cff import *
+from Geometry.HcalCommonData.hcalDDDSimConstants_cff import *
+from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import *
+from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import *
+from Geometry.MuonNumbering.muonGeometryConstants_cff import *
+from Geometry.MuonNumbering.muonOffsetESProducer_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
diff --git a/Configuration/Geometry/python/GeometryExtended2026D102Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D102Reco_cff.py
new file mode 100644
index 0000000000000..3a786a13c7c8e
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryExtended2026D102Reco_cff.py
@@ -0,0 +1,59 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Configuration.Geometry.GeometryExtended2026D102_cff import *
+
+# tracker
+from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *
+from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *
+from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *
+from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *
+from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *
+trackerGeometry.applyAlignment = True
+
+# calo
+from Geometry.CaloEventSetup.HGCalTopology_cfi import *
+from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import *
+from Geometry.CaloEventSetup.CaloTopology_cfi import *
+from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import *
+CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder",
+ SelectedCalos = cms.vstring("HCAL",
+ "ZDC",
+ "EcalBarrel",
+ "TOWER",
+ "HGCalEESensitive",
+ "HGCalHESiliconSensitive",
+ "HGCalHEScintillatorSensitive"
+ )
+)
+from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import *
+from Geometry.HcalEventSetup.HcalGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerTopology_cfi import *
+from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import *
+from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import *
+from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import *
+from Geometry.EcalMapping.EcalMapping_cfi import *
+from Geometry.EcalMapping.EcalMappingRecord_cfi import *
+
+# muon
+from Geometry.MuonNumbering.muonNumberingInitialization_cfi import *
+from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import *
+from Geometry.GEMGeometryBuilder.gemGeometry_cff import *
+from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *
+from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *
+
+# forward
+from Geometry.ForwardGeometry.ZdcGeometry_cfi import *
+
+# timing
+from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.mtdParameters_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
+from Geometry.MTDNumberingBuilder.mtdTopology_cfi import *
+from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import *
+mtdGeometry.applyAlignment = False
+
diff --git a/Configuration/Geometry/python/GeometryExtended2026D102_cff.py b/Configuration/Geometry/python/GeometryExtended2026D102_cff.py
new file mode 100644
index 0000000000000..6101eaa6a79b9
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryExtended2026D102_cff.py
@@ -0,0 +1,15 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Geometry.CMSCommonData.cmsExtendedGeometry2026D102XML_cfi import *
+from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *
+from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_cff import *
+from Geometry.EcalCommonData.ecalSimulationParameters_cff import *
+from Geometry.HcalCommonData.hcalDDDSimConstants_cff import *
+from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import *
+from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import *
+from Geometry.MuonNumbering.muonGeometryConstants_cff import *
+from Geometry.MuonNumbering.muonOffsetESProducer_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
diff --git a/Configuration/Geometry/python/GeometryExtended2026D103Reco_cff.py b/Configuration/Geometry/python/GeometryExtended2026D103Reco_cff.py
new file mode 100644
index 0000000000000..a4db48e78f1b3
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryExtended2026D103Reco_cff.py
@@ -0,0 +1,59 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Configuration.Geometry.GeometryExtended2026D103_cff import *
+
+# tracker
+from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *
+from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *
+from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *
+from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *
+from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *
+trackerGeometry.applyAlignment = True
+
+# calo
+from Geometry.CaloEventSetup.HGCalTopology_cfi import *
+from Geometry.HGCalGeometry.HGCalGeometryESProducer_cfi import *
+from Geometry.CaloEventSetup.CaloTopology_cfi import *
+from Geometry.CaloEventSetup.CaloGeometryBuilder_cfi import *
+CaloGeometryBuilder = cms.ESProducer("CaloGeometryBuilder",
+ SelectedCalos = cms.vstring("HCAL",
+ "ZDC",
+ "EcalBarrel",
+ "TOWER",
+ "HGCalEESensitive",
+ "HGCalHESiliconSensitive",
+ "HGCalHEScintillatorSensitive"
+ )
+)
+from Geometry.EcalAlgo.EcalBarrelGeometry_cfi import *
+from Geometry.HcalEventSetup.HcalGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerGeometry_cfi import *
+from Geometry.HcalEventSetup.CaloTowerTopology_cfi import *
+from Geometry.HcalCommonData.hcalDDDRecConstants_cfi import *
+from Geometry.HcalEventSetup.hcalTopologyIdeal_cfi import *
+from Geometry.CaloEventSetup.EcalTrigTowerConstituents_cfi import *
+from Geometry.EcalMapping.EcalMapping_cfi import *
+from Geometry.EcalMapping.EcalMappingRecord_cfi import *
+
+# muon
+from Geometry.MuonNumbering.muonNumberingInitialization_cfi import *
+from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import *
+from Geometry.GEMGeometryBuilder.gemGeometry_cff import *
+from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *
+from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *
+
+# forward
+from Geometry.ForwardGeometry.ZdcGeometry_cfi import *
+
+# timing
+from RecoMTD.DetLayers.mtdDetLayerGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.mtdParameters_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
+from Geometry.MTDNumberingBuilder.mtdTopology_cfi import *
+from Geometry.MTDGeometryBuilder.mtdGeometry_cfi import *
+from Geometry.MTDGeometryBuilder.idealForDigiMTDGeometry_cff import *
+mtdGeometry.applyAlignment = False
+
diff --git a/Configuration/Geometry/python/GeometryExtended2026D103_cff.py b/Configuration/Geometry/python/GeometryExtended2026D103_cff.py
new file mode 100644
index 0000000000000..5cf8a5feced7d
--- /dev/null
+++ b/Configuration/Geometry/python/GeometryExtended2026D103_cff.py
@@ -0,0 +1,15 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+from Geometry.CMSCommonData.cmsExtendedGeometry2026D103XML_cfi import *
+from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *
+from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_cff import *
+from Geometry.EcalCommonData.ecalSimulationParameters_cff import *
+from Geometry.HcalCommonData.hcalDDDSimConstants_cff import *
+from Geometry.HGCalCommonData.hgcalParametersInitialization_cfi import *
+from Geometry.HGCalCommonData.hgcalNumberingInitialization_cfi import *
+from Geometry.MuonNumbering.muonGeometryConstants_cff import *
+from Geometry.MuonNumbering.muonOffsetESProducer_cff import *
+from Geometry.MTDNumberingBuilder.mtdNumberingGeometry_cff import *
diff --git a/Configuration/Geometry/python/dict2026Geometry.py b/Configuration/Geometry/python/dict2026Geometry.py
index ef890495da3b7..afc0b72502cec 100644
--- a/Configuration/Geometry/python/dict2026Geometry.py
+++ b/Configuration/Geometry/python/dict2026Geometry.py
@@ -63,7 +63,7 @@
trackerDict = {
"abbrev" : "T",
"name" : "tracker",
- "default" : 32,
+ "default" : 34,
"T24" : {
1 : [
'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml',
@@ -277,6 +277,77 @@
],
"era" : "phase2_tracker, phase2_3DPixels, trackingPhase2PU140",
},
+ "T34" : {
+ 1 : [
+ 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml',
+ 'Geometry/TrackerCommonData/data/pixfwdCommon.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml',
+ 'Geometry/TrackerCommonData/data/trackermaterial.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelStructureTopology.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml',
+ 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/trackerRecoMaterial.xml',
+ 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v2/trackingMaterialGroups_ForPhaseII.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelProdCuts.xml',
+ 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml',
+ ],
+ "sim" : [
+ 'from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *',
+ 'from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_cff import *',
+ ],
+ "reco" : [
+ 'from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *',
+ 'from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *',
+ 'from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *',
+ 'from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *',
+ 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *',
+ 'trackerGeometry.applyAlignment = True',
+ ],
+ "era" : "phase2_tracker, phase2_3DPixels, trackingPhase2PU140",
+ },
+ "T35" : {
+ 1 : [
+ 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml',
+ 'Geometry/TrackerCommonData/data/pixfwdCommon.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml',
+ 'Geometry/TrackerCommonData/data/trackermaterial.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05V1/pixel.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelStructureTopology.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelsens.xml',
+ 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/trackerRecoMaterial.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelProdCuts.xml',
+ 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml',
+ ],
+ "sim" : [
+ 'from Geometry.TrackerNumberingBuilder.trackerNumberingGeometry_cff import *',
+ 'from SLHCUpgradeSimulations.Geometry.fakePhase2OuterTrackerConditions_cff import *',
+ ],
+ "reco" : [
+ 'from Geometry.CommonTopologies.globalTrackingGeometry_cfi import *',
+ 'from RecoTracker.GeometryESProducer.TrackerRecoGeometryESProducer_cfi import *',
+ 'from Geometry.TrackerGeometryBuilder.trackerParameters_cff import *',
+ 'from Geometry.TrackerNumberingBuilder.trackerTopology_cfi import *',
+ 'from Geometry.TrackerGeometryBuilder.idealForDigiTrackerGeometry_cff import *',
+ 'trackerGeometry.applyAlignment = True',
+ ],
+ "era" : "phase2_tracker, phase2_3DPixels, trackingPhase2PU140",
+ },
}
@@ -671,7 +742,7 @@
muonDict = {
"abbrev" : "M",
"name" : "muon",
- "default" : 10,
+ "default" : 11,
"M10" : {
1 : [
'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml',
@@ -719,6 +790,53 @@
],
"era" : "phase2_muon, phase2_GEM, phase2_GE0",
},
+ "M11" : {
+ 1 : [
+ 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml',
+ 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml',
+ 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml',
+ 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml',
+ 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml',
+ 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml',
+ 'Geometry/MuonCommonData/data/muonYoke/2026/v3/muonYoke.xml',
+ 'Geometry/MuonCommonData/data/mf/2026/v8/mf.xml',
+ 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml',
+ 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml',
+ 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml',
+ 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml',
+ 'Geometry/MuonCommonData/data/gem21/2026/v1/gem21.xml',
+ 'Geometry/MuonCommonData/data/mfshield/2026/v6/mfshield.xml',
+ 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v4/ge0.xml',
+ 'Geometry/MuonCommonData/data/ge0shield/2026/v1/ge0shield.xml',
+ ],
+ 2 : [
+ 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v5/muonNumbering.xml',
+ ],
+ 3 : [
+ 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml',
+ 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml',
+ 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml',
+ 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml',
+ 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml',
+ 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml',
+ 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml',
+ ],
+ 4 : [
+ 'Geometry/MuonSimData/data/muonProdCuts/2026/v2/muonProdCuts.xml',
+ ],
+ "sim" : [
+ 'from Geometry.MuonNumbering.muonGeometryConstants_cff import *',
+ 'from Geometry.MuonNumbering.muonOffsetESProducer_cff import *',
+ ],
+ "reco" : [
+ 'from Geometry.MuonNumbering.muonNumberingInitialization_cfi import *',
+ 'from RecoMuon.DetLayers.muonDetLayerGeometry_cfi import *',
+ 'from Geometry.GEMGeometryBuilder.gemGeometry_cff import *',
+ 'from Geometry.CSCGeometryBuilder.idealForDigiCscGeometry_cff import *',
+ 'from Geometry.DTGeometryBuilder.idealForDigiDtGeometry_cff import *',
+ ],
+ "era" : "phase2_muon, phase2_GEM, phase2_GE0",
+ },
}
forwardDict = {
@@ -853,8 +971,10 @@
("O9","T25","C17","M10","F8","I15") : "D97",
("O9","T32","C17","M10","F8","I16") : "D98",
("O9","T32","C18","M10","F8","I16") : "D99",
- ("O9","T33","C17","M10","F8","I15") : "D100",
- ("O9","T32","C21","M10","F8","I15") : "D101",
+ ("O9","T34","C17","M11","F8","I16") : "D100",
+ ("O9","T34","C18","M11","F8","I16") : "D101",
+ ("O9","T35","C17","M11","F8","I16") : "D102",
+ ("O9","T34","C21","M11","F8","I16") : "D103",
}
deprecatedDets = set([ "D1", "D2", "D3", "D5", "D6" , "D7", "D4", "D8" , "D9", "D12", "D13", "D15", "D10", "D11", "D14", "D16", "D17", "D18", "D19", "D20", "D21", "D22", "D23", "D24", "D25", "D26", "D27", "D28", "D29", "D30", "D31", "D32", "D33", "D34", "D36", "D37", "D38", "D39", "D40", "D42", "D35", "D41", "D43", "D44", "D45", "D46", "D48", "D47", "D50", "D51", "D52", "D53", "D54", "D55", "D56", "D57", "D58", "D59", "D61", "D62", "D63", "D64", "D65", "D66", "D67", "D69", "D71", "D72", "D73", "D74", "D75", "D78", "D79", "D87", "D89", "D90", "D49", "D60", "D68", "D70", "D76", "D77", "D80", "D81", "D82", "D83", "D84", "D85"])
diff --git a/Configuration/PyReleaseValidation/python/relval_2026.py b/Configuration/PyReleaseValidation/python/relval_2026.py
index 8f32b60d58cb9..4821d0832daea 100644
--- a/Configuration/PyReleaseValidation/python/relval_2026.py
+++ b/Configuration/PyReleaseValidation/python/relval_2026.py
@@ -33,6 +33,8 @@
numWFIB.extend([25234.0,25234.911]) #2026D99 DDD XML, DD4hep XML
numWFIB.extend([25634.0]) #2026D100
numWFIB.extend([26034.0]) #2026D101
+numWFIB.extend([26434.0]) #2026D102
+numWFIB.extend([26834.0]) #2026D103
#Additional sample for short matrix and IB
#CloseByPGun for HGCAL
diff --git a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
index fda8c0e0c26a1..d6dd761188b14 100644
--- a/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
+++ b/Configuration/PyReleaseValidation/python/upgradeWorkflowComponents.py
@@ -65,6 +65,10 @@
'2026D100PU',
'2026D101',
'2026D101PU',
+ '2026D102',
+ '2026D102PU',
+ '2026D103',
+ '2026D103PU',
]
# pre-generation of WF numbers
@@ -2765,8 +2769,8 @@ def condition(self, fragment, stepList, key, hasHarvest):
},
'2026D100' : {
'Geom' : 'Extended2026D100',
- 'HLTmenu': '@fake2',
- 'GT' : 'auto:phase2_realistic_T33',
+ 'HLTmenu': '@relval2026',
+ 'GT' : 'auto:phase2_realistic_T25',
'Era' : 'Phase2C17I13M9',
'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
},
@@ -2777,6 +2781,20 @@ def condition(self, fragment, stepList, key, hasHarvest):
'Era' : 'Phase2C17I13M9',
'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
},
+ '2026D102' : {
+ 'Geom' : 'Extended2026D102',
+ 'HLTmenu': '@fake2',
+ 'GT' : 'auto:phase2_realistic_T33',
+ 'Era' : 'Phase2C17I13M9',
+ 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
+ },
+ '2026D103' : {
+ 'Geom' : 'Extended2026D103',
+ 'HLTmenu': '@relval2026',
+ 'GT' : 'auto:phase2_realistic_T25',
+ 'Era' : 'Phase2C17I13M9',
+ 'ScenToRun' : ['GenSimHLBeamSpot','DigiTrigger','RecoGlobal', 'HARVESTGlobal', 'ALCAPhase2'],
+ },
}
# standard PU sequences
diff --git a/Configuration/StandardSequences/python/GeometryConf.py b/Configuration/StandardSequences/python/GeometryConf.py
index eeea6882d8567..ebcf464772e48 100644
--- a/Configuration/StandardSequences/python/GeometryConf.py
+++ b/Configuration/StandardSequences/python/GeometryConf.py
@@ -87,4 +87,8 @@
'DD4hepExtended2026D100' : 'DD4hepExtended2026D100,DD4hepExtended2026D100Reco',
'Extended2026D101' : 'Extended2026D101,Extended2026D101Reco',
'DD4hepExtended2026D101' : 'DD4hepExtended2026D101,DD4hepExtended2026D101Reco',
+ 'Extended2026D102' : 'Extended2026D102,Extended2026D102Reco',
+ 'DD4hepExtended2026D102' : 'DD4hepExtended2026D102,DD4hepExtended2026D102Reco',
+ 'Extended2026D103' : 'Extended2026D103,Extended2026D103Reco',
+ 'DD4hepExtended2026D103' : 'DD4hepExtended2026D103,DD4hepExtended2026D103Reco',
}
diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D100.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D100.xml
index 94d6c8955a95e..08d647593d1ab 100644
--- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D100.xml
+++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D100.xml
@@ -28,18 +28,19 @@
-
+
-
+
-
+
-
-
+
+
+
-
+
@@ -77,7 +78,7 @@
-
+
@@ -90,10 +91,10 @@
-
+
-
-
+
+
@@ -110,14 +111,14 @@
-
+
-
+
diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D101.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D101.xml
index dd0ef513f336c..543c7b052c58a 100644
--- a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D101.xml
+++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D101.xml
@@ -28,7 +28,7 @@
-
+
@@ -58,12 +58,13 @@
-
-
+
+
+
-
+
@@ -77,7 +78,7 @@
-
+
@@ -90,10 +91,10 @@
-
+
-
-
+
+
@@ -101,7 +102,7 @@
-
+
@@ -110,14 +111,14 @@
-
+
-
+
diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D102.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D102.xml
new file mode 100644
index 0000000000000..12e065e7a8904
--- /dev/null
+++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D102.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D103.xml b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D103.xml
new file mode 100644
index 0000000000000..c8dc35803afe4
--- /dev/null
+++ b/Geometry/CMSCommonData/data/dd4hep/cmsExtendedGeometry2026D103.xml
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D100XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D100XML_cfi.py
index d22218092d6b2..aa65f91bee9f9 100644
--- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D100XML_cfi.py
+++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D100XML_cfi.py
@@ -29,18 +29,19 @@
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml',
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml',
'Geometry/TrackerCommonData/data/trackermaterial.xml',
- 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml',
'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml',
- 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05V1/pixel.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml',
'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml',
'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml',
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml',
- 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelStructureTopology.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelStructureTopology.xml',
'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml',
- 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelsens.xml',
- 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/trackerRecoMaterial.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml',
+ 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/trackerRecoMaterial.xml',
+ 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v2/trackingMaterialGroups_ForPhaseII.xml',
'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml',
- 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelProdCuts.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelProdCuts.xml',
'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml',
'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml',
'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml',
@@ -78,7 +79,7 @@
'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml',
'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml',
'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml',
- 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml',
+ 'Geometry/MuonCommonData/data/gem21/2026/v1/gem21.xml',
'Geometry/MuonCommonData/data/mfshield/2026/v6/mfshield.xml',
'Geometry/MuonCommonData/data/ge0/TDR_Dev/v4/ge0.xml',
'Geometry/MuonCommonData/data/ge0shield/2026/v1/ge0shield.xml',
@@ -91,10 +92,10 @@
'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml',
'Geometry/ForwardCommonData/data/cmszdc.xml',
'Geometry/MTDCommonData/data/mtdMaterial/v3/mtdMaterial.xml',
- 'Geometry/MTDCommonData/data/btl/v1/btl.xml',
+ 'Geometry/MTDCommonData/data/btl/v2/btl.xml',
'Geometry/MTDCommonData/data/etl/v7/etl.xml',
- 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml',
- 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdStructureTopology.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdParameters.xml',
)+
cms.vstring(
'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v5/muonNumbering.xml',
@@ -113,14 +114,14 @@
'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml',
'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml',
'Geometry/ForwardSimData/data/zdcsens.xml',
- 'Geometry/MTDSimData/data/v2/mtdsens.xml',
+ 'Geometry/MTDSimData/data/v4/mtdsens.xml',
'Geometry/HcalSimData/data/HcalProdCuts/2026/v1/HcalProdCuts.xml',
'Geometry/EcalSimData/data/EcalProdCuts.xml',
'Geometry/HGCalSimData/data/hgcProdCutsv15.xml',
'Geometry/MuonSimData/data/muonProdCuts/2026/v2/muonProdCuts.xml',
'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml',
'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml',
- 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml',
+ 'Geometry/MTDSimData/data/v4/mtdProdCuts.xml',
'Geometry/CMSCommonData/data/FieldParameters.xml',
),
rootNodeName = cms.string('cms:OCMS')
diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D101XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D101XML_cfi.py
index f906b363c5650..3d40315e97a65 100644
--- a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D101XML_cfi.py
+++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D101XML_cfi.py
@@ -29,7 +29,7 @@
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml',
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml',
'Geometry/TrackerCommonData/data/trackermaterial.xml',
- 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml',
'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml',
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml',
'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml',
@@ -59,12 +59,13 @@
'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/v1/hcalSimNumbering.xml',
'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/v2/hcalRecNumbering.xml',
'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml',
- 'Geometry/HGCalCommonData/data/hgcal/v17ng/hgcal.xml',
- 'Geometry/HGCalCommonData/data/hgcalwafer/v17ng/hgcalwafer.xml',
+ 'Geometry/HGCalCommonData/data/hgcal/v17/hgcal.xml',
+ 'Geometry/HGCalCommonData/data/hgcalcell/v17/hgcalcell.xml',
+ 'Geometry/HGCalCommonData/data/hgcalwafer/v17/hgcalwafer.xml',
'Geometry/HGCalCommonData/data/hgcalEE/v17/hgcalEE.xml',
'Geometry/HGCalCommonData/data/hgcalHEsil/v17/hgcalHEsil.xml',
'Geometry/HGCalCommonData/data/hgcalHEmix/v17/hgcalHEmix.xml',
- 'Geometry/HGCalCommonData/data/hgcalCons/v17n/hgcalCons.xml',
+ 'Geometry/HGCalCommonData/data/hgcalCons/v17/hgcalCons.xml',
'Geometry/HGCalCommonData/data/hgcalConsData/v17/hgcalConsData.xml',
'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml',
'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml',
@@ -78,7 +79,7 @@
'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml',
'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml',
'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml',
- 'Geometry/MuonCommonData/data/gem21/TDR_Eta16/gem21.xml',
+ 'Geometry/MuonCommonData/data/gem21/2026/v1/gem21.xml',
'Geometry/MuonCommonData/data/mfshield/2026/v6/mfshield.xml',
'Geometry/MuonCommonData/data/ge0/TDR_Dev/v4/ge0.xml',
'Geometry/MuonCommonData/data/ge0shield/2026/v1/ge0shield.xml',
@@ -91,10 +92,10 @@
'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml',
'Geometry/ForwardCommonData/data/cmszdc.xml',
'Geometry/MTDCommonData/data/mtdMaterial/v3/mtdMaterial.xml',
- 'Geometry/MTDCommonData/data/btl/v1/btl.xml',
+ 'Geometry/MTDCommonData/data/btl/v2/btl.xml',
'Geometry/MTDCommonData/data/etl/v7/etl.xml',
- 'Geometry/MTDCommonData/data/mtdParameters/v3/mtdStructureTopology.xml',
- 'Geometry/MTDCommonData/data/mtdParameters/v2/mtdParameters.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdStructureTopology.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdParameters.xml',
)+
cms.vstring(
'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v5/muonNumbering.xml',
@@ -104,7 +105,7 @@
'Geometry/HcalSimData/data/hfpmt.xml',
'Geometry/HcalSimData/data/hffibrebundle.xml',
'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml',
- 'Geometry/HGCalSimData/data/hgcsensv17n.xml',
+ 'Geometry/HGCalSimData/data/hgcsensv15.xml',
'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml',
'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml',
'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml',
@@ -113,14 +114,14 @@
'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml',
'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml',
'Geometry/ForwardSimData/data/zdcsens.xml',
- 'Geometry/MTDSimData/data/v2/mtdsens.xml',
+ 'Geometry/MTDSimData/data/v4/mtdsens.xml',
'Geometry/HcalSimData/data/HcalProdCuts/2026/v1/HcalProdCuts.xml',
'Geometry/EcalSimData/data/EcalProdCuts.xml',
'Geometry/HGCalSimData/data/hgcProdCutsv15.xml',
'Geometry/MuonSimData/data/muonProdCuts/2026/v2/muonProdCuts.xml',
'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml',
'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml',
- 'Geometry/MTDSimData/data/v2/mtdProdCuts.xml',
+ 'Geometry/MTDSimData/data/v4/mtdProdCuts.xml',
'Geometry/CMSCommonData/data/FieldParameters.xml',
),
rootNodeName = cms.string('cms:OCMS')
diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D102XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D102XML_cfi.py
new file mode 100644
index 0000000000000..932ba659cfdc2
--- /dev/null
+++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D102XML_cfi.py
@@ -0,0 +1,127 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource",
+ geomXMLFiles = cms.vstring(
+ 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml',
+ 'Geometry/CMSCommonData/data/rotations.xml',
+ 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml',
+ 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml',
+ 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml',
+ 'Geometry/CMSCommonData/data/cmsMother.xml',
+ 'Geometry/CMSCommonData/data/eta3/etaMax.xml',
+ 'Geometry/CMSCommonData/data/cmsTracker.xml',
+ 'Geometry/CMSCommonData/data/caloBase/2026/v7/caloBase.xml',
+ 'Geometry/CMSCommonData/data/cmsCalo.xml',
+ 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml',
+ 'Geometry/CMSCommonData/data/cmsMuon.xml',
+ 'Geometry/CMSCommonData/data/mgnt.xml',
+ 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml',
+ 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml',
+ 'Geometry/CMSCommonData/data/muonMB.xml',
+ 'Geometry/CMSCommonData/data/muonMagnet.xml',
+ 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml',
+ 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml',
+ 'Geometry/TrackerCommonData/data/pixfwdCommon.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml',
+ 'Geometry/TrackerCommonData/data/trackermaterial.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05V1/pixel.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelStructureTopology.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelsens.xml',
+ 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/trackerRecoMaterial.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT711_2023_05/pixelProdCuts.xml',
+ 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml',
+ 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml',
+ 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml',
+ 'Geometry/EcalCommonData/data/ectkcablemat/2026/v2/ectkcablemat.xml',
+ 'Geometry/EcalCommonData/data/ebalgo.xml',
+ 'Geometry/EcalCommonData/data/ebcon/2021/v1/ebcon.xml',
+ 'Geometry/EcalCommonData/data/ebrot.xml',
+ 'Geometry/HcalCommonData/data/hcalrotations.xml',
+ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml',
+ 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml',
+ 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml',
+ 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml',
+ 'Geometry/HcalCommonData/data/hcalforwardalgo.xml',
+ 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/v1/hcalSimNumbering.xml',
+ 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/v2/hcalRecNumbering.xml',
+ 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml',
+ 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml',
+ 'Geometry/HGCalCommonData/data/hgcal/v16/hgcal.xml',
+ 'Geometry/HGCalCommonData/data/hgcalcell/v16/hgcalcell.xml',
+ 'Geometry/HGCalCommonData/data/hgcalwafer/v16/hgcalwafer.xml',
+ 'Geometry/HGCalCommonData/data/hgcalEE/v16/hgcalEE.xml',
+ 'Geometry/HGCalCommonData/data/hgcalHEsil/v16/hgcalHEsil.xml',
+ 'Geometry/HGCalCommonData/data/hgcalHEmix/v16/hgcalHEmix.xml',
+ 'Geometry/HGCalCommonData/data/hgcalCons/v16/hgcalCons.xml',
+ 'Geometry/HGCalCommonData/data/hgcalConsData/v16/hgcalConsData.xml',
+ 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml',
+ 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml',
+ 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml',
+ 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml',
+ 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml',
+ 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml',
+ 'Geometry/MuonCommonData/data/muonYoke/2026/v3/muonYoke.xml',
+ 'Geometry/MuonCommonData/data/mf/2026/v8/mf.xml',
+ 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml',
+ 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml',
+ 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml',
+ 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml',
+ 'Geometry/MuonCommonData/data/gem21/2026/v1/gem21.xml',
+ 'Geometry/MuonCommonData/data/mfshield/2026/v6/mfshield.xml',
+ 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v4/ge0.xml',
+ 'Geometry/MuonCommonData/data/ge0shield/2026/v1/ge0shield.xml',
+ 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml',
+ 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml',
+ 'Geometry/ForwardCommonData/data/lumimaterials.xml',
+ 'Geometry/ForwardCommonData/data/zdcrotations.xml',
+ 'Geometry/ForwardCommonData/data/lumirotations.xml',
+ 'Geometry/ForwardCommonData/data/zdc/2026/v1/zdc.xml',
+ 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml',
+ 'Geometry/ForwardCommonData/data/cmszdc.xml',
+ 'Geometry/MTDCommonData/data/mtdMaterial/v3/mtdMaterial.xml',
+ 'Geometry/MTDCommonData/data/btl/v2/btl.xml',
+ 'Geometry/MTDCommonData/data/etl/v7/etl.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdStructureTopology.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdParameters.xml',
+ )+
+ cms.vstring(
+ 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v5/muonNumbering.xml',
+ 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml',
+ 'Geometry/HcalCommonData/data/hcalsens/NoHE/v1/hcalsenspmf.xml',
+ 'Geometry/HcalSimData/data/hf.xml',
+ 'Geometry/HcalSimData/data/hfpmt.xml',
+ 'Geometry/HcalSimData/data/hffibrebundle.xml',
+ 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml',
+ 'Geometry/HGCalSimData/data/hgcsensv15.xml',
+ 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml',
+ 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml',
+ 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml',
+ 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml',
+ 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml',
+ 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml',
+ 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml',
+ 'Geometry/ForwardSimData/data/zdcsens.xml',
+ 'Geometry/MTDSimData/data/v4/mtdsens.xml',
+ 'Geometry/HcalSimData/data/HcalProdCuts/2026/v1/HcalProdCuts.xml',
+ 'Geometry/EcalSimData/data/EcalProdCuts.xml',
+ 'Geometry/HGCalSimData/data/hgcProdCutsv15.xml',
+ 'Geometry/MuonSimData/data/muonProdCuts/2026/v2/muonProdCuts.xml',
+ 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml',
+ 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml',
+ 'Geometry/MTDSimData/data/v4/mtdProdCuts.xml',
+ 'Geometry/CMSCommonData/data/FieldParameters.xml',
+ ),
+ rootNodeName = cms.string('cms:OCMS')
+)
diff --git a/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D103XML_cfi.py b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D103XML_cfi.py
new file mode 100644
index 0000000000000..9445410685ab2
--- /dev/null
+++ b/Geometry/CMSCommonData/python/cmsExtendedGeometry2026D103XML_cfi.py
@@ -0,0 +1,127 @@
+import FWCore.ParameterSet.Config as cms
+
+# This config was generated automatically using generate2026Geometry.py
+# If you notice a mistake, please update the generating script, not just this config
+
+XMLIdealGeometryESSource = cms.ESSource("XMLIdealGeometryESSource",
+ geomXMLFiles = cms.vstring(
+ 'Geometry/CMSCommonData/data/materials/2021/v1/materials.xml',
+ 'Geometry/CMSCommonData/data/rotations.xml',
+ 'Geometry/CMSCommonData/data/extend/v2/cmsextent.xml',
+ 'Geometry/CMSCommonData/data/cavernData/2021/v1/cavernData.xml',
+ 'Geometry/CMSCommonData/data/cms/2026/v5/cms.xml',
+ 'Geometry/CMSCommonData/data/cmsMother.xml',
+ 'Geometry/CMSCommonData/data/eta3/etaMax.xml',
+ 'Geometry/CMSCommonData/data/cmsTracker.xml',
+ 'Geometry/CMSCommonData/data/caloBase/2026/v7/caloBase.xml',
+ 'Geometry/CMSCommonData/data/cmsCalo.xml',
+ 'Geometry/CMSCommonData/data/muonBase/2026/v5/muonBase.xml',
+ 'Geometry/CMSCommonData/data/cmsMuon.xml',
+ 'Geometry/CMSCommonData/data/mgnt.xml',
+ 'Geometry/CMSCommonData/data/beampipe/2026/v3/beampipe.xml',
+ 'Geometry/CMSCommonData/data/cmsBeam/2026/v1/cmsBeam.xml',
+ 'Geometry/CMSCommonData/data/muonMB.xml',
+ 'Geometry/CMSCommonData/data/muonMagnet.xml',
+ 'Geometry/CMSCommonData/data/cavern/2021/v1/cavern.xml',
+ 'Geometry/CMSCommonData/data/cavernFloor/2017/v1/cavernFloor.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/trackerParameters.xml',
+ 'Geometry/TrackerCommonData/data/pixfwdCommon.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml',
+ 'Geometry/TrackerCommonData/data/trackermaterial.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerfwd.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerStructureTopology.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelStructureTopology.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackersens.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelsens.xml',
+ 'Geometry/TrackerRecoData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/trackerRecoMaterial.xml',
+ 'SimTracker/TrackerMaterialAnalysis/data/trackingMaterialGroups_ForPhaseII/v2/trackingMaterialGroups_ForPhaseII.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/trackerProdCuts.xml',
+ 'Geometry/TrackerSimData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixelProdCuts.xml',
+ 'Geometry/TrackerSimData/data/trackerProdCutsBEAM.xml',
+ 'Geometry/EcalCommonData/data/eregalgo/2026/v2/eregalgo.xml',
+ 'Geometry/EcalCommonData/data/ectkcable/2026/v1/ectkcable.xml',
+ 'Geometry/EcalCommonData/data/ectkcablemat/2026/v2/ectkcablemat.xml',
+ 'Geometry/EcalCommonData/data/ebalgo.xml',
+ 'Geometry/EcalCommonData/data/ebcon/2021/v1/ebcon.xml',
+ 'Geometry/EcalCommonData/data/ebrot.xml',
+ 'Geometry/HcalCommonData/data/hcalrotations.xml',
+ 'Geometry/HcalCommonData/data/average/hcalforwardmaterial.xml',
+ 'Geometry/HcalCommonData/data/hcal/v2/hcalalgo.xml',
+ 'Geometry/HcalCommonData/data/hcalbarrelalgo.xml',
+ 'Geometry/HcalCommonData/data/hcalcablealgo/v2/hcalcablealgo.xml',
+ 'Geometry/HcalCommonData/data/hcalouteralgo/v1/hcalouteralgo.xml',
+ 'Geometry/HcalCommonData/data/hcalforwardalgo.xml',
+ 'Geometry/HcalCommonData/data/hcalSimNumbering/NoHE/v1/hcalSimNumbering.xml',
+ 'Geometry/HcalCommonData/data/hcalRecNumbering/NoHE/v2/hcalRecNumbering.xml',
+ 'Geometry/HGCalCommonData/data/hgcalMaterial/v2/hgcalMaterial.xml',
+ 'Geometry/HGCalCommonData/data/hgcal/v17ng/hgcal.xml',
+ 'Geometry/HGCalCommonData/data/hgcalwafer/v17ng/hgcalwafer.xml',
+ 'Geometry/HGCalCommonData/data/hgcalEE/v17/hgcalEE.xml',
+ 'Geometry/HGCalCommonData/data/hgcalHEsil/v17/hgcalHEsil.xml',
+ 'Geometry/HGCalCommonData/data/hgcalHEmix/v17/hgcalHEmix.xml',
+ 'Geometry/HGCalCommonData/data/hgcalCons/v17n/hgcalCons.xml',
+ 'Geometry/HGCalCommonData/data/hgcalConsData/v17/hgcalConsData.xml',
+ 'Geometry/MuonCommonData/data/mbCommon/2021/v1/mbCommon.xml',
+ 'Geometry/MuonCommonData/data/mb1/2015/v2/mb1.xml',
+ 'Geometry/MuonCommonData/data/mb2/2015/v2/mb2.xml',
+ 'Geometry/MuonCommonData/data/mb3/2015/v2/mb3.xml',
+ 'Geometry/MuonCommonData/data/mb4/2015/v2/mb4.xml',
+ 'Geometry/MuonCommonData/data/mb4Shield/2021/v1/mb4Shield.xml',
+ 'Geometry/MuonCommonData/data/muonYoke/2026/v3/muonYoke.xml',
+ 'Geometry/MuonCommonData/data/mf/2026/v8/mf.xml',
+ 'Geometry/MuonCommonData/data/csc/2021/v2/csc.xml',
+ 'Geometry/MuonCommonData/data/rpcf/2026/v3/rpcf.xml',
+ 'Geometry/MuonCommonData/data/gemf/TDR_BaseLine/gemf.xml',
+ 'Geometry/MuonCommonData/data/gem11/TDR_BaseLine/gem11.xml',
+ 'Geometry/MuonCommonData/data/gem21/2026/v1/gem21.xml',
+ 'Geometry/MuonCommonData/data/mfshield/2026/v6/mfshield.xml',
+ 'Geometry/MuonCommonData/data/ge0/TDR_Dev/v4/ge0.xml',
+ 'Geometry/MuonCommonData/data/ge0shield/2026/v1/ge0shield.xml',
+ 'Geometry/ForwardCommonData/data/forwardshield/2026/v4/forwardshield.xml',
+ 'Geometry/ForwardCommonData/data/zdcmaterials/2021/v1/zdcmaterials.xml',
+ 'Geometry/ForwardCommonData/data/lumimaterials.xml',
+ 'Geometry/ForwardCommonData/data/zdcrotations.xml',
+ 'Geometry/ForwardCommonData/data/lumirotations.xml',
+ 'Geometry/ForwardCommonData/data/zdc/2026/v1/zdc.xml',
+ 'Geometry/ForwardCommonData/data/zdclumi/2021/v2/zdclumi.xml',
+ 'Geometry/ForwardCommonData/data/cmszdc.xml',
+ 'Geometry/MTDCommonData/data/mtdMaterial/v3/mtdMaterial.xml',
+ 'Geometry/MTDCommonData/data/btl/v2/btl.xml',
+ 'Geometry/MTDCommonData/data/etl/v7/etl.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdStructureTopology.xml',
+ 'Geometry/MTDCommonData/data/mtdParameters/v4/mtdParameters.xml',
+ )+
+ cms.vstring(
+ 'Geometry/MuonCommonData/data/muonNumbering/TDR_DeV/v5/muonNumbering.xml',
+ 'Geometry/EcalSimData/data/PhaseII/ecalsens.xml',
+ 'Geometry/HcalCommonData/data/hcalsens/NoHE/v1/hcalsenspmf.xml',
+ 'Geometry/HcalSimData/data/hf.xml',
+ 'Geometry/HcalSimData/data/hfpmt.xml',
+ 'Geometry/HcalSimData/data/hffibrebundle.xml',
+ 'Geometry/HcalSimData/data/CaloUtil/2026/v2c/CaloUtil.xml',
+ 'Geometry/HGCalSimData/data/hgcsensv17n.xml',
+ 'Geometry/MuonSimData/data/PhaseII/v2/muonSens.xml',
+ 'Geometry/DTGeometryBuilder/data/dtSpecsFilter/2021/v1/dtSpecsFilter.xml',
+ 'Geometry/CSCGeometryBuilder/data/cscSpecsFilter.xml',
+ 'Geometry/CSCGeometryBuilder/data/cscSpecs.xml',
+ 'Geometry/RPCGeometryBuilder/data/2026/v1/RPCSpecs.xml',
+ 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecsFilter.xml',
+ 'Geometry/GEMGeometryBuilder/data/v12/GEMSpecs.xml',
+ 'Geometry/ForwardSimData/data/zdcsens.xml',
+ 'Geometry/MTDSimData/data/v4/mtdsens.xml',
+ 'Geometry/HcalSimData/data/HcalProdCuts/2026/v1/HcalProdCuts.xml',
+ 'Geometry/EcalSimData/data/EcalProdCuts.xml',
+ 'Geometry/HGCalSimData/data/hgcProdCutsv15.xml',
+ 'Geometry/MuonSimData/data/muonProdCuts/2026/v2/muonProdCuts.xml',
+ 'Geometry/ForwardSimData/data/zdcProdCuts/2021/v2/zdcProdCuts.xml',
+ 'Geometry/ForwardSimData/data/ForwardShieldProdCuts.xml',
+ 'Geometry/MTDSimData/data/v4/mtdProdCuts.xml',
+ 'Geometry/CMSCommonData/data/FieldParameters.xml',
+ ),
+ rootNodeName = cms.string('cms:OCMS')
+)
diff --git a/Geometry/MuonCommonData/python/cmsExtendedGeometry2026D99XML_cfi.py b/Geometry/MuonCommonData/python/cmsExtendedGeometry2026D99XML_cfi.py
index d10d55cf445df..188c1b7ac1990 100644
--- a/Geometry/MuonCommonData/python/cmsExtendedGeometry2026D99XML_cfi.py
+++ b/Geometry/MuonCommonData/python/cmsExtendedGeometry2026D99XML_cfi.py
@@ -26,7 +26,7 @@
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/pixfwd.xml',
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_OT800_IT615_2022_10/pixbar.xml',
'Geometry/TrackerCommonData/data/trackermaterial.xml',
- 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_02/tracker.xml',
+ 'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml',
'Geometry/TrackerCommonData/data/PhaseII/OuterTracker616_2020_04/otst.xml',
'Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_IT702_2021_03/pixel.xml',
'Geometry/TrackerCommonData/data/PhaseII/TiltedTracker404/trackerbar.xml',
diff --git a/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml
new file mode 100644
index 0000000000000..5b69fdfe4db13
--- /dev/null
+++ b/Geometry/TrackerCommonData/data/PhaseII/Tracker_DD4hep_compatible_2021_03/tracker.xml
@@ -0,0 +1,33361 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.8981*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.95877*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.64218*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -3.75278*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.5*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -5.60117*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.04705*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -4.76701*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.55*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -8.595*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, 7.495*mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0*mm, 0*mm, -7.495*mm
+
+
+
+
+
+
diff --git a/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DD4hep_cfg.py b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DD4hep_cfg.py
index 5c824d44e3c29..e525fda8ed79f 100644
--- a/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DD4hep_cfg.py
+++ b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DD4hep_cfg.py
@@ -3,7 +3,7 @@
# cmsRun g4OverlapCheck2026DD4hep_cfg.py geometry=D92 tol=0.1
#
# Options for geometry D86, D88, D91, D92, D93, D94, D95, D96, D98, D99,
-# D100, D101
+# D100, D101, D102, D103
#
###############################################################################
import FWCore.ParameterSet.Config as cms
@@ -17,7 +17,7 @@
"D88",
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
- "geometry of operations: D86, D88, D91, D92, D93, D94, D95, D96, D98, D99, D100, D101")
+ "geometry of operations: D86, D88, D91, D92, D93, D94, D95, D96, D98, D99, D100, D101, D102, D103")
options.register('tol',
0.1,
VarParsing.VarParsing.multiplicity.singleton,
diff --git a/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DDD_cfg.py b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DDD_cfg.py
index 02a58cdd67de7..5754e522047f9 100644
--- a/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DDD_cfg.py
+++ b/SimG4Core/PrintGeomInfo/test/python/g4OverlapCheck2026DDD_cfg.py
@@ -3,7 +3,7 @@
# cmsRun g4OverlapCheck2026DDD_cfg.py geometry=D88 tol=0.1
#
# Options for geometry D86, D88, D91, D92, D93, D94, D95, D96, D98, D99,
-# D100, D101
+# D100, D101, D102, D103
#
###############################################################################
import FWCore.ParameterSet.Config as cms
@@ -17,7 +17,7 @@
"D88",
VarParsing.VarParsing.multiplicity.singleton,
VarParsing.VarParsing.varType.string,
- "geometry of operations: D86, D88, D91, D92, D93, D94, D95, D96, D98, D99, D100, D101")
+ "geometry of operations: D86, D88, D91, D92, D93, D94, D95, D96, D98, D99, D100, D101, D102, D103")
options.register('tol',
0.1,
VarParsing.VarParsing.multiplicity.singleton,