Working on SLING-8075 - Adding support for upgrading using the Sling feature archive
diff --git a/feature/pom.xml b/feature/pom.xml
index 42fd519..d3877e5 100644
--- a/feature/pom.xml
+++ b/feature/pom.xml
@@ -109,6 +109,14 @@
                             <filesExclude>runmodes/*.json</filesExclude>
                             <title>Sling CMS - Composite Node Store Runtime</title>
                         </aggregate>
+                        <aggregate>
+                            <classifier>slingcms-upgrade</classifier>
+                            <filesInclude>**/*.json</filesInclude>
+                            <filesExclude>framework-properties.json</filesExclude>
+                            <filesExclude>oak/node-store/*.json</filesExclude>
+                            <filesExclude>runmodes/*.json</filesExclude>
+                            <title>Sling CMS - Upgrade</title>
+                        </aggregate>
                     </aggregates>
                     <scans>
                         <scan>
@@ -132,6 +140,10 @@
                             <classifier>slingcms_standalone_far</classifier>
                             <includeClassifier>slingcms-standalone</includeClassifier>
                         </archive>
+                        <archive>
+                            <classifier>slingcms_upgrade_far</classifier>
+                            <includeClassifier>slingcms-upgrade</includeClassifier>
+                        </archive>
                     </archives>
                 </configuration>
                 <executions>
diff --git a/feature/src/main/features/boot.json b/feature/src/main/features/boot.json
index 0671ec3..eccfb4b 100644
--- a/feature/src/main/features/boot.json
+++ b/feature/src/main/features/boot.json
@@ -1,7 +1,4 @@
 {
-    "variables": {
-        "sling.home": null
-    },
     "bundles": [
         {
             "id": "org.apache.felix:org.apache.felix.cm.json:1.0.2",
@@ -131,16 +128,5 @@
             "id": "org.apache.felix:org.apache.felix.scr:2.1.24",
             "start-order": "1"
         }
-    ],
-    "framework-properties": {
-        "localIndexDir": "${sling.home}/repository/index",
-        "repository.home": "${sling.home}/repository",
-        "sling.jre.java.xml": ",javax.xml;version=\"2.1.0\",javax.xml.datatype;uses:=\"javax.xml.namespace\";version=\"2.1.0\",javax.xml.namespace;version=\"2.1.0\",javax.xml.parsers;uses:=\"javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers\";version=\"2.1.0\",javax.xml.stream;uses:=\"javax.xml.namespace,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform\";version=\"1.0.0\",javax.xml.stream.events;uses:=\"javax.xml.namespace,javax.xml.stream\";version=\"1.0.0\",javax.xml.stream.util;uses:=\"javax.xml.namespace,javax.xml.stream,javax.xml.stream.events\";version=\"1.0.0\",javax.xml.transform;version=\"2.1.0\",javax.xml.transform.dom;uses:=\"javax.xml.transform,org.w3c.dom\";version=\"2.1.0\",javax.xml.transform.sax;uses:=\"javax.xml.transform,javax.xml.transform.stream,org.xml.sax,org.xml.sax.ext\";version=\"2.1.0\",javax.xml.transform.stax;uses:=\"javax.xml.stream,javax.xml.stream.events,javax.xml.transform\";version=\"2.1.0\",javax.xml.transform.stream;uses:=\"javax.xml.transform\";version=\"2.1.0\",javax.xml.validation;uses:=\"javax.xml.transform,javax.xml.transform.stream,org.w3c.dom,org.w3c.dom.ls,org.xml.sax\";version=\"2.1.0\",javax.xml.xpath;uses:=\"javax.xml.namespace,org.xml.sax\";version=\"2.1.0\",org.w3c.dom;version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.bootstrap;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.css;uses:=\"org.w3c.dom,org.w3c.dom.stylesheets,org.w3c.dom.views\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.events;uses:=\"org.w3c.dom,org.w3c.dom.views\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.html;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.ls;uses:=\"org.w3c.dom,org.w3c.dom.events\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.ranges;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.stylesheets;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.traversal;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.views;version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.xpath;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.xml.sax;version=\"{dollar}{felix.detect.java.version}\",org.xml.sax.ext;uses:=\"org.xml.sax,org.xml.sax.helpers\";version=\"{dollar}{felix.detect.java.version}\",org.xml.sax.helpers;uses:=\"org.xml.sax\";version=\"{dollar}{felix.detect.java.version}\"",
-        "felix.systempackages.calculate.uses": "true",
-        "org.osgi.framework.system.packages": "org.osgi.framework;version=\"1.9\",org.osgi.framework.dto;version=\"1.8\";uses:=\"org.osgi.dto\",org.osgi.framework.hooks.bundle;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.resolver;version=\"1.0\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.hooks.service;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.weaving;version=\"1.1\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.launch;version=\"1.2\";uses:=\"org.osgi.framework\",org.osgi.framework.namespace;version=\"1.1\";uses:=\"org.osgi.resource\",org.osgi.framework.startlevel;version=\"1.0\";uses:=\"org.osgi.framework\",org.osgi.framework.startlevel.dto;version=\"1.0\";uses:=\"org.osgi.dto\",org.osgi.framework.wiring;version=\"1.2\";uses:=\"org.osgi.framework,org.osgi.resource\",org.osgi.framework.wiring.dto;version=\"1.3\";uses:=\"org.osgi.dto,org.osgi.resource.dto\",org.osgi.resource;version=\"1.0\",org.osgi.resource.dto;version=\"1.0\";uses:=\"org.osgi.dto\",org.osgi.service.packageadmin;version=\"1.2\";uses:=\"org.osgi.framework\",org.osgi.service.startlevel;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.service.url;version=\"1.0\",org.osgi.service.resolver;version=\"1.1\";uses:=\"org.osgi.resource\",org.osgi.dto;version=\"1.1\",org.osgi.util.tracker;version=\"1.5.2\";uses:=\"org.osgi.framework\"{dollar}{sling.jre-{dollar}{java.specification.version}}{dollar}{sling.jre-{dollar}{felix.detect.jpms}}",
-        "felix.systempackages.substitution": "true",
-        "sling.jre-jpms": "{dollar}{felix.jpms.java.base}{dollar}{felix.jpms.java.compiler}{dollar}{felix.jpms.java.datatransfer}{dollar}{felix.jpms.java.desktop}{dollar}{felix.jpms.java.instrument}{dollar}{felix.jpms.java.logging}{dollar}{felix.jpms.java.management}{dollar}{felix.jpms.java.management.rmi}{dollar}{felix.jpms.java.naming}{dollar}{felix.jpms.java.net.http}{dollar}{felix.jpms.java.prefs}{dollar}{felix.jpms.java.rmi}{dollar}{felix.jpms.java.scripting}{dollar}{felix.jpms.java.se}{dollar}{felix.jpms.java.security.jgss}{dollar}{felix.jpms.java.security.sasl}{dollar}{felix.jpms.java.sql}{dollar}{felix.jpms.java.sql.rowset}{dollar}{felix.jpms.java.transaction.xa}{dollar}{sling.jpms.{dollar}{felix.detect.jpms.java.xml}}{dollar}{felix.jpms.java.xml.crypto}{dollar}{felix.jpms.jdk.xml.dom}",
-        "sling.jpms.java.xml": "{dollar}{sling.jre.java.xml},javax.xml.catalog;uses:=\"javax.xml.namespace\";version=\"1.0.0\"",
-        "sling.jre-1.8": ",java.applet;version=\"{dollar}{felix.detect.java.version}\",java.awt;version=\"{dollar}{felix.detect.java.version}\",java.awt.color;version=\"{dollar}{felix.detect.java.version}\",java.awt.datatransfer;version=\"{dollar}{felix.detect.java.version}\",java.awt.dnd;version=\"{dollar}{felix.detect.java.version}\",java.awt.event;version=\"{dollar}{felix.detect.java.version}\",java.awt.font;version=\"{dollar}{felix.detect.java.version}\",java.awt.geom;version=\"{dollar}{felix.detect.java.version}\",java.awt.im;version=\"{dollar}{felix.detect.java.version}\",java.awt.im.spi;version=\"{dollar}{felix.detect.java.version}\",java.awt.image;version=\"{dollar}{felix.detect.java.version}\",java.awt.image.renderable;version=\"{dollar}{felix.detect.java.version}\",java.awt.print;version=\"{dollar}{felix.detect.java.version}\",java.beans;version=\"{dollar}{felix.detect.java.version}\",java.beans.beancontext;version=\"{dollar}{felix.detect.java.version}\",java.io;version=\"{dollar}{felix.detect.java.version}\",java.lang;version=\"{dollar}{felix.detect.java.version}\",java.lang.annotation;version=\"{dollar}{felix.detect.java.version}\",java.lang.instrument;version=\"{dollar}{felix.detect.java.version}\",java.lang.invoke;version=\"{dollar}{felix.detect.java.version}\",java.lang.management;version=\"{dollar}{felix.detect.java.version}\",java.lang.ref;version=\"{dollar}{felix.detect.java.version}\",java.lang.reflect;version=\"{dollar}{felix.detect.java.version}\",java.math;version=\"{dollar}{felix.detect.java.version}\",java.net;version=\"{dollar}{felix.detect.java.version}\",java.nio;version=\"{dollar}{felix.detect.java.version}\",java.nio.channels;version=\"{dollar}{felix.detect.java.version}\",java.nio.channels.spi;version=\"{dollar}{felix.detect.java.version}\",java.nio.charset;version=\"{dollar}{felix.detect.java.version}\",java.nio.charset.spi;version=\"{dollar}{felix.detect.java.version}\",java.nio.file;version=\"{dollar}{felix.detect.java.version}\",java.nio.file.attribute;version=\"{dollar}{felix.detect.java.version}\",java.nio.file.spi;version=\"{dollar}{felix.detect.java.version}\",java.rmi;version=\"{dollar}{felix.detect.java.version}\",java.rmi.activation;version=\"{dollar}{felix.detect.java.version}\",java.rmi.dgc;version=\"{dollar}{felix.detect.java.version}\",java.rmi.registry;version=\"{dollar}{felix.detect.java.version}\",java.rmi.server;version=\"{dollar}{felix.detect.java.version}\",java.security;version=\"{dollar}{felix.detect.java.version}\",java.security.acl;version=\"{dollar}{felix.detect.java.version}\",java.security.cert;version=\"{dollar}{felix.detect.java.version}\",java.security.interfaces;version=\"{dollar}{felix.detect.java.version}\",java.security.spec;version=\"{dollar}{felix.detect.java.version}\",java.sql;version=\"{dollar}{felix.detect.java.version}\",java.text;version=\"{dollar}{felix.detect.java.version}\",java.text.spi;version=\"{dollar}{felix.detect.java.version}\",java.time;version=\"{dollar}{felix.detect.java.version}\",java.time.chrono;version=\"{dollar}{felix.detect.java.version}\",java.time.format;version=\"{dollar}{felix.detect.java.version}\",java.time.temporal;version=\"{dollar}{felix.detect.java.version}\",java.time.zone;version=\"{dollar}{felix.detect.java.version}\",java.util;version=\"{dollar}{felix.detect.java.version}\",java.util.concurrent;version=\"{dollar}{felix.detect.java.version}\",java.util.concurrent.atomic;version=\"{dollar}{felix.detect.java.version}\",java.util.concurrent.locks;version=\"{dollar}{felix.detect.java.version}\",java.util.function;version=\"{dollar}{felix.detect.java.version}\",java.util.jar;version=\"{dollar}{felix.detect.java.version}\",java.util.logging;version=\"{dollar}{felix.detect.java.version}\",java.util.prefs;version=\"{dollar}{felix.detect.java.version}\",java.util.regex;version=\"{dollar}{felix.detect.java.version}\",java.util.spi;version=\"{dollar}{felix.detect.java.version}\",java.util.stream;version=\"{dollar}{felix.detect.java.version}\",java.util.zip;version=\"{dollar}{felix.detect.java.version}\",javax.accessibility;uses:=\"javax.swing.text\";version=\"{dollar}{felix.detect.java.version}\",javax.annotation.processing;uses:=\"javax.lang.model,javax.lang.model.element,javax.lang.model.util,javax.tools\";version=\"{dollar}{felix.detect.java.version}\",javax.crypto;uses:=\"javax.crypto.spec,javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.crypto.interfaces;uses:=\"javax.crypto,javax.crypto.spec\";version=\"{dollar}{felix.detect.java.version}\",javax.crypto.spec;uses:=\"javax.crypto\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio;uses:=\"javax.imageio.event,javax.imageio.metadata,javax.imageio.spi,javax.imageio.stream\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.event;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.metadata;uses:=\"javax.imageio,org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.plugins.bmp;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.plugins.jpeg;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.spi;uses:=\"javax.imageio,javax.imageio.metadata,javax.imageio.stream\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.stream;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model;uses:=\"javax.lang.model.element\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model.element;uses:=\"javax.lang.model,javax.lang.model.type\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model.type;uses:=\"javax.lang.model,javax.lang.model.element\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model.util;uses:=\"javax.annotation.processing,javax.lang.model,javax.lang.model.element,javax.lang.model.type\";version=\"{dollar}{felix.detect.java.version}\",javax.management;uses:=\"javax.management.loading,javax.management.openmbean\";version=\"{dollar}{felix.detect.java.version}\",javax.management.loading;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.modelmbean;uses:=\"javax.management,javax.management.loading\";version=\"{dollar}{felix.detect.java.version}\",javax.management.monitor;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.openmbean;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.relation;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.remote;uses:=\"javax.management,javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.management.remote.rmi;uses:=\"javax.management,javax.management.loading,javax.management.remote,javax.naming,javax.rmi,javax.rmi.CORBA,javax.rmi.ssl,javax.security.auth,org.omg.CORBA,org.omg.CORBA.portable,org.omg.CORBA_2_3.portable\";version=\"{dollar}{felix.detect.java.version}\",javax.management.timer;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.naming;uses:=\"javax.naming.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.directory;uses:=\"javax.naming\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.event;uses:=\"javax.naming,javax.naming.directory\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.ldap;uses:=\"javax.naming,javax.naming.directory,javax.naming.event,javax.net.ssl\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.spi;uses:=\"javax.naming,javax.naming.directory\";version=\"{dollar}{felix.detect.java.version}\",javax.net;version=\"{dollar}{felix.detect.java.version}\",javax.net.ssl;uses:=\"javax.net,javax.security.auth.x500,javax.security.cert\";version=\"{dollar}{felix.detect.java.version}\",javax.print;uses:=\"javax.print.attribute,javax.print.attribute.standard,javax.print.event\";version=\"{dollar}{felix.detect.java.version}\",javax.print.attribute;version=\"{dollar}{felix.detect.java.version}\",javax.print.attribute.standard;uses:=\"javax.print.attribute\";version=\"{dollar}{felix.detect.java.version}\",javax.print.event;uses:=\"javax.print,javax.print.attribute\";version=\"{dollar}{felix.detect.java.version}\",javax.rmi.ssl;uses:=\"javax.net,javax.net.ssl\";version=\"{dollar}{felix.detect.java.version}\",javax.script;version=\"{dollar}{felix.detect.java.version}\",javax.security.auth;version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.callback;version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.kerberos;uses:=\"javax.crypto,javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.login;uses:=\"javax.security.auth,javax.security.auth.callback\";version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.spi;uses:=\"javax.security.auth,javax.security.auth.callback,javax.security.auth.login\";version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.x500;uses:=\"javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.security.cert;version=\"{dollar}{felix.detect.java.version}\",javax.security.sasl;uses:=\"javax.security.auth.callback\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.midi;uses:=\"javax.sound.midi.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.midi.spi;uses:=\"javax.sound.midi\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.sampled;uses:=\"javax.sound.sampled.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.sampled.spi;uses:=\"javax.sound.sampled\";version=\"{dollar}{felix.detect.java.version}\",javax.sql;uses:=\"javax.transaction.xa\";version=\"{dollar}{felix.detect.java.version}\",javax.sql.rowset;uses:=\"javax.sql,javax.sql.rowset.serial,javax.sql.rowset.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.sql.rowset.serial;uses:=\"javax.sql.rowset\";version=\"{dollar}{felix.detect.java.version}\",javax.sql.rowset.spi;uses:=\"javax.naming,javax.sql,javax.sql.rowset\";version=\"{dollar}{felix.detect.java.version}\",javax.swing;uses:=\"javax.accessibility,javax.print,javax.print.attribute,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.plaf.metal,javax.swing.table,javax.swing.text,javax.swing.text.html,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.border;uses:=\"javax.swing\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.colorchooser;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.event,javax.swing.text\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.event;uses:=\"javax.swing,javax.swing.table,javax.swing.text,javax.swing.tree,javax.swing.undo\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.filechooser;uses:=\"javax.swing\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.filechooser,javax.swing.text,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.basic;uses:=\"javax.accessibility,javax.sound.sampled,javax.swing,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.synth,javax.swing.table,javax.swing.text,javax.swing.text.html,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.metal;uses:=\"javax.swing,javax.swing.border,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.text,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.multi;uses:=\"javax.accessibility,javax.swing,javax.swing.filechooser,javax.swing.plaf,javax.swing.text,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.nimbus;uses:=\"javax.swing,javax.swing.border,javax.swing.plaf,javax.swing.plaf.synth\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.synth;uses:=\"javax.swing,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.table,javax.swing.text,javax.swing.tree,javax.xml.parsers,org.xml.sax,org.xml.sax.helpers\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.table;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.event,javax.swing.plaf\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text;uses:=\"javax.accessibility,javax.print,javax.print.attribute,javax.swing,javax.swing.event,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.text.html,javax.swing.tree,javax.swing.undo\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text.html;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.event,javax.swing.plaf,javax.swing.text,javax.swing.undo\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text.html.parser;uses:=\"javax.swing.text,javax.swing.text.html\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text.rtf;uses:=\"javax.swing.text\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.tree;uses:=\"javax.swing,javax.swing.border,javax.swing.event,javax.swing.plaf,javax.swing.plaf.basic\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.undo;uses:=\"javax.swing,javax.swing.event\";version=\"{dollar}{felix.detect.java.version}\",javax.tools;uses:=\"javax.annotation.processing,javax.lang.model,javax.lang.model.element\";version=\"{dollar}{felix.detect.java.version}\",javax.transaction.xa;version=\"{dollar}{felix.detect.java.version}\",org.ietf.jgss;version=\"{dollar}{felix.detect.java.version}\"{dollar}{sling.jre.java.xml},javax.xml.crypto;uses:=\"javax.xml.crypto.dsig.keyinfo\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dom;uses:=\"javax.xml.crypto,org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig;uses:=\"javax.xml.crypto,javax.xml.crypto.dsig.keyinfo,javax.xml.crypto.dsig.spec\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig.dom;uses:=\"javax.xml.crypto,javax.xml.crypto.dom,javax.xml.crypto.dsig,org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig.keyinfo;uses:=\"javax.xml.crypto\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig.spec;uses:=\"javax.xml.crypto\";version=\"{dollar}{felix.detect.java.version}\""
-    }
+    ]
 }
\ No newline at end of file
diff --git a/feature/src/main/features/cms/feature.json b/feature/src/main/features/cms/feature.json
new file mode 100644
index 0000000..3a2eae8
--- /dev/null
+++ b/feature/src/main/features/cms/feature.json
@@ -0,0 +1,28 @@
+{
+    "bundles": [
+        {
+            "id": "org.apache.sling:org.apache.sling.feature:1.2.18",
+            "start-order": "20"
+        },
+        {
+            "id": "org.apache.sling:org.apache.sling.feature.io:1.3.0",
+            "start-order": "20"
+        },
+        {
+            "id": "org.apache.sling:org.apache.sling.feature.r2f:0.0.2",
+            "start-order": "20"
+        },
+        {
+            "id": "org.apache.sling:org.apache.sling.feature.diff:0.0.6",
+            "start-order": "20"
+        },
+        {
+            "id": "org.apache.sling:org.apache.sling.feature.inventoryprinter:1.0.2",
+            "start-order": "20"
+        },
+        {
+            "id": "org.apache.sling:org.apache.sling.installer.factory.feature:0.5.0",
+            "start-order": "20"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/feature/src/main/features/framework-properties.json b/feature/src/main/features/framework-properties.json
new file mode 100644
index 0000000..c19657b
--- /dev/null
+++ b/feature/src/main/features/framework-properties.json
@@ -0,0 +1,16 @@
+{
+    "variables": {
+        "sling.home": null
+    },
+    "framework-properties": {
+        "localIndexDir": "${sling.home}/repository/index",
+        "repository.home": "${sling.home}/repository",
+        "sling.jre.java.xml": ",javax.xml;version=\"2.1.0\",javax.xml.datatype;uses:=\"javax.xml.namespace\";version=\"2.1.0\",javax.xml.namespace;version=\"2.1.0\",javax.xml.parsers;uses:=\"javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers\";version=\"2.1.0\",javax.xml.stream;uses:=\"javax.xml.namespace,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform\";version=\"1.0.0\",javax.xml.stream.events;uses:=\"javax.xml.namespace,javax.xml.stream\";version=\"1.0.0\",javax.xml.stream.util;uses:=\"javax.xml.namespace,javax.xml.stream,javax.xml.stream.events\";version=\"1.0.0\",javax.xml.transform;version=\"2.1.0\",javax.xml.transform.dom;uses:=\"javax.xml.transform,org.w3c.dom\";version=\"2.1.0\",javax.xml.transform.sax;uses:=\"javax.xml.transform,javax.xml.transform.stream,org.xml.sax,org.xml.sax.ext\";version=\"2.1.0\",javax.xml.transform.stax;uses:=\"javax.xml.stream,javax.xml.stream.events,javax.xml.transform\";version=\"2.1.0\",javax.xml.transform.stream;uses:=\"javax.xml.transform\";version=\"2.1.0\",javax.xml.validation;uses:=\"javax.xml.transform,javax.xml.transform.stream,org.w3c.dom,org.w3c.dom.ls,org.xml.sax\";version=\"2.1.0\",javax.xml.xpath;uses:=\"javax.xml.namespace,org.xml.sax\";version=\"2.1.0\",org.w3c.dom;version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.bootstrap;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.css;uses:=\"org.w3c.dom,org.w3c.dom.stylesheets,org.w3c.dom.views\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.events;uses:=\"org.w3c.dom,org.w3c.dom.views\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.html;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.ls;uses:=\"org.w3c.dom,org.w3c.dom.events\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.ranges;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.stylesheets;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.traversal;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.views;version=\"{dollar}{felix.detect.java.version}\",org.w3c.dom.xpath;uses:=\"org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",org.xml.sax;version=\"{dollar}{felix.detect.java.version}\",org.xml.sax.ext;uses:=\"org.xml.sax,org.xml.sax.helpers\";version=\"{dollar}{felix.detect.java.version}\",org.xml.sax.helpers;uses:=\"org.xml.sax\";version=\"{dollar}{felix.detect.java.version}\"",
+        "felix.systempackages.calculate.uses": "true",
+        "org.osgi.framework.system.packages": "org.osgi.framework;version=\"1.9\",org.osgi.framework.dto;version=\"1.8\";uses:=\"org.osgi.dto\",org.osgi.framework.hooks.bundle;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.resolver;version=\"1.0\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.hooks.service;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.framework.hooks.weaving;version=\"1.1\";uses:=\"org.osgi.framework.wiring\",org.osgi.framework.launch;version=\"1.2\";uses:=\"org.osgi.framework\",org.osgi.framework.namespace;version=\"1.1\";uses:=\"org.osgi.resource\",org.osgi.framework.startlevel;version=\"1.0\";uses:=\"org.osgi.framework\",org.osgi.framework.startlevel.dto;version=\"1.0\";uses:=\"org.osgi.dto\",org.osgi.framework.wiring;version=\"1.2\";uses:=\"org.osgi.framework,org.osgi.resource\",org.osgi.framework.wiring.dto;version=\"1.3\";uses:=\"org.osgi.dto,org.osgi.resource.dto\",org.osgi.resource;version=\"1.0\",org.osgi.resource.dto;version=\"1.0\";uses:=\"org.osgi.dto\",org.osgi.service.packageadmin;version=\"1.2\";uses:=\"org.osgi.framework\",org.osgi.service.startlevel;version=\"1.1\";uses:=\"org.osgi.framework\",org.osgi.service.url;version=\"1.0\",org.osgi.service.resolver;version=\"1.1\";uses:=\"org.osgi.resource\",org.osgi.dto;version=\"1.1\",org.osgi.util.tracker;version=\"1.5.2\";uses:=\"org.osgi.framework\"{dollar}{sling.jre-{dollar}{java.specification.version}}{dollar}{sling.jre-{dollar}{felix.detect.jpms}}",
+        "felix.systempackages.substitution": "true",
+        "sling.jre-jpms": "{dollar}{felix.jpms.java.base}{dollar}{felix.jpms.java.compiler}{dollar}{felix.jpms.java.datatransfer}{dollar}{felix.jpms.java.desktop}{dollar}{felix.jpms.java.instrument}{dollar}{felix.jpms.java.logging}{dollar}{felix.jpms.java.management}{dollar}{felix.jpms.java.management.rmi}{dollar}{felix.jpms.java.naming}{dollar}{felix.jpms.java.net.http}{dollar}{felix.jpms.java.prefs}{dollar}{felix.jpms.java.rmi}{dollar}{felix.jpms.java.scripting}{dollar}{felix.jpms.java.se}{dollar}{felix.jpms.java.security.jgss}{dollar}{felix.jpms.java.security.sasl}{dollar}{felix.jpms.java.sql}{dollar}{felix.jpms.java.sql.rowset}{dollar}{felix.jpms.java.transaction.xa}{dollar}{sling.jpms.{dollar}{felix.detect.jpms.java.xml}}{dollar}{felix.jpms.java.xml.crypto}{dollar}{felix.jpms.jdk.xml.dom}",
+        "sling.jpms.java.xml": "{dollar}{sling.jre.java.xml},javax.xml.catalog;uses:=\"javax.xml.namespace\";version=\"1.0.0\"",
+        "sling.jre-1.8": ",java.applet;version=\"{dollar}{felix.detect.java.version}\",java.awt;version=\"{dollar}{felix.detect.java.version}\",java.awt.color;version=\"{dollar}{felix.detect.java.version}\",java.awt.datatransfer;version=\"{dollar}{felix.detect.java.version}\",java.awt.dnd;version=\"{dollar}{felix.detect.java.version}\",java.awt.event;version=\"{dollar}{felix.detect.java.version}\",java.awt.font;version=\"{dollar}{felix.detect.java.version}\",java.awt.geom;version=\"{dollar}{felix.detect.java.version}\",java.awt.im;version=\"{dollar}{felix.detect.java.version}\",java.awt.im.spi;version=\"{dollar}{felix.detect.java.version}\",java.awt.image;version=\"{dollar}{felix.detect.java.version}\",java.awt.image.renderable;version=\"{dollar}{felix.detect.java.version}\",java.awt.print;version=\"{dollar}{felix.detect.java.version}\",java.beans;version=\"{dollar}{felix.detect.java.version}\",java.beans.beancontext;version=\"{dollar}{felix.detect.java.version}\",java.io;version=\"{dollar}{felix.detect.java.version}\",java.lang;version=\"{dollar}{felix.detect.java.version}\",java.lang.annotation;version=\"{dollar}{felix.detect.java.version}\",java.lang.instrument;version=\"{dollar}{felix.detect.java.version}\",java.lang.invoke;version=\"{dollar}{felix.detect.java.version}\",java.lang.management;version=\"{dollar}{felix.detect.java.version}\",java.lang.ref;version=\"{dollar}{felix.detect.java.version}\",java.lang.reflect;version=\"{dollar}{felix.detect.java.version}\",java.math;version=\"{dollar}{felix.detect.java.version}\",java.net;version=\"{dollar}{felix.detect.java.version}\",java.nio;version=\"{dollar}{felix.detect.java.version}\",java.nio.channels;version=\"{dollar}{felix.detect.java.version}\",java.nio.channels.spi;version=\"{dollar}{felix.detect.java.version}\",java.nio.charset;version=\"{dollar}{felix.detect.java.version}\",java.nio.charset.spi;version=\"{dollar}{felix.detect.java.version}\",java.nio.file;version=\"{dollar}{felix.detect.java.version}\",java.nio.file.attribute;version=\"{dollar}{felix.detect.java.version}\",java.nio.file.spi;version=\"{dollar}{felix.detect.java.version}\",java.rmi;version=\"{dollar}{felix.detect.java.version}\",java.rmi.activation;version=\"{dollar}{felix.detect.java.version}\",java.rmi.dgc;version=\"{dollar}{felix.detect.java.version}\",java.rmi.registry;version=\"{dollar}{felix.detect.java.version}\",java.rmi.server;version=\"{dollar}{felix.detect.java.version}\",java.security;version=\"{dollar}{felix.detect.java.version}\",java.security.acl;version=\"{dollar}{felix.detect.java.version}\",java.security.cert;version=\"{dollar}{felix.detect.java.version}\",java.security.interfaces;version=\"{dollar}{felix.detect.java.version}\",java.security.spec;version=\"{dollar}{felix.detect.java.version}\",java.sql;version=\"{dollar}{felix.detect.java.version}\",java.text;version=\"{dollar}{felix.detect.java.version}\",java.text.spi;version=\"{dollar}{felix.detect.java.version}\",java.time;version=\"{dollar}{felix.detect.java.version}\",java.time.chrono;version=\"{dollar}{felix.detect.java.version}\",java.time.format;version=\"{dollar}{felix.detect.java.version}\",java.time.temporal;version=\"{dollar}{felix.detect.java.version}\",java.time.zone;version=\"{dollar}{felix.detect.java.version}\",java.util;version=\"{dollar}{felix.detect.java.version}\",java.util.concurrent;version=\"{dollar}{felix.detect.java.version}\",java.util.concurrent.atomic;version=\"{dollar}{felix.detect.java.version}\",java.util.concurrent.locks;version=\"{dollar}{felix.detect.java.version}\",java.util.function;version=\"{dollar}{felix.detect.java.version}\",java.util.jar;version=\"{dollar}{felix.detect.java.version}\",java.util.logging;version=\"{dollar}{felix.detect.java.version}\",java.util.prefs;version=\"{dollar}{felix.detect.java.version}\",java.util.regex;version=\"{dollar}{felix.detect.java.version}\",java.util.spi;version=\"{dollar}{felix.detect.java.version}\",java.util.stream;version=\"{dollar}{felix.detect.java.version}\",java.util.zip;version=\"{dollar}{felix.detect.java.version}\",javax.accessibility;uses:=\"javax.swing.text\";version=\"{dollar}{felix.detect.java.version}\",javax.annotation.processing;uses:=\"javax.lang.model,javax.lang.model.element,javax.lang.model.util,javax.tools\";version=\"{dollar}{felix.detect.java.version}\",javax.crypto;uses:=\"javax.crypto.spec,javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.crypto.interfaces;uses:=\"javax.crypto,javax.crypto.spec\";version=\"{dollar}{felix.detect.java.version}\",javax.crypto.spec;uses:=\"javax.crypto\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio;uses:=\"javax.imageio.event,javax.imageio.metadata,javax.imageio.spi,javax.imageio.stream\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.event;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.metadata;uses:=\"javax.imageio,org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.plugins.bmp;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.plugins.jpeg;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.spi;uses:=\"javax.imageio,javax.imageio.metadata,javax.imageio.stream\";version=\"{dollar}{felix.detect.java.version}\",javax.imageio.stream;uses:=\"javax.imageio\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model;uses:=\"javax.lang.model.element\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model.element;uses:=\"javax.lang.model,javax.lang.model.type\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model.type;uses:=\"javax.lang.model,javax.lang.model.element\";version=\"{dollar}{felix.detect.java.version}\",javax.lang.model.util;uses:=\"javax.annotation.processing,javax.lang.model,javax.lang.model.element,javax.lang.model.type\";version=\"{dollar}{felix.detect.java.version}\",javax.management;uses:=\"javax.management.loading,javax.management.openmbean\";version=\"{dollar}{felix.detect.java.version}\",javax.management.loading;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.modelmbean;uses:=\"javax.management,javax.management.loading\";version=\"{dollar}{felix.detect.java.version}\",javax.management.monitor;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.openmbean;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.relation;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.management.remote;uses:=\"javax.management,javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.management.remote.rmi;uses:=\"javax.management,javax.management.loading,javax.management.remote,javax.naming,javax.rmi,javax.rmi.CORBA,javax.rmi.ssl,javax.security.auth,org.omg.CORBA,org.omg.CORBA.portable,org.omg.CORBA_2_3.portable\";version=\"{dollar}{felix.detect.java.version}\",javax.management.timer;uses:=\"javax.management\";version=\"{dollar}{felix.detect.java.version}\",javax.naming;uses:=\"javax.naming.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.directory;uses:=\"javax.naming\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.event;uses:=\"javax.naming,javax.naming.directory\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.ldap;uses:=\"javax.naming,javax.naming.directory,javax.naming.event,javax.net.ssl\";version=\"{dollar}{felix.detect.java.version}\",javax.naming.spi;uses:=\"javax.naming,javax.naming.directory\";version=\"{dollar}{felix.detect.java.version}\",javax.net;version=\"{dollar}{felix.detect.java.version}\",javax.net.ssl;uses:=\"javax.net,javax.security.auth.x500,javax.security.cert\";version=\"{dollar}{felix.detect.java.version}\",javax.print;uses:=\"javax.print.attribute,javax.print.attribute.standard,javax.print.event\";version=\"{dollar}{felix.detect.java.version}\",javax.print.attribute;version=\"{dollar}{felix.detect.java.version}\",javax.print.attribute.standard;uses:=\"javax.print.attribute\";version=\"{dollar}{felix.detect.java.version}\",javax.print.event;uses:=\"javax.print,javax.print.attribute\";version=\"{dollar}{felix.detect.java.version}\",javax.rmi.ssl;uses:=\"javax.net,javax.net.ssl\";version=\"{dollar}{felix.detect.java.version}\",javax.script;version=\"{dollar}{felix.detect.java.version}\",javax.security.auth;version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.callback;version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.kerberos;uses:=\"javax.crypto,javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.login;uses:=\"javax.security.auth,javax.security.auth.callback\";version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.spi;uses:=\"javax.security.auth,javax.security.auth.callback,javax.security.auth.login\";version=\"{dollar}{felix.detect.java.version}\",javax.security.auth.x500;uses:=\"javax.security.auth\";version=\"{dollar}{felix.detect.java.version}\",javax.security.cert;version=\"{dollar}{felix.detect.java.version}\",javax.security.sasl;uses:=\"javax.security.auth.callback\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.midi;uses:=\"javax.sound.midi.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.midi.spi;uses:=\"javax.sound.midi\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.sampled;uses:=\"javax.sound.sampled.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.sound.sampled.spi;uses:=\"javax.sound.sampled\";version=\"{dollar}{felix.detect.java.version}\",javax.sql;uses:=\"javax.transaction.xa\";version=\"{dollar}{felix.detect.java.version}\",javax.sql.rowset;uses:=\"javax.sql,javax.sql.rowset.serial,javax.sql.rowset.spi\";version=\"{dollar}{felix.detect.java.version}\",javax.sql.rowset.serial;uses:=\"javax.sql.rowset\";version=\"{dollar}{felix.detect.java.version}\",javax.sql.rowset.spi;uses:=\"javax.naming,javax.sql,javax.sql.rowset\";version=\"{dollar}{felix.detect.java.version}\",javax.swing;uses:=\"javax.accessibility,javax.print,javax.print.attribute,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.plaf.metal,javax.swing.table,javax.swing.text,javax.swing.text.html,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.border;uses:=\"javax.swing\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.colorchooser;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.event,javax.swing.text\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.event;uses:=\"javax.swing,javax.swing.table,javax.swing.text,javax.swing.tree,javax.swing.undo\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.filechooser;uses:=\"javax.swing\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.filechooser,javax.swing.text,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.basic;uses:=\"javax.accessibility,javax.sound.sampled,javax.swing,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.synth,javax.swing.table,javax.swing.text,javax.swing.text.html,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.metal;uses:=\"javax.swing,javax.swing.border,javax.swing.event,javax.swing.filechooser,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.text,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.multi;uses:=\"javax.accessibility,javax.swing,javax.swing.filechooser,javax.swing.plaf,javax.swing.text,javax.swing.tree\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.nimbus;uses:=\"javax.swing,javax.swing.border,javax.swing.plaf,javax.swing.plaf.synth\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.plaf.synth;uses:=\"javax.swing,javax.swing.border,javax.swing.colorchooser,javax.swing.event,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.table,javax.swing.text,javax.swing.tree,javax.xml.parsers,org.xml.sax,org.xml.sax.helpers\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.table;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.event,javax.swing.plaf\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text;uses:=\"javax.accessibility,javax.print,javax.print.attribute,javax.swing,javax.swing.event,javax.swing.plaf,javax.swing.plaf.basic,javax.swing.text.html,javax.swing.tree,javax.swing.undo\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text.html;uses:=\"javax.accessibility,javax.swing,javax.swing.border,javax.swing.event,javax.swing.plaf,javax.swing.text,javax.swing.undo\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text.html.parser;uses:=\"javax.swing.text,javax.swing.text.html\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.text.rtf;uses:=\"javax.swing.text\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.tree;uses:=\"javax.swing,javax.swing.border,javax.swing.event,javax.swing.plaf,javax.swing.plaf.basic\";version=\"{dollar}{felix.detect.java.version}\",javax.swing.undo;uses:=\"javax.swing,javax.swing.event\";version=\"{dollar}{felix.detect.java.version}\",javax.tools;uses:=\"javax.annotation.processing,javax.lang.model,javax.lang.model.element\";version=\"{dollar}{felix.detect.java.version}\",javax.transaction.xa;version=\"{dollar}{felix.detect.java.version}\",org.ietf.jgss;version=\"{dollar}{felix.detect.java.version}\"{dollar}{sling.jre.java.xml},javax.xml.crypto;uses:=\"javax.xml.crypto.dsig.keyinfo\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dom;uses:=\"javax.xml.crypto,org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig;uses:=\"javax.xml.crypto,javax.xml.crypto.dsig.keyinfo,javax.xml.crypto.dsig.spec\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig.dom;uses:=\"javax.xml.crypto,javax.xml.crypto.dom,javax.xml.crypto.dsig,org.w3c.dom\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig.keyinfo;uses:=\"javax.xml.crypto\";version=\"{dollar}{felix.detect.java.version}\",javax.xml.crypto.dsig.spec;uses:=\"javax.xml.crypto\";version=\"{dollar}{felix.detect.java.version}\""
+    }
+}
\ No newline at end of file