diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5afff955d..101ba9f94 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,16 @@ All notable changes to this project are documented in this file.
The format is *loosely* based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) .The project does *not* follow Semantic Versioning and the changes are documented in reverse chronological order, grouped by calendar month.
+## December 2024
+
+### Changed
+
+- combine multiple elements without spaces Reduced from Errors to Warning checks that force policies for all concepts in a language. In this way one can prototype with small set of merge policies. Use Partial police flag in your MergingPolicy to deactivate runtime checks as well.
+
+### Added
+
+- *de.itemis.mps.editor.diagram*: Edges now support custom IDs.
+
## November 2024
### Changed
@@ -50,13 +60,13 @@ The format is *loosely* based on [Keep a Changelog](https://keepachangelog.com/e
### Fixed
-- *com.mbeddr.mpsutil.projectview.runtime*: Fixed several NPEs. See: [#903,](https://github.com/JetBrains/MPS-extensions/issues/903) [#904]((https://github.com/JetBrains/MPS-extensions/issues/904) , [#901](https://github.com/JetBrains/MPS-extensions/issues/901)
+- *com.mbeddr.mpsutil.projectview.runtime*: Fixed several NPEs. See: [#903,](https://github.com/JetBrains/MPS-extensions/issues/903) [#904](https://github.com/JetBrains/MPS-extensions/issues/904) , [#901](https://github.com/JetBrains/MPS-extensions/issues/901)
- *de.itemis.mps.editor.diagram*: Some issues related to ELK styles and custom IDs were fixed.
### Changed
- *de.slisson.mps.reflection*: The language uses the class ReflectionUtil directly and doesn't copy ReflectionUtil_copy in the model anymore.
-- *com.mbeddr.mpsutil.editor.querylist.runtime*: Querylist calls model checks of target nodes less agressively.
+- *com.mbeddr.mpsutil.editor.querylist.runtime*: Query list calls model checks of target nodes less aggressively.
## July 2024
diff --git a/code/.mps/modules.xml b/code/.mps/modules.xml
index 2943c35ae..261b79083 100644
--- a/code/.mps/modules.xml
+++ b/code/.mps/modules.xml
@@ -77,6 +77,7 @@
+
@@ -126,6 +127,7 @@
+
diff --git a/code/build/solutions/de.itemis.mps.extensions.build/models/de.itemis.mps.extensions.build.mps b/code/build/solutions/de.itemis.mps.extensions.build/models/de.itemis.mps.extensions.build.mps
index a991cc032..3c35f5291 100644
--- a/code/build/solutions/de.itemis.mps.extensions.build/models/de.itemis.mps.extensions.build.mps
+++ b/code/build/solutions/de.itemis.mps.extensions.build/models/de.itemis.mps.extensions.build.mps
@@ -14899,6 +14899,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -18353,6 +18433,11 @@
+
+
+
+
+
@@ -18752,6 +18837,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -22753,6 +22927,9 @@
+
+
+
diff --git a/code/diagram/languages/de.itemis.mps.editor.diagram/generator/template/main@generator.mps b/code/diagram/languages/de.itemis.mps.editor.diagram/generator/template/main@generator.mps
index d82418929..008f31716 100644
--- a/code/diagram/languages/de.itemis.mps.editor.diagram/generator/template/main@generator.mps
+++ b/code/diagram/languages/de.itemis.mps.editor.diagram/generator/template/main@generator.mps
@@ -61,12 +61,12 @@
-
+
-
-
+
+
@@ -7209,6 +7209,9 @@
+
+
+
@@ -7223,9 +7226,6 @@
-
-
-
@@ -7424,6 +7424,9 @@
+
+
+
@@ -7438,9 +7441,6 @@
-
-
-
@@ -8947,7 +8947,7 @@
-
+
@@ -10225,6 +10225,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/editor.mps b/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/editor.mps
index 022daa474..dc12b91ca 100644
--- a/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/editor.mps
+++ b/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/editor.mps
@@ -822,7 +822,6 @@
-
@@ -974,6 +973,7 @@
+
@@ -4665,6 +4665,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -5949,7 +5968,6 @@
-
@@ -5988,6 +6006,7 @@
+
@@ -14927,10 +14946,40 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -14992,6 +15041,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -15259,77 +15350,5 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/structure.mps b/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/structure.mps
index ab1fc649a..3b747b32a 100644
--- a/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/structure.mps
+++ b/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/structure.mps
@@ -473,6 +473,12 @@
+
+
+
+
+
+
@@ -499,11 +505,6 @@
-
-
-
-
-
@@ -2549,6 +2550,12 @@
+
+
+
+
+
+
@@ -2975,12 +2982,6 @@
-
-
-
-
-
-
@@ -3234,6 +3235,12 @@
+
+
+
+
+
+
@@ -3262,12 +3269,6 @@
-
-
-
-
-
-
@@ -3301,6 +3302,12 @@
+
+
+
+
+
+
@@ -3369,12 +3376,6 @@
-
-
-
-
-
-
@@ -3498,6 +3499,12 @@
+
+
+
+
+
+
@@ -3576,12 +3583,6 @@
-
-
-
-
-
-
@@ -3820,6 +3821,12 @@
+
+
+
+
+
+
@@ -3891,12 +3898,6 @@
-
-
-
-
-
-
@@ -5033,20 +5034,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -5089,16 +5086,25 @@
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/typesystem.mps b/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/typesystem.mps
index 8cae358d9..2af926bbd 100644
--- a/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/typesystem.mps
+++ b/code/diagram/languages/de.itemis.mps.editor.diagram/languageModels/typesystem.mps
@@ -539,6 +539,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/diagram/languages/test.de.itemis.mps.editor.diagram.lang/languageModels/editor.mps b/code/diagram/languages/test.de.itemis.mps.editor.diagram.lang/languageModels/editor.mps
index 21e8f2b6d..184ea39ed 100644
--- a/code/diagram/languages/test.de.itemis.mps.editor.diagram.lang/languageModels/editor.mps
+++ b/code/diagram/languages/test.de.itemis.mps.editor.diagram.lang/languageModels/editor.mps
@@ -137,6 +137,9 @@
+
+
+
@@ -406,7 +409,9 @@
-
+
+
+
@@ -859,6 +864,16 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/code/diagram/solutions/de.itemis.mps.editor.diagram.runtime/models/de/itemis/mps/editor/diagram/runtime/model.mps b/code/diagram/solutions/de.itemis.mps.editor.diagram.runtime/models/de/itemis/mps/editor/diagram/runtime/model.mps
index 7d1a05ec2..823d35fd9 100644
--- a/code/diagram/solutions/de.itemis.mps.editor.diagram.runtime/models/de/itemis/mps/editor/diagram/runtime/model.mps
+++ b/code/diagram/solutions/de.itemis.mps.editor.diagram.runtime/models/de/itemis/mps/editor/diagram/runtime/model.mps
@@ -23883,30 +23883,68 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
+
-
+
+
-
+
+
+
+
+
+
+
+
+
+
@@ -23933,6 +23971,7 @@
+
diff --git a/code/languages/de.itemis.model.merge.baselang/generator/templates/de.itemis.model.merge.baselang.generator.templates@generator.mps b/code/languages/de.itemis.model.merge.baselang/generator/templates/de.itemis.model.merge.baselang.generator.templates@generator.mps
index 8574cbf9e..6b87859c7 100644
--- a/code/languages/de.itemis.model.merge.baselang/generator/templates/de.itemis.model.merge.baselang.generator.templates@generator.mps
+++ b/code/languages/de.itemis.model.merge.baselang/generator/templates/de.itemis.model.merge.baselang.generator.templates@generator.mps
@@ -75,7 +75,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge.baselang/models/de.itemis.model.merge.baselang.typesystem.mps b/code/languages/de.itemis.model.merge.baselang/models/de.itemis.model.merge.baselang.typesystem.mps
index cb1eead9c..271ff30ce 100644
--- a/code/languages/de.itemis.model.merge.baselang/models/de.itemis.model.merge.baselang.typesystem.mps
+++ b/code/languages/de.itemis.model.merge.baselang/models/de.itemis.model.merge.baselang.typesystem.mps
@@ -100,7 +100,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.mps b/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.mps
index 462522d5f..193d8b98c 100644
--- a/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.mps
+++ b/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.mps
@@ -201,7 +201,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.plugin.mps b/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.plugin.mps
index 91750de8b..a825917e1 100644
--- a/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.plugin.mps
+++ b/code/languages/de.itemis.model.merge.baselang/sandbox/models/de.itemis.model.merge.baselang.sandbox.plugin.mps
@@ -53,14 +53,14 @@
-
+
-
-
-
+
+
+
diff --git a/code/languages/de.itemis.model.merge/generator/templates/de.itemis.model.merge.generator.templates@generator.mps b/code/languages/de.itemis.model.merge/generator/templates/de.itemis.model.merge.generator.templates@generator.mps
index 56af352d9..1aaccdd82 100644
--- a/code/languages/de.itemis.model.merge/generator/templates/de.itemis.model.merge.generator.templates@generator.mps
+++ b/code/languages/de.itemis.model.merge/generator/templates/de.itemis.model.merge.generator.templates@generator.mps
@@ -370,33 +370,33 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -555,7 +555,7 @@
-
+
@@ -583,7 +583,7 @@
-
+
@@ -700,12 +700,12 @@
-
+
-
+
@@ -772,7 +772,7 @@
-
+
@@ -882,7 +882,7 @@
-
+
@@ -1004,7 +1004,7 @@
-
+
@@ -1384,7 +1384,7 @@
-
+
@@ -1970,7 +1970,7 @@
-
+
@@ -2070,7 +2070,7 @@
-
+
@@ -2157,7 +2157,7 @@
-
+
@@ -2250,7 +2250,7 @@
-
+
@@ -2321,7 +2321,7 @@
-
+
@@ -2410,7 +2410,7 @@
-
+
@@ -2597,7 +2597,7 @@
-
+
@@ -2917,7 +2917,7 @@
-
+
@@ -2988,7 +2988,7 @@
-
+
@@ -3059,7 +3059,7 @@
-
+
@@ -3235,7 +3235,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.behavior.mps b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.behavior.mps
index c99685a12..6f6129d09 100644
--- a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.behavior.mps
+++ b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.behavior.mps
@@ -20,17 +20,14 @@
-
-
-
@@ -314,7 +311,7 @@
-
+
@@ -330,7 +327,7 @@
-
+
@@ -340,12 +337,12 @@
-
+
-
+
@@ -396,7 +393,7 @@
-
+
@@ -717,7 +714,7 @@
-
+
@@ -756,7 +753,7 @@
-
+
@@ -1307,8 +1304,8 @@
-
-
+
+
@@ -1334,7 +1331,7 @@
-
+
@@ -1354,7 +1351,7 @@
-
+
@@ -1374,7 +1371,7 @@
-
+
@@ -1396,16 +1393,16 @@
-
+
-
+
-
+
@@ -1414,23 +1411,23 @@
-
+
-
+
-
+
-
+
-
+
@@ -1475,7 +1472,7 @@
-
+
@@ -1484,7 +1481,7 @@
-
+
@@ -1516,7 +1513,7 @@
-
+
@@ -1527,14 +1524,14 @@
-
+
-
+
@@ -1705,7 +1702,7 @@
-
+
@@ -2374,7 +2371,7 @@
-
+
@@ -2543,7 +2540,7 @@
-
+
@@ -2574,7 +2571,7 @@
-
+
@@ -2591,7 +2588,7 @@
-
+
@@ -2668,7 +2665,7 @@
-
+
@@ -2676,7 +2673,7 @@
-
+
@@ -2788,7 +2785,7 @@
-
+
@@ -2826,7 +2823,7 @@
-
+
@@ -2864,7 +2861,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.constraints.mps b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.constraints.mps
index 2e588f315..22cf38429 100644
--- a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.constraints.mps
+++ b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.constraints.mps
@@ -237,7 +237,7 @@
-
+
@@ -246,14 +246,14 @@
-
+
-
+
@@ -280,7 +280,7 @@
-
+
@@ -290,14 +290,14 @@
-
+
-
+
@@ -313,7 +313,7 @@
-
+
@@ -464,7 +464,7 @@
-
+
@@ -588,7 +588,7 @@
-
+
@@ -708,7 +708,7 @@
-
+
@@ -718,14 +718,14 @@
-
+
-
+
@@ -741,7 +741,7 @@
-
+
@@ -781,7 +781,7 @@
-
+
@@ -978,7 +978,7 @@
-
+
@@ -988,14 +988,14 @@
-
+
-
+
@@ -1011,7 +1011,7 @@
-
+
@@ -1051,7 +1051,7 @@
-
+
@@ -1061,14 +1061,14 @@
-
+
-
+
@@ -1084,7 +1084,7 @@
-
+
@@ -1124,7 +1124,7 @@
-
+
@@ -1134,14 +1134,14 @@
-
+
-
+
@@ -1157,7 +1157,7 @@
-
+
@@ -1197,7 +1197,7 @@
-
+
@@ -1207,14 +1207,14 @@
-
+
-
+
@@ -1230,7 +1230,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.editor.mps b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.editor.mps
index 37562ab64..3071050f3 100644
--- a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.editor.mps
+++ b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.editor.mps
@@ -3,7 +3,6 @@
-
@@ -12,7 +11,6 @@
-
@@ -330,7 +328,7 @@
-
+
@@ -364,15 +362,25 @@
+
+
+
+
+
+
+
+
+
+
-
+
-
+
@@ -382,11 +390,11 @@
-
+
-
+
@@ -584,7 +592,7 @@
-
+
@@ -629,7 +637,7 @@
-
+
@@ -651,7 +659,7 @@
-
+
@@ -675,7 +683,7 @@
-
+
@@ -706,14 +714,14 @@
-
+
-
+
@@ -936,7 +944,7 @@
-
+
@@ -1022,7 +1030,7 @@
-
+
@@ -1165,7 +1173,7 @@
-
+
@@ -1308,7 +1316,7 @@
-
+
@@ -1546,32 +1554,18 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
+
@@ -1583,7 +1577,7 @@
-
+
@@ -1613,7 +1607,7 @@
-
+
@@ -1629,7 +1623,7 @@
-
+
@@ -1656,18 +1650,18 @@
-
+
-
+
-
+
@@ -1738,7 +1732,7 @@
-
+
@@ -1749,7 +1743,7 @@
-
+
@@ -1770,19 +1764,19 @@
-
+
-
+
-
+
@@ -2107,7 +2101,7 @@
-
+
@@ -2171,7 +2165,7 @@
-
+
@@ -2194,14 +2188,14 @@
-
+
-
+
@@ -2213,7 +2207,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.intentions.mps b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.intentions.mps
index d53ad9fbb..001f142ee 100644
--- a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.intentions.mps
+++ b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.intentions.mps
@@ -55,7 +55,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.plugin.mps b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.plugin.mps
index 8fddf5792..7c46ec998 100644
--- a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.plugin.mps
+++ b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.plugin.mps
@@ -121,7 +121,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.structure.mps b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.structure.mps
index 5a946f5f8..2749a153c 100644
--- a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.structure.mps
+++ b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.structure.mps
@@ -64,14 +64,14 @@
-
+
-
+
-
+
@@ -90,10 +90,15 @@
+
+
+
+
+
-
+
@@ -128,25 +133,25 @@
-
+
-
+
-
+
-
+
-
+
@@ -237,7 +242,7 @@
-
+
@@ -250,12 +255,12 @@
-
-
+
+
-
+
@@ -268,7 +273,7 @@
-
+
@@ -300,7 +305,7 @@
-
+
@@ -320,7 +325,7 @@
-
+
@@ -338,7 +343,7 @@
-
+
@@ -349,12 +354,12 @@
-
+
-
+
@@ -379,9 +384,9 @@
-
+
-
+
@@ -402,24 +407,24 @@
-
+
-
+
-
+
-
+
-
+
@@ -427,7 +432,7 @@
-
+
@@ -436,7 +441,7 @@
-
+
@@ -445,7 +450,7 @@
-
+
diff --git a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.typesystem.mps b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.typesystem.mps
index b21c11493..aaf4515be 100644
--- a/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.typesystem.mps
+++ b/code/languages/de.itemis.model.merge/models/de.itemis.model.merge.typesystem.mps
@@ -618,12 +618,12 @@
-
+
-
+
@@ -648,42 +648,42 @@
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
@@ -750,11 +750,11 @@
-
-
+
+
-
+
@@ -830,7 +830,7 @@
-
+
@@ -1021,7 +1021,7 @@
-
+
@@ -1037,7 +1037,7 @@
-
+
@@ -1075,812 +1075,823 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+