diff --git a/sdnr/wt/devicemanager/feature/pom.xml b/sdnr/wt/devicemanager/feature/pom.xml
index d48fe35..a67478c 100644
--- a/sdnr/wt/devicemanager/feature/pom.xml
+++ b/sdnr/wt/devicemanager/feature/pom.xml
@@ -87,6 +87,10 @@
           <artifactId>*</artifactId>
         </exclusion>
         <exclusion>
+          <groupId>org.elasticsearch.plugin</groupId>
+          <artifactId>delete-by-query</artifactId>
+        </exclusion>
+        <exclusion>
           <groupId>org.apache.lucene</groupId>
           <artifactId>*</artifactId>
         </exclusion>
diff --git a/sdnr/wt/devicemanager/provider/pom.xml b/sdnr/wt/devicemanager/provider/pom.xml
index e43e51c..501a531 100644
--- a/sdnr/wt/devicemanager/provider/pom.xml
+++ b/sdnr/wt/devicemanager/provider/pom.xml
@@ -46,21 +46,13 @@
       <url>http://www.apache.org/licenses/LICENSE-2.0</url>
     </license>
   </licenses>
-
-  <dependencyManagement>
-    <dependencies>
-      <dependency>
-        <groupId>org.opendaylight.controller</groupId>
-        <artifactId>mdsal-artifacts</artifactId>
-        <version>1.6.1</version>
-        <type>pom</type>
-        <scope>import</scope>
-      </dependency>
-    </dependencies>
-  </dependencyManagement>
-
   <dependencies>
     <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>sdnr-wt-devicemanager-model</artifactId>
       <version>${project.version}</version>
@@ -76,12 +68,34 @@
       <version>${project.version}</version>
     </dependency>
     <dependency>
-      <groupId>org.opendaylight.controller</groupId>
-      <artifactId>sal-binding-api</artifactId>
+      <groupId>org.osgi</groupId>
+      <artifactId>org.osgi.core</artifactId>
+      <scope>provided</scope>
     </dependency>
+<!--     <dependency> -->
+<!--       <groupId>org.opendaylight.mdsal</groupId> -->
+<!--       <artifactId>mdsal-binding-dom-adapter</artifactId> -->
+<!--     </dependency> -->
+<!--     <dependency> -->
+<!--       <groupId>org.opendaylight.mdsal</groupId> -->
+<!--       <artifactId>mdsal-dom-spi</artifactId> -->
+<!--     </dependency> -->
+<!--     <dependency> -->
+<!--       <groupId>org.opendaylight.controller</groupId> -->
+<!--       <artifactId>sal-binding-api</artifactId> -->
+<!--     </dependency> -->
+<!--     <dependency> -->
+<!--       <groupId>org.opendaylight.netconf</groupId> -->
+<!--       <artifactId>sal-netconf-connector</artifactId> -->
+<!--     </dependency> -->
+<!--     <dependency> -->
+<!--       <groupId>org.opendaylight.mdsal</groupId> -->
+<!--       <artifactId>mdsal-dom-broker</artifactId> -->
+<!--     </dependency> -->
     <dependency>
       <groupId>org.opendaylight.netconf</groupId>
       <artifactId>sal-netconf-connector</artifactId>
+      <scope>provided</scope>
     </dependency>
     <dependency>
       <groupId>org.json</groupId>
@@ -293,49 +307,49 @@
       <groupId>org.elasticsearch.plugin</groupId>
       <artifactId>delete-by-query</artifactId>
       <version>2.2.0</version>
-      <scope>test</scope>
     </dependency>
   </dependencies>
   <build>
     <resources>
       <resource>
         <directory>src/main/resources</directory>
+        <filtering>true</filtering>
       </resource>
-      <resource>
-        <directory>target/plugins</directory>
-        <targetPath>elasticsearch/plugins</targetPath>
-      </resource>
+<!--       <resource> -->
+<!--         <directory>${project.build.directory}/plugins</directory> -->
+<!--         <targetPath>elasticsearch/plugins</targetPath> -->
+<!--       </resource> -->
     </resources>
     <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-dependency-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>copy-plugin</id>
-            <phase>generate-sources</phase>
-            <goals>
-              <goal>copy</goal>
-            </goals>
-            <configuration>
-              <artifactItems>
-                <artifactItem>
-                  <groupId>org.elasticsearch.plugin</groupId>
-                  <artifactId>delete-by-query</artifactId>
-                  <version>2.2.0</version>
-                  <type>jar</type>
-                  <overWrite>true</overWrite>
-                  <outputDirectory>${project.basedir}/target/plugins/delete-by-query</outputDirectory>
-                </artifactItem>
-              </artifactItems>
-              <includes>**/*</includes>
-              <overWriteReleases>true</overWriteReleases>
-              <overWriteSnapshots>true</overWriteSnapshots>
-              <excludeTransitive>true</excludeTransitive>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
+<!--       <plugin> -->
+<!--         <groupId>org.apache.maven.plugins</groupId> -->
+<!--         <artifactId>maven-dependency-plugin</artifactId> -->
+<!--         <executions> -->
+<!--           <execution> -->
+<!--             <id>copy-plugin</id> -->
+<!--             <phase>generate-sources</phase> -->
+<!--             <goals> -->
+<!--               <goal>copy</goal> -->
+<!--             </goals> -->
+<!--             <configuration> -->
+<!--               <artifactItems> -->
+<!--                 <artifactItem> -->
+<!--                   <groupId>org.elasticsearch.plugin</groupId> -->
+<!--                   <artifactId>delete-by-query</artifactId> -->
+<!--                   <version>2.2.0</version> -->
+<!--                   <type>jar</type> -->
+<!--                   <overWrite>true</overWrite> -->
+<!--                   <outputDirectory>${project.build.directory}/plugins/delete-by-query</outputDirectory> -->
+<!--                 </artifactItem> -->
+<!--               </artifactItems> -->
+<!--               <includes>**/*</includes> -->
+<!--               <overWriteReleases>true</overWriteReleases> -->
+<!--               <overWriteSnapshots>true</overWriteSnapshots> -->
+<!--               <excludeTransitive>true</excludeTransitive> -->
+<!--             </configuration> -->
+<!--           </execution> -->
+<!--         </executions> -->
+<!--       </plugin> -->
       <plugin>
         <groupId>org.apache.felix</groupId>
         <artifactId>maven-bundle-plugin</artifactId>
@@ -349,7 +363,7 @@
               org.opendaylight.yangtools.concepts;version="[2.0,3)",
               org.opendaylight.yangtools.yang.binding;version="[0.12,1)",
               org.opendaylight.yangtools.yang.common;version="[2.0,3)",
-              org.osgi.framework;version="[1.7,2)",
+              org.osgi.framework,
               org.osgi.service.blueprint.container,
               org.slf4j;version="[1.7,2)",
               org.slf4j.spi;version="[1.7,2)",
@@ -400,7 +414,6 @@
               org.jboss.netty.util;version="[3.10,4)",
 
               org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.websocketmanager.rev150105,
-
               org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714;version="[1.4,2)",
               org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208;version="[0.3,1)",
               org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ptp.dataset.rev170208.port.ds.entry;version="[0.3,1)",
@@ -454,11 +467,12 @@
               org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology;version="[2013.10,2014)",
               org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology;version="[2013.10,2014)"
             </Import-Package>
-            <Embed-Dependency>jackson*,ela*,joda*,Hdr*,lucene*,
+            <Embed-Dependency>jackson*,ela*,delete-by-query,joda*,Hdr*,lucene*,
               hppc,jsr166e,t-digest,snakeyaml,securesm,spatial4j,compress-lzf,commons-cli,jakarta-regexp,
               commons-lang3,commons-collections,commons-logging,commons-beanutils</Embed-Dependency>
             <Include-Resource>{maven-resources},{maven-dependencies},META-INF/git.properties=-target/classes/META-INF/git.properties</Include-Resource>
             <Embed-Transitive>true</Embed-Transitive>
+            <Export-Package>org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.devicemanager.*</Export-Package>
           </instructions>
         </configuration>
       </plugin>
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java
index 6a23a34..93a5bbd 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/database/HtDatabaseNode.java
@@ -123,8 +123,15 @@
         if (!f.exists()) {
             f.mkdir();
         }
-        Resources.copyFolderInto(RESFOLDER_PLUGINHEAD, PLUGINFOLDER, RESFOLDER_PLUGIN);
-        Resources.copyFolderInto(RESFOLDER_PLUGINDELETE, PLUGINFOLDER, RESFOLDER_PLUGIN);
+        if (!Resources.copyFolderInto(RESFOLDER_PLUGINHEAD, PLUGINFOLDER, RESFOLDER_PLUGIN)) {
+            throw new IllegalArgumentException("Copy not successfull Name: " + RESFOLDER_PLUGINHEAD + " folder src "
+                    + PLUGINFOLDER + " folder dst " + RESFOLDER_PLUGIN);
+        }
+       //Normal JAR loaded by classloader as part of the bundle
+       if (!Resources.copyFolderInto(RESFOLDER_PLUGINDELETE, PLUGINFOLDER, RESFOLDER_PLUGIN)) {
+            throw new IllegalArgumentException("Copy not successfull Name: " + RESFOLDER_PLUGINDELETE + " folder src "
+                    + PLUGINFOLDER + " folder dst " + RESFOLDER_PLUGIN);
+       }
     }
 
     /**
@@ -232,6 +239,7 @@
 
     /**
      * Start as singleton
+     *
      * @param config data
      * @param akkaConfig data
      * @param geoConfig data
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCOreNetworkElementCoreData.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCOreNetworkElementCoreData.java
index 265a3db..3aa7116 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCOreNetworkElementCoreData.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCOreNetworkElementCoreData.java
@@ -6,9 +6,9 @@
  * =================================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
  * in compliance with the License. You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software distributed under the License
  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing permissions and limitations under
@@ -20,10 +20,11 @@
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.NetworkElement;
 
+@SuppressWarnings("deprecation")
 public interface ONFCOreNetworkElementCoreData {
 
-	public String getMountpoint();
-	public DataBroker getDataBroker();
-	public NetworkElement getOptionalNetworkElement();
+    public String getMountpoint();
+    public DataBroker getDataBroker();
+    public NetworkElement getOptionalNetworkElement();
 
 }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java
index b57e8c9..3a38c4e 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12.java
@@ -77,6 +77,7 @@
  * @author herbert
  *
  */
+@SuppressWarnings("deprecation")
 public class ONFCoreNetworkElement12 extends ONFCoreNetworkElement12Base
         implements ONFCoreNetworkElementCallback, NotificationActor<AttributeValueChangedNotificationXml> {
 
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Base.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Base.java
index 8fc4c33..f0ce392 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Base.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElement12Base.java
@@ -49,6 +49,7 @@
  * This class contains the ONF Core model Version 1.2 related functions.
  * It should import
  */
+@SuppressWarnings("deprecation")
 public abstract class ONFCoreNetworkElement12Base extends ONFCoreNetworkElementBase implements ONFCOreNetworkElementCoreData {
 
     private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElement12Base.class);
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementBase.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementBase.java
index e49ff65..530dabb 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementBase.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementBase.java
@@ -32,6 +32,7 @@
  * @author herbert
  *
  */
+@SuppressWarnings("deprecation")
 public abstract class ONFCoreNetworkElementBase implements AutoCloseable, ONFCoreNetworkElementRepresentation {
 
     private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElementBase.class);
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java
index a314fd9..bda77f2 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/base/netconf/ONFCoreNetworkElementFactory.java
@@ -45,6 +45,7 @@
  * terms than "revision" are provided.
  *
  */
+@SuppressWarnings("deprecation")
 public class ONFCoreNetworkElementFactory {
 
     private static final Logger LOG = LoggerFactory.getLogger(ONFCoreNetworkElementFactory.class);
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java
index 6e8d85b..79b4b05 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerApiServiceImpl.java
@@ -48,6 +48,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@SuppressWarnings("deprecation")
 public class DeviceManagerApiServiceImpl implements DevicemanagerService, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(DevicemanagerService.class);
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java
index fcd7c1b..f0efe7a 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerImpl.java
@@ -40,7 +40,7 @@
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.ODLEventListener;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClient;
-import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientImpl;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientDummyImpl;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.WebSocketServiceClientImpl2;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl.IndexConfigService;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.index.impl.IndexMwtnService;
@@ -59,6 +59,7 @@
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.NotificationsService;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus.ConnectionStatus;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
@@ -71,6 +72,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@SuppressWarnings("deprecation")
 public class DeviceManagerImpl implements DeviceManagerService, AutoCloseable, ResyncNetworkElementsListener {
 
     private static final Logger LOG = LoggerFactory.getLogger(DeviceManagerImpl.class);
@@ -126,7 +128,6 @@
 
     public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
         this.rpcProviderRegistry = rpcProviderRegistry;
-
     }
 
     public void setNotificationPublishService(NotificationPublishService notificationPublishService) {
@@ -186,7 +187,7 @@
                     this.configService = new IndexConfigService(htDatabase);
                     this.mwtnService = new IndexMwtnService(htDatabase);
                 } catch (Exception e) {
-                    LOG.warn("Can not start ES access clients to provide database index config, mwtn. ",e);
+                    LOG.warn("Can not start ES access clients to provide database index config, mwtn. ", e);
                 }
             }
             // start service for device maintenance service
@@ -196,7 +197,7 @@
                 this.webSocketService = new WebSocketServiceClientImpl2(rpcProviderRegistry);
             } catch (Exception e) {
                 LOG.error("Can not start websocket service. Loading mock class.", e);
-                this.webSocketService = new WebSocketServiceClientImpl();
+                this.webSocketService = new WebSocketServiceClientDummyImpl();
             }
             // DCAE
             this.dcaeProviderClient = new DcaeProviderClient(config, dbConfig.getCluster(), this);
@@ -293,9 +294,12 @@
         }
     }
 
+    /*-------------------------------------------------------------------------------------------
+     * Functions for interface DeviceManagerService
+     */
+
     /**
      * For each mounted device a mountpoint is created and this listener is called.
-     *
      */
     @Override
     public void startListenerOnNodeForConnectedState(Action action, NodeId nNodeId, NetconfNode nNode) {
@@ -333,17 +337,9 @@
         Optional<MountPoint> optionalMountPoint = null;
         int timeout = 10000;
         while (!(optionalMountPoint = mountPointService.getMountPoint(instanceIdentifier)).isPresent() && timeout > 0) {
-
             LOG.info("Event listener waiting for mount point for Netconf device :: Name : {}", mountPointNodeName);
-            try {
-                Thread.sleep(1000);
-                timeout -= 1000;
-            } catch (InterruptedException e) {
-                LOG.info("Event listener waiting for mount point for Netconf device :: Name : {} Time: {}",
-                        mountPointNodeName, timeout);
-                // Restore interrupted state...
-                Thread.currentThread().interrupt();
-            }
+            sleepMs(1000);
+            timeout -= 1000;
         }
 
         if (!optionalMountPoint.isPresent()) {
@@ -353,14 +349,17 @@
         }
         // Mountpoint is present for sure
         MountPoint mountPoint = optionalMountPoint.get();
+        //BindingDOMDataBrokerAdapter.BUILDER_FACTORY;
+        LOG.info("Mountpoint with id: {} class {} toString {}", mountPoint.getIdentifier(), mountPoint.getClass().getName(), mountPoint);
+        Optional<DataBroker> optionalNetconfNodeDatabroker = mountPoint.getService(DataBroker.class);
 
-        DataBroker netconfNodeDataBroker = mountPoint.getService(DataBroker.class).orNull();
-        if (netconfNodeDataBroker == null) {
-            LOG.info("Mountpoint is slave mountpoint {}", mountPointNodeName);
+        if (! optionalNetconfNodeDatabroker.isPresent()) {
+            LOG.info("Slave mountpoint {} without databroker", mountPointNodeName);
             return;
         }
 
-        LOG.info("Databroker service 1:{} 2:{}", dataBroker.hashCode(), netconfNodeDataBroker.hashCode());
+        DataBroker netconfNodeDataBroker = optionalNetconfNodeDatabroker.get();
+        LOG.info("Master mountpoint {}", mountPointNodeName);
         // getNodeInfoTest(dataBroker);
 
         // create automatic empty maintenance entry into db before reading and listening for problems
@@ -400,15 +399,15 @@
         LOG.info("Starting Event listener on Netconf device :: Name : {} finished", mountPointNodeName);
     }
 
-    // removeListenerOnNode
     @Override
-    public void leaveConnectedState(NodeId nNodeId, NetconfNode nNode) {
+    public void enterNonConnectedState(NodeId nNodeId, NetconfNode nNode) {
         String mountPointNodeName = nNodeId.getValue();
-        LOG.info("leaveConnectedState for device :: Name : {}", mountPointNodeName);
+        LOG.info("enter Non ConnectedState for device :: Name : {}", mountPointNodeName);
 
-        this.maintenanceService.deleteIfNotRequired(mountPointNodeName);
         ONFCoreNetworkElementRepresentation ne = networkElementRepresentations.remove(mountPointNodeName);
         if (ne != null) {
+            // Handling transition mountpoint connected -> connecting
+            this.maintenanceService.deleteIfNotRequired(mountPointNodeName);
             int problems = ne.removeAllCurrentProblemsOfNode();
             LOG.debug("Removed all {} problems from database at deregistration for {}", problems, mountPointNodeName);
             if (odlEventListener != null) {
@@ -421,7 +420,13 @@
                 aaiProviderClient.onDeviceUnregistered(mountPointNodeName);
             }
         } else {
-            LOG.info("No related ne object for mountpoint {} to deregister .", mountPointNodeName);
+            // Handling -> create not connected mountpoint, or change other beside connected.
+            ConnectionStatus csts = nNode.getConnectionStatus();
+            if (csts != null) {
+                odlEventListener.updateRegistration(mountPointNodeName, csts.getClass().getSimpleName(), csts.getName());
+            } else {
+                LOG.info("Unknown connection status");
+            }
         }
         if (deviceMonitor != null) {
             deviceMonitor.deviceDisconnectIndication(mountPointNodeName);
@@ -429,19 +434,17 @@
 
     }
 
-    /*
-     * @Override public void mountpointNodeCreation(NodeId nNodeId, NetconfNode nNode) { String
-     * mountPointNodeName = nNodeId.getValue(); LOG.info("mountpointNodeCreation {} {}",
-     * nNodeId.getValue(), nNode.getConnectionStatus());
-     * deviceMonitor.createMountpointIndication(mountPointNodeName); }
-     */
     @Override
-    public void mountpointNodeRemoved(NodeId nNodeId) {
+    public void removeMountpointState(NodeId nNodeId) {
         String mountPointNodeName = nNodeId.getValue();
         LOG.info("mountpointNodeRemoved {}", nNodeId.getValue());
         deviceMonitor.removeMountpointIndication(mountPointNodeName);
     }
 
+    /*-------------------------------------------------------------------------------------------
+     * Functions
+     */
+
     /**
      * Async RPC Interface implementation
      */
@@ -630,4 +633,15 @@
         return true;
     }
 
+
+    private void sleepMs(int milliseconds) {
+        try {
+            Thread.sleep(milliseconds);
+        } catch (InterruptedException e) {
+            LOG.debug("Interrupted sleep");
+            // Restore interrupted state...
+            Thread.currentThread().interrupt();
+        }
+    }
+
 }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerService.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerService.java
index 817d78d..13fbc64 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerService.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/DeviceManagerService.java
@@ -6,9 +6,9 @@
  * =================================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
  * in compliance with the License. You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software distributed under the License
  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing permissions and limitations under
@@ -16,35 +16,35 @@
  * ============LICENSE_END==========================================================================
  ******************************************************************************/
 package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl;
+import javax.annotation.Nonnull;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNode;
-
 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
 
 public interface DeviceManagerService {
 
     public enum Action {
-        ADD,
+        CREATE,
         REMOVE,
         UPDATE
     }
     /**
-     * Managed device is connected to node/mountpoint.
+     * Mountpoint was created or existing. Managed device is now fully connected to node/mountpoint.
      * @param action provide action
      * @param nNodeId id of the mountpoint
      * @param nNode mountpoint contents
      */
-    void startListenerOnNodeForConnectedState(Action action, NodeId nNodeId, NetconfNode nNode);
+    void startListenerOnNodeForConnectedState(@Nonnull  Action action, @Nonnull NodeId nNodeId, @Nonnull NetconfNode nNode);
 
     /**
-     * Managed device is disconnected from node/mountpoint.
+     * Mountpoint created or existing. Managed device is actually disconnected from node/ mountpoint.
      * @param nNodeId id of the mountpoint
      * @param nNode mountpoint contents
      */
-    void leaveConnectedState(NodeId nNodeId, NetconfNode nNode);
+    void enterNonConnectedState(@Nonnull NodeId nNodeId, @Nonnull NetconfNode nNode);
 
     /**
-     * Removal indication of node/mountpoint.
+     * Mountpoint removed indication.
      * @param nNodeId id of the mountpoint
      */
-    void mountpointNodeRemoved(NodeId nNodeId);
+    void removeMountpointState(@Nonnull NodeId nNodeId);
 }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/ExtendedEquipment.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/ExtendedEquipment.java
index cdccd97..680a663 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/ExtendedEquipment.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/database/types/equipment/ExtendedEquipment.java
@@ -51,6 +51,10 @@
         return treeLevel;
     }
 
-
+    @Override
+    public String toString() {
+        return "ExtendedEquipment [parentUuid=" + parentUuid + ", treeLevel=" + treeLevel + ", equipment=" + equipment
+                + "]";
+    }
 
 }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java
index 1a92f37..fc56075 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/NetconfChangeListener.java
@@ -42,16 +42,17 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-// 07.09.18 Switched to DataTreeChangeListener from ClusteredDataTreeChangeListener -> DM Service is running at all nodes
+// 07.09.18 Switched to DataTreeChangeListener from ClusteredDataTreeChangeListener -> DM Service is
+// running at all nodes
 // This is not correct
 public class NetconfChangeListener implements ClusteredDataTreeChangeListener<Node>, AutoCloseable {
 
     private static final Logger LOG = LoggerFactory.getLogger(NetconfChangeListener.class);
 
-    private static final InstanceIdentifier<Node> NETCONF_NODE_TOPO_IID = InstanceIdentifier
-            .create(NetworkTopology.class)
-            .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())))
-            .child(Node.class);
+    private static final InstanceIdentifier<Node> NETCONF_NODE_TOPO_IID =
+            InstanceIdentifier.create(NetworkTopology.class)
+                    .child(Topology.class, new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())))
+                    .child(Node.class);
     // Name of ODL controller NETCONF instance
     private static final String CONTROLLER = "controller-config";
 
@@ -65,8 +66,8 @@
     }
 
     public void register() {
-        DataTreeIdentifier<Node> treeId = new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL,
-                NETCONF_NODE_TOPO_IID);
+        DataTreeIdentifier<Node> treeId = new DataTreeIdentifier<>(LogicalDatastoreType.OPERATIONAL, NETCONF_NODE_TOPO_IID);
+
         dlcReg = dataBroker.registerDataTreeChangeListener(treeId, this);
     }
 
@@ -79,20 +80,16 @@
     /*---------------------------------------------------------------------------
      * Listener
      */
-
     @Override
     public void onDataTreeChanged(Collection<DataTreeModification<Node>> changes) {
-        if (LOG.isTraceEnabled()) {
-            LOG.trace("OnDataChange, TreeChange {}", changes);
-        } else if (LOG.isDebugEnabled()) {
-            LOG.debug("OnDataChange, TreeChange");
-        }
+        LOG.debug("OnDataChange, TreeChange, changes:{}", changes.size());
 
         for (final DataTreeModification<Node> change : changes) {
             final DataObjectModification<Node> root = change.getRootNode();
             final ModificationType modificationType = root.getModificationType();
             if (LOG.isTraceEnabled()) {
-                LOG.trace("Handle this modificationType:{} path:{} root:{}", modificationType, change.getRootPath(), root);
+                LOG.trace("Handle this modificationType:{} path:{} root:{}", modificationType, change.getRootPath(),
+                        root);
             }
             switch (modificationType) {
                 case SUBTREE_MODIFIED:
@@ -105,76 +102,92 @@
                     // Treat an overwrite as an update
                     boolean update = root.getDataBefore() != null;
                     if (update) {
-                        //update(change);
+                        // update(change);
                         doProcessing(Action.UPDATE, root.getDataAfter());
                     } else {
-                        //add(change);
-                        doProcessing(Action.ADD, root.getDataAfter());
+                        // add(change);
+                        doProcessing(Action.CREATE, root.getDataAfter());
                     }
                     break;
                 case DELETE:
                     // Node removed
-                    //remove(change);
+                    // remove(change);
                     doProcessing(Action.REMOVE, root.getDataBefore());
                     break;
             }
         }
     }
 
-    /* ----------------------------------------------------------------
-     * Functions to select the right node from DataObjectModification
+    /*
+     * ---------------------------------------------------------------- Functions to select the right
+     * node from DataObjectModification
      */
 
     /**
      * Process event and forward to clients
+     *
      * @param action
-     * @param node   Basis node
+     * @param node Basis node
      */
     private void doProcessing(Action action, Node node) {
 
-        NodeId nodeId;
-        NetconfNode nnode;
+        NodeId nodeId = null;
+        NetconfNode nnode = null;
+        NodeKey nodeKey = null;
+
         try {
-            NodeKey nodeKey = node.key();
-            nodeId = nodeKey.getNodeId();
-            nnode = node.augmentation(NetconfNode.class);
-        } catch (NullPointerException e) {
-            LOG.warn("Unexpected null .. stop processing.", e);
-            return;
-        }
-
-        LOG.debug("doProcessing action {} {}",action, nodeId);
-        String nodeIdString = nodeId.getValue();
-        // Do not forward any controller related events to devicemanager
-        if (nodeIdString.equals(CONTROLLER)) {
-            LOG.debug("Stop processing for [{}]", nodeIdString);
-            return;
-        }
-
-        // Related to action
-        if (action == Action.REMOVE) {
-            deviceManagerService.mountpointNodeRemoved(nodeId); //Stop Monitor
-            deviceManagerService.leaveConnectedState(nodeId, nnode); //Remove Mountpoint handler
-            return;
-        }
-
-        // Related to Mountpoint status
-        ConnectionStatus csts = nnode.getConnectionStatus();
-        LOG.debug("NETCONF Node handled with status: {} {}", csts, nnode.getClusteredConnectionStatus());
-        if (csts != null) {
-            switch (csts) {
-                case Connected: {
-                    deviceManagerService.startListenerOnNodeForConnectedState(action, nodeId, nnode);
-                    break;
+            if (node != null) {
+                if ((nodeKey = node.key()) != null) {
+                    nodeId = nodeKey.getNodeId();
                 }
-                case UnableToConnect:
-                case Connecting: {
-                    deviceManagerService.leaveConnectedState(nodeId, nnode);
-                    break;
+                nnode = node.augmentation(NetconfNode.class);
+            }
+
+            if (node == null || nnode == null || nodeId == null || nodeKey == null) {
+                LOG.warn("Unexpected node {}, netconf node {} or key {} or id {}", node, nnode, nodeKey, nodeId);
+            } else {
+
+                String nodeIdString = nodeId.getValue();
+                ConnectionStatus csts = nnode.getConnectionStatus();
+                LOG.debug("NETCONF Node processing with id {} action {} status {} cluster status {}", nodeIdString,
+                        action, csts, nnode.getClusteredConnectionStatus());
+
+                // Do not forward any controller related events to devicemanager
+                if (nodeIdString.equals(CONTROLLER)) {
+                    LOG.debug("Stop processing for [{}]", nodeIdString);
+                } else {
+                    // Action related to mountpoint status
+                    switch (action) {
+                        case REMOVE:
+                            deviceManagerService.removeMountpointState(nodeId); // Stop Monitor
+                            deviceManagerService.enterNonConnectedState(nodeId, nnode); // Remove Mountpoint handler
+                            break;
+
+                        case UPDATE:
+                        case CREATE:
+                            if (csts != null) {
+                                switch (csts) {
+                                    case Connected: {
+                                        deviceManagerService.startListenerOnNodeForConnectedState(action, nodeId,
+                                                nnode);
+                                        break;
+                                    }
+                                    case UnableToConnect:
+                                    case Connecting: {
+                                        deviceManagerService.enterNonConnectedState(nodeId, nnode);
+                                        break;
+                                    }
+                                }
+                            } else {
+                                LOG.debug("NETCONF Node handled with null status for action", action);
+                            }
+                            break;
+                    }
                 }
             }
-        } else {
-            LOG.debug("NETCONF Node handled with null status");
+        } catch (NullPointerException e) {
+            LOG.warn("Unexpected null .. stop processing.", e);
         }
     }
+
 }
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/ODLEventListener.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/ODLEventListener.java
index ace5f12..ecaf06b 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/ODLEventListener.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/listener/ODLEventListener.java
@@ -23,6 +23,7 @@
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.netconf.util.NetconfTimeStamp;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.ProviderClient;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.service.HtDatabaseEventsService;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.AttributeValueChangedNotificationXml;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectCreationNotificationXml;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ObjectDeletionNotificationXml;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
@@ -33,10 +34,10 @@
 import org.slf4j.LoggerFactory;
 
 /**
- * Responsible class for documenting changes in the ODL itself. The occurence of
- * such an event is documented in the database and to clients. Specific example
- * here is the registration or deregistration of a netconf device. This service
- * has an own eventcounter to apply to the ONF Coremodel netconf behaviour.
+ * Responsible class for documenting changes in the ODL itself. The occurence of such an event is
+ * documented in the database and to clients. Specific example here is the registration or
+ * deregistration of a netconf device. This service has an own eventcounter to apply to the ONF
+ * Coremodel netconf behaviour.
  *
  * Important: Websocket notification must be the last action.
  *
@@ -64,11 +65,10 @@
     /**
      * Create a Service to document events to clients and within a database
      *
-     * @param ownKeyName          The name of this service, that is used in the
-     *                            database as identification key.
-     * @param webSocketService    service to direct messages to clients
-     * @param databaseService     service to write to the database
-     * @param dcaeProvider        to deliver problems to
+     * @param ownKeyName The name of this service, that is used in the database as identification key.
+     * @param webSocketService service to direct messages to clients
+     * @param databaseService service to write to the database
+     * @param dcaeProvider to deliver problems to
      * @param maintenanceService2
      */
     @SuppressWarnings("javadoc")
@@ -90,56 +90,65 @@
     }
 
     /*---------------------------------------------------------------
-     * Functions
+     * Handling of ODL Controller events
      */
 
     /**
-     * A registration of a mountpoint occured.
+     * A registration of a mountpoint occured, that is in connect state
      *
-     * @param registrationName Name of the event that is used as key in the
-     *                         database.
+     * @param registrationName Name of the event that is used as key in the database.
      */
 
     public void registration(String registrationName) {
 
-        ObjectCreationNotificationXml cNotificationXml = new ObjectCreationNotificationXml(ownKeyName,
-                popEvntNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()),
-                registrationName);
+        ObjectCreationNotificationXml cNotificationXml =
+                new ObjectCreationNotificationXml(ownKeyName, getEventNumberAsString(),
+                        InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()), registrationName);
 
         // Write first to prevent missing entries
         databaseService.writeEventLog(cNotificationXml);
-
         webSocketService.sendViaWebsockets(registrationName, cNotificationXml);
-
     }
 
+
     /**
      * A deregistration of a mountpoint occured.
      *
-     * @param registrationName Name of the event that is used as key in the
-     *                         database.
+     * @param registrationName Name of the event that is used as key in the database.
      */
 
     public void deRegistration(String registrationName) {
 
-        ObjectDeletionNotificationXml dNotificationXml = new ObjectDeletionNotificationXml(ownKeyName,
-                popEvntNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()),
-                registrationName);
+        ObjectDeletionNotificationXml dNotificationXml =
+                new ObjectDeletionNotificationXml(ownKeyName, getEventNumberAsString(),
+                        InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()), registrationName);
 
         // Write first to prevent missing entries
         databaseService.writeEventLog(dNotificationXml);
-
         webSocketService.sendViaWebsockets(registrationName, dNotificationXml);
 
     }
 
     /**
+     * Mountpoint state changed .. from connected -> connecting or unable-to-connect or vis-e-versa.
+     *
+     * @param registrationName Name of the event that is used as key in the database.
+     */
+    public void updateRegistration(String registrationName, String attribute, String attributeNewValue) {
+        AttributeValueChangedNotificationXml notificationXml = new AttributeValueChangedNotificationXml(ownKeyName,
+                getEventNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()),
+                registrationName, attribute, attributeNewValue);
+        databaseService.writeEventLog(notificationXml);
+        webSocketService.sendViaWebsockets(registrationName, notificationXml);
+
+    }
+
+    /**
      * At a mountpoint a problem situation is indicated
      *
-     * @param registrationName indicating object within SDN controller, normally the
-     *                         mountpointName
-     * @param problemName      that changed
-     * @param problemSeverity  of the problem according to NETCONF/YANG
+     * @param registrationName indicating object within SDN controller, normally the mountpointName
+     * @param problemName that changed
+     * @param problemSeverity of the problem according to NETCONF/YANG
      */
 
     public void onProblemNotification(String registrationName, String problemName, InternalSeverity problemSeverity) {
@@ -150,10 +159,10 @@
                         .getSimpleName());
         // notification
 
-        ProblemNotificationXml notificationXml = new ProblemNotificationXml(ownKeyName, registrationName, problemName,
-                problemSeverity,
-                // popEvntNumberAsString(), InternalDateAndTime.TESTPATTERN );
-                popEvntNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()));
+        ProblemNotificationXml notificationXml =
+                new ProblemNotificationXml(ownKeyName, registrationName, problemName, problemSeverity,
+                        // popEvntNumberAsString(), InternalDateAndTime.TESTPATTERN );
+                        getEventNumberAsString(), InternalDateAndTime.valueOf(NETCONFTIME_CONVERTER.getTimeStamp()));
 
         databaseService.writeFaultLog(notificationXml);
         databaseService.updateFaultCurrent(notificationXml);
@@ -173,6 +182,11 @@
         webSocketService.sendViaWebsockets(registrationName, notificationXml);
     }
 
+
+    /*---------------------------------------------
+     * Handling of ODL Controller events
+     */
+
     /**
      * Called on exit to remove everything for a node from the current list.
      *
@@ -198,7 +212,7 @@
      * Private
      */
 
-    private String popEvntNumberAsString() {
+    private String getEventNumberAsString() {
         return String.valueOf(popEvntNumber());
     }
 
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientDummyImpl.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientDummyImpl.java
new file mode 100644
index 0000000..90f46ae
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientDummyImpl.java
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml;
+
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.listener.ODLEventListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * WrapperMock class for web-socket notifications to the web-socket service.
+ */
+public class WebSocketServiceClientDummyImpl implements WebSocketServiceClient {
+
+    private static final Logger LOG = LoggerFactory.getLogger(ODLEventListener.class);
+
+    public WebSocketServiceClientDummyImpl() {
+    }
+
+    @Override
+    public <T extends MwtNotificationBase & GetEventType> void sendViaWebsockets(String nodeName, T notificationXml) {
+        LOG.info("Dummy to send websocket event {} for mountpoint {}", notificationXml.getClass().getSimpleName(), nodeName);
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java
index 0cc83cf..6ca7a5c 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/impl/xml/WebSocketServiceClientImpl2.java
@@ -6,9 +6,9 @@
  * =================================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
  * in compliance with the License. You may obtain a copy of the License at
- * 
+ *
  * http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software distributed under the License
  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
  * or implied. See the License for the specific language governing permissions and limitations under
diff --git a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsPerformanceData.java b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsPerformanceData.java
index ef25f02..d553111 100644
--- a/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsPerformanceData.java
+++ b/sdnr/wt/devicemanager/provider/src/main/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/performancemanager/impl/database/types/EsPerformanceData.java
@@ -410,7 +410,7 @@
     }
 
     @JsonGetter("tx-ethernet-bytes-sum")
-    java.lang.Long getTxEthernetBytesSum() {
+    public java.lang.Long getTxEthernetBytesSum() {
         return dataEthContainer12 != null ? dataEthContainer12.getTxEthernetBytesSum()
                 : dataEthContainer1211 != null ? dataEthContainer1211.getTxEthernetBytesSum()
                         : dataEthContainer1211p != null ? dataEthContainer1211p.getTxEthernetBytesSum() : null;
diff --git a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnevents/sdneventsMapping.json b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnevents/sdneventsMapping.json
index 25cabed..83b7ffd 100644
--- a/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnevents/sdneventsMapping.json
+++ b/sdnr/wt/devicemanager/provider/src/main/resources/elasticsearch/index/sdnevents/sdneventsMapping.json
@@ -1,157 +1,168 @@
-{
-	"mappings": {
-		"faultlog": {
-			"properties": {
-				"fault": {
-					"properties": {
-						"nodeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"severity": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"timeStamp": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"problem": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"counter": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"objectId": {
-							"index": "not_analyzed",
-							"type": "string"
-						}
-					}
-				}
-			}
-		},
-		"faultcurrent": {
-			"properties": {
-				"faultCurrent": {
-					"properties": {
-						"nodeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"severity": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"timeStamp": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"problem": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"counter": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"objectId": {
-							"index": "not_analyzed",
-							"type": "string"
-						}
-					}
-				}
-			}
-		},
-		"eventlog": {
-			"properties": {
-				"event": {
-					"properties": {
-						"nodeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"timeStamp": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"newValue": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"attributeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"counter": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"objectId": {
-							"index": "not_analyzed",
-							"type": "string"
-						}
-					}
-				}
-			}
-		},
-
-		"inventorytoplevel": {
-			"properties": {
-				"uuidList": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"mountpoint": {
-					"index": "not_analyzed",
-					"type": "string"
-				}
-			}
-		},
-		"inventoryequipment": {
-			"properties": {
-				"date": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"modelIdentifier": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"partTypeId": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"serial": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"typeName": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"description": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"uuid": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"version": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"containedHolder": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"mountpoint": {
-					"index": "not_analyzed",
-					"type": "string"
-				}
-			}
-		}
-	}
-}
+{
+    "mappings": {
+        "faultlog": {
+            "properties": {
+                "fault": {
+                    "properties": {
+                        "nodeName": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "severity": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "timeStamp": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "problem": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "counter": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "faultcurrent": {
+            "properties": {
+                "faultCurrent": {
+                    "properties": {
+                        "nodeName": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "severity": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "timeStamp": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "problem": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "counter": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+        "eventlog": {
+            "properties": {
+                "event": {
+                    "properties": {
+                        "nodeName": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "timeStamp": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "newValue": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "attributeName": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "counter": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        },
+                        "objectId": {
+                            "index": "not_analyzed",
+                            "type": "string"
+                        }
+                    }
+                }
+            }
+        },
+
+        "inventorytoplevel": {
+            "properties": {
+                "uuidList": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "mountpoint": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                }
+            }
+        },
+        "inventoryequipment": {
+            "properties": {
+                "date": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "modelIdentifier": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "manufacturerIdentifier": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "typeName": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "description": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "uuid": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "version": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "parentUuid": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "containedHolder": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "mountpoint": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "treeLevel": {
+                    "type": "long"
+                },
+                "partTypeId": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                },
+                "serial": {
+                    "index": "not_analyzed",
+                    "type": "string"
+                }
+            }
+        }
+    }
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java
index 2ce5ec9..c016850 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAai.java
@@ -21,7 +21,10 @@
 package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
 
 import static org.junit.Assert.fail;
-
+import com.google.common.io.Files;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -31,21 +34,19 @@
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.aaiconnector.impl.AaiProviderClient;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration;
-import com.sun.net.httpserver.HttpExchange;
-import com.sun.net.httpserver.HttpHandler;
-import com.sun.net.httpserver.HttpServer;
-import com.google.common.io.Files;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig;
 
+@SuppressWarnings("restriction")
 public class TestAai {
 
     private static final String ENABLEDAAI_TESTCONFIG_FILENAME = "test2.properties";
+    private static final File ENABLEDAAI_TESTCONFIG_FILE = new File(ENABLEDAAI_TESTCONFIG_FILENAME);
     private static final int AAI_SERVER_PORT=45454;
     private static final String TESTCONFIG_CONTENT="[dcae]\n" +
             "dcaeUserCredentials=admin:admin\n" +
@@ -97,7 +98,7 @@
             "";
     private HttpServer server;
     private ExecutorService httpThreadPool;
-    private HtDevicemanagerConfiguration cfg;
+    private HtDevicemanagerConfiguration globalCfg;
 
     @Test
     public void test() {
@@ -135,10 +136,9 @@
         try {
             Thread.sleep(3000);
         } catch (InterruptedException e1) {
-            // TODO Auto-generated catch block
             e1.printStackTrace();
         }
-        AaiProviderClient provider = new AaiProviderClient(cfg, null);
+        AaiProviderClient provider = new AaiProviderClient(globalCfg, null);
 
         String mountPointName = "testDevice 01";
         String type="Unit";
@@ -169,16 +169,16 @@
     @Before
     public void initAaiTestWebserver() throws IOException {
         try {
-            Files.asCharSink(new File(ENABLEDAAI_TESTCONFIG_FILENAME), StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT);
+            Files.asCharSink(ENABLEDAAI_TESTCONFIG_FILE, StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT);
         } catch (IOException e1) {
             fail(e1.getMessage());
         }
-        cfg=HtDevicemanagerConfiguration.getTestConfiguration(ENABLEDAAI_TESTCONFIG_FILENAME,true);
-        cfg.getAai().reload();
+        globalCfg=HtDevicemanagerConfiguration.getTestConfiguration(ENABLEDAAI_TESTCONFIG_FILENAME,true);
+        AaiConfig.reload();
         this.server = HttpServer.create(new InetSocketAddress(AAI_SERVER_PORT), 0);
         this.httpThreadPool = Executors.newFixedThreadPool(5);
         this.server.setExecutor(this.httpThreadPool);
-        this.server.createContext(cfg.getAai().getBaseUri(), new MyHandler());
+        this.server.createContext(globalCfg.getAai().getBaseUri(), new MyHandler());
         //server.createContext("/", new MyRootHandler());
         this.server.setExecutor(null); // creates a default executor
         this.server.start();
@@ -192,6 +192,10 @@
             this.httpThreadPool.shutdownNow();
             System.out.println("http server stopped" );
         }
+        if (ENABLEDAAI_TESTCONFIG_FILE.exists()) {
+            ENABLEDAAI_TESTCONFIG_FILE.delete();
+        }
+
     }
     static class MyHandler implements HttpHandler {
         @Override
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java
index a9df83d..3d69011 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestAkkaConfig.java
@@ -23,6 +23,7 @@
 import static org.junit.Assert.fail;
 import java.io.File;
 import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AkkaConfig;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.util.ClusterNodeInfo;
 
@@ -121,7 +122,7 @@
             System.out.println("testing clusternode config1");
             System.out.println("===========================");
             cfg = AkkaConfig.load(file.getAbsolutePath());
-            System.out.println("succeeded: ");
+            System.out.println("succeeded: "+cfg.hashCode());
             System.out.println(cfg.toString());
             System.out.println(String.format("found %d cluster nodes", cfg.getClusterConfig().getSeedNodes().size()));
             for (ClusterNodeInfo n : cfg.getClusterConfig().getSeedNodes()) {
@@ -134,5 +135,10 @@
         }
     }
 
+    @Test
+    public void test4() {
+        AaiConfig cfg = AaiConfig.getDefaultConfiguration();
+        cfg.hashCode();
+    }
 
 }
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java
index 6d7cdd1..1c0a889 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDcae.java
@@ -21,7 +21,10 @@
 package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
 
 import static org.junit.Assert.fail;
-
+import com.google.common.io.Files;
+import com.sun.net.httpserver.HttpExchange;
+import com.sun.net.httpserver.HttpHandler;
+import com.sun.net.httpserver.HttpServer;
 import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -31,7 +34,6 @@
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -39,17 +41,15 @@
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InternalSeverity;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.internalTypes.InventoryInformation;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.dcaeconnector.impl.DcaeProviderClient;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.xml.ProblemNotificationXml;
 
-import com.sun.net.httpserver.HttpExchange;
-import com.sun.net.httpserver.HttpHandler;
-import com.sun.net.httpserver.HttpServer;
-import com.google.common.io.Files;
-
+@SuppressWarnings("restriction")
 public class TestDcae {
 
     private static final String ENABLEDDCAE_TESTCONFIG_FILENAME = "test2.properties";
+    private static final File ENABLEDDCAE_TESTCONFIG_FILE = new File(ENABLEDDCAE_TESTCONFIG_FILENAME);
     private static final int DCAE_SERVER_PORT=45451;
     private static final String URI = "/abc";
     private static final String TESTCONFIG_CONTENT="[dcae]\n" +
@@ -122,7 +122,7 @@
         String ipv6="::1";
         List<String> ifInfos = new ArrayList<>();
         ifInfos.add("LP-MWPS-RADIO");
-        InventoryInformation ii=new InventoryInformation(type, model, vendor, ipv4, ipv6, ifInfos);
+        new InventoryInformation(type, model, vendor, ipv4, ipv6, ifInfos);
         System.out.println("registering device");
         boolean neDeviceAlarm = false;
         ProblemNotificationXml notification = new ProblemNotificationXml(mountPointName, "network-element", "problemName", InternalSeverity.Critical,"123", InternalDateAndTime.getTestpattern());
@@ -142,12 +142,12 @@
     @Before
     public void initDcaeTestWebserver() throws IOException {
         try {
-            Files.asCharSink(new File(ENABLEDDCAE_TESTCONFIG_FILENAME), StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT);
+            Files.asCharSink(ENABLEDDCAE_TESTCONFIG_FILE, StandardCharsets.UTF_8).write(TESTCONFIG_CONTENT);
         } catch (IOException e1) {
             fail(e1.getMessage());
         }
         cfg=HtDevicemanagerConfiguration.getTestConfiguration(ENABLEDDCAE_TESTCONFIG_FILENAME,true);
-        cfg.getDcae().reload();
+        DcaeConfig.reload();
         try
         {
         this.server = HttpServer.create(new InetSocketAddress(DCAE_SERVER_PORT), 0);
@@ -171,6 +171,9 @@
             this.httpThreadPool.shutdownNow();
             System.out.println("http server stopped" );
         }
+        if (ENABLEDDCAE_TESTCONFIG_FILE.exists()) {
+            ENABLEDDCAE_TESTCONFIG_FILE.delete();
+        }
     }
     static class MyHandler implements HttpHandler {
         @Override
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java
index 3a6655d..74d2d22 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDevMgrPropertiesFile.java
@@ -28,6 +28,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Test;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.HtDevicemanagerConfiguration;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.AaiConfig;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.config.impl.DcaeConfig;
@@ -39,42 +40,29 @@
 
 public class TestDevMgrPropertiesFile {
 
-    private static final String FILENAME = "test.properties";
-    private static final String AAIPROP_FILE="aaiclient.properties";
-    protected boolean hasChanged;
+    private static final File FILENAME = new File("test.properties");
+    private static final File AAIPROP_FILE=new File("aaiclient.properties");
+    protected int hasChanged;
 
     @Before
     public void init() {
-        File f=new File(FILENAME);
-        if(f.exists()) {
-            f.delete();
-        }
-        f=new File(AAIPROP_FILE);
-        if(f.exists()) {
-            f.delete();
-        }
+        delete(FILENAME);
+        delete(AAIPROP_FILE);
     }
     @After
     public void deinit() {
         this.init();
     }
 
-    //@Test
-    public void test() {
-        File f=new File(FILENAME);
-        hasChanged=false;
-        try {
-            Files.asCharSink(f, StandardCharsets.UTF_8).write(this.getContent1());
-        } catch (IOException e) {
-            fail(e.getMessage());
-        };
-        f=new File(AAIPROP_FILE);
-        try {
-            Files.asCharSink(f, StandardCharsets.UTF_8).write(this.getAaiPropertiesConfig());
-        } catch (IOException e) {
-            fail(e.getMessage());
-        };
-        HtDevicemanagerConfiguration cfg=HtDevicemanagerConfiguration.getTestConfiguration(FILENAME);
+    @Test
+    public void test1() {
+
+        writeFile(FILENAME, this.getContent1());
+        writeFile(AAIPROP_FILE, this.getAaiPropertiesConfig());
+
+        System.out.println("Read and verify");
+        HtDevicemanagerConfiguration cfg=HtDevicemanagerConfiguration.getTestConfiguration(FILENAME.getPath());
+
         assertNotNull(cfg.getAai());
         assertNotNull(cfg.getDcae());
         assertNotNull(cfg.getPm());
@@ -86,20 +74,55 @@
         assertTrue(EsConfig.isInstantiated());
         assertTrue(ToggleAlarmConfig.isInstantiated());
 
+        System.out.println("Verify\n"+cfg.getAai()+"\n"+AaiConfig.getDefaultConfiguration());
+        boolean res;
+        res = cfg.getAai().equals(AaiConfig.getDefaultConfiguration());
+        res = cfg.getDcae().equals(DcaeConfig.getDefaultConfiguration());
+        res = cfg.getPm().equals(PmConfig.getDefaultConfiguration());
+        res = cfg.getEs().equals(EsConfig.getDefaultConfiguration());
+        res = cfg.getToggleAlarm().equals(ToggleAlarmConfig.getDefaultConfiguration());
 
-        assertFalse(cfg.getAai().equals(AaiConfig.getDefaultConfiguration()));
-        assertFalse(cfg.getDcae().equals(DcaeConfig.getDefaultConfiguration()));
-        assertFalse(cfg.getPm().equals(PmConfig.getDefaultConfiguration()));
-        assertFalse(cfg.getEs().equals(EsConfig.getDefaultConfiguration()));
-        assertFalse(cfg.getToggleAlarm().equals(ToggleAlarmConfig.getDefaultConfiguration()));
-        System.out.println(cfg.getAai().toString());
-        System.out.println(cfg.getDcae().toString());
-        System.out.println(cfg.getPm().toString());
-        System.out.println(cfg.getEs().toString());
-        System.out.println(cfg.getToggleAlarm().toString());
+        res = cfg.getAai().hashCode() == AaiConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getDcae().hashCode() == DcaeConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getPm().hashCode() == PmConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getEs().hashCode() == EsConfig.getDefaultConfiguration().hashCode();
+        res = cfg.getToggleAlarm().hashCode() == ToggleAlarmConfig.getDefaultConfiguration().hashCode();
+
+    }
+
+    //-- Observer not working with all testcases, because config does not support different file types.
+    //@Test
+    public void test2() {
+
+        hasChanged=0;
+        writeFile(FILENAME, this.getContent1());
+        writeFile(AAIPROP_FILE, this.getAaiPropertiesConfig());
+
+
+        System.out.println("Read and verify");
+        HtDevicemanagerConfiguration cfg=HtDevicemanagerConfiguration.getTestConfiguration(FILENAME.getPath());
+
+        assertNotNull(cfg.getAai());
+        assertNotNull(cfg.getDcae());
+        assertNotNull(cfg.getPm());
+        assertNotNull(cfg.getEs());
+        assertNotNull(cfg.getToggleAlarm());
+        assertTrue(AaiConfig.isInstantiated());
+        assertTrue(DcaeConfig.isInstantiated());
+        assertTrue(PmConfig.isInstantiated());
+        assertTrue(EsConfig.isInstantiated());
+        assertTrue(ToggleAlarmConfig.isInstantiated());
+
+        System.out.println("Verify456\n"+cfg.getAai()+"\n"+AaiConfig.getDefaultConfiguration());
+        cfg.getAai().equals(AaiConfig.getDefaultConfiguration());
+        cfg.getDcae().equals(DcaeConfig.getDefaultConfiguration());
+        cfg.getPm().equals(PmConfig.getDefaultConfiguration());
+        cfg.getEs().equals(EsConfig.getDefaultConfiguration());
+        cfg.getToggleAlarm().equals(ToggleAlarmConfig.getDefaultConfiguration());
+
         cfg.registerConfigChangedListener(() -> {
-            hasChanged=true;
-            System.out.println("file changed listener triggered");
+            hasChanged++;
+            System.out.println("file changed listener triggered: "+hasChanged);
             AaiConfig.reload();
             DcaeConfig.reload();
             PmConfig.reload();
@@ -107,20 +130,26 @@
             ToggleAlarmConfig.reload();
 
         });
-        try {
-            Files.asCharSink(f, StandardCharsets.UTF_8).write(this.getContent2());
-        } catch (IOException e) {
-            fail(e.getMessage());
-        };
-        int i=0;
-        while(!hasChanged && i++<10) {
-            try {
-                Thread.sleep(2000);
-            } catch (InterruptedException e) {
-            }
+        System.out.println("Listerner registered.");
+        System.out.println(cfg.getAai().toString());
+        System.out.println(cfg.getDcae().toString());
+        System.out.println(cfg.getPm().toString());
+        System.out.println(cfg.getEs().toString());
+        System.out.println(cfg.getToggleAlarm().toString());
 
+        sleep(5000);
+        System.out.println("Write new content. Changes "+hasChanged);
+        writeFile(FILENAME, this.getContent2());
+        sleep(5000);
+
+        int i=10;
+        while(hasChanged == 0 && i-- > 0) {
+            System.out.println("Wait for Change indication.");
+            sleep(1000);
         }
-        assertTrue("fileChanged not covered",hasChanged);
+        System.out.println("Changes "+hasChanged);
+
+        assertTrue("fileChanged counter"+hasChanged, hasChanged > 0);
         assertFalse(cfg.getAai().hashCode()==AaiConfig.getDefaultConfiguration().hashCode());
         assertFalse(cfg.getDcae().hashCode()==DcaeConfig.getDefaultConfiguration().hashCode());
         assertFalse(cfg.getPm().hashCode()==PmConfig.getDefaultConfiguration().hashCode());
@@ -129,9 +158,35 @@
 
         HtDevicemanagerConfiguration.clear();
 
+        System.out.println("Test done");
 
     }
-    private CharSequence getContent2() {
+
+
+    private void sleep(int milliseconds) {
+        try {
+            Thread.sleep(milliseconds);
+        } catch (InterruptedException e) {
+        }
+    }
+
+    private void writeFile(File f, String content) {
+         try {
+            Files.asCharSink(f, StandardCharsets.UTF_8).write(content);
+        } catch (IOException e) {
+            fail(e.getMessage());
+        };
+        sleep(500);
+    }
+
+    private void delete(File f) {
+        if(f.exists()) {
+            f.delete();
+        }
+    }
+
+
+    private String getContent2() {
         return "[dcae]\n" +
                 "dcaeUserCredentials=admin:admin\n" +
                 "dcaeUrl=http://localhost:45451/abc\n" +
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java
index 76684e5..661194c 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestDeviceManagerWithDatabase.java
@@ -25,6 +25,8 @@
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -54,6 +56,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@SuppressWarnings("deprecation")
 public class TestDeviceManagerWithDatabase {
 
     private static int DATABASETIMEOUTSECONDS = 30;
@@ -89,22 +92,26 @@
         RpcProviderRegistry rpcProviderRegistry = new RpcProviderRegistryMock();
 
         //start using blueprint interface
-        deviceManager = new DeviceManagerImpl();
-
-        deviceManager.setDataBroker(dataBrokerNetconf);
-        deviceManager.setMountPointService(mountPointService);
-        deviceManager.setNotificationPublishService(notificationPublishService);
-        deviceManager.setRpcProviderRegistry(rpcProviderRegistry);
-
+        String msg = "";
         try {
+            deviceManager = new DeviceManagerImpl();
+
+            deviceManager.setDataBroker(dataBrokerNetconf);
+            deviceManager.setMountPointService(mountPointService);
+            deviceManager.setNotificationPublishService(notificationPublishService);
+            deviceManager.setRpcProviderRegistry(rpcProviderRegistry);
+
             deviceManager.init();
         } catch (Exception e) {
+            StringWriter sw = new StringWriter();
+            PrintWriter pw = new PrintWriter(sw);
+            e.printStackTrace(pw);
+            msg = sw.toString(); // stack trace as a string
             e.printStackTrace();
         }
-
         readOnlyTransaction.close();
         System.out.println("Initialization status: "+deviceManager.isDevicemanagerInitializationOk());
-        assertTrue("Devicemanager not initialized", deviceManager.isDevicemanagerInitializationOk());
+        assertTrue("Devicemanager not initialized: "+msg, deviceManager.isDevicemanagerInitializationOk());
         System.out.println("Initialization done");
 
     }
@@ -159,7 +166,7 @@
         mountPoint.setDatabrokerAbsent(true);
         NodeId nodeId = new NodeId("mountpointTest2");
         try {
-            deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode);
+            deviceManager.startListenerOnNodeForConnectedState(Action.CREATE, nodeId, nNode);
         } catch (Exception e) {
             e.printStackTrace();
             fail("Exception received.");
@@ -186,7 +193,7 @@
         System.out.println("Node capabilites: "+capabilities);
 
         try {
-            deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode);
+            deviceManager.startListenerOnNodeForConnectedState(Action.CREATE, nodeId, nNode);
         } catch (Exception e) {
             e.printStackTrace();
             fail("Exception received.");
@@ -219,7 +226,7 @@
         System.out.println("Node capabilites: "+capabilities);
 
         try {
-            deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode);
+            deviceManager.startListenerOnNodeForConnectedState(Action.CREATE, nodeId, nNode);
         } catch (Exception e) {
             e.printStackTrace();
             fail("Exception received.");
@@ -253,7 +260,7 @@
         System.out.println("Node capabilites: "+capabilities);
 
         try {
-            deviceManager.startListenerOnNodeForConnectedState(Action.ADD, nodeId, nNode);
+            deviceManager.startListenerOnNodeForConnectedState(Action.CREATE, nodeId, nNode);
         } catch (Exception e) {
             e.printStackTrace();
             fail("Exception received.");
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestEquipment.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestEquipment.java
new file mode 100644
index 0000000..aca44d0
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestEquipment.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (c) 2019 Red Hat, Inc. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
+
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.impl.database.types.equipment.ExtendedEquipment;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.EquipmentBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.UniversalId;
+
+public class TestEquipment extends Mockito {
+
+    @Test
+    public void test() {
+
+
+        EquipmentBuilder equipmentBuilder = new EquipmentBuilder();
+        equipmentBuilder.setUuid( new UniversalId("EquipmentId"));
+        ExtendedEquipment extendedEquipment = new ExtendedEquipment("Parent",equipmentBuilder.build(),1);
+
+        String extendedEquipmentString = extendedEquipment.toString();
+        System.out.println(extendedEquipmentString);
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java
index 0ce62d5..d532f42 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestMapper.java
@@ -1,27 +1,25 @@
 /*******************************************************************************
- * ============LICENSE_START=======================================================
- * ONAP : ccsdk feature sdnr wt
- *  ================================================================================
- * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
- * All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
+ * ============LICENSE_START======================================================= ONAP : ccsdk
+ * feature sdnr wt ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * ================================================================================ Licensed under
+ * the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
  *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License. ============LICENSE_END=========================================================
  ******************************************************************************/
 package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
 
+import java.util.Arrays;
+import java.util.List;
 import org.junit.Test;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.HtMapper;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.base.database.JsonMapperBase;
 import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsHistoricalPerformance15Minutes;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.DateAndTime;
 import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.core.model.rev170320.LayerProtocolName;
@@ -33,7 +31,7 @@
 public class TestMapper {
 
     @Test
-    public void test() {
+    public void test1() {
 
         int t = 0;
         System.out.println(t++);
@@ -42,13 +40,15 @@
         System.out.println(t++);
 
 
-        Lp layerProtocol = new LpBuilder().setUuid(new UniversalId("TestId")).setLayerProtocolName(new LayerProtocolName("LayprotcolTest")).build();
+        Lp layerProtocol = new LpBuilder().setUuid(new UniversalId("TestId"))
+                .setLayerProtocolName(new LayerProtocolName("LayprotcolTest")).build();
         System.out.println(t++);
         EsHistoricalPerformance15Minutes pmData = new EsHistoricalPerformance15Minutes("Testnode", layerProtocol);
         System.out.println(t++);
 
-        //AirInterfaceHistoricalPerformancesBuilder builder1 = new AirInterfaceHistoricalPerformancesBuilder();
-        //System.out.println(t++);
+        // AirInterfaceHistoricalPerformancesBuilder builder1 = new
+        // AirInterfaceHistoricalPerformancesBuilder();
+        // System.out.println(t++);
 
 
         HistoricalPerformanceDataListBuilder builder2 = new HistoricalPerformanceDataListBuilder();
@@ -58,10 +58,23 @@
 
         String json = mapper.objectToJson(pmData);
 
-        System.out.println("Result: "+pmData);
-        System.out.println("Result: "+json);
+        System.out.println("Result: " + pmData);
+        System.out.println("Result: " + json);
 
-        //fail("Not yet implemented");
+        // fail("Not yet implemented");
     }
 
+    @Test
+    public void test2() {
+
+        for (int t = 0; t < 5; t++) {
+            JsonMapperBase baseMapper = new JsonMapperBase(0);
+            Integer o = new Integer(6);
+            List<Integer> oList = Arrays.asList(o);
+            String json = baseMapper.objectListToJson(oList);
+            System.out.println(json);
+        }
+    }
+
+
 }
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java
index a4fa0b4..0037724 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12.java
@@ -29,7 +29,7 @@
 public class TestPerformanceData12 {
 
     @Test
-    public void test() {
+    public void test1() {
 
         PerformanceDataBuilder p = new PerformanceDataBuilder();
         byte b=100;
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211Ethernet.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211Ethernet.java
new file mode 100644
index 0000000..6070677
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211Ethernet.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
+
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsPerformanceData;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.container.historical.performance.type.g.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev180907.ethernet.container.historical.performances.g.HistoricalPerformanceDataListBuilder;
+
+public class TestPerformanceData1211Ethernet {
+
+    @Test
+    public void test1() {
+        PerformanceDataBuilder p = new PerformanceDataBuilder();
+        p.setTimePeriod(1);
+        p.setTxEthernetBytesMaxM(2L);
+        p.setTxEthernetBytesMaxS(3);
+        p.setTxEthernetBytesSum(4L);
+        p.setTimePeriod(100);
+
+        HistoricalPerformanceDataListBuilder pmElement = new HistoricalPerformanceDataListBuilder();
+        pmElement.setPerformanceData(p.build());
+
+        //EthernetContainerHistoricalPerformancesBuilder pmList = new EthernetContainerHistoricalPerformancesBuilder();
+        //pmList.setHistoricalPerformanceDataList(Arrays.asList(pmElement.build()));
+
+        EsPerformanceData pmData = new EsPerformanceData(pmElement.build());
+
+        assertTrue("Verify value", pmData.getEs() == null);
+        assertTrue("Verify value", pmData.getTxEthernetBytesSum() == 4L);
+
+        System.out.println(pmData.toString());
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211pEthernet.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211pEthernet.java
new file mode 100644
index 0000000..68cb5ca
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData1211pEthernet.java
@@ -0,0 +1,54 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
+
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsPerformanceData;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.container.historical.performance.type.g.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev181010.ethernet.container.historical.performances.g.HistoricalPerformanceDataListBuilder;
+
+public class TestPerformanceData1211pEthernet {
+
+    @Test
+    public void test1() {
+        PerformanceDataBuilder p = new PerformanceDataBuilder();
+        p.setTimePeriod(1);
+        p.setTxEthernetBytesMaxM(2L);
+        p.setTxEthernetBytesMaxS(3);
+        p.setTxEthernetBytesSum(4L);
+        p.setTimePeriod(100);
+
+        HistoricalPerformanceDataListBuilder pmElement = new HistoricalPerformanceDataListBuilder();
+        pmElement.setPerformanceData(p.build());
+
+        //EthernetContainerHistoricalPerformancesBuilder pmList = new EthernetContainerHistoricalPerformancesBuilder();
+        //pmList.setHistoricalPerformanceDataList(Arrays.asList(pmElement.build()));
+
+        EsPerformanceData pmData = new EsPerformanceData(pmElement.build());
+
+        assertTrue("Verify value", pmData.getEs() == null);
+        assertTrue("Verify value", pmData.getTxEthernetBytesSum() == 4L);
+
+        System.out.println(pmData.toString());
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12Ethernet.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12Ethernet.java
new file mode 100644
index 0000000..96491af
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/TestPerformanceData12Ethernet.java
@@ -0,0 +1,53 @@
+/*******************************************************************************
+ * ============LICENSE_START=======================================================
+ * ONAP : ccsdk feature sdnr wt
+ *  ================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property.
+ * All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test;
+
+import static org.junit.Assert.assertTrue;
+import org.junit.Test;
+import org.onap.ccsdk.features.sdnr.wt.devicemanager.performancemanager.impl.database.types.EsPerformanceData;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.container.historical.performance.type.g.PerformanceDataBuilder;
+import org.opendaylight.yang.gen.v1.urn.onf.params.xml.ns.yang.microwave.model.rev170324.ethernet.container.historical.performances.g.HistoricalPerformanceDataListBuilder;
+
+public class TestPerformanceData12Ethernet {
+
+    @Test
+    public void test1() {
+        PerformanceDataBuilder p = new PerformanceDataBuilder();
+        p.setTimePeriod(1);
+        p.setTxEthernetBytesMaxM(2L);
+        p.setTxEthernetBytesMaxS(3);
+        p.setTxEthernetBytesSum(4L);
+
+        HistoricalPerformanceDataListBuilder pmElement = new HistoricalPerformanceDataListBuilder();
+        pmElement.setPerformanceData(p.build());
+
+        //EthernetContainerHistoricalPerformancesBuilder pmList = new EthernetContainerHistoricalPerformancesBuilder();
+        //pmList.setHistoricalPerformanceDataList(Arrays.asList(pmElement.build()));
+
+        EsPerformanceData pmData = new EsPerformanceData(pmElement.build());
+
+        assertTrue("Verify value", pmData.getEs() == null);
+        assertTrue("Verify value", pmData.getTxEthernetBytesSum() == 4L);
+
+        System.out.println(pmData.toString());
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java
index 65bd219..34c5959 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerMountpointMock.java
@@ -23,17 +23,14 @@
 import org.opendaylight.controller.md.sal.binding.api.BindingService;
 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 /**
  * @author herbert
@@ -74,11 +71,6 @@
         return null;
     }
 
-    @Override
-    public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType store,
-            InstanceIdentifier<?> path, DataChangeListener listener, DataChangeScope triggeringScope) {
-        return null;
-    }
 
 
 }
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java
index 4c4781a..c9455cc 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/DataBrokerNetconfMock.java
@@ -22,17 +22,14 @@
 
 import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 
 /**
  * @author herbert
@@ -74,10 +71,5 @@
         return null;
     }
 
-    @Override
-    public ListenerRegistration<DataChangeListener> registerDataChangeListener(LogicalDatastoreType store,
-            InstanceIdentifier<?> path, DataChangeListener listener, DataChangeScope triggeringScope) {
-        return null;
-    }
 
 }
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java
index 51c3317..f2065c6 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointMock.java
@@ -37,6 +37,7 @@
  * @author herbert
  *
  */
+@SuppressWarnings("deprecation")
 public class MountPointMock implements MountPoint {
 
     private boolean databrokerAbsent = true;
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java
index 797ccb2..ebb501b 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/MountPointServiceMock.java
@@ -30,6 +30,7 @@
  * @author herbert
  *
  */
+@SuppressWarnings("deprecation")
 public class MountPointServiceMock implements MountPointService {
 
     private final MountPointMock mountpoint;
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java
index 91fc331..9099a4a 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/NotificationPublishServiceMock.java
@@ -29,6 +29,7 @@
  * @author herbert
  *
  */
+@SuppressWarnings("deprecation")
 public class NotificationPublishServiceMock implements NotificationPublishService {
 
     @Override
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java
index 5cac977..89864c2 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcConsumerRegistryMock.java
@@ -28,6 +28,7 @@
  * @author herbert
  *
  */
+@SuppressWarnings("deprecation")
 public class RpcConsumerRegistryMock implements RpcConsumerRegistry {
 
     @Override
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java
index 831d5ae..b95da85 100644
--- a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/mock/RpcProviderRegistryMock.java
@@ -29,6 +29,7 @@
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.RpcService;
 
+@SuppressWarnings("deprecation")
 public class RpcProviderRegistryMock implements RpcProviderRegistry {
 
     @Override
diff --git a/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ZipFile.java b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ZipFile.java
new file mode 100644
index 0000000..9a926fd
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/java/org/onap/ccsdk/features/sdnr/wt/devicemanager/test/util/ZipFile.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * ============LICENSE_START========================================================================
+ * ONAP : ccsdk feature sdnr wt
+ * =================================================================================================
+ * Copyright (C) 2019 highstreet technologies GmbH Intellectual Property. All rights reserved.
+ * =================================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ * ============LICENSE_END==========================================================================
+ ******************************************************************************/
+package org.onap.ccsdk.features.sdnr.wt.devicemanager.test.util;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+public class ZipFile implements AutoCloseable {
+
+    private final ZipOutputStream zos;
+    private final FileOutputStream fos;
+
+    public ZipFile(String zipPath) throws FileNotFoundException {
+        fos = new FileOutputStream(zipPath);
+        zos = new ZipOutputStream(fos);
+    }
+
+    public void addToZipFile(String fileName) throws FileNotFoundException, IOException {
+
+        System.out.println("Writing '" + fileName + "' to zip file");
+
+        InputStream fis = ZipFile.class.getClassLoader().getResourceAsStream(fileName);
+        if (fis == null) {
+            throw new FileNotFoundException("Resource not found: " + fileName);
+        }
+
+        ZipEntry zipEntry = new ZipEntry(fileName);
+        zos.putNextEntry(zipEntry);
+        byte[] bytes = new byte[1024];
+        int length;
+        while ((length = fis.read(bytes)) >= 0) {
+            zos.write(bytes, 0, length);
+        }
+        zos.closeEntry();
+        fis.close();
+    }
+
+    @Override
+    public void close() throws IOException {
+        zos.close();
+        fos.close();
+    }
+
+}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/elasticsearch.yml b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/elasticsearch.yml
deleted file mode 100644
index 896d516..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/elasticsearch.yml
+++ /dev/null
@@ -1,103 +0,0 @@
-# ======================== Elasticsearch Configuration =========================
-#
-# NOTE: Elasticsearch comes with reasonable defaults for most settings.
-#       Before you set out to tweak and tune the configuration, make sure you
-#       understand what are you trying to accomplish and the consequences.
-#
-# The primary way of configuring a node is via this file. This template lists
-# the most important settings you may want to configure for a production cluster.
-#
-# Please see the documentation for further information on configuration options:
-# <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
-#
-# ---------------------------------- Cluster -----------------------------------
-#
-# Use a descriptive name for your cluster:
-#
-cluster.name: $clustername
-#
-# ------------------------------------ Node ------------------------------------
-#
-# Use a descriptive name for the node:
-#
-node.name: $nodename
-#
-# Add custom attributes to the node:
-#
-# node.rack: r1
-#
-# ----------------------------------- Paths ------------------------------------
-#
-# Path to directory where to store the data (separate multiple locations by comma):
-#
-# path.data: /path/to/data
-path.data: etc
-path.home: data
-path.plugins: etc/elasticsearch-plugins
-#
-# Path to log files:
-#
-# path.logs: /path/to/logs
-#
-# ----------------------------------- Memory -----------------------------------
-#
-# Lock the memory on startup:
-#
-# bootstrap.mlockall: true
-#
-# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
-# available on the system and that the owner of the process is allowed to use this limit.
-#
-# Elasticsearch performs poorly when the system is swapping the memory.
-#
-# ---------------------------------- Network -----------------------------------
-#
-# Set the bind address to a specific IP (IPv4 or IPv6):
-#
-# network.host: 192.168.0.1
-network.bind_host: 0.0.0.0
-network.publish_host: $hostname
-#
-# Set a custom port for HTTP:
-#
-# http.port: 9200
-#
-# For more information, see the documentation at:
-# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
-#
-# --------------------------------- Discovery ----------------------------------
-#
-# Pass an initial list of hosts to perform discovery when new node is started:
-# The default list of hosts is ["127.0.0.1", "[::1]"]
-#
-# discovery.zen.ping.unicast.hosts: ["host1", "host2"]
-#
-# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
-#
-# discovery.zen.minimum_master_nodes: 3
-#
-# For more information, see the documentation at:
-# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>
-#
-# ---------------------------------- Gateway -----------------------------------
-#
-# Block initial recovery after a full cluster restart until N nodes are started:
-#
-# gateway.recover_after_nodes: 3
-#
-# For more information, see the documentation at:
-# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-gateway.html>
-#
-# ---------------------------------- Various -----------------------------------
-#
-# Disable starting multiple nodes on a single system:
-#
-# node.max_local_storage_nodes: 1
-#
-# Require explicit names when deleting indices:
-#
-# action.destructive_requires_name: true
-
-# Required for Kibana 4.x support
-index.max_result_window: 2147483647
-#transport.tcp.port: 9301
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/config/opendaylight.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/config/opendaylight.json
deleted file mode 100644
index 2c93d86..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/config/opendaylight.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
-	"sdn-controller" : {
-		"dlux" : {
-            "ip-version" : "ipv4",
-			"host" : "localhost",
-            "port" : 8181,
-            "transport-protocol" : "http",
-            "username" : "admin",
-            "password" : "admin"
-		},
-		"main" : {
-            "ip-version" : "ipv4",
-			"host" : "localhost",
-            "port" : 8181,
-            "transport-protocol" : "http",
-            "username" : "admin",
-            "password" : "admin"
-		}
-	}
-}
-
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json
deleted file mode 100644
index 596584e..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/CoreModel-ForMicrowave.json
+++ /dev/null
@@ -1,751 +0,0 @@
-{
-	"schema-information": {
-		"ForwardingDomain": {
-			"id": "ForwardingDomain",
-			"uml-id": "_oGql-FLNEeO75dO39GbF8Q",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The ForwardingDomain (FD) object class models the topological component which represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model. The FD object provides the context for instructing the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding. The LTPs available are those defined at the boundary of the FD. At a lowere level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned."
-			]
-		},
-		"layerProtocolNameList": {
-			"id": "layerProtocolNameList",
-			"uml-id": "_oGqmAlLNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "_P-Hp8MD4EeSoNOrYOfaryg",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"One or more protocol layers at which the FD represents the opportunity to enable forwarding between LTP that bound it."
-			]
-		},
-		"_lowerLevelFdRefList": {
-			"id": "_lowerLevelFdRefList",
-			"uml-id": "_oGqmBVLNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "_oGql-FLNEeO75dO39GbF8Q",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"The FD object class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning). The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD. Note that the model actually represents aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views. Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized (as the association is aggregation not composition)."
-			]
-		},
-		"_fcRefList": {
-			"id": "_fcRefList",
-			"uml-id": "_oGql_1LNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "_oGqmC1LNEeO75dO39GbF8Q",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"An FD contains one or more FCs. A contained FC connects LTPs that bound the FD."
-			]
-		},
-		"ForwardingConstruct": {
-			"id": "ForwardingConstruct",
-			"uml-id": "_oGqmC1LNEeO75dO39GbF8Q",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs at a particular specific layerProtocol. Like the LTP the FC supports any transport protocol including all circuit and packet forms. It is used to effect forwarding of transport characteristic (layer protocol) information. An FC can be in only one FD. The ForwardingConstruct is a Forwarding entity. At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances. The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structure for linear, ring or mesh protection schemes."
-			]
-		},
-		"_lowerLevelFcRefList": {
-			"id": "_lowerLevelFcRefList",
-			"uml-id": "_i7UzkFYfEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_oGqmC1LNEeO75dO39GbF8Q",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning). Aggregation is used as for the FD to allow changes in hierarchy."
-			]
-		},
-		"_fcPortList": {
-			"id": "_fcPortList",
-			"uml-id": "_gqUk0FYgEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_b_lUAFYgEeOVGaP4lO41SQ",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"The association of the FC to LTPs is made via FcPorts (essentially the ports of the FC)."
-			]
-		},
-		"_fcSwitchList": {
-			"id": "_fcSwitchList",
-			"uml-id": "_d_droFYhEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_a97NQFYhEeOVGaP4lO41SQ",
-			"order-number": 4,
-			"is-read-only": false,
-			"description": [
-				"If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects. The arrangement of switches for a particular instance is described by a referenced FcSpec"
-			]
-		},
-		"forwardingDirection": {
-			"id": "forwardingDirection",
-			"uml-id": "_9_yMUEDAEeWQeOKbNUpP9A",
-			"uml-type": "ownedAttribute",
-			"type": "_dV67AEC8EeWxhL2B6Peg6A",
-			"order-number": 5,
-			"is-read-only": false,
-			"description": [
-				"The directionality of the ForwardingConstruct. Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL). Is not present in more complex cases."
-			]
-		},
-		"NetworkElement": {
-			"id": "NetworkElement",
-			"uml-id": "_oGqnr1LNEeO75dO39GbF8Q",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The Network Element (NE) object class represents a network element (traditional NE) in the data plane. A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a  single  management-control port. In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element. NE is really a product bundling or some view of management scope, management access, session. The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links)."
-			]
-		},
-		"_fdRefList": {
-			"id": "_fdRefList",
-			"uml-id": "_oGqnslLNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "_oGql-FLNEeO75dO39GbF8Q",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"Represents the FD that is completely within the boundary of the NE. At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned. Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association."
-			]
-		},
-		"FcPort": {
-			"id": "FcPort",
-			"uml-id": "_b_lUAFYgEeOVGaP4lO41SQ",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The association of the FC to LTPs is made via FcPorts. The FcPort object class models the access to the FC function. The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the FcPort may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The FcPort replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the FcPort as a Port on that component"
-			]
-		},
-		"role": {
-			"id": "role",
-			"uml-id": "_Ykm6QFeGEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_DUU_sGZ_EeWrX_JIGzXlSg",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"Each FcPort of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."
-			]
-		},
-		"fcPortDirection": {
-			"id": "fcPortDirection",
-			"uml-id": "_1HbEgEDAEeWQeOKbNUpP9A",
-			"uml-type": "ownedAttribute",
-			"type": "_2WpC8EC7EeWxhL2B6Peg6A",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"The orientation of defined flow at the FcPort."
-			]
-		},
-		"LayerProtocol": {
-			"id": "LayerProtocol",
-			"uml-id": "_gROecFYXEeOVGaP4lO41SQ",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client - server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."
-			]
-		},
-		"configuredClientCapacity": {
-			"id": "configuredClientCapacity",
-			"uml-id": "_CUJD4BicEeSh8KVgZCMyDw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"Provides a summarized view of the client capacity that is configurable for use. Note the cleint LTP association should provide all necessary detail hence this attribute is questionable."
-			]
-		},
-		"lpDirection": {
-			"id": "lpDirection",
-			"uml-id": "_GuuSYEDBEeWQeOKbNUpP9A",
-			"uml-type": "ownedAttribute",
-			"type": "_RWILYEDAEeWQeOKbNUpP9A",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"
-			]
-		},
-		"terminationState": {
-			"id": "terminationState",
-			"uml-id": "_p2YfoGeEEeWmgIwAIZlYKQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 4,
-			"is-read-only": false,
-			"description": [
-				"Indicates whether the layer is terminated and if so how."
-			]
-		},
-		"LogicalTerminationPoint": {
-			"id": "LogicalTerminationPoint",
-			"uml-id": "_eEpDMFX4EeOVGaP4lO41SQ",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."
-			]
-		},
-		"_serverLtpRefList": {
-			"id": "_serverLtpRefList",
-			"uml-id": "_D4N9IFX5EeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT)."
-			]
-		},
-		"_clientLtpRefList": {
-			"id": "_clientLtpRefList",
-			"uml-id": "_3Y4zAFYWEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"References contained LTPs representing client traffic of this LTP for normal cases of multiplexing."
-			]
-		},
-		"_lpList": {
-			"id": "_lpList",
-			"uml-id": "_lvFOQFYXEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_gROecFYXEeOVGaP4lO41SQ",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical)"
-			]
-		},
-		"_connectedLtpRef": {
-			"id": "_connectedLtpRef",
-			"uml-id": "_CHM6YFYYEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
-			"order-number": 4,
-			"is-read-only": false,
-			"description": [
-				"Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding. Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts."
-			]
-		},
-		"_peerLtpRef": {
-			"id": "_peerLtpRef",
-			"uml-id": "_TkuhMFYYEeOVGaP4lO41SQ",
-			"uml-type": "ownedAttribute",
-			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
-			"order-number": 5,
-			"is-read-only": false,
-			"description": [
-				"References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on the this LTP."
-			]
-		},
-		"physicalPortReference": {
-			"id": "physicalPortReference",
-			"uml-id": "_RLDi4BieEeSh8KVgZCMyDw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 6,
-			"is-read-only": false,
-			"description": [
-				"One or more text labels for the unmodelled physical port associated with the LTP. In many cases there is no associated physical port"
-			]
-		},
-		"_ltpRefList": {
-			"id": "_ltpRefList",
-			"uml-id": "_vq1NIBigEeSh8KVgZCMyDw",
-			"uml-type": "ownedAttribute",
-			"type": "_eEpDMFX4EeOVGaP4lO41SQ",
-			"order-number": 7,
-			"is-read-only": false,
-			"description": [
-				"References one or more LTPs in other views that represent this LTP. The referencing LTP is the rovider of capability."
-			]
-		},
-		"ltpDirection": {
-			"id": "ltpDirection",
-			"uml-id": "_S811EEDBEeWQeOKbNUpP9A",
-			"uml-type": "ownedAttribute",
-			"type": "_RWILYEDAEeWQeOKbNUpP9A",
-			"order-number": 8,
-			"is-read-only": false,
-			"description": [
-				"The overall directionality of the LTP. - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs. - A SINK LTP can only contain SINK LPs - A SOURCE LTP can only contain SOURCE LPs"
-			]
-		},
-		"FcSwitch": {
-			"id": "FcSwitch",
-			"uml-id": "_a97NQFYhEeOVGaP4lO41SQ",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The FcSwitch object class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC. If an FC exposes protection (having two FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs the functoion of the Protection Group in a traditional model. Associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection FcPorts (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) FcPorts where eith protection or working can feed one or more protected FcPort. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1).. May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."
-			]
-		},
-		"holdOffTime": {
-			"id": "holdOffTime",
-			"uml-id": "_oGqn6FLNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm."
-			]
-		},
-		"waitToRestoreTime": {
-			"id": "waitToRestoreTime",
-			"uml-id": "_oGqn5lLNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operaion (e.g a fault has cleared) before restoring traffic to that preferred FcPort."
-			]
-		},
-		"protType": {
-			"id": "protType",
-			"uml-id": "_oGqn6lLNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "_c3Hu8Gb3EeWrX_JIGzXlSg",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"Indicates the protection scheme that is used for the ProtectionGroup."
-			]
-		},
-		"operType": {
-			"id": "operType",
-			"uml-id": "_oGqn41LNEeO75dO39GbF8Q",
-			"uml-type": "ownedAttribute",
-			"type": "_oGqjf1LNEeO75dO39GbF8Q",
-			"order-number": 4,
-			"is-read-only": false,
-			"description": [
-				"This attribute whether or not the protection scheme is revertive or non-revertive."
-			]
-		},
-		"_selectedFcPortRefList": {
-			"id": "_selectedFcPortRefList",
-			"uml-id": "_2PdiYI8lEeOw_ste-s6RrA",
-			"uml-type": "ownedAttribute",
-			"type": "_b_lUAFYgEeOVGaP4lO41SQ",
-			"order-number": 5,
-			"is-read-only": false,
-			"description": [
-				"Indicates which points are selected by the switch."
-			]
-		},
-		"Name": {
-			"id": "Name",
-			"uml-id": "_BUcVEI2tEeO38ZmbECnvbg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Name: A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."
-			]
-		},
-		"nameList": {
-			"id": "nameList",
-			"uml-id": "_ajjMYI2uEeO38ZmbECnvbg",
-			"uml-type": "ownedAttribute",
-			"type": "_y7oy8I3tEeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1,
-			"description": [
-				"List of names."
-			]
-		},
-		"GlobalClass": {
-			"id": "GlobalClass",
-			"uml-id": "_iVJ1kI2wEeO38ZmbECnvbg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others). Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context. (consider in the context of an Object Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature)"
-			]
-		},
-		"LocalClass": {
-			"id": "LocalClass",
-			"uml-id": "_k5nWYI2wEeO38ZmbECnvbg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances.. Feature of an Entity: An inseparable, externally distinguishable part of an entity. The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable. (consider in the context of an Object Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity)"
-			]
-		},
-		"localIdList": {
-			"id": "localIdList",
-			"uml-id": "_RMJegI22EeO38ZmbECnvbg",
-			"uml-type": "ownedAttribute",
-			"type": "_y7oy8I3tEeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"An identifier that is unique in the context of some scope that is less than the global scope. (consider in the context of Identifier: A property of an entity/role with a value that is unique within an identifier space, where the identifier space is itself unique, and immutable. The identifier therefore represents the identity of the entity/role. An identifier carries no semantics with respect to the purpose of the entity.)"
-			]
-		},
-		"Label": {
-			"id": "Label",
-			"uml-id": "_u0HQoI2wEeO38ZmbECnvbg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"A property of an entity with a value that is not expected to be unique and is allowed to change. A label carries no semantics with respect to the purpose of the entity and has no effect on the entity behavior or state."
-			]
-		},
-		"labelList": {
-			"id": "labelList",
-			"uml-id": "_olrqYI2uEeO38ZmbECnvbg",
-			"uml-type": "ownedAttribute",
-			"type": "_y7oy8I3tEeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"List of labels."
-			]
-		},
-		"Extension": {
-			"id": "Extension",
-			"uml-id": "_bCi74I22EeO38ZmbECnvbg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Extension provides an opportunity to define properties not declared in the class that extend the class enabling a realization with simple ad-hoc extension of standard classes to be conformant."
-			]
-		},
-		"extensionList": {
-			"id": "extensionList",
-			"uml-id": "_uQqu4I28EeO38ZmbECnvbg",
-			"uml-type": "ownedAttribute",
-			"type": "_y7oy8I3tEeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"List of simple name-value extentions"
-			]
-		},
-		"UniversalIdAuthority": {
-			"id": "UniversalIdAuthority",
-			"uml-id": "_StA-4I23EeO38ZmbECnvbg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Represents the authority that controls the allocation of UUIDs."
-			]
-		},
-		"NameAndValueAuthority": {
-			"id": "NameAndValueAuthority",
-			"uml-id": "_ulDtsI3AEeO38ZmbECnvbg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Represents the authority that controls the legal valuse for the names and values of a name/value attribute."
-			]
-		},
-		"uuid": {
-			"id": "uuid",
-			"uml-id": "_U1tnkI31EeO38ZmbECnvbg",
-			"uml-type": "ownedAttribute",
-			"type": "_SU3Q4I30EeO38ZmbECnvbg",
-			"order-number": 0,
-			"is-read-only": false,
-			"description": [
-				"The UUID for the NameValueAuthority."
-			]
-		},
-		"ConditionalPackage": {
-			"id": "ConditionalPackage",
-			"uml-id": "_-ZWVQJP0EeOqfpp-ZJSmaA",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The base class for conditional packages."
-			]
-		},
-		"State_Pac": {
-			"id": "State_Pac",
-			"uml-id": "_RG6VILEtEeSZUdYfPSdgew",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Provides general state attributes."
-			]
-		},
-		"operationalState": {
-			"id": "operationalState",
-			"uml-id": "_dO6owLEtEeSZUdYfPSdgew",
-			"uml-type": "ownedAttribute",
-			"type": "_lNclkLEtEeSZUdYfPSdgew",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"The operational state is used to indicate whether or not the resource is installed and working"
-			]
-		},
-		"administrativeControl": {
-			"id": "administrativeControl",
-			"uml-id": "_7gqwALEtEeSZUdYfPSdgew",
-			"uml-type": "ownedAttribute",
-			"type": "_-xPeALEvEeSZUdYfPSdgew",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources. The value is the current control target. The actual administrativeState may or may not be at target."
-			]
-		},
-		"administrativeState": {
-			"id": "administrativeState",
-			"uml-id": "_AjGvILEuEeSZUdYfPSdgew",
-			"uml-type": "ownedAttribute",
-			"type": "_KSKOYLEuEeSZUdYfPSdgew",
-			"order-number": 3,
-			"is-read-only": true,
-			"description": [
-				"Shows whether or not the client has permission to use or has a prohibition against using the resource. The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources."
-			]
-		},
-		"lifecycleState": {
-			"id": "lifecycleState",
-			"uml-id": "_PzqZ0GgiEeWmgIwAIZlYKQ",
-			"uml-type": "ownedAttribute",
-			"type": "_YSsboGgiEeWmgIwAIZlYKQ",
-			"order-number": 4,
-			"is-read-only": false,
-			"description": [
-				"Used to track the planned deployment, allocation to clients and withdrawal of resources."
-			]
-		},
-		"LayerProtocolName": {
-			"id": "LayerProtocolName",
-			"uml-id": "_P-Hp8MD4EeSoNOrYOfaryg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"
-			]
-		},
-		"PortRole": {
-			"id": "PortRole",
-			"uml-id": "_DUU_sGZ_EeWrX_JIGzXlSg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"The role of a port in the context of the function of the forwarding entity that it bounds"
-			]
-		},
-		"ProtectionType": {
-			"id": "ProtectionType",
-			"uml-id": "_c3Hu8Gb3EeWrX_JIGzXlSg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Identifies the type of rotection of an FcSwitch."
-			]
-		},
-		"DateAndTime": {
-			"id": "DateAndTime",
-			"uml-id": "_oGqi1lLNEeO75dO39GbF8Q",
-			"uml-type": "uml:DataType",
-			"description": [
-				"This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
-			]
-		},
-		"NameAndValue": {
-			"id": "NameAndValue",
-			"uml-id": "_y7oy8I3tEeO38ZmbECnvbg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"A scoped name-value pair"
-			]
-		},
-		"valueName": {
-			"id": "valueName",
-			"uml-id": "_77PyQI3tEeO38ZmbECnvbg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1,
-			"description": [
-				"The name of the value. The value need not have a name."
-			]
-		},
-		"UniversalId": {
-			"id": "UniversalId",
-			"uml-id": "_SU3Q4I30EeO38ZmbECnvbg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure."
-			]
-		},
-		"value": {
-			"id": "value",
-			"uml-id": "_cbx2gI30EeO38ZmbECnvbg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"The specific value of the universal id"
-			]
-		},
-		"_oGqjf1LNEeO75dO39GbF8Q": {
-			"id": "OperType",
-			"uml-id": "_oGqjf1LNEeO75dO39GbF8Q",
-			"enum": [
-				"REVERTIVE",
-				"NON-REVERTIVE"
-			],
-			"is-read-only": false,
-			"description": [
-				"The operation type associated with the protection mechanism (either non-revertive or revertive)."
-			]
-		},
-		"_2WpC8EC7EeWxhL2B6Peg6A": {
-			"id": "PortDirection",
-			"uml-id": "_2WpC8EC7EeWxhL2B6Peg6A",
-			"enum": [
-				"BIDIRECTIONAL",
-				"INPUT",
-				"OUTPUT",
-				"UNIDENTIFIED_OR_UNKNOWN"
-			],
-			"is-read-only": false,
-			"description": [
-				"The orientation of flow at the Port of a Forwarding entity"
-			]
-		},
-		"_dV67AEC8EeWxhL2B6Peg6A": {
-			"id": "ForwardingDirection",
-			"uml-id": "_dV67AEC8EeWxhL2B6Peg6A",
-			"enum": [
-				"BIDIRECTIONAL",
-				"UNIDIRECTIONAL",
-				"UNDEFINED_OR_UNKNOWN"
-			],
-			"is-read-only": false,
-			"description": [
-				"The directionality of a Forwarding entity."
-			]
-		},
-		"_RWILYEDAEeWQeOKbNUpP9A": {
-			"id": "TerminationDirection",
-			"uml-id": "_RWILYEDAEeWQeOKbNUpP9A",
-			"enum": [
-				"BIDIRECTIONAL",
-				"SINK",
-				"SOURCE",
-				"UNDEFINED_OR_UNKNOWN"
-			],
-			"is-read-only": false,
-			"description": [
-				"The directionality of a termination entity"
-			]
-		},
-		"_T5GykEDNEeWQeOKbNUpP9A": {
-			"id": "ExtendedTerminationDirection",
-			"uml-id": "_T5GykEDNEeWQeOKbNUpP9A",
-			"enum": [
-				"CONTRA_DIRECTION_SINK",
-				"CONTRA_DIRECTION_SOURCE"
-			],
-			"is-read-only": false,
-			"description": [
-				"Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP??"
-			]
-		},
-		"_6anG8GeEEeWmgIwAIZlYKQ": {
-			"id": "TerminationState",
-			"uml-id": "_6anG8GeEEeWmgIwAIZlYKQ",
-			"enum": [
-				"LP_CAN_NEVER_TERMINATE",
-				"LT_NOT_TERMINATED",
-				"TERMINATED_SERVER_TO_CLIENT_FLOW",
-				"TERMINATED_CLIENT_TO_SERVER_FLOW",
-				"TERMINATED_BIDIRECTIONAL",
-				"LT_PERMENANTLY_TERMINATED",
-				"TERMINATION_STATE_UNKNOWN"
-			],
-			"is-read-only": false,
-			"description": [
-				"Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."
-			]
-		},
-		"_lNclkLEtEeSZUdYfPSdgew": {
-			"id": "OperationalState",
-			"uml-id": "_lNclkLEtEeSZUdYfPSdgew",
-			"enum": [
-				"DISABLED",
-				"ENABLED"
-			],
-			"is-read-only": false,
-			"description": [
-				"The possible values of the operationalState."
-			]
-		},
-		"_KSKOYLEuEeSZUdYfPSdgew": {
-			"id": "AdministrativeState",
-			"uml-id": "_KSKOYLEuEeSZUdYfPSdgew",
-			"enum": [
-				"LOCKED",
-				"UNLOCKED"
-			],
-			"is-read-only": false,
-			"description": [
-				"The possible values of the administrativeState."
-			]
-		},
-		"_-xPeALEvEeSZUdYfPSdgew": {
-			"id": "AdministrativeControl",
-			"uml-id": "_-xPeALEvEeSZUdYfPSdgew",
-			"enum": [
-				"UNLOCK",
-				"LOCK_PASSIVE",
-				"LOCK_ACTIVE",
-				"LOCK_IMMEDIATE"
-			],
-			"is-read-only": false,
-			"description": [
-				"The possible values of the current target administrative state."
-			]
-		},
-		"_McyhcGgeEeWmgIwAIZlYKQ": {
-			"id": "ExtendedAdminState",
-			"uml-id": "_McyhcGgeEeWmgIwAIZlYKQ",
-			"enum": [
-				"SHUTTING_DOWN_ACTIVE",
-				"SHUTTING_DOWN_PASSIVE"
-			],
-			"is-read-only": false,
-			"description": [
-				"Possible extentions to AdministrativeState"
-			]
-		},
-		"_YSsboGgiEeWmgIwAIZlYKQ": {
-			"id": "LifecycleState",
-			"uml-id": "_YSsboGgiEeWmgIwAIZlYKQ",
-			"enum": [
-				"PLANNED",
-				"POTENTIAL",
-				"INSTALLED",
-				"PENDING_REMOVAL"
-			],
-			"is-read-only": false,
-			"description": [
-				"The possible values of the lifecycleState."
-			]
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json
deleted file mode 100644
index 5c5daa7..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/G.874.1-ForMicrowave.json
+++ /dev/null
@@ -1,546 +0,0 @@
-{
-	"schema-information": {
-		"OTN_CurrentData": {
-			"id": "OTN_CurrentData",
-			"uml-id": "_OxyHAOGJEeGhaeLtr7IxXg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance."
-			]
-		},
-		"timestamp": {
-			"id": "timestamp",
-			"uml-id": "_bGwfoOGJEeGhaeLtr7IxXg",
-			"uml-type": "ownedAttribute",
-			"type": "_X-HZUNwbEeGoneTbGt8X0A",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"The timestamp associated with when the current data was collected."
-			]
-		},
-		"OTN_HistoryData": {
-			"id": "OTN_HistoryData",
-			"uml-id": "_dQ2mYOGOEeGhaeLtr7IxXg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited."
-			]
-		},
-		"«Q.822»-CurrentData": {
-			"id": "«Q.822»-CurrentData",
-			"uml-id": "_M8IDMceIEeSfd5vyUJsimg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"suspectIntervalFlag": {
-			"id": "suspectIntervalFlag",
-			"uml-id": "_M8IDNceIEeSfd5vyUJsimg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period."
-			]
-		},
-		"elapsedTime": {
-			"id": "elapsedTime",
-			"uml-id": "_M8IDOMeIEeSfd5vyUJsimg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": false
-		},
-		"«Q.822»-HistoryData": {
-			"id": "«Q.822»-HistoryData",
-			"uml-id": "_M8IDVMeIEeSfd5vyUJsimg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"historyDataId": {
-			"id": "historyDataId",
-			"uml-id": "_M8IDWMeIEeSfd5vyUJsimg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1
-		},
-		"periodEndTime": {
-			"id": "periodEndTime",
-			"uml-id": "_M8IDWceIEeSfd5vyUJsimg",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
-			"order-number": 2,
-			"is-read-only": false
-		},
-		"«X.739»-Scanner": {
-			"id": "«X.739»-Scanner",
-			"uml-id": "_7wb90ceIEeSfd5vyUJsimg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"scannerId": {
-			"id": "scannerId",
-			"uml-id": "_7wb91ceIEeSfd5vyUJsimg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1
-		},
-		"granularityPeriod": {
-			"id": "granularityPeriod",
-			"uml-id": "_M8IDWseIEeSfd5vyUJsimg",
-			"uml-type": "ownedAttribute",
-			"type": "_Y6WUEEamEeabNPX3o7rjtw",
-			"order-number": 2,
-			"is-read-only": false
-		},
-		"administrativeState": {
-			"id": "administrativeState",
-			"uml-id": "_7wb92seIEeSfd5vyUJsimg",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_KSKOYLEuEeSZUdYfPSdgew",
-			"order-number": 3,
-			"is-read-only": false
-		},
-		"«X.721»-Top": {
-			"id": "«X.721»-Top",
-			"uml-id": "_BMJ0EceTEeS6-cawxfHpnA",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types."
-			]
-		},
-		"objectClass": {
-			"id": "objectClass",
-			"uml-id": "_BMJ0FceTEeS6-cawxfHpnA",
-			"uml-type": "ownedAttribute",
-			"type": "_ltGzFMeUEeS6-cawxfHpnA",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"ObjectClass ::= CHOICE{ globalForm [0] OBJECT IDENTIFIER, localForm [1] INTEGER}"
-			]
-		},
-		"nameBinding": {
-			"id": "nameBinding",
-			"uml-id": "_BMJ0F8eTEeS6-cawxfHpnA",
-			"uml-type": "ownedAttribute",
-			"type": "_ltGzFMeUEeS6-cawxfHpnA",
-			"order-number": 2,
-			"is-read-only": false
-		},
-		"DateAndTime": {
-			"id": "DateAndTime",
-			"uml-id": "_X-HZUNwbEeGoneTbGt8X0A",
-			"uml-type": "uml:DataType",
-			"description": [
-				"This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
-			]
-		},
-		"_5G6YQOo-EeCjNNLZCc6mew": {
-			"id": "Directionality",
-			"uml-id": "_5G6YQOo-EeCjNNLZCc6mew",
-			"enum": [
-				"SINK",
-				"SOURCE",
-				"BIDIRECTIONAL"
-			],
-			"is-read-only": false,
-			"description": [
-				"The enumeration with the options for directionality of the termination point."
-			]
-		},
-		"_rU8aMOpfEeCjNNLZCc6mew": {
-			"id": "GccAccess",
-			"uml-id": "_rU8aMOpfEeCjNNLZCc6mew",
-			"enum": [
-				"GCC1",
-				"GCC2",
-				"GCC1_AND_GCC2"
-			],
-			"is-read-only": false,
-			"description": [
-				"This enumeration indicates the GCC access represented by the entity."
-			]
-		},
-		"_W7-1oOpiEeCjNNLZCc6mew": {
-			"id": "OperationalState",
-			"uml-id": "_W7-1oOpiEeCjNNLZCc6mew",
-			"enum": [
-				"ENABLED",
-				"DISABLED"
-			],
-			"is-read-only": false,
-			"description": [
-				"The list of valid operational states for the connection."
-			]
-		},
-		"_g0zCsOsDEeCjNNLZCc6mew": {
-			"id": "OperType",
-			"uml-id": "_g0zCsOsDEeCjNNLZCc6mew",
-			"enum": [
-				"REVERTIVE",
-				"NON-REVERTIVE"
-			],
-			"is-read-only": [
-				"The operation type associated with the protection mechanism (either non-revertive or revertive)."
-			]
-		},
-		"_Jl09gOsKEeCjNNLZCc6mew": {
-			"id": "ExtCmdOperation",
-			"uml-id": "_Jl09gOsKEeCjNNLZCc6mew",
-			"enum": [
-				"EXERCISE",
-				"MANUAL_SWITCH",
-				"FORCED_SWITCH",
-				"LOCKOUT",
-				"RELEASE_OF_MANUAL_SWITCH",
-				"RELEASE_OF_FORCED_SWITCH",
-				"RELEASE_OF_LOCKOUT"
-			],
-			"is-read-only": false,
-			"description": [
-				"This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations."
-			]
-		},
-		"_bwxBQOw5EeCjNNLZCc6mew": {
-			"id": "AdministrativeState",
-			"uml-id": "_bwxBQOw5EeCjNNLZCc6mew",
-			"enum": [
-				"UNLOCKED",
-				"LOCKED",
-				"SHUTTING_DOWN"
-			],
-			"is-read-only": false,
-			"description": [
-				"For more information on Administrative State, See ITU-T Recs. X.731 and M.3100."
-			]
-		},
-		"_ChQ5oOw-EeCjNNLZCc6mew": {
-			"id": "OCTk_NimKBitRate",
-			"uml-id": "_ChQ5oOw-EeCjNNLZCc6mew",
-			"enum": [
-				"2.5_G",
-				"10_G",
-				"40_G",
-				"100_G"
-			],
-			"is-read-only": false,
-			"description": [
-				"Provides an enumeration with the meaning of each  k  value."
-			]
-		},
-		"_ZBtyUOw_EeCjNNLZCc6mew": {
-			"id": "TimDetMo",
-			"uml-id": "_ZBtyUOw_EeCjNNLZCc6mew",
-			"enum": [
-				"DAPI",
-				"SAPI",
-				"BOTH"
-			],
-			"is-read-only": false,
-			"description": [
-				"List of modes for trace identifier mismatch detection."
-			]
-		},
-		"_HF864OxAEeCjNNLZCc6mew": {
-			"id": "OCTk_NimProblemList",
-			"uml-id": "_HF864OxAEeCjNNLZCc6mew",
-			"enum": [
-				"LOS_P",
-				"OCI",
-				"SSF_P",
-				"SSF_O",
-				"SSF",
-				"TIM",
-				"DEG",
-				"BDI"
-			],
-			"is-read-only": false,
-			"description": [
-				"The valid list of problems for the entity."
-			]
-		},
-		"_WPoNoO3eEeCjNNLZCc6mew": {
-			"id": "TcmMonitoring",
-			"uml-id": "_WPoNoO3eEeCjNNLZCc6mew",
-			"enum": [
-				"INTRUSIVE",
-				"NON-INTRUSIVE"
-			],
-			"is-read-only": false,
-			"description": [
-				"Monitoring types for the tandem connection monitoring function."
-			]
-		},
-		"_OI-7wO6QEeCjNNLZCc6mew": {
-			"id": "TcmMode",
-			"uml-id": "_OI-7wO6QEeCjNNLZCc6mew",
-			"enum": [
-				"OPERATIONAL",
-				"TRANSPARENT",
-				"MONITOR"
-			],
-			"is-read-only": false,
-			"description": [
-				"List of value modes for the sink side of the tandem connection monitoring function."
-			]
-		},
-		"_ZnM8cO6ZEeCjNNLZCc6mew": {
-			"id": "OPSMnk_TtpKBitRate",
-			"uml-id": "_ZnM8cO6ZEeCjNNLZCc6mew",
-			"enum": [
-				"40_G",
-				"100_G"
-			],
-			"is-read-only": false,
-			"description": [
-				"Provides an enumeration with the meaning of each  k  value."
-			]
-		},
-		"_pV-F8O6aEeCjNNLZCc6mew": {
-			"id": "OPSMnk_TtpProblemList",
-			"uml-id": "_pV-F8O6aEeCjNNLZCc6mew",
-			"enum": [
-				"LOS",
-				"LOL"
-			],
-			"is-read-only": false,
-			"description": [
-				"The valid list of problems for the entity."
-			]
-		},
-		"_QW1SYO6bEeCjNNLZCc6mew": {
-			"id": "OPSn_TtpProblemList",
-			"uml-id": "_QW1SYO6bEeCjNNLZCc6mew",
-			"enum": [
-				"LOS"
-			],
-			"is-read-only": false,
-			"description": [
-				"The valid list of problems for the entity."
-			]
-		},
-		"_o-oukO6bEeCjNNLZCc6mew": {
-			"id": "OTM-n_KBitRates",
-			"uml-id": "_o-oukO6bEeCjNNLZCc6mew",
-			"enum": [
-				"2.5_G",
-				"10_G",
-				"40_G",
-				"2.5_10_G",
-				"10_40_G",
-				"2.5_10_40_G"
-			],
-			"is-read-only": false,
-			"description": [
-				"Provides an enumeration with the meaning of each  k  value."
-			]
-		},
-		"_KRCG4O6dEeCjNNLZCc6mew": {
-			"id": "DomainInterface",
-			"uml-id": "_KRCG4O6dEeCjNNLZCc6mew",
-			"enum": [
-				"INTRA_DOMAIN",
-				"INTER_DOMAIN"
-			],
-			"is-read-only": false,
-			"description": [
-				"This enumeration provides the options for the interface associated with OTMn."
-			]
-		},
-		"_EOPyIO6qEeCjNNLZCc6mew": {
-			"id": "OTM-n_OpticalReach",
-			"uml-id": "_EOPyIO6qEeCjNNLZCc6mew",
-			"enum": [
-				"INTRA_OFFICE",
-				"SHORTHAUL",
-				"LONGHAUL"
-			],
-			"is-read-only": false,
-			"description": [
-				"The valid options for reach of the optical cable."
-			]
-		},
-		"_6Bt3QO6qEeCjNNLZCc6mew": {
-			"id": "AprStatus",
-			"uml-id": "_6Bt3QO6qEeCjNNLZCc6mew",
-			"enum": [
-				"ON",
-				"OFF"
-			],
-			"is-read-only": false,
-			"description": [
-				"The enumeration of the options for the Automatic Power Reduction Status."
-			]
-		},
-		"_FLzNQO6vEeCjNNLZCc6mew": {
-			"id": "OTSn_TtpProblemList",
-			"uml-id": "_FLzNQO6vEeCjNNLZCc6mew",
-			"enum": [
-				"BDI_P",
-				"BDI_O",
-				"BDI",
-				"TIM",
-				"LOS_P",
-				"LOS_O",
-				"LOS"
-			],
-			"is-read-only": false,
-			"description": [
-				"The valid list of problems for the entity."
-			]
-		},
-		"_NAElYO6wEeCjNNLZCc6mew": {
-			"id": "OTUk_CtpAdaptation",
-			"uml-id": "_NAElYO6wEeCjNNLZCc6mew",
-			"enum": [
-				"REGULAR",
-				"NONE",
-				"VENDOR_SPECIFIC",
-				"FUNCTIONALLY_STANDARDIZED"
-			],
-			"is-read-only": false,
-			"description": [
-				"The adaptation options for OTUk_ConnectionTermationPoints."
-			]
-		},
-		"_wgRHcO6wEeCjNNLZCc6mew": {
-			"id": "OTUk_CtpKBitRate",
-			"uml-id": "_wgRHcO6wEeCjNNLZCc6mew",
-			"enum": [
-				"2.5_G",
-				"10_G",
-				"40_G",
-				"100_G"
-			],
-			"is-read-only": false,
-			"description": [
-				"Provides an enumeration with the meaning of each  k  value."
-			]
-		},
-		"_6Y_gEO6wEeCjNNLZCc6mew": {
-			"id": "OTUk_CtpProblemList",
-			"uml-id": "_6Y_gEO6wEeCjNNLZCc6mew",
-			"enum": [
-				"LOF",
-				"AIS",
-				"LOM"
-			],
-			"is-read-only": false,
-			"description": [
-				"The valid list of problems for the entity."
-			]
-		},
-		"_xHNWMO6xEeCjNNLZCc6mew": {
-			"id": "OTUk_TtpProblemList",
-			"uml-id": "_xHNWMO6xEeCjNNLZCc6mew",
-			"enum": [
-				"TIM",
-				"DEG",
-				"BDI",
-				"SSF"
-			],
-			"is-read-only": false,
-			"description": [
-				"The valid list of problems for the entity."
-			]
-		},
-		"_KRQ3MK8KEeG_zYhfU3oMYg": {
-			"id": "MonitoredDirection",
-			"uml-id": "_KRQ3MK8KEeG_zYhfU3oMYg",
-			"enum": [
-				"SINK",
-				"SOURCE"
-			],
-			"is-read-only": false,
-			"description": [
-				"The enumeration with the options for directionality for nonintrusive monitoring."
-			]
-		},
-		"_qBme4LuYEeGeqZLpdvU3BA": {
-			"id": "DegThrType",
-			"uml-id": "_qBme4LuYEeGeqZLpdvU3BA",
-			"enum": [
-				"PERCENTAGE",
-				"NUMBER_ERRORED_BLOCKS"
-			],
-			"is-read-only": false,
-			"description": [
-				"<p>The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.</p>"
-			]
-		},
-		"_Parz8NwAEeGoneTbGt8X0A": {
-			"id": "LinkType",
-			"uml-id": "_Parz8NwAEeGoneTbGt8X0A",
-			"enum": [
-				"DWDM",
-				"CWDM",
-				"NO_WDM"
-			],
-			"is-read-only": false
-		},
-		"_V1TuANwAEeGoneTbGt8X0A": {
-			"id": "ApplicationIdentifierType",
-			"uml-id": "_V1TuANwAEeGoneTbGt8X0A",
-			"enum": [
-				"STANDARD",
-				"PROPRIETARY"
-			],
-			"is-read-only": false
-		},
-		"_yt7S4PzgEeG3u-aQKIiCtg": {
-			"id": "ApsChannel",
-			"uml-id": "_yt7S4PzgEeG3u-aQKIiCtg",
-			"enum": [
-				"PATH",
-				"TCM1",
-				"TCM2",
-				"TCM3",
-				"TCM4",
-				"TCM5",
-				"TCM6",
-				"SECTION"
-			],
-			"is-read-only": false
-		},
-		"_LG3yQOVVEeKyU85eduW_rA": {
-			"id": "DelayMeasurementRole",
-			"uml-id": "_LG3yQOVVEeKyU85eduW_rA",
-			"enum": [
-				"CONTROLLER",
-				"RESPONDER"
-			],
-			"is-read-only": false
-		},
-		"_7fy9sJSCEeOLxKCUIYtzCg": {
-			"id": "ResizeOperationType",
-			"uml-id": "_7fy9sJSCEeOLxKCUIYtzCg",
-			"enum": [
-				"INCREASE_BW",
-				"DECREASE_BW"
-			],
-			"is-read-only": false
-		},
-		"_Y6WUEEamEeabNPX3o7rjtw": {
-			"id": "GranularityPeriodType",
-			"uml-id": "_Y6WUEEamEeabNPX3o7rjtw",
-			"enum": [
-				"UNKNOWN",
-				"PERIOD_15MIN",
-				"PERIOD_24HOURS"
-			],
-			"is-read-only": false,
-			"description": [
-				"The enumeration with the options for granularity period of the performance data."
-			]
-		}
-	}
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json
deleted file mode 100755
index 2aeb80f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-AirInterface.yin.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
-	"module": {
-		"name": "MicrowaveModel-ObjectClasses-AirInterface",
-		"MicrowaveModel-ObjectClasses-AirInterface": {
-			"MW_AirInterface_Pac": {
-				"type": "list",
-				"key": "layerProtocol",
-				"airInterfaceCapability": {
-					"name": "airInterfaceCapability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"airInterfaceConfiguration": {
-					"name": "airInterfaceConfiguration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"airInterfaceStatus": {
-					"name": "airInterfaceStatus",
-					"local-name": "status",
-					"type": "container"
-				},
-				"airInterfaceCurrentProblems": {
-					"name": "airInterfaceCurrentProblems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"airInterfaceCurrentPerformance": {
-					"name": "airInterfaceCurrentPerformance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"airInterfaceHistoricalPerformances": {
-					"name": "airInterfaceHistoricalPerformances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"CoChannelGroup": {
-				"type": "list",
-				"key": "coChannelGroupId"
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json
deleted file mode 100755
index 2af4d50..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-EthernetContainer.yin.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-	"module": {
-		"name": "MicrowaveModel-ObjectClasses-EthernetContainer",
-		"MicrowaveModel-ObjectClasses-EthernetContainer": {
-			"MW_EthernetContainer_Pac": {
-				"type": "list",
-				"key": "layerProtocol",
-				"ethernetContainerCapability": {
-					"name": "ethernetContainerCapability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"ethernetContainerConfiguration": {
-					"name": "ethernetContainerConfiguration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"ethernetContainerStatus": {
-					"name": "ethernetContainerStatus",
-					"local-name": "status",
-					"type": "container"
-				},
-				"ethernetContainerCurrentProblems": {
-					"name": "ethernetContainerCurrentProblems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"ethernetContainerCurrentPerformance": {
-					"name": "ethernetContainerCurrentPerformance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"ethernetContainerHistoricalPerformances": {
-					"name": "ethernetContainerHistoricalPerformances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json
deleted file mode 100755
index 20726f8..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel-ObjectClasses-PureEthernetStructure.yin.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-	"module": {
-		"name": "MicrowaveModel-ObjectClasses-PureEthernetStructure",
-		"MicrowaveModel-ObjectClasses-PureEthernetStructure": {
-			"MW_PureEthernetStructure_Pac": {
-				"type": "list",
-				"key": "layerProtocol",
-				"pureEthernetStructureCapability": {
-					"name": "pureEthernetStructureCapability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"pureEthernetStructureConfiguration": {
-					"name": "pureEthernetStructureConfiguration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"pureEthernetStructureStatus": {
-					"name": "pureEthernetStructureStatus",
-					"local-name": "status",
-					"type": "container"
-				},
-				"pureEthernetStructureCurrentProblems": {
-					"name": "pureEthernetStructureCurrentProblems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"pureEthernetStructureCurrentPerformance": {
-					"name": "pureEthernetStructureCurrentPerformance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"pureEthernetStructureHistoricalPerformances": {
-					"name": "pureEthernetStructureHistoricalPerformances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json
deleted file mode 100644
index 34d0503..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/MicrowaveModel.json
+++ /dev/null
@@ -1,2940 +0,0 @@
-{
-	"schema-information": {
-		"MW_AirInterface_Pac": {
-			"id": "MW_AirInterface_Pac",
-			"uml-id": "__1kQ0Hf4EeW-M8kopGJqEA",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"LTP(MWPS-TTP)"
-			]
-		},
-		"airInterfaceCapability": {
-			"id": "airInterfaceCapability",
-			"uml-id": "_Dr1uMIekEeWaZYk7gpuOtw",
-			"uml-type": "ownedAttribute",
-			"type": "_-LlKoIejEeWaZYk7gpuOtw",
-			"order-number": 2,
-			"is-read-only": true
-		},
-		"airInterfaceConfiguration": {
-			"id": "airInterfaceConfiguration",
-			"uml-id": "_AEmSAIe1EeWnUdmvl3PBkw",
-			"uml-type": "ownedAttribute",
-			"type": "_KOcsUIe0EeWnUdmvl3PBkw",
-			"order-number": 3,
-			"is-read-only": false
-		},
-		"airInterfaceStatus": {
-			"id": "airInterfaceStatus",
-			"uml-id": "_Vp35cnmgEeWsUsDOj_Trdg",
-			"uml-type": "ownedAttribute",
-			"type": "_iCTioHmIEeWRAfnL3fvovg",
-			"order-number": 4,
-			"is-read-only": true
-		},
-		"airInterfaceCurrentProblems": {
-			"id": "airInterfaceCurrentProblems",
-			"uml-id": "_ZeRYInmgEeWsUsDOj_Trdg",
-			"uml-type": "ownedAttribute",
-			"type": "_UF8VcHmIEeWRAfnL3fvovg",
-			"order-number": 5,
-			"is-read-only": true
-		},
-		"airInterfaceCurrentPerformance": {
-			"id": "airInterfaceCurrentPerformance",
-			"uml-id": "_65_4M6S6EeWyu_jasKgNwA",
-			"uml-type": "ownedAttribute",
-			"type": "_CX-iIKS6EeWyu_jasKgNwA",
-			"order-number": 6,
-			"is-read-only": true
-		},
-		"airInterfaceHistoricalPerformances": {
-			"id": "airInterfaceHistoricalPerformances",
-			"uml-id": "__8icYJHfEeWKxoYCXp1XkQ",
-			"uml-type": "ownedAttribute",
-			"type": "_fChNMHmHEeWRAfnL3fvovg",
-			"order-number": 7,
-			"is-read-only": true
-		},
-		"AirInterfaceCapability": {
-			"id": "AirInterfaceCapability",
-			"uml-id": "_-LlKoIejEeWaZYk7gpuOtw",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."
-			]
-		},
-		"typeOfEquipment": {
-			"id": "typeOfEquipment",
-			"uml-id": "_gK4jMJUBEeWIaZzoaYJ6_A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."
-			]
-		},
-		"txFrequencyMin": {
-			"id": "txFrequencyMin",
-			"uml-id": "_90Xe0HfcEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Value of the minimum transmit frequency tunable at the air interface."
-			]
-		},
-		"txFrequencyMax": {
-			"id": "txFrequencyMax",
-			"uml-id": "_-1ztsHfcEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Value of the maximum transmit frequency tunable at the air interface."
-			]
-		},
-		"rxFrequencyMin": {
-			"id": "rxFrequencyMin",
-			"uml-id": "_BLqx0HfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 4,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Value of the minimum receive frequency tunable at the air interface."
-			]
-		},
-		"rxFrequencyMax": {
-			"id": "rxFrequencyMax",
-			"uml-id": "_CSBV4HfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 5,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Value of the maximum receive frequency tunable at the air interface."
-			]
-		},
-		"adaptiveModulationIsAvail": {
-			"id": "adaptiveModulationIsAvail",
-			"uml-id": "_ClmuUHffEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 6,
-			"is-read-only": true,
-			"description": [
-				"In case the device is capable of adaptive modulation, this field shall contain a 'true'."
-			]
-		},
-		"mimoIsAvail": {
-			"id": "mimoIsAvail",
-			"uml-id": "_qXBrkH2eEeWaPP5xsIT8pQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 7,
-			"is-read-only": true,
-			"description": [
-				"In case the device is capable of MIMO, this field shall contain a 'true'."
-			]
-		},
-		"mimoChannels": {
-			"id": "mimoChannels",
-			"uml-id": "_qysT4H2eEeWaPP5xsIT8pQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 8,
-			"is-read-only": true,
-			"unit": "channels",
-			"description": [
-				"Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."
-			]
-		},
-		"alicIsAvail": {
-			"id": "alicIsAvail",
-			"uml-id": "_a3HgMIL9EeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 9,
-			"is-read-only": true,
-			"description": [
-				"In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."
-			]
-		},
-		"atpcIsAvail": {
-			"id": "atpcIsAvail",
-			"uml-id": "_iRRtgHftEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 10,
-			"is-read-only": true,
-			"description": [
-				"In case the microwave radio is capable of ATPC, this field shall contain a 'true'."
-			]
-		},
-		"atpcRange": {
-			"id": "atpcRange",
-			"uml-id": "_ErwNYHfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 11,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Extent of the ATPC range."
-			]
-		},
-		"loopBackIsAvail": {
-			"id": "loopBackIsAvail",
-			"uml-id": "_UxjEkIMHEeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 13,
-			"is-read-only": true,
-			"description": [
-				"In case the radio is capable of looping back header information of the air interface, this field shall contain a 'true'."
-			]
-		},
-		"maintenanceTimerRange": {
-			"id": "maintenanceTimerRange",
-			"uml-id": "_I1FYsMWZEeW3xsRKtpCLuA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 14,
-			"is-read-only": true,
-			"unit": "s",
-			"description": [
-				"Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."
-			]
-		},
-		"supportedChannelPlanList": {
-			"id": "supportedChannelPlanList",
-			"uml-id": "_zUKUgPXVEeW9zIqh2WHHww",
-			"uml-type": "ownedAttribute",
-			"type": "_oQf6IPXSEeW9zIqh2WHHww",
-			"order-number": 16,
-			"is-read-only": true,
-			"description": [
-				"List of channel spacing that are supported by the device."
-			]
-		},
-		"AirInterfaceConfiguration": {
-			"id": "AirInterfaceConfiguration",
-			"uml-id": "_KOcsUIe0EeWnUdmvl3PBkw",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Configuration of the radio link."
-			]
-		},
-		"airInterfaceName": {
-			"id": "airInterfaceName",
-			"uml-id": "_XMDggIL5EeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"Operator specific microwave link ID (often used for coding area, type of element and sequential number)."
-			]
-		},
-		"radioSignalID": {
-			"id": "radioSignalID",
-			"uml-id": "_QY9KoHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"The value zero might be used to make the microwave to disable the link ID check."
-			]
-		},
-		"txFrequency": {
-			"id": "txFrequency",
-			"uml-id": "_UNE8gHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 3,
-			"is-read-only": false,
-			"unit": "kHz",
-			"description": [
-				"Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."
-			]
-		},
-		"rxFrequency": {
-			"id": "rxFrequency",
-			"uml-id": "_W7ayEHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 4,
-			"is-read-only": false,
-			"unit": "kHz",
-			"description": [
-				"Center frequency of the receive channel."
-			]
-		},
-		"txChannelBandwidth": {
-			"id": "txChannelBandwidth",
-			"uml-id": "_bhAdIHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 5,
-			"is-read-only": false,
-			"unit": "kHz",
-			"description": [
-				"Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
-			]
-		},
-		"rxChannelBandwidth": {
-			"id": "rxChannelBandwidth",
-			"uml-id": "_eKIbgHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 6,
-			"is-read-only": false,
-			"unit": "kHz",
-			"description": [
-				"Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
-			]
-		},
-		"polarization": {
-			"id": "polarization",
-			"uml-id": "_bVebEI99EeWFluv9KLLl5A",
-			"uml-type": "ownedAttribute",
-			"type": "_e85NsI99EeWFluv9KLLl5A",
-			"order-number": 7,
-			"is-read-only": false,
-			"description": [
-				"Allows documenting the polarization of the air interface."
-			]
-		},
-		"powerIsOn": {
-			"id": "powerIsOn",
-			"uml-id": "_p4eR8Hf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 8,
-			"is-read-only": false,
-			"description": [
-				"Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."
-			]
-		},
-		"transmitterIsOn": {
-			"id": "transmitterIsOn",
-			"uml-id": "_uYVvgHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 9,
-			"is-read-only": false,
-			"description": [
-				"Activation of the transmitter inside the radio shall be expressed as a 'true'."
-			]
-		},
-		"receiverIsOn": {
-			"id": "receiverIsOn",
-			"uml-id": "_q_XcwEgnEeathrAE0htMiA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 10,
-			"is-read-only": false,
-			"description": [
-				"Maintenance Feature"
-			]
-		},
-		"txPower": {
-			"id": "txPower",
-			"uml-id": "_ZEXmIHf6EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 11,
-			"is-read-only": false,
-			"unit": "dBm",
-			"description": [
-				"Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."
-			]
-		},
-		"adaptiveModulationIsOn": {
-			"id": "adaptiveModulationIsOn",
-			"uml-id": "_0jhfYHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 12,
-			"is-read-only": false,
-			"description": [
-				"Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."
-			]
-		},
-		"modulationMin": {
-			"id": "modulationMin",
-			"uml-id": "_dM_BUHf6EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 13,
-			"is-read-only": false,
-			"unit": "symbols",
-			"description": [
-				"Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
-			]
-		},
-		"modulationMax": {
-			"id": "modulationMax",
-			"uml-id": "_gAHQQHf6EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 14,
-			"is-read-only": false,
-			"unit": "symbols",
-			"description": [
-				"Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
-			]
-		},
-		"xpicIsOn": {
-			"id": "xpicIsOn",
-			"uml-id": "_4hi0IHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 15,
-			"is-read-only": false,
-			"description": [
-				"Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."
-			]
-		},
-		"mimoIsOn": {
-			"id": "mimoIsOn",
-			"uml-id": "_7t4fIH2dEeWaPP5xsIT8pQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 16,
-			"is-read-only": false,
-			"description": [
-				"Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."
-			]
-		},
-		"alicIsOn": {
-			"id": "alicIsOn",
-			"uml-id": "_FmWHMHf6EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 17,
-			"is-read-only": false,
-			"description": [
-				"Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."
-			]
-		},
-		"atpcIsOn": {
-			"id": "atpcIsOn",
-			"uml-id": "_9Hz0oHf5EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 18,
-			"is-read-only": false,
-			"description": [
-				"ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."
-			]
-		},
-		"atpcThreshUpper": {
-			"id": "atpcThreshUpper",
-			"uml-id": "_pR7yMHgAEeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 19,
-			"is-read-only": false,
-			"unit": "dBm",
-			"description": [
-				"If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."
-			]
-		},
-		"atpcThreshLower": {
-			"id": "atpcThreshLower",
-			"uml-id": "_sIlPMHgAEeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 20,
-			"is-read-only": false,
-			"unit": "dBm",
-			"description": [
-				"If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."
-			]
-		},
-		"autoFreqSelectIsOn": {
-			"id": "autoFreqSelectIsOn",
-			"uml-id": "_dG5VAIL-EeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 21,
-			"is-read-only": false,
-			"description": [
-				"Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."
-			]
-		},
-		"autoFreqSelectRange": {
-			"id": "autoFreqSelectRange",
-			"uml-id": "_yH9XMIMCEeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 22,
-			"is-read-only": false,
-			"unit": "channels",
-			"description": [
-				"Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."
-			]
-		},
-		"modulationIsOn": {
-			"id": "modulationIsOn",
-			"uml-id": "_kxXzwIMGEeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 23,
-			"is-read-only": false,
-			"description": [
-				"Maintenance Feature"
-			]
-		},
-		"loopBackIsOn": {
-			"id": "loopBackIsOn",
-			"uml-id": "_PyRvsHf6EeW-M8kopGJqEA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 26,
-			"is-read-only": false,
-			"description": [
-				"Maintenance Feature"
-			]
-		},
-		"maintenanceTimer": {
-			"id": "maintenanceTimer",
-			"uml-id": "_7-oTwCd5EeaJA6AVLNrv_w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 27,
-			"is-read-only": false,
-			"unit": "s",
-			"description": [
-				"Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."
-			]
-		},
-		"AirInterfaceStatus": {
-			"id": "AirInterfaceStatus",
-			"uml-id": "_iCTioHmIEeWRAfnL3fvovg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Measurements of current values on the air interface and operational status of the device."
-			]
-		},
-		"txFrequencyCur": {
-			"id": "txFrequencyCur",
-			"uml-id": "_YZq7gK4tEeWXs6m-9H3KvA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 1,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Center frequency of the currently operated transmit channel."
-			]
-		},
-		"rxFrequencyCur": {
-			"id": "rxFrequencyCur",
-			"uml-id": "_33IdUIL-EeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Center frequency of the currently operated receive channel."
-			]
-		},
-		"txLevelCur": {
-			"id": "txLevelCur",
-			"uml-id": "_L3B5wHgIEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Current transmit level."
-			]
-		},
-		"rxLevelCur": {
-			"id": "rxLevelCur",
-			"uml-id": "_OHN9AHizEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 4,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Current receive level."
-			]
-		},
-		"modulationCur": {
-			"id": "modulationCur",
-			"uml-id": "_RBMa0HizEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 5,
-			"is-read-only": true,
-			"unit": "symbols",
-			"description": [
-				"Currently operated modulation on transmit path. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
-			]
-		},
-		"informationRateCur": {
-			"id": "informationRateCur",
-			"uml-id": "_UYyBsHizEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 6,
-			"is-read-only": true,
-			"unit": "%",
-			"description": [
-				"Information rate of the currently operated coding scheme."
-			]
-		},
-		"xpdCur": {
-			"id": "xpdCur",
-			"uml-id": "_Z7NvgHizEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 8,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Currently measured cross polarization discrimination."
-			]
-		},
-		"rfTempCur": {
-			"id": "rfTempCur",
-			"uml-id": "_d6wuQHizEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 9,
-			"is-read-only": true,
-			"unit": "Celsius",
-			"description": [
-				"Current temperature (in degree Celsius) of the radio module inside the outdoor unit."
-			]
-		},
-		"radioPowerIsUp": {
-			"id": "radioPowerIsUp",
-			"uml-id": "_sFKXcHizEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 11,
-			"is-read-only": true,
-			"description": [
-				"If the radio unit has power and is switched on, this shall be expressed as a 'true'."
-			]
-		},
-		"linkIsUp": {
-			"id": "linkIsUp",
-			"uml-id": "_5JBPUHizEeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 12,
-			"is-read-only": true,
-			"description": [
-				"If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."
-			]
-		},
-		"xpicIsUp": {
-			"id": "xpicIsUp",
-			"uml-id": "_ESRbsHi0EeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 13,
-			"is-read-only": true,
-			"description": [
-				"If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."
-			]
-		},
-		"mimoIsUp": {
-			"id": "mimoIsUp",
-			"uml-id": "_DVaQwIL6EeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 14,
-			"is-read-only": true,
-			"description": [
-				"If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."
-			]
-		},
-		"alicIsUp": {
-			"id": "alicIsUp",
-			"uml-id": "_Hte-UHi0EeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 15,
-			"is-read-only": true,
-			"description": [
-				"If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."
-			]
-		},
-		"atpcIsUp": {
-			"id": "atpcIsUp",
-			"uml-id": "_VimCgMjNEeWYRsWW_rqpgw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 16,
-			"is-read-only": true,
-			"description": [
-				"If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."
-			]
-		},
-		"autoFreqSelectIsUp": {
-			"id": "autoFreqSelectIsUp",
-			"uml-id": "_-PXKsIL-EeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 17,
-			"is-read-only": true,
-			"description": [
-				"If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."
-			]
-		},
-		"loopBackIsUp": {
-			"id": "loopBackIsUp",
-			"uml-id": "_S9prAHi0EeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 18,
-			"is-read-only": true,
-			"description": [
-				"If loop back of the air interface header is currently active (not just configured), this shall be expressed as a 'true'."
-			]
-		},
-		"localEndPointId": {
-			"id": "localEndPointId",
-			"uml-id": "_pEsgcFQHEeaCXY7nSBqs6w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 19,
-			"is-read-only": true,
-			"description": [
-				"The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."
-			]
-		},
-		"remoteEndPointId": {
-			"id": "remoteEndPointId",
-			"uml-id": "_r3cU4FQHEeaCXY7nSBqs6w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 20,
-			"is-read-only": true,
-			"description": [
-				"The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."
-			]
-		},
-		"AirInterfaceCurrentProblems": {
-			"id": "AirInterfaceCurrentProblems",
-			"uml-id": "_UF8VcHmIEeWRAfnL3fvovg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"AirInterfaceCurrentPerformance": {
-			"id": "AirInterfaceCurrentPerformance",
-			"uml-id": "_CX-iIKS6EeWyu_jasKgNwA",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the air interface at a particular moment."
-			]
-		},
-		"AirInterfaceHistoricalPerformances": {
-			"id": "AirInterfaceHistoricalPerformances",
-			"uml-id": "_fChNMHmHEeWRAfnL3fvovg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the air interface for a pre-defined measurement interval."
-			]
-		},
-		"CoChannelGroup": {
-			"id": "CoChannelGroup",
-			"uml-id": "_XBs2YJQrEeWOu_cDl8dd7w",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Required for configuring XPIC, MIMO and ALIC."
-			]
-		},
-		"coChannelGroupId": {
-			"id": "coChannelGroupId",
-			"uml-id": "_pIjBgEy7EeaRytIQfQ43Wg",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1
-		},
-		"airInterfaceList": {
-			"id": "airInterfaceList",
-			"uml-id": "_tIadUCJeEeaCUo1MUtSuEg",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."
-			]
-		},
-		"sortOfCoChannelGroup": {
-			"id": "sortOfCoChannelGroup",
-			"uml-id": "_ZrjZcJRrEeWIaZzoaYJ6_A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"
-			]
-		},
-		"MW_AirInterfaceHsbEndPoint_Pac": {
-			"id": "MW_AirInterfaceHsbEndPoint_Pac",
-			"uml-id": "_CXKgMJRbEeWMYJZn43K_Aw",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."
-			]
-		},
-		"role": {
-			"id": "role",
-			"uml-id": "_CXKgNpRbEeWMYJZn43K_Aw",
-			"uml-type": "ownedAttribute",
-			"type": "_01_dYJReEeWxIPEwZQ_gmw",
-			"order-number": 1,
-			"is-read-only": false
-		},
-		"endpoint": {
-			"id": "endpoint",
-			"uml-id": "_dglVQLYgEeWOio-Gg6Q2sw",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_b_lUAFYgEeOVGaP4lO41SQ",
-			"order-number": 2,
-			"is-read-only": false,
-			"is-key": 1
-		},
-		"MW_AirInterfaceHsbFcSwitch_Pac": {
-			"id": "MW_AirInterfaceHsbFcSwitch_Pac",
-			"uml-id": "_CXNjgJRbEeWMYJZn43K_Aw",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."
-			]
-		},
-		"protType": {
-			"id": "protType",
-			"uml-id": "_CXNjiJRbEeWMYJZn43K_Aw",
-			"uml-type": "ownedAttribute",
-			"type": "_DaB5IJRgEeWxIPEwZQ_gmw",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"Indicates the protection scheme that is used for the ProtectionGroup."
-			]
-		},
-		"airInterfaceHsbConfigurationIsFaultySeverity": {
-			"id": "airInterfaceHsbConfigurationIsFaultySeverity",
-			"uml-id": "_80BlAJ2gEeWSuvrh9KcclQ",
-			"uml-type": "ownedAttribute",
-			"type": "_eIml0JH1EeWUdbnmmNiTAA",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."
-			]
-		},
-		"airInterfaceHsbIsPartlyDownSeverity": {
-			"id": "airInterfaceHsbIsPartlyDownSeverity",
-			"uml-id": "_r382sJ2mEeWSuvrh9KcclQ",
-			"uml-type": "ownedAttribute",
-			"type": "_eIml0JH1EeWUdbnmmNiTAA",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."
-			]
-		},
-		"airInterfaceHsbIsDownSeverity": {
-			"id": "airInterfaceHsbIsDownSeverity",
-			"uml-id": "_sRGWgJ2mEeWSuvrh9KcclQ",
-			"uml-type": "ownedAttribute",
-			"type": "_eIml0JH1EeWUdbnmmNiTAA",
-			"order-number": 4,
-			"is-read-only": false,
-			"description": [
-				"The level of severity of the total HSB configuration being down shall be chosen from an enumeration."
-			]
-		},
-		"fcswitch": {
-			"id": "fcswitch",
-			"uml-id": "_FS83ILYhEeWOio-Gg6Q2sw",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_a97NQFYhEeOVGaP4lO41SQ",
-			"order-number": 5,
-			"is-read-only": false,
-			"is-key": 1
-		},
-		"MW_AirInterfaceDiversity_Pac": {
-			"id": "MW_AirInterfaceDiversity_Pac",
-			"uml-id": "_WbgFcHgFEeWfutScSwFT9A",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"LTP(MWS-CTP-xD)"
-			]
-		},
-		"airInterfaceDiversityCapability": {
-			"id": "airInterfaceDiversityCapability",
-			"uml-id": "_mQ_9YJICEeWUdbnmmNiTAA",
-			"uml-type": "ownedAttribute",
-			"type": "_vxH2wIekEeWaZYk7gpuOtw",
-			"order-number": 2,
-			"is-read-only": true
-		},
-		"airInterfaceDiversityConfiguration": {
-			"id": "airInterfaceDiversityConfiguration",
-			"uml-id": "_wXazw5ICEeWUdbnmmNiTAA",
-			"uml-type": "ownedAttribute",
-			"type": "_43RTMIe1EeWnUdmvl3PBkw",
-			"order-number": 3,
-			"is-read-only": false
-		},
-		"airInterfaceDiversityCurrentProblems": {
-			"id": "airInterfaceDiversityCurrentProblems",
-			"uml-id": "_zA4JU5ICEeWUdbnmmNiTAA",
-			"uml-type": "ownedAttribute",
-			"type": "_CAvhEHvtEeWzooKF5kx0aw",
-			"order-number": 5,
-			"is-read-only": true
-		},
-		"airInterfaceDiversityCurrentPerformance": {
-			"id": "airInterfaceDiversityCurrentPerformance",
-			"uml-id": "_XpGjA6jDEeWlgMiFXLmCIQ",
-			"uml-type": "ownedAttribute",
-			"type": "_GIsAQKjDEeWlgMiFXLmCIQ",
-			"order-number": 6,
-			"is-read-only": true
-		},
-		"airInterfaceDiversityHistoricalPerformances": {
-			"id": "airInterfaceDiversityHistoricalPerformances",
-			"uml-id": "_z8F0Y5ICEeWUdbnmmNiTAA",
-			"uml-type": "ownedAttribute",
-			"type": "_8IIu8HvsEeWzooKF5kx0aw",
-			"order-number": 7,
-			"is-read-only": true
-		},
-		"AirInterfaceDiversityCapability": {
-			"id": "AirInterfaceDiversityCapability",
-			"uml-id": "_vxH2wIekEeWaZYk7gpuOtw",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Describes the capabilities in implementing different types of air interface diversity."
-			]
-		},
-		"availableKindsOfDiversity": {
-			"id": "availableKindsOfDiversity",
-			"uml-id": "_luAGENyVEeW-SfXlFFFI0Q",
-			"uml-type": "ownedAttribute",
-			"type": "_pTliINyUEeW-SfXlFFFI0Q",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"Available types of diversity to be listed."
-			]
-		},
-		"AirInterfaceDiversityConfiguration": {
-			"id": "AirInterfaceDiversityConfiguration",
-			"uml-id": "_43RTMIe1EeWnUdmvl3PBkw",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"airInterfaceDiversity": {
-			"id": "airInterfaceDiversity",
-			"uml-id": "_hynTIHi_EeWfutScSwFT9A",
-			"uml-type": "ownedAttribute",
-			"type": "_pTliINyUEeW-SfXlFFFI0Q",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"Type of air interface diversity configured at the link."
-			]
-		},
-		"airInterfaceLtpList": {
-			"id": "airInterfaceLtpList",
-			"uml-id": "_xRMKgNyXEeW-SfXlFFFI0Q",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"
-			]
-		},
-		"AirInterfaceDiversityStatus": {
-			"id": "AirInterfaceDiversityStatus",
-			"uml-id": "_-O9RgHvsEeWzooKF5kx0aw",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"snirCur": {
-			"id": "snirCur",
-			"uml-id": "_B7G0AEzvEeaRytIQfQ43Wg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 1,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Currently measured signal to (noise+interference) ratio of the combined signals."
-			]
-		},
-		"airInterfaceDiversityStatus": {
-			"id": "airInterfaceDiversityStatus",
-			"uml-id": "_EKZYcJOXEeWz-6sqLzUedw",
-			"uml-type": "ownedAttribute",
-			"type": "_DUJs8JOXEeWz-6sqLzUedw",
-			"order-number": 2,
-			"is-read-only": true,
-			"description": [
-				"Status of the air interface bundle."
-			]
-		},
-		"AirInterfaceDiversityCurrentProblems": {
-			"id": "AirInterfaceDiversityCurrentProblems",
-			"uml-id": "_CAvhEHvtEeWzooKF5kx0aw",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"AirInterfaceDiversityCurrentPerformance": {
-			"id": "AirInterfaceDiversityCurrentPerformance",
-			"uml-id": "_GIsAQKjDEeWlgMiFXLmCIQ",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the air interface diversity configuration at a particular moment."
-			]
-		},
-		"AirInterfaceDiversityHistoricalPerformances": {
-			"id": "AirInterfaceDiversityHistoricalPerformances",
-			"uml-id": "_8IIu8HvsEeWzooKF5kx0aw",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."
-			]
-		},
-		"MW_PureEthernetStructure_Pac": {
-			"id": "MW_PureEthernetStructure_Pac",
-			"uml-id": "__OTQ0UaeEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."
-			]
-		},
-		"pureEthernetStructureCapability": {
-			"id": "pureEthernetStructureCapability",
-			"uml-id": "_dJcm0VAfEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "__OTQ4EaeEeas2eqI3oKNtg",
-			"order-number": 2,
-			"is-read-only": true
-		},
-		"pureEthernetStructureConfiguration": {
-			"id": "pureEthernetStructureConfiguration",
-			"uml-id": "_kHaeglAfEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "__OTQ8UaeEeas2eqI3oKNtg",
-			"order-number": 3,
-			"is-read-only": false
-		},
-		"pureEthernetStructureStatus": {
-			"id": "pureEthernetStructureStatus",
-			"uml-id": "_lsNSEFAfEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "__OTQ_UaeEeas2eqI3oKNtg",
-			"order-number": 4,
-			"is-read-only": true
-		},
-		"pureEthernetStructureCurrentProblems": {
-			"id": "pureEthernetStructureCurrentProblems",
-			"uml-id": "_nCtK8lAfEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "__OTRCUaeEeas2eqI3oKNtg",
-			"order-number": 5,
-			"is-read-only": true
-		},
-		"pureEthernetStructureCurrentPerformance": {
-			"id": "pureEthernetStructureCurrentPerformance",
-			"uml-id": "_ocuR4VAfEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "__OTRD0aeEeas2eqI3oKNtg",
-			"order-number": 6,
-			"is-read-only": true
-		},
-		"pureEthernetStructureHistoricalPerformances": {
-			"id": "pureEthernetStructureHistoricalPerformances",
-			"uml-id": "_Xb6U4FAiEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "__OTRE0aeEeas2eqI3oKNtg",
-			"order-number": 7,
-			"is-read-only": true
-		},
-		"PureEthernetStructureCapability": {
-			"id": "PureEthernetStructureCapability",
-			"uml-id": "__OTQ4EaeEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"No TDM transport."
-			]
-		},
-		"PureEthernetStructureConfiguration": {
-			"id": "PureEthernetStructureConfiguration",
-			"uml-id": "__OTQ8UaeEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"PureEthernetStructureStatus": {
-			"id": "PureEthernetStructureStatus",
-			"uml-id": "__OTQ_UaeEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"PureEthernetStructureCurrentProblems": {
-			"id": "PureEthernetStructureCurrentProblems",
-			"uml-id": "__OTRCUaeEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"PureEthernetStructureCurrentPerformance": {
-			"id": "PureEthernetStructureCurrentPerformance",
-			"uml-id": "__OTRD0aeEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."
-			]
-		},
-		"PureEthernetStructureHistoricalPerformances": {
-			"id": "PureEthernetStructureHistoricalPerformances",
-			"uml-id": "__OTRE0aeEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."
-			]
-		},
-		"MW_HybridMwStructure_Pac": {
-			"id": "MW_HybridMwStructure_Pac",
-			"uml-id": "_Bzxo0UagEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."
-			]
-		},
-		"hybridMwStructureCapability": {
-			"id": "hybridMwStructureCapability",
-			"uml-id": "_2nQhIFAjEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_Bzxo4EagEeas2eqI3oKNtg",
-			"order-number": 2,
-			"is-read-only": true
-		},
-		"hybridMwStructureConfiguration": {
-			"id": "hybridMwStructureConfiguration",
-			"uml-id": "_3-63oVAjEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_Bzxo8UagEeas2eqI3oKNtg",
-			"order-number": 3,
-			"is-read-only": false
-		},
-		"hybridMwStructureStatus": {
-			"id": "hybridMwStructureStatus",
-			"uml-id": "_5fWvolAjEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_Bzxo_UagEeas2eqI3oKNtg",
-			"order-number": 4,
-			"is-read-only": true
-		},
-		"hybridMwStructureCurrentProblems": {
-			"id": "hybridMwStructureCurrentProblems",
-			"uml-id": "_6ZbLMlAjEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_BzxpCUagEeas2eqI3oKNtg",
-			"order-number": 5,
-			"is-read-only": true
-		},
-		"hybridMwStructureCurrentPerformance": {
-			"id": "hybridMwStructureCurrentPerformance",
-			"uml-id": "_7FMFAFAjEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_BzxpD0agEeas2eqI3oKNtg",
-			"order-number": 6,
-			"is-read-only": true
-		},
-		"hybridMwStructureHistoricalPerformances": {
-			"id": "hybridMwStructureHistoricalPerformances",
-			"uml-id": "_8CWQ0VAjEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_BzxpE0agEeas2eqI3oKNtg",
-			"order-number": 7,
-			"is-read-only": true
-		},
-		"HybridMwStructureCapability": {
-			"id": "HybridMwStructureCapability",
-			"uml-id": "_Bzxo4EagEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"TDM transport is available."
-			]
-		},
-		"structureId": {
-			"id": "structureId",
-			"uml-id": "_Bzxo5EagEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1,
-			"description": [
-				"Identifies the Structure for bundling and container."
-			]
-		},
-		"supportedTdmStructureTypesList": {
-			"id": "supportedTdmStructureTypesList",
-			"uml-id": "_tA-uQEduEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "_jRAQsEdoEeax2rWez10Siw",
-			"order-number": 2,
-			"is-read-only": true,
-			"description": [
-				"Lists the TDM frame types that are supported."
-			]
-		},
-		"HybridMwStructureConfiguration": {
-			"id": "HybridMwStructureConfiguration",
-			"uml-id": "_Bzxo8UagEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"structureType": {
-			"id": "structureType",
-			"uml-id": "_cduh4EdvEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "_jRAQsEdoEeax2rWez10Siw",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"TDM frame to be applied."
-			]
-		},
-		"numberOfTdmSegmentsToBeReserved": {
-			"id": "numberOfTdmSegmentsToBeReserved",
-			"uml-id": "_Bzxo9EagEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"
-			]
-		},
-		"HybridMwStructureStatus": {
-			"id": "HybridMwStructureStatus",
-			"uml-id": "_Bzxo_UagEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"segmentStatusList": {
-			"id": "segmentStatusList",
-			"uml-id": "_BzxpAEagEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "_KwZVcMUCEeW3xsRKtpCLuA",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"
-			]
-		},
-		"HybridMwStructureCurrentProblems": {
-			"id": "HybridMwStructureCurrentProblems",
-			"uml-id": "_BzxpCUagEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"HybridMwStructureCurrentPerformance": {
-			"id": "HybridMwStructureCurrentPerformance",
-			"uml-id": "_BzxpD0agEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the structure of a hybrid microwave at a particular moment."
-			]
-		},
-		"HybridMwStructureHistoricalPerformances": {
-			"id": "HybridMwStructureHistoricalPerformances",
-			"uml-id": "_BzxpE0agEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."
-			]
-		},
-		"MW_EthernetContainer_Pac": {
-			"id": "MW_EthernetContainer_Pac",
-			"uml-id": "_4uEBgUafEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"LTP(Client)"
-			]
-		},
-		"ethernetContainerCapability": {
-			"id": "ethernetContainerCapability",
-			"uml-id": "_vWwdEVAlEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_4uEBmEafEeas2eqI3oKNtg",
-			"order-number": 2,
-			"is-read-only": true
-		},
-		"ethernetContainerConfiguration": {
-			"id": "ethernetContainerConfiguration",
-			"uml-id": "_v8JCEFAlEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_4uEBwUafEeas2eqI3oKNtg",
-			"order-number": 3,
-			"is-read-only": false
-		},
-		"ethernetContainerStatus": {
-			"id": "ethernetContainerStatus",
-			"uml-id": "_wvtNAVAlEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_4uECAUafEeas2eqI3oKNtg",
-			"order-number": 4,
-			"is-read-only": true
-		},
-		"ethernetContainerCurrentProblems": {
-			"id": "ethernetContainerCurrentProblems",
-			"uml-id": "_xUWyMlAlEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_4uECDUafEeas2eqI3oKNtg",
-			"order-number": 5,
-			"is-read-only": true
-		},
-		"ethernetContainerCurrentPerformance": {
-			"id": "ethernetContainerCurrentPerformance",
-			"uml-id": "_x7K6kFAlEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_4uECE0afEeas2eqI3oKNtg",
-			"order-number": 6,
-			"is-read-only": true
-		},
-		"ethernetContainerHistoricalPerformances": {
-			"id": "ethernetContainerHistoricalPerformances",
-			"uml-id": "_ynDJIFAlEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_4uECF0afEeas2eqI3oKNtg",
-			"order-number": 7,
-			"is-read-only": true
-		},
-		"EthernetContainerCapability": {
-			"id": "EthernetContainerCapability",
-			"uml-id": "_4uEBmEafEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"bundlingIsAvail": {
-			"id": "bundlingIsAvail",
-			"uml-id": "_96g-oEanEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container."
-			]
-		},
-		"packetCompressionIsAvail": {
-			"id": "packetCompressionIsAvail",
-			"uml-id": "_4uEBp0afEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 2,
-			"is-read-only": true,
-			"description": [
-				"In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."
-			]
-		},
-		"layer2CompressionIsAvail": {
-			"id": "layer2CompressionIsAvail",
-			"uml-id": "_4uEBqkafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 3,
-			"is-read-only": true,
-			"description": [
-				"Packet compression on layer 2 available at the device."
-			]
-		},
-		"vlanCompressionIsAvail": {
-			"id": "vlanCompressionIsAvail",
-			"uml-id": "_4uEBrUafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 4,
-			"is-read-only": true,
-			"description": [
-				"Packet compression on VLAN layer available at the device."
-			]
-		},
-		"qInQCompressionIsAvail": {
-			"id": "qInQCompressionIsAvail",
-			"uml-id": "_4uEBsEafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 5,
-			"is-read-only": true,
-			"description": [
-				"Packet compression on layer of a second VLAN available at the device."
-			]
-		},
-		"mplsCompressionIsAvail": {
-			"id": "mplsCompressionIsAvail",
-			"uml-id": "_4uEBs0afEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 6,
-			"is-read-only": true,
-			"description": [
-				"Packet compression on mpls layer available at the device."
-			]
-		},
-		"ipv4CompressionIsAvail": {
-			"id": "ipv4CompressionIsAvail",
-			"uml-id": "_4uEBtkafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 7,
-			"is-read-only": true,
-			"description": [
-				"Packet compression on layer 3 for IPv4 available at the device."
-			]
-		},
-		"ipv6CompressionIsAvail": {
-			"id": "ipv6CompressionIsAvail",
-			"uml-id": "_4uEBuUafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 8,
-			"is-read-only": true,
-			"description": [
-				"Packet compression on layer 3 for IPv6 available at the device."
-			]
-		},
-		"layer4CompressionIsAvail": {
-			"id": "layer4CompressionIsAvail",
-			"uml-id": "_4uEBvEafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 9,
-			"is-read-only": true,
-			"description": [
-				"Packet compression on layer 4 (TCP and UDP header) available at the device."
-			]
-		},
-		"encryptionIsAvail": {
-			"id": "encryptionIsAvail",
-			"uml-id": "_4uPM8E58EeaCk6G-lyG1OQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 10,
-			"is-read-only": true,
-			"description": [
-				"Shall be marked 'true', if Ethernet payload encryption is available."
-			]
-		},
-		"EthernetContainerConfiguration": {
-			"id": "EthernetContainerConfiguration",
-			"uml-id": "_4uEBwUafEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"segmentsIDList": {
-			"id": "segmentsIDList",
-			"uml-id": "_4uEBy0afEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."
-			]
-		},
-		"packetCompressionIsOn": {
-			"id": "packetCompressionIsOn",
-			"uml-id": "_4uEB1UafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."
-			]
-		},
-		"layer2CompressionIsOn": {
-			"id": "layer2CompressionIsOn",
-			"uml-id": "_4uEB2kafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 4,
-			"is-read-only": false,
-			"description": [
-				"Packet compression on layer 2 configured at the device."
-			]
-		},
-		"vlanCompressionIsOn": {
-			"id": "vlanCompressionIsOn",
-			"uml-id": "_4uEB30afEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 5,
-			"is-read-only": false,
-			"description": [
-				"Packet compression on VLAN layer configured at the device."
-			]
-		},
-		"qInQCompressionIsOn": {
-			"id": "qInQCompressionIsOn",
-			"uml-id": "_4uEB5EafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 6,
-			"is-read-only": false,
-			"description": [
-				"Packet compression on layer of a second VLAN configured at the device."
-			]
-		},
-		"mplsCompressionIsOn": {
-			"id": "mplsCompressionIsOn",
-			"uml-id": "_4uEB6UafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 7,
-			"is-read-only": false,
-			"description": [
-				"Packet compression on MPLS layer configured at the device."
-			]
-		},
-		"ipv4CompressionIsOn": {
-			"id": "ipv4CompressionIsOn",
-			"uml-id": "_4uEB7kafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 8,
-			"is-read-only": false,
-			"description": [
-				"Packet compression on layer 3 for IPv4 configured at the device."
-			]
-		},
-		"ipv6CompressionIsOn": {
-			"id": "ipv6CompressionIsOn",
-			"uml-id": "_4uEB80afEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 9,
-			"is-read-only": false,
-			"description": [
-				"Packet compression on layer 3 for IPv6 configured at the device."
-			]
-		},
-		"layer4CompressionIsOn": {
-			"id": "layer4CompressionIsOn",
-			"uml-id": "_4uEB-EafEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 10,
-			"is-read-only": false,
-			"description": [
-				"Packet compression on layer 4 (TCP and UDP header) configured at the device."
-			]
-		},
-		"encryptionIsOn": {
-			"id": "encryptionIsOn",
-			"uml-id": "_uI7bIE58EeaCk6G-lyG1OQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 11,
-			"is-read-only": false,
-			"description": [
-				"Activates encryption of the Ethernet payload."
-			]
-		},
-		"cryptographicKey": {
-			"id": "cryptographicKey",
-			"uml-id": "_psRpoE58EeaCk6G-lyG1OQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 12,
-			"is-read-only": false,
-			"description": [
-				"Key for transforming plaintext into cipher text data."
-			]
-		},
-		"EthernetContainerStatus": {
-			"id": "EthernetContainerStatus",
-			"uml-id": "_4uECAUafEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"EthernetContainerCurrentProblems": {
-			"id": "EthernetContainerCurrentProblems",
-			"uml-id": "_4uECDUafEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"EthernetContainerCurrentPerformance": {
-			"id": "EthernetContainerCurrentPerformance",
-			"uml-id": "_4uECE0afEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the Ethernet container at a particular moment."
-			]
-		},
-		"EthernetContainerHistoricalPerformances": {
-			"id": "EthernetContainerHistoricalPerformances",
-			"uml-id": "_4uECF0afEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the Ethernet container for a pre-defined measurement interval."
-			]
-		},
-		"MW_TdmContainer_Pac": {
-			"id": "MW_TdmContainer_Pac",
-			"uml-id": "_ecCeMUaqEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"LTP(Client)"
-			]
-		},
-		"layerProtocol": {
-			"id": "layerProtocol",
-			"uml-id": "_m_QIglpKEeax66gMnmfzpQ",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1,
-			"description": [
-				"CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"
-			]
-		},
-		"tdmContainerCapability": {
-			"id": "tdmContainerCapability",
-			"uml-id": "_-bytElAmEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_ecCeSEaqEeas2eqI3oKNtg",
-			"order-number": 2,
-			"is-read-only": true
-		},
-		"tdmContainerConfiguration": {
-			"id": "tdmContainerConfiguration",
-			"uml-id": "__LKUglAmEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_ecCecUaqEeas2eqI3oKNtg",
-			"order-number": 3,
-			"is-read-only": false
-		},
-		"tdmContainerStatus": {
-			"id": "tdmContainerStatus",
-			"uml-id": "__vOq4lAmEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_ecCesUaqEeas2eqI3oKNtg",
-			"order-number": 4,
-			"is-read-only": true
-		},
-		"tdmContainerCurrentProblems": {
-			"id": "tdmContainerCurrentProblems",
-			"uml-id": "_AWdqAlAnEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_ecCevUaqEeas2eqI3oKNtg",
-			"order-number": 5,
-			"is-read-only": true
-		},
-		"tdmContainerCurrentPerformance": {
-			"id": "tdmContainerCurrentPerformance",
-			"uml-id": "_AzXoclAnEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_ecCew0aqEeas2eqI3oKNtg",
-			"order-number": 6,
-			"is-read-only": true
-		},
-		"tdmContainerHistoricalPerformances": {
-			"id": "tdmContainerHistoricalPerformances",
-			"uml-id": "_BXIc0lAnEea9Wek8ROfqag",
-			"uml-type": "ownedAttribute",
-			"type": "_ecCex0aqEeas2eqI3oKNtg",
-			"order-number": 7,
-			"is-read-only": true
-		},
-		"TdmContainerCapability": {
-			"id": "TdmContainerCapability",
-			"uml-id": "_ecCeSEaqEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Bundling is not available."
-			]
-		},
-		"supportedTdmContainerTypesList": {
-			"id": "supportedTdmContainerTypesList",
-			"uml-id": "_R5hG0EdwEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "_rgbigEdjEeax2rWez10Siw",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"Lists the TDM containers that are supported."
-			]
-		},
-		"supportedAlarms": {
-			"id": "supportedAlarms",
-			"uml-id": "_ecCeb0aqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 92,
-			"is-read-only": true,
-			"description": [
-				"Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."
-			]
-		},
-		"TdmContainerConfiguration": {
-			"id": "TdmContainerConfiguration",
-			"uml-id": "_ecCecUaqEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"containerID": {
-			"id": "containerID",
-			"uml-id": "_ecCeS0aqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": false,
-			"description": [
-				"ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller."
-			]
-		},
-		"containerType": {
-			"id": "containerType",
-			"uml-id": "_o_-2oEdxEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "_rgbigEdjEeax2rWez10Siw",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"Type of TDM container."
-			]
-		},
-		"segmentID": {
-			"id": "segmentID",
-			"uml-id": "_ecCee0aqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
-			"order-number": 3,
-			"is-read-only": false,
-			"description": [
-				"Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"
-			]
-		},
-		"problemKindSeverityList": {
-			"id": "problemKindSeverityList",
-			"uml-id": "_ecCerUaqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "_OMPgwGz0Eeaf-__BRLM84g",
-			"order-number": 94,
-			"is-read-only": false,
-			"description": [
-				"Severity of the problem to be configured."
-			]
-		},
-		"TdmContainerStatus": {
-			"id": "TdmContainerStatus",
-			"uml-id": "_ecCesUaqEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"lastStatusChange": {
-			"id": "lastStatusChange",
-			"uml-id": "_ecCetEaqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"_format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
-			]
-		},
-		"TdmContainerCurrentProblems": {
-			"id": "TdmContainerCurrentProblems",
-			"uml-id": "_ecCevUaqEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false
-		},
-		"currentProblemList": {
-			"id": "currentProblemList",
-			"uml-id": "_ecCewEaqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "__h1n4MXpEeWJ6KZuc0h_vw",
-			"order-number": 1,
-			"is-read-only": true
-		},
-		"TdmContainerCurrentPerformance": {
-			"id": "TdmContainerCurrentPerformance",
-			"uml-id": "_ecCew0aqEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the TDM container at a particular moment."
-			]
-		},
-		"currentPerformanceDataList": {
-			"id": "currentPerformanceDataList",
-			"uml-id": "_ecCexkaqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "_pA5AQGz6Eeaf-__BRLM84g",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."
-			]
-		},
-		"TdmContainerHistoricalPerformances": {
-			"id": "TdmContainerHistoricalPerformances",
-			"uml-id": "_ecCex0aqEeas2eqI3oKNtg",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"Aggregated performance information of the TDM container for a pre-defined measurement interval."
-			]
-		},
-		"historicalPerformanceDataList": {
-			"id": "historicalPerformanceDataList",
-			"uml-id": "_ecCeykaqEeas2eqI3oKNtg",
-			"uml-type": "ownedAttribute",
-			"type": "_pTaToGz6Eeaf-__BRLM84g",
-			"order-number": 1,
-			"is-read-only": true
-		},
-		"MwCurrentProblem": {
-			"id": "MwCurrentProblem",
-			"uml-id": "_LKRM4JNQEeWuAeXkr703BA",
-			"uml-type": "uml:Class",
-			"is-read-only": false,
-			"description": [
-				"According to ITU-T G.874.1?"
-			]
-		},
-		"sequenceNumber": {
-			"id": "sequenceNumber",
-			"uml-id": "_YadH4CJbEeaHpPYk5sscIg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1,
-			"description": [
-				"Unique sequence number of the current problem object."
-			]
-		},
-		"timeStamp": {
-			"id": "timeStamp",
-			"uml-id": "_lB4EQJN1EeWuAeXkr703BA",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
-			"order-number": 2,
-			"is-read-only": true,
-			"description": [
-				"_format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
-			]
-		},
-		"channelPlanType": {
-			"id": "channelPlanType",
-			"uml-id": "_oQf6IPXSEeW9zIqh2WHHww",
-			"uml-type": "uml:DataType"
-		},
-		"supportedChannelPlan": {
-			"id": "supportedChannelPlan",
-			"uml-id": "_8gpNIHfcEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1,
-			"description": [
-				"Unique name (e.g. CEPT/ERC/REC (01) 04 Annex 5) of an international agreement that describe allocations of frequency channels, to which this air interface complies. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in the controller/application attached database."
-			]
-		},
-		"duplexDistanceIsVariable": {
-			"id": "duplexDistanceIsVariable",
-			"uml-id": "_OPxkQK42EeWxIavXll_b0A",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 2,
-			"is-read-only": true,
-			"description": [
-				"To be set on 'true', if the distance between transmitted and received frequency is variable."
-			]
-		},
-		"duplexDistance": {
-			"id": "duplexDistance",
-			"uml-id": "_BEr_wIMEEeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Distance between transmitted and received frequency."
-			]
-		},
-		"autoFreqSelectIsAvail": {
-			"id": "autoFreqSelectIsAvail",
-			"uml-id": "_te6XMIL8EeWMcJAvkeTn2w",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 4,
-			"is-read-only": true,
-			"description": [
-				"In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."
-			]
-		},
-		"transmissionModeList": {
-			"id": "transmissionModeList",
-			"uml-id": "_nwbvcPXREeW9zIqh2WHHww",
-			"uml-type": "ownedAttribute",
-			"type": "_zG34sPXQEeW9zIqh2WHHww",
-			"order-number": 5,
-			"is-read-only": true
-		},
-		"transmissionModeType": {
-			"id": "transmissionModeType",
-			"uml-id": "_zG34sPXQEeW9zIqh2WHHww",
-			"uml-type": "uml:DataType"
-		},
-		"transmissionModeId": {
-			"id": "transmissionModeId",
-			"uml-id": "_afdYoNumEeWHIeLurhMv0A",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1,
-			"description": [
-				"Indentifies the transmissionMode for internal reference."
-			]
-		},
-		"channelBandwidth": {
-			"id": "channelBandwidth",
-			"uml-id": "_FteJEHfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "kHz",
-			"description": [
-				"Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
-			]
-		},
-		"modulationScheme": {
-			"id": "modulationScheme",
-			"uml-id": "_G4H-UHfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "symbols",
-			"description": [
-				"Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of symbols (e.g. BPSK->'2' or 256QAM->'256')."
-			]
-		},
-		"informationRate": {
-			"id": "informationRate",
-			"uml-id": "_jE7-EHf4EeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 4,
-			"is-read-only": true,
-			"unit": "%",
-			"description": [
-				"Information rate of the coding scheme in %."
-			]
-		},
-		"txPowerMin": {
-			"id": "txPowerMin",
-			"uml-id": "_I3nJ0HfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 5,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Value of the minimum transmit power the modem can operate in dBm."
-			]
-		},
-		"txPowerMax": {
-			"id": "txPowerMax",
-			"uml-id": "_KB7A0HfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 6,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Value of the maximum transmit power the modem can operate in dBm."
-			]
-		},
-		"rxThreshold": {
-			"id": "rxThreshold",
-			"uml-id": "_LCr6QHfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 7,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."
-			]
-		},
-		"amUpshiftLevel": {
-			"id": "amUpshiftLevel",
-			"uml-id": "_MGguwHfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 8,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Value of the receive level that has to be exceeded to shift into a higher modulation scheme."
-			]
-		},
-		"amDownshiftLevel": {
-			"id": "amDownshiftLevel",
-			"uml-id": "_NIvAwHfdEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 9,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."
-			]
-		},
-		"xpicIsAvail": {
-			"id": "xpicIsAvail",
-			"uml-id": "_QHd9kHfvEeW-h9gN8LYm4Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 10,
-			"is-read-only": true,
-			"description": [
-				"In case the Air Interface Port is capable of XPIC, this field shall contain a 'true'."
-			]
-		},
-		"airInterfaceProblemSeverityType": {
-			"id": "airInterfaceProblemSeverityType",
-			"uml-id": "_ZKdWgGnuEeaZwMagYjVCHQ",
-			"uml-type": "uml:DataType"
-		},
-		"airInterfaceCurrentProblemType": {
-			"id": "airInterfaceCurrentProblemType",
-			"uml-id": "_umuZUMXjEeW3xsRKtpCLuA",
-			"uml-type": "uml:DataType"
-		},
-		"airInterfacePerformanceType": {
-			"id": "airInterfacePerformanceType",
-			"uml-id": "_OvFYwEQbEea3g-FxAUaYRg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Consolidated performance information of the air interface."
-			]
-		},
-		"es": {
-			"id": "es",
-			"uml-id": "_DbVzpUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 1,
-			"is-read-only": true,
-			"unit": "s",
-			"description": [
-				"Number of errored seconds."
-			]
-		},
-		"ses": {
-			"id": "ses",
-			"uml-id": "_DbVzqUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "s",
-			"description": [
-				"Number of severely errored seconds."
-			]
-		},
-		"cses": {
-			"id": "cses",
-			"uml-id": "_DbVzrUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "s",
-			"description": [
-				"Number of consecutive severely errored seconds."
-			]
-		},
-		"unavailability": {
-			"id": "unavailability",
-			"uml-id": "_DbVzsUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 4,
-			"is-read-only": true,
-			"unit": "s",
-			"description": [
-				"Total time of unavailability in seconds."
-			]
-		},
-		"txLevelMin": {
-			"id": "txLevelMin",
-			"uml-id": "_DbVztUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 5,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Minimum transmit power. Signed integers are required."
-			]
-		},
-		"txLevelMax": {
-			"id": "txLevelMax",
-			"uml-id": "_DbVzuUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 6,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Maximum transmit power. Signed integers are required."
-			]
-		},
-		"txLevelAvg": {
-			"id": "txLevelAvg",
-			"uml-id": "_DbVzvUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 7,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Averaged transmit power. Signed integers are required."
-			]
-		},
-		"rxLevelMin": {
-			"id": "rxLevelMin",
-			"uml-id": "_DbVzwUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 8,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Minimum receive level. Signed integers are required."
-			]
-		},
-		"rxLevelMax": {
-			"id": "rxLevelMax",
-			"uml-id": "_DbVzxUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 9,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Maximum receive level. Signed integers are required."
-			]
-		},
-		"rxLevelAvg": {
-			"id": "rxLevelAvg",
-			"uml-id": "_DbVzyUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 10,
-			"is-read-only": true,
-			"unit": "dBm",
-			"description": [
-				"Averaged receive level. Signed integers are required."
-			]
-		},
-		"time2Symbols": {
-			"id": "time2Symbols",
-			"uml-id": "_DbVzzUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 11,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time4SymbolsS": {
-			"id": "time4SymbolsS",
-			"uml-id": "_DbVz0kQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 12,
-			"is-read-only": true,
-			"unit": "s",
-			"description": [
-				"Sum of all seconds the transmitter operated in e.g. 4QAM strong."
-			]
-		},
-		"time4Symbols": {
-			"id": "time4Symbols",
-			"uml-id": "_DbVz2EQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 13,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time8Symbols": {
-			"id": "time8Symbols",
-			"uml-id": "_DbVz3UQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 14,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time16SymbolsS": {
-			"id": "time16SymbolsS",
-			"uml-id": "_DbVz4kQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 15,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time16Symbols": {
-			"id": "time16Symbols",
-			"uml-id": "_DbVz50QbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 16,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time32Symbols": {
-			"id": "time32Symbols",
-			"uml-id": "_DbVz7EQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 17,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time64Symbols": {
-			"id": "time64Symbols",
-			"uml-id": "_DbVz8UQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 18,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time128Symbols": {
-			"id": "time128Symbols",
-			"uml-id": "_DbVz9kQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 19,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time256Symbols": {
-			"id": "time256Symbols",
-			"uml-id": "_DbVz-0QbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 20,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time512Symbols": {
-			"id": "time512Symbols",
-			"uml-id": "_DbV0AEQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 21,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time512SymbolsL": {
-			"id": "time512SymbolsL",
-			"uml-id": "_DbV0BUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 22,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time1024Symbols": {
-			"id": "time1024Symbols",
-			"uml-id": "_DbV0CkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 23,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time1024SymbolsL": {
-			"id": "time1024SymbolsL",
-			"uml-id": "_DbV0D0QbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 24,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time2048Symbols": {
-			"id": "time2048Symbols",
-			"uml-id": "_DbV0FEQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 25,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time2048SymbolsL": {
-			"id": "time2048SymbolsL",
-			"uml-id": "_DbV0GUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 26,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time4096Symbols": {
-			"id": "time4096Symbols",
-			"uml-id": "_DbV0HkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 27,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time4096SymbolsL": {
-			"id": "time4096SymbolsL",
-			"uml-id": "_DbV0I0QbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 28,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time8192Symbols": {
-			"id": "time8192Symbols",
-			"uml-id": "_DbV0KEQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 29,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"time8192SymbolsL": {
-			"id": "time8192SymbolsL",
-			"uml-id": "_DbV0LUQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 30,
-			"is-read-only": true,
-			"unit": "s"
-		},
-		"xpdMin": {
-			"id": "xpdMin",
-			"uml-id": "_DbV0PkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 34,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Minimum cross polarization discrimination."
-			]
-		},
-		"xpdMax": {
-			"id": "xpdMax",
-			"uml-id": "_DbV0QkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 35,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Maximum cross polarization discrimination."
-			]
-		},
-		"xpdAvg": {
-			"id": "xpdAvg",
-			"uml-id": "_DbV0RkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 36,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Averaged cross polarization discrimination."
-			]
-		},
-		"rfTempMin": {
-			"id": "rfTempMin",
-			"uml-id": "_DbV0SkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 37,
-			"is-read-only": true,
-			"unit": "C",
-			"description": [
-				"Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."
-			]
-		},
-		"rfTempMax": {
-			"id": "rfTempMax",
-			"uml-id": "_DbV0TkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 38,
-			"is-read-only": true,
-			"unit": "C",
-			"description": [
-				"Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."
-			]
-		},
-		"rfTempAvg": {
-			"id": "rfTempAvg",
-			"uml-id": "_DbV0UkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 39,
-			"is-read-only": true,
-			"unit": "C",
-			"description": [
-				"Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."
-			]
-		},
-		"defectBlocksSum": {
-			"id": "defectBlocksSum",
-			"uml-id": "_DbV0VkQbEea3g-FxAUaYRg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 40,
-			"is-read-only": true,
-			"unit": "blocks",
-			"description": [
-				"Total number of blocks that were defect after receiving and could not be corrected by the FEC."
-			]
-		},
-		"airInterfaceCurrentPerformanceType": {
-			"id": "airInterfaceCurrentPerformanceType",
-			"uml-id": "_pQ_y4GoHEeaZwMagYjVCHQ",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
-			]
-		},
-		"airInterfaceHistoricalPerformanceType": {
-			"id": "airInterfaceHistoricalPerformanceType",
-			"uml-id": "_t18kwGoHEeaZwMagYjVCHQ",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-			]
-		},
-		"diversityType": {
-			"id": "diversityType",
-			"uml-id": "_pTliINyUEeW-SfXlFFFI0Q",
-			"uml-type": "uml:DataType"
-		},
-		"diversityName": {
-			"id": "diversityName",
-			"uml-id": "_uYhboNyUEeW-SfXlFFFI0Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1,
-			"description": [
-				"Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"
-			]
-		},
-		"numberOfAirInterfacesMax": {
-			"id": "numberOfAirInterfacesMax",
-			"uml-id": "_wKDDoNyUEeW-SfXlFFFI0Q",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "air interfaces",
-			"description": [
-				"Maximum number of air interfaces that could be part of this kind of diversity."
-			]
-		},
-		"airInterfaceDiversityProblemSeverityType": {
-			"id": "airInterfaceDiversityProblemSeverityType",
-			"uml-id": "_2kMRYGzzEeaf-__BRLM84g",
-			"uml-type": "uml:DataType"
-		},
-		"airInterfaceDiversityCurrentProblemType": {
-			"id": "airInterfaceDiversityCurrentProblemType",
-			"uml-id": "_z1XWgMXlEeWJ6KZuc0h_vw",
-			"uml-type": "uml:DataType"
-		},
-		"airInterfaceDiversityPerformanceType": {
-			"id": "airInterfaceDiversityPerformanceType",
-			"uml-id": "_EH3QgEQdEea3g-FxAUaYRg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Consolidated performance information of the air interface diversity group."
-			]
-		},
-		"snirMin": {
-			"id": "snirMin",
-			"uml-id": "_nG-NsEzvEeaRytIQfQ43Wg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 1,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Minimum signal to (noise+interference) ratio of the combined signals."
-			]
-		},
-		"snirMax": {
-			"id": "snirMax",
-			"uml-id": "_n_OEUEzvEeaRytIQfQ43Wg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Maximum signal to (noise+interference) ratio of the combined signals."
-			]
-		},
-		"snirAvg": {
-			"id": "snirAvg",
-			"uml-id": "_oU3kMEzvEeaRytIQfQ43Wg",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "dB",
-			"description": [
-				"Average signal to (noise+interference) ratio of the combined signals."
-			]
-		},
-		"airInterfaceDiversityCurrentPerformanceType": {
-			"id": "airInterfaceDiversityCurrentPerformanceType",
-			"uml-id": "_n4wTgGz6Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
-			]
-		},
-		"airInterfaceDiversityHistoricalPerformanceType": {
-			"id": "airInterfaceDiversityHistoricalPerformanceType",
-			"uml-id": "_pG0pIGz6Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-			]
-		},
-		"tdmStructureType": {
-			"id": "tdmStructureType",
-			"uml-id": "_jRAQsEdoEeax2rWez10Siw",
-			"uml-type": "uml:DataType"
-		},
-		"tdmStructureName": {
-			"id": "tdmStructureName",
-			"uml-id": "_1bJF4EdoEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1,
-			"description": [
-				"Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
-			]
-		},
-		"tdmSegmentSize": {
-			"id": "tdmSegmentSize",
-			"uml-id": "_hPq1oEdpEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "kbit/s",
-			"description": [
-				"Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
-			]
-		},
-		"maxNumberOfSegmentsReservable": {
-			"id": "maxNumberOfSegmentsReservable",
-			"uml-id": "_EJnsgEdpEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EByte",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "segments",
-			"description": [
-				"Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."
-			]
-		},
-		"structureProblemSeverityType": {
-			"id": "structureProblemSeverityType",
-			"uml-id": "_LPgp4Gz0Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType"
-		},
-		"structureCurrentProblemType": {
-			"id": "structureCurrentProblemType",
-			"uml-id": "_UC0gAMXnEeWJ6KZuc0h_vw",
-			"uml-type": "uml:DataType"
-		},
-		"structurePerformanceType": {
-			"id": "structurePerformanceType",
-			"uml-id": "_kzEicEQdEea3g-FxAUaYRg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Consolidated performance information of the Structure."
-			]
-		},
-		"structureCurrentPerformanceType": {
-			"id": "structureCurrentPerformanceType",
-			"uml-id": "_o7jNQGz6Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
-			]
-		},
-		"structureHistoricalPerformanceType": {
-			"id": "structureHistoricalPerformanceType",
-			"uml-id": "_pNAJoGz6Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-			]
-		},
-		"tdmContainerType": {
-			"id": "tdmContainerType",
-			"uml-id": "_rgbigEdjEeax2rWez10Siw",
-			"uml-type": "uml:DataType"
-		},
-		"tdmContainerName": {
-			"id": "tdmContainerName",
-			"uml-id": "_rgbigkdjEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1,
-			"description": [
-				"Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
-			]
-		},
-		"tdmContainerSize": {
-			"id": "tdmContainerSize",
-			"uml-id": "_rgbihEdjEeax2rWez10Siw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "kbit/s",
-			"description": [
-				"Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
-			]
-		},
-		"segmentIDType": {
-			"id": "segmentIDType",
-			"uml-id": "_Nd1F4MKuEeWwLJhHQlOGSQ",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."
-			]
-		},
-		"structureIdRef": {
-			"id": "structureIdRef",
-			"uml-id": "_N4GKkMKvEeWwLJhHQlOGSQ",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1
-		},
-		"segmentIdRef": {
-			"id": "segmentIdRef",
-			"uml-id": "_nVubgMKvEeWwLJhHQlOGSQ",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 2,
-			"is-read-only": false,
-			"is-key": 2
-		},
-		"segmentStatusType": {
-			"id": "segmentStatusType",
-			"uml-id": "_KwZVcMUCEeW3xsRKtpCLuA",
-			"uml-type": "uml:DataType"
-		},
-		"segmentStatusTypeId": {
-			"id": "segmentStatusTypeId",
-			"uml-id": "_7JBAYOLbEeWM2vUDE3Xqhw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#EShort",
-			"order-number": 1,
-			"is-read-only": true,
-			"is-key": 1
-		},
-		"segmentIsReservedForTdm": {
-			"id": "segmentIsReservedForTdm",
-			"uml-id": "__1DMwMUCEeW3xsRKtpCLuA",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-			"order-number": 2,
-			"is-read-only": true,
-			"description": [
-				"The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."
-			]
-		},
-		"operationalStatus": {
-			"id": "operationalStatus",
-			"uml-id": "_ZA94EMUCEeW3xsRKtpCLuA",
-			"uml-type": "ownedAttribute",
-			"type": "../OnfModel-CoreModel/CoreModel.uml#_lNclkLEtEeSZUdYfPSdgew",
-			"order-number": 3,
-			"is-read-only": true,
-			"description": [
-				"Current operational status of each segment."
-			]
-		},
-		"containerProblemSeverityType": {
-			"id": "containerProblemSeverityType",
-			"uml-id": "_OMPgwGz0Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType"
-		},
-		"problemKindName": {
-			"id": "problemKindName",
-			"uml-id": "_OMQH0Gz0Eeaf-__BRLM84g",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": false,
-			"is-key": 1,
-			"description": [
-				"Name of the alarm according to Container::ContainerCapability::supportedAlarms"
-			]
-		},
-		"problemKindSeverity": {
-			"id": "problemKindSeverity",
-			"uml-id": "_OMQH02z0Eeaf-__BRLM84g",
-			"uml-type": "ownedAttribute",
-			"type": "_eIml0JH1EeWUdbnmmNiTAA",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"Severity of this type of alarm."
-			]
-		},
-		"containerCurrentProblemType": {
-			"id": "containerCurrentProblemType",
-			"uml-id": "__h1n4MXpEeWJ6KZuc0h_vw",
-			"uml-type": "uml:DataType"
-		},
-		"problemName": {
-			"id": "problemName",
-			"uml-id": "__h1n4cXpEeWJ6KZuc0h_vw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-			"order-number": 1,
-			"is-read-only": true,
-			"description": [
-				"Name of the alarm according to Container::ContainerCapability::supportedAlarms"
-			]
-		},
-		"problemSeverity": {
-			"id": "problemSeverity",
-			"uml-id": "__h1n48XpEeWJ6KZuc0h_vw",
-			"uml-type": "ownedAttribute",
-			"type": "_eIml0JH1EeWUdbnmmNiTAA",
-			"order-number": 2,
-			"is-read-only": false,
-			"description": [
-				"Severity of the alarm."
-			]
-		},
-		"containerPerformanceType": {
-			"id": "containerPerformanceType",
-			"uml-id": "_U9tW0EQeEea3g-FxAUaYRg",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Consolidated performance information of the Container."
-			]
-		},
-		"txEthernetBytesMaxS": {
-			"id": "txEthernetBytesMaxS",
-			"uml-id": "_MaHB8H1IEeWHjMaYlqnBcw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 1,
-			"is-read-only": true,
-			"unit": "Bytes/s",
-			"description": [
-				"Required data volume = 31bit"
-			]
-		},
-		"txEthernetBytesMaxM": {
-			"id": "txEthernetBytesMaxM",
-			"uml-id": "_M3NNoH1IEeWHjMaYlqnBcw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#ELong",
-			"order-number": 2,
-			"is-read-only": true,
-			"unit": "Bytes/min",
-			"description": [
-				"Required data volume = 37bit"
-			]
-		},
-		"txEthernetBytesSum": {
-			"id": "txEthernetBytesSum",
-			"uml-id": "_NWtNEH1IEeWHjMaYlqnBcw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/EcorePrimitiveTypes.library.uml#ELong",
-			"order-number": 3,
-			"is-read-only": true,
-			"unit": "Bytes",
-			"description": [
-				"Required data volume = 47bit"
-			]
-		},
-		"timePeriod": {
-			"id": "timePeriod",
-			"uml-id": "_Nyme4H1IEeWHjMaYlqnBcw",
-			"uml-type": "ownedAttribute",
-			"type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-			"order-number": 4,
-			"is-read-only": true,
-			"unit": "s",
-			"description": [
-				"Required data volume = 17bit"
-			]
-		},
-		"containerCurrentPerformanceType": {
-			"id": "containerCurrentPerformanceType",
-			"uml-id": "_pA5AQGz6Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into current performance information by inheriting from OTN_CurrentData."
-			]
-		},
-		"containerHistoricalPerformanceType": {
-			"id": "containerHistoricalPerformanceType",
-			"uml-id": "_pTaToGz6Eeaf-__BRLM84g",
-			"uml-type": "uml:DataType",
-			"description": [
-				"Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-			]
-		},
-		"performanceData": {
-			"id": "performanceData",
-			"uml-id": "_i5STYGz7Eeaf-__BRLM84g",
-			"uml-type": "ownedAttribute",
-			"type": "_U9tW0EQeEea3g-FxAUaYRg",
-			"order-number": 1,
-			"is-read-only": true
-		},
-		"_eIml0JH1EeWUdbnmmNiTAA": {
-			"id": "severityType",
-			"uml-id": "_eIml0JH1EeWUdbnmmNiTAA",
-			"enum": [
-				"non-alarmed",
-				"warning",
-				"minor",
-				"major",
-				"critical"
-			],
-			"is-read-only": false,
-			"description": [
-				"According to ITU-T M.3160"
-			]
-		},
-		"_e85NsI99EeWFluv9KLLl5A": {
-			"id": "polarizationType",
-			"uml-id": "_e85NsI99EeWFluv9KLLl5A",
-			"enum": [
-				"not-specified",
-				"horizontal",
-				"vertical"
-			],
-			"is-read-only": false
-		},
-		"_DaB5IJRgEeWxIPEwZQ_gmw": {
-			"id": "protectionType",
-			"uml-id": "_DaB5IJRgEeWxIPEwZQ_gmw",
-			"enum": [
-				"hsb"
-			],
-			"is-read-only": false
-		},
-		"_01_dYJReEeWxIPEwZQ_gmw": {
-			"id": "roleType",
-			"uml-id": "_01_dYJReEeWxIPEwZQ_gmw",
-			"enum": [
-				"working",
-				"protection",
-				"protected"
-			],
-			"is-read-only": false
-		},
-		"_DUJs8JOXEeWz-6sqLzUedw": {
-			"id": "airInterfaceDiversityStatusType",
-			"uml-id": "_DUJs8JOXEeWz-6sqLzUedw",
-			"enum": [
-				"groupDown",
-				"notAllAiActive",
-				"allAiActive"
-			],
-			"is-read-only": false
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json
deleted file mode 100644
index fd957f3..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/core-model.schema-information.json
+++ /dev/null
@@ -1,2296 +0,0 @@
-{
- "schema-information": {
-  "forwarding-domain": {
-   "id": "forwarding-domain",
-   "uml-id": "_oGql-FLNEeO75dO39GbF8Q",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The ForwardingDomain (FD) class models the topological component that represents the opportunity to enable forwarding (of specific transport characteristic information at one or more protocol layers) between points represented by the LTP in the model. The FD object provides the context for and constrains the formation, adjustment and removal of FCs and hence offers the potential to enable forwarding. The LTPs available are those defined at the boundary of the FD. At a lower level of recursion an FD could represent a fabric (switch matrix) in a Network Element (NE). An NE can encompass more than one switch matrix and hence more than one FD. The FD representing a switch matrix can be further partitioned. The FD corresponds to a subnetwork [ITU-T G.800], FlowDomain [TMF 612] and a MultiLayerSubNetwork (MLSN) [TMF 612]. As in the TMF concept of MLSN and unlike the ITU-T concet of subnetwork model the FD can support more than one layer-protocol."
-   ],
-   "uml-name": "ForwardingDomain"
-  },
-  "layer-protocol-name": {
-   "id": "layer-protocol-name",
-   "uml-id": "_P-Hp8MD4EeSoNOrYOfaryg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"
-   ],
-   "uml-name": "LayerProtocolName"
-  },
-  "lower-level-fd": {
-   "id": "lower-level-fd",
-   "uml-id": "_oGqmBVLNEeO75dO39GbF8Q",
-   "uml-type": "ownedAttribute",
-   "type": "_oGql-FLNEeO75dO39GbF8Q",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "The FD class supports a recursive aggregation relationship (HigherLevelFdEncompassesLowerLevelFds) such that the internal construction of an FD can be exposed as multiple lower level FDs and associated Links (partitioning). The aggregated FDs and Links form an interconnected topology that provides and describes the capability of the aggregating FD. Note that the model actually represents aggregation of lower level FDs into higher level FDs as views rather than FD partition, and supports multiple views. Aggregation allow reallocation of capacity from lower level FDs to different higher level FDs as if the network is reorganized (as the association is aggregation not composition)."
-   ],
-   "uml-name": "_lowerLevelFd"
-  },
-  "fc": {
-   "id": "fc",
-   "uml-id": "_oGql_1LNEeO75dO39GbF8Q",
-   "uml-type": "ownedAttribute",
-   "type": "_oGqmC1LNEeO75dO39GbF8Q",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "An FD aggregares one or more FCs. A aggregated FC connects LTPs that bound the FD."
-   ],
-   "uml-name": "_fc"
-  },
-  "ltp": {
-   "id": "ltp",
-   "uml-id": "_8SXNrD-HEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "_ltp"
-  },
-  "lower-level-link": {
-   "id": "lower-level-link",
-   "uml-id": "_dm_ngBiQEeSh8KVgZCMyDw",
-   "uml-type": "ownedAttribute",
-   "type": "_oGqnjVLNEeO75dO39GbF8Q",
-   "order-number": 5,
-   "is-read-only": false,
-   "description": [
-    "The FD encompasses Links that interconnect lower level FDs and collect links that are wholly within the bounds of the FD. See also _lowerLevelFd."
-   ],
-   "uml-name": "_lowerLevelLink"
-  },
-  "forwarding-construct": {
-   "id": "forwarding-construct",
-   "uml-id": "_oGqmC1LNEeO75dO39GbF8Q",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The ForwardingConstruct (FC) class models enabled constrained potential for forwarding between two or more LTPs at a particular specific layerProtocol. Like the LTP, the FC supports any transport protocol including all circuit and packet forms. It is used to effect forwarding of transport characteristic (layer protocol) information. An FC can be in only one FD. The ForwardingConstruct is a Forwarding entity. At a low level of the recursion, a FC represents a cross-connection within an NE. It may also represent a fragment of a cross-connection under certain circumstances. The FC object can be used to represent many different structures including point-to-point (P2P), point-to-multipoint (P2MP), rooted-multipoint (RMP) and multipoint-to-multipoint (MP2MP) bridge and selector structures for linear, ring or mesh protection schemes."
-   ],
-   "uml-name": "ForwardingConstruct"
-  },
-  "lower-level-fc": {
-   "id": "lower-level-fc",
-   "uml-id": "_i7UzkFYfEeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_oGqmC1LNEeO75dO39GbF8Q",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "An FC object supports a recursive aggregation relationship such that the internal construction of an FC can be exposed as multiple lower level FC objects (partitioning). Aggregation is used as for the FD to allow changes in hierarchy. FC aggregation reflects FD aggregation. The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning."
-   ],
-   "uml-name": "_lowerLevelFc"
-  },
-  "fc-route": {
-   "id": "fc-route",
-   "uml-id": "_A8SFwFYgEeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_9UVusFYfEeOVGaP4lO41SQ",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "An FC object can have zero or more routes, each of which is defined as a list of lower level FC objects describing the flow across the network."
-   ],
-   "uml-name": "_fcRoute"
-  },
-  "fc-port": {
-   "id": "fc-port",
-   "uml-id": "_b_lUAFYgEeOVGaP4lO41SQ",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The association of the FC to LTPs is made via FcPorts. The FcPort class models the access to the FC function. The traffic forwarding between the associated FcPorts of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience, the FcPort may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The FcPort replaces the Protection Unit of a traditional protection model. The ForwardingConstruct can be considered as a component and the FcPort as a Port on that component."
-   ],
-   "uml-name": "FcPort"
-  },
-  "fc-switch": {
-   "id": "fc-switch",
-   "uml-id": "_a97NQFYhEeOVGaP4lO41SQ",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The FcSwitch class models the switched forwarding of traffic (traffic flow) between FcPorts and is present where there is protection functionality in the FC. If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort. The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time. It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1). It may be locked out (prevented from switching), force switched or manual switched. It will indicate switch state and change of state. The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is  open ). The ability for a Switch to be  high impedance  allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict. This ability allows multiple alternate routes to be present that otherwise would be in conflict."
-   ],
-   "uml-name": "FcSwitch"
-  },
-  "forwarding-direction": {
-   "id": "forwarding-direction",
-   "uml-id": "_9_yMUEDAEeWQeOKbNUpP9A",
-   "uml-type": "ownedAttribute",
-   "type": "_dV67AEC8EeWxhL2B6Peg6A",
-   "order-number": 6,
-   "is-read-only": false,
-   "description": [
-    "The directionality of the ForwardingConstruct. Is applicable to simple ForwardingConstructs where all FcPorts are BIDIRECTIONAL (the ForwardingConstruct will be BIDIRECTIONAL) or UNIDIRECTIONAL (the ForwardingConstruct will be UNIDIRECTIONAL). Is not present in more complex cases."
-   ],
-   "uml-name": "forwardingDirection",
-   "controlType": [
-    "bidirectional",
-    "unidirectional",
-    "undefined-or-unknown"
-   ]
-  },
-  "is-protection-lock-out": {
-   "id": "is-protection-lock-out",
-   "uml-id": "_ls-wcMN9EeWwZ527PhfFSA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 6,
-   "is-read-only": false,
-   "description": [
-    "The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."
-   ],
-   "uml-name": "isProtectionLockOut",
-   "controlType": "checkbox"
-  },
-  "service-priority": {
-   "id": "service-priority",
-   "uml-id": "_3co20MOCEeWwZ527PhfFSA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 8,
-   "is-read-only": false,
-   "description": [
-    "Relevant where  service  FCs are competing for server resources. Used to determine which signal FC is allocated resource. The priority of the  service  with respect to other  services . Lower numeric value means higher priority. Covers cases such as preemptable."
-   ],
-   "uml-name": "servicePriority",
-   "controlType": "number"
-  },
-  "supported-link": {
-   "id": "supported-link",
-   "uml-id": "_0172EFHnEeaDuo8VlVeg_g",
-   "uml-type": "ownedAttribute",
-   "type": "_oGqnjVLNEeO75dO39GbF8Q",
-   "order-number": 9,
-   "is-read-only": false,
-   "description": [
-    "An FC that spans between LTPs that terminate the LayerProtocol usually supports one or more links in the client layer."
-   ],
-   "uml-name": "_supportedLink"
-  },
-  "network-element": {
-   "id": "network-element",
-   "uml-id": "_oGqnr1LNEeO75dO39GbF8Q",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The Network Element (NE) class represents a network element (traditional NE) in the data plane. A data plane network element is essentially a consolidation of capabilities that can be viewed and controlled through a  single  management-control port. In the direct interface from an SDN controller to a network element in the data plane, the NetworkElement object defines the scope of control for the resources within the network element For example internal transfer of user information between the external terminations (ports of the NE), encapsulation, multiplexing/demultiplexing, and OAM functions, etc. The NetworkElement provides the scope of the naming space for identifying objects representing the resources within the data plane network element. NE is really a product bundling or some view of management scope, management access, session. The NE is not directly part of topology but brings meaning to the FD context and the LTP context (and hence the links)."
-   ],
-   "uml-name": "NetworkElement"
-  },
-  "fd": {
-   "id": "fd",
-   "uml-id": "_oGqnslLNEeO75dO39GbF8Q",
-   "uml-type": "ownedAttribute",
-   "type": "_oGql-FLNEeO75dO39GbF8Q",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "Represents the FD that is completely within the boundary of the NE. At a low level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs) and the FD representing the switch matrix can be further partitioned. Where an FD is referenced by the NeEncompassesFd association, any FDs that it encompasses (i.e., that are associated with it by HigherLevelFdEncompassesLowerLevelFds), must also be encompassed by the NE and hence must have the NeEncompassesFd association."
-   ],
-   "uml-name": "_fd"
-  },
-  "role": {
-   "id": "role",
-   "uml-id": "_Ykm6QFeGEeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_DUU_sGZ_EeWrX_JIGzXlSg",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "Each FcPort of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."
-   ],
-   "uml-name": "role"
-  },
-  "fc-port-direction": {
-   "id": "fc-port-direction",
-   "uml-id": "_1HbEgEDAEeWQeOKbNUpP9A",
-   "uml-type": "ownedAttribute",
-   "type": "_2WpC8EC7EeWxhL2B6Peg6A",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "The orientation of defined flow at the FcPort."
-   ],
-   "uml-name": "fcPortDirection",
-   "controlType": [
-    "bidirectional",
-    "input",
-    "output",
-    "unidentified-or-unknown"
-   ]
-  },
-  "selection-priority": {
-   "id": "selection-priority",
-   "uml-id": "_02awkMOEEeWwZ527PhfFSA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 5,
-   "is-read-only": false,
-   "description": [
-    "The preference priority of the resource in the protection scheme for a particular FC. The lower the value the higher the priority. A lower value of selection priority is preferred If two resources have the same value they are of equal priory. There is no preference between equal priorities. If a resource with the lowest value selection priority fails then the next lowest value available (may be the same value) is picked. Hence on failure of the current resource the next best available will be selected. If there are several equal values the choice is essentially arbitrary). If the scheme is revertive then when a resource of higher priority than the currently selected resource recovers it will be selected. This is equivalent to working/protection but allows for all static scheme types with n:m capability. In simple schemes 0 = working and 1 = protecting."
-   ],
-   "uml-name": "selectionPriority",
-   "controlType": "number"
-  },
-  "is-internal-port": {
-   "id": "is-internal-port",
-   "uml-id": "_CSlIwNViEeWhfIeymCGl5Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 6,
-   "is-read-only": true,
-   "description": [
-    "The FcPort is not exposed and cannot have associated LTPs. This form of FcPort is used to enable chaining of FcSwitches or FcRoutes in complex network protection scenarios."
-   ],
-   "uml-name": "isInternalPort",
-   "controlType": "checkbox"
-  },
-  "fc-route-feeds-fc-port-egress": {
-   "id": "fc-route-feeds-fc-port-egress",
-   "uml-id": "_xbsp8TLREea40e5DA9KE3w",
-   "uml-type": "ownedAttribute",
-   "type": "_9UVusFYfEeOVGaP4lO41SQ",
-   "order-number": 7,
-   "is-read-only": false,
-   "description": [
-    "Identifies which route(s) currently actively forward to the FcPort to exit the FC to an LTP (or for an internal FcPort to propagate to the next internal switch/route)."
-   ],
-   "uml-name": "_fcRouteFeedsFcPortEgress"
-  },
-  "layer-protocol": {
-   "id": "layer-protocol",
-   "uml-id": "_gROecFYXEeOVGaP4lO41SQ",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The projection of an LTP into each transport layer is represented by a LayerProtocol (LP) instance. A LayerProtocol instances can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client - server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where there is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."
-   ],
-   "uml-name": "LayerProtocol"
-  },
-  "configured-client-capacity": {
-   "id": "configured-client-capacity",
-   "uml-id": "_CUJD4BicEeSh8KVgZCMyDw",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2swpathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 2,
-   "is-read-only": false,
-   "visible": false,
-   "description": [
-    "Provides a summarized view of the client capacity that is configurable for use. Note the client LTP association should provide all necessary detail hence this attribute is questionable."
-   ],
-   "uml-name": "configuredClientCapacity"
-  },
-  "lp-direction": {
-   "id": "lp-direction",
-   "uml-id": "_GuuSYEDBEeWQeOKbNUpP9A",
-   "uml-type": "ownedAttribute",
-   "type": "_RWILYEDAEeWQeOKbNUpP9A",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flows. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"
-   ],
-   "uml-name": "lpDirection",
-   "controlType": [
-    "bidirectional",
-    "sink",
-    "source",
-    "undefined-or-unknown"
-   ]
-  },
-  "termination-state": {
-   "id": "termination-state",
-   "uml-id": "_p2YfoGeEEeWmgIwAIZlYKQ",
-   "uml-type": "ownedAttribute",
-   "type": "_6anG8GeEEeWmgIwAIZlYKQpathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 4,
-   "is-read-only": false,
-   "description": [
-    "Indicates whether the layer is terminated and if so how."
-   ],
-   "uml-name": "terminationState"
-  },
-  "config-and-switch-controller": {
-   "id": "config-and-switch-controller",
-   "uml-id": "_d6vwsMQhEeWlWIVxswb46A",
-   "uml-type": "ownedAttribute",
-   "type": "_k1gHQJo5EeOyHKqw-cQ_eg",
-   "order-number": 5,
-   "is-read-only": false,
-   "description": [
-    "A switch controller external to the LayerProtocol. The controller will coordinate one or more switches in one or more FCs related to the LayerProtocol"
-   ],
-   "uml-name": "_configAndSwitchController"
-  },
-  "fc-blocks-signal-to-lp": {
-   "id": "fc-blocks-signal-to-lp",
-   "uml-id": "_OW-PsMjVEeWSlYzRfsq8lQ",
-   "uml-type": "ownedAttribute",
-   "type": "_zMwrsMjVEeWSlYzRfsq8lQ",
-   "order-number": 7,
-   "is-read-only": false,
-   "visible":false,
-   "uml-name": "fcBlocksSignalToLp"
-  },
-  "logical-termination-point": {
-   "id": "logical-termination-point",
-   "uml-id": "_eEpDMFX4EeOVGaP4lO41SQ",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The LogicalTerminationPoint (LTP) class encapsulates the termination and adaptation functions of one or more transport layers represented by instances of LayerProtocol. The encapsulated transport layers have a simple fixed 1:1 client-server relationship defined by association end ordering. The structure of LTP supports all transport protocols including circuit and packet forms."
-   ],
-   "uml-name": "LogicalTerminationPoint"
-  },
-  "server-ltp": {
-   "id": "server-ltp",
-   "uml-id": "_D4N9IFX5EeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "References contained LTPs representing servers of this LTP in an inverse multiplexing configuration (e.g. VCAT)."
-   ],
-   "uml-name": "_serverLtp"
-  },
-  "client-ltp": {
-   "id": "client-ltp",
-   "uml-id": "_3Y4zAFYWEeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "References contained LTPs representing client traffic of this LTP for normal cases of multiplexing."
-   ],
-   "uml-name": "_clientLtp"
-  },
-  "lp": {
-   "id": "lp",
-   "uml-id": "_lvFOQFYXEeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_gROecFYXEeOVGaP4lO41SQ",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "Ordered list of LayerProtocols that this LTP is comprised of where the first entry in the list is the lowest server layer (e.g. physical)."
-   ],
-   "uml-name": "_lp"
-  },
-  "connected-ltp": {
-   "id": "connected-ltp",
-   "uml-id": "_CHM6YFYYEeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 4,
-   "is-read-only": false,
-   "description": [
-    "Applicable in a simple context where two LTPs are associated via a non-adjustable enabled forwarding. Reduces clutter removing the need for two additional LTPs and an FC with a pair of FcPorts."
-   ],
-   "uml-name": "_connectedLtp"
-  },
-  "peer-ltp": {
-   "id": "peer-ltp",
-   "uml-id": "_TkuhMFYYEeOVGaP4lO41SQ",
-   "uml-type": "ownedAttribute",
-   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 5,
-   "is-read-only": false,
-   "description": [
-    "References contained LTPs representing the reversal of orientation of flow where two LTPs are associated via a non-adjustable enabled forwarding and where the referenced LTP is fully dependent on the this LTP."
-   ],
-   "uml-name": "_peerLtp"
-  },
-  "physical-port-reference": {
-   "id": "physical-port-reference",
-   "uml-id": "_RLDi4BieEeSh8KVgZCMyDw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 6,
-   "is-read-only": false,
-   "description": [
-    "One or more text labels for the unmodelled physical port associated with the LTP. In many cases there is no associated physical port."
-   ],
-   "uml-name": "physicalPortReference",
-   "controlType": "text"
-  },
-  "ltp-in-other-view": {
-   "id": "ltp-in-other-view",
-   "uml-id": "_vq1NIBigEeSh8KVgZCMyDw",
-   "uml-type": "ownedAttribute",
-   "type": "_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 7,
-   "is-read-only": false,
-   "description": [
-    "References one or more LTPs in other views that represent this LTP. The referencing LTP is the provider of capability."
-   ],
-   "uml-name": "_ltpInOtherView"
-  },
-  "ltp-direction": {
-   "id": "ltp-direction",
-   "uml-id": "_S811EEDBEeWQeOKbNUpP9A",
-   "uml-type": "ownedAttribute",
-   "type": "_RWILYEDAEeWQeOKbNUpP9A",
-   "order-number": 8,
-   "is-read-only": false,
-   "description": [
-    "The overall directionality of the LTP. - A BIDIRECTIONAL LTP must have at least some LPs that are BIDIRECTIONAL but may also have some SINK and/or SOURCE LPs. - A SINK LTP can only contain SINK LPs - A SOURCE LTP can only contain SOURCE LPs"
-   ],
-   "uml-name": "ltpDirection",
-   "controlType": [
-    "bidirectional",
-    "sink",
-    "source",
-    "undefined-or-unknown"
-   ]
-  },
-  "configuration-and-switch-controller": {
-   "id": "configuration-and-switch-controller",
-   "uml-id": "_k1gHQJo5EeOyHKqw-cQ_eg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme."
-   ],
-   "uml-name": "ConfigurationAndSwitchController"
-  },
-  "switch-rule": {
-   "id": "switch-rule",
-   "uml-id": "_oxb_EJo-EeOyHKqw-cQ_eg",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "A sketch of the presence of complex rules governing the switch behavior."
-   ],
-   "uml-name": "switchRule"
-  },
-  "control-parameters": {
-   "id": "control-parameters",
-   "uml-id": "_k40wIVJKEeaDuo8VlVeg_g",
-   "uml-type": "ownedAttribute",
-   "type": "_T5-osJ4HEeOO3om500DFKg",
-   "order-number": 10,
-   "is-read-only": false,
-   "uml-name": "_controlParameters"
-  },
-  "profile-proxy": {
-   "id": "profile-proxy",
-   "uml-id": "_DEWvsJozEeOyHKqw-cQ_eg",
-   "uml-type": "ownedAttribute",
-   "type": "_rgdnkJoyEeOyHKqw-cQ_eg",
-   "order-number": 5,
-   "is-read-only": false,
-   "description": [
-    "Provides a set of predefined values for switch control in place of the direct values available via the FcSwitch or via _configurationAndSwitchControl."
-   ],
-   "uml-name": "_profileProxy"
-  },
-  "local-pac": {
-   "id": "local-pac",
-   "uml-id": "_JOA30MOxEeWwZ527PhfFSA",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Provides the properties of a LocalClass via composition."
-   ],
-   "uml-name": "Local_Pac"
-  },
-  "global-pac": {
-   "id": "global-pac",
-   "uml-id": "_iBsM0MOxEeWwZ527PhfFSA",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Provides the properties of a GlobalClass via composition."
-   ],
-   "uml-name": "Global_Pac"
-  },
-  "is-frozen": {
-   "id": "is-frozen",
-   "uml-id": "_Xt2wEMOyEeWwZ527PhfFSA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 7,
-   "is-read-only": false,
-   "description": [
-    "Temporarily prevents any switch action to be taken and, as such, freezes the current state. Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored. All administrative controls of any aspect of protection are rejected."
-   ],
-   "uml-name": "isFrozen",
-   "controlType": "checkbox"
-  },
-  "is-coordinated-switching-both-ends": {
-   "id": "is-coordinated-switching-both-ends",
-   "uml-id": "_QuZt0MO2EeWwZ527PhfFSA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 8,
-   "is-read-only": false,
-   "description": [
-    "The C&SC is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends."
-   ],
-   "uml-name": "isCoordinatedSwitchingBothEnds",
-   "controlType": "checkbox"
-  },
-  "subordinate-controller": {
-   "id": "subordinate-controller",
-   "uml-id": "_OjA04MQlEeWlWIVxswb46A",
-   "uml-type": "ownedAttribute",
-   "type": "_k1gHQJo5EeOyHKqw-cQ_eg",
-   "order-number": 9,
-   "is-read-only": false,
-   "description": [
-    "A C&SC that is fully or partially subordinate this C&SC. A peer is considered as partially subordinate in that the peer will respond to requests for action from this C&SC but will also make requests for action to be carried out by this C&SC. Where there is a peer relationship each controller in the peering will see the other controller as subordinate."
-   ],
-   "uml-name": "_subordinateController"
-  },
-  "control-parameters-pac": {
-   "id": "control-parameters-pac",
-   "uml-id": "_T5-osJ4HEeOO3om500DFKg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A list of control parameters to apply to a switch."
-   ],
-   "uml-name": "ControlParameters_Pac"
-  },
-  "reversion-mode": {
-   "id": "reversion-mode",
-   "uml-id": "_oGqn41LNEeO75dO39GbF8Q",
-   "uml-type": "ownedAttribute",
-   "type": "_oGqjf1LNEeO75dO39GbF8Q",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "Moved to ControlParameter_Pac... This attribute whether or not the protection scheme is revertive or non-revertive."
-   ],
-   "uml-name": "reversionMode",
-   "controlType": [
-    "revertive",
-    "non-revertive"
-   ]
-  },
-  "wait-to-revert-time": {
-   "id": "wait-to-revert-time",
-   "uml-id": "_eSxzEJ4IEeOO3om500DFKg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource."
-   ],
-   "uml-name": "waitToRevertTime",
-   "controlType": "number"
-  },
-  "prot-type": {
-   "id": "prot-type",
-   "uml-id": "_oGqn6lLNEeO75dO39GbF8Q",
-   "uml-type": "ownedAttribute",
-   "type": "_c3Hu8Gb3EeWrX_JIGzXlSg",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "Indicates the protection scheme that is used for the ProtectionGroup."
-   ],
-   "uml-name": "protType"
-  },
-  "hold-off-time": {
-   "id": "hold-off-time",
-   "uml-id": "_oGqn6FLNEeO75dO39GbF8Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "Moved to ControlParameter_Pac... This attribute indicates the time, in seconds, between declaration of unacceptable quality of signal on the currently selected FcPort, and the initialization of the protection switching algorithm."
-   ],
-   "uml-name": "holdOffTime",
-   "controlType": "number"
-  },
-  "network-scheme-specification": {
-   "id": "network-scheme-specification",
-   "uml-id": "_doxoIDLIEea40e5DA9KE3w",
-   "uml-type": "ownedAttribute",
-   "type": "_w-HB8DLEEea40e5DA9KE3w",
-   "order-number": 5,
-   "is-read-only": false,
-   "uml-name": "_networkSchemeSpecification"
-  },
-  "selected-fc-port": {
-   "id": "selected-fc-port",
-   "uml-id": "_2PdiYI8lEeOw_ste-s6RrA",
-   "uml-type": "ownedAttribute",
-   "type": "_b_lUAFYgEeOVGaP4lO41SQ",
-   "order-number": 4,
-   "is-read-only": false,
-   "description": [
-    "Indicates which points are selected by the switch. Depending on the switch spec (via Fcspec) - more than one FcPort can be selected at any one time (e.g. egress switch, ingress packet switch) - zero FcPorts can be selected. For an ingress switch this indicates that the switch common (egress) is  high impedance  ."
-   ],
-   "uml-name": "_selectedFcPort"
-  },
-  "internal-configuration-and-switch-control": {
-   "id": "internal-configuration-and-switch-control",
-   "uml-id": "_tbetAJ4HEeOO3om500DFKg",
-   "uml-type": "ownedAttribute",
-   "type": "_k1gHQJo5EeOyHKqw-cQ_eg",
-   "order-number": 6,
-   "is-read-only": false,
-   "description": [
-    "A switch controller encapsulated in the FcSwitch."
-   ],
-   "uml-name": "_internalConfigurationAndSwitchControl"
-  },
-  "switch-control": {
-   "id": "switch-control",
-   "uml-id": "_LSnbYMOGEeWwZ527PhfFSA",
-   "uml-type": "ownedAttribute",
-   "type": "_e-7DYMOFEeWwZ527PhfFSA",
-   "order-number": 7,
-   "is-read-only": false,
-   "description": [
-    "Degree of administrative control applied to the switch selection."
-   ],
-   "uml-name": "switchControl",
-   "controlType": [
-    "normal",
-    "manual",
-    "forced"
-   ]
-  },
-  "switch-selects-ports": {
-   "id": "switch-selects-ports",
-   "uml-id": "_FBaoAMQTEeWlWIVxswb46A",
-   "uml-type": "ownedAttribute",
-   "type": "_2WpC8EC7EeWxhL2B6Peg6A",
-   "order-number": 8,
-   "is-read-only": false,
-   "description": [
-    "Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both."
-   ],
-   "uml-name": "switchSelectsPorts",
-   "controlType": [
-    "bidirectional",
-    "input",
-    "output",
-    "unidentified-or-unknown"
-   ]
-  },
-  "switch-selection-reason": {
-   "id": "switch-selection-reason",
-   "uml-id": "_XjsGkCi_EeaGGvAxxSe1uA",
-   "uml-type": "ownedAttribute",
-   "type": "_zRKlICi9EeaGGvAxxSe1uA",
-   "order-number": 9,
-   "is-read-only": true,
-   "description": [
-    "The reason for the current switch selection."
-   ],
-   "uml-name": "switchSelectionReason",
-   "controlType": []
-  },
-  "wait-to-restore-time": {
-   "id": "wait-to-restore-time",
-   "uml-id": "_oGqn5lLNEeO75dO39GbF8Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 11,
-   "is-read-only": false,
-   "description": [
-    "Moved to ControlParameter_Pac and changed to waitToRevert... If the protection system is revertive, this attribute specifies the amount of time, in seconds, to wait after the preferred FcPort returns to an acceptable state of operation (e.g. a fault has cleared) before restoring traffic to that preferred FcPort."
-   ],
-   "uml-name": "waitToRestoreTime",
-   "controlType": "number"
-  },
-  "name": {
-   "id": "name",
-   "uml-id": "_YCL8kMDZEeWbqPZwR-Ot6A",
-   "uml-type": "ownedAttribute",
-   "type": "_XUarEMDuEeWbqPZwR-Ot6A",
-   "order-number": 4,
-   "is-read-only": false,
-   "description": [
-    "If the element is a name."
-   ],
-   "uml-name": "name"
-  },
-  "global-class": {
-   "id": "global-class",
-   "uml-id": "_iVJ1kI2wEeO38ZmbECnvbg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents a type of thing (an Entity) that has instances which can exist in their own right (independently of any others). Entity: Has identity, defined boundary, properties, functionality and lifecycle in a global context. (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable Entity Feature)."
-   ],
-   "uml-name": "GlobalClass"
-  },
-  "local-id": {
-   "id": "local-id",
-   "uml-id": "_cq2mQMDYEeWbqPZwR-Ot6A",
-   "uml-type": "ownedAttribute",
-   "type": "_dCdzAMDuEeWbqPZwR-Ot6A",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "If the element is a localId (where the element above in the hierarchy must be the context in which the specific localId is relevant)."
-   ],
-   "uml-name": "localId"
-  },
-  "uuid": {
-   "id": "uuid",
-   "uml-id": "_KeLlAMDZEeWbqPZwR-Ot6A",
-   "uml-type": "ownedAttribute",
-   "type": "_SU3Q4I30EeO38ZmbECnvbg",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "If the element is a uuid (where this element could be the top of a hierarchy but may also be at some level in the hierarchy where address navigation is considered necessary to assist in location of the UUID)."
-   ],
-   "uml-name": "uuid"
-  },
-  "local-class": {
-   "id": "local-class",
-   "uml-id": "_k5nWYI2wEeO38ZmbECnvbg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A LocalClass represents a Feature of an Entity. It is inseparable from a GlobalClass but is a distinct feature of that GlobalClass such that the instances of LocalClass are able to have associations to other instances.. Feature of an Entity: An inseparable, externally distinguishable part of an entity. The mandatory LocalId of the LocalClass instance is unique in the context of the GlobalClass from which it is inseparable. (consider in the context of a Class: (usage) The representation of a thing that may be an entity or an inseparable feature of an entity)"
-   ],
-   "uml-name": "LocalClass"
-  },
-  "label": {
-   "id": "label",
-   "uml-id": "_olrqYI2uEeO38ZmbECnvbg",
-   "uml-type": "ownedAttribute",
-   "type": "_y7oy8I3tEeO38ZmbECnvbg",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "List of labels."
-   ],
-   "uml-name": "label"
-  },
-  "extension": {
-   "id": "extension",
-   "uml-id": "_uQqu4I28EeO38ZmbECnvbg",
-   "uml-type": "ownedAttribute",
-   "type": "_y7oy8I3tEeO38ZmbECnvbg",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "List of simple name-value extensions."
-   ],
-   "uml-name": "extension"
-  },
-  "universal-id-authority": {
-   "id": "universal-id-authority",
-   "uml-id": "_StA-4I23EeO38ZmbECnvbg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents the authority that controls the allocation of UUIDs."
-   ],
-   "uml-name": "UniversalIdAuthority"
-  },
-  "name-and-value-authority": {
-   "id": "name-and-value-authority",
-   "uml-id": "_ulDtsI3AEeO38ZmbECnvbg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents the authority that controls the legal values for the names and values of a name/value attribute."
-   ],
-   "uml-name": "NameAndValueAuthority"
-  },
-  "conditional-package": {
-   "id": "conditional-package",
-   "uml-id": "_-ZWVQJP0EeOqfpp-ZJSmaA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The base class for conditional packages."
-   ],
-   "uml-name": "ConditionalPackage"
-  },
-  "state-pac": {
-   "id": "state-pac",
-   "uml-id": "_RG6VILEtEeSZUdYfPSdgew",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Provides general state attributes."
-   ],
-   "uml-name": "State_Pac"
-  },
-  "operational-state": {
-   "id": "operational-state",
-   "uml-id": "_dO6owLEtEeSZUdYfPSdgew",
-   "uml-type": "ownedAttribute",
-   "type": "_lNclkLEtEeSZUdYfPSdgew",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "The operational state is used to indicate whether or not the resource is installed and working."
-   ],
-   "uml-name": "operationalState",
-   "controlType": [
-    "disabled",
-    "enabled"
-   ]
-  },
-  "administrative-control": {
-   "id": "administrative-control",
-   "uml-id": "_7gqwALEtEeSZUdYfPSdgew",
-   "uml-type": "ownedAttribute",
-   "type": "_-xPeALEvEeSZUdYfPSdgew",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "The administrativeControl state provides control of the availability of specific resources without modification to the provisioning of those resources. The value is the current control target. The actual administrativeState may or may not be at target."
-   ],
-   "uml-name": "administrativeControl",
-   "controlType": [
-    "unlock",
-    "lock-passive",
-    "lock-active",
-    "lock-immediate"
-   ]
-  },
-  "adminisatratve-state": {
-   "id": "adminisatratve-state",
-   "uml-id": "_AjGvILEuEeSZUdYfPSdgew",
-   "uml-type": "ownedAttribute",
-   "type": "_KSKOYLEuEeSZUdYfPSdgew",
-   "order-number": 3,
-   "is-read-only": true,
-   "description": [
-    "Shows whether or not the client has permission to use or has a prohibition against using the resource. The administrative state expresses usage permissions for specific resources without modification to the provisioning of those resources."
-   ],
-   "uml-name": "adminisatratveState",
-   "controlType": [
-    "locked",
-    "unlocked"
-   ]
-  },
-  "lifecycle-state": {
-   "id": "lifecycle-state",
-   "uml-id": "_PzqZ0GgiEeWmgIwAIZlYKQ",
-   "uml-type": "ownedAttribute",
-   "type": "_YSsboGgiEeWmgIwAIZlYKQ",
-   "order-number": 4,
-   "is-read-only": false,
-   "description": [
-    "Used to track the planned deployment, allocation to clients and withdrawal of resources."
-   ],
-   "uml-name": "lifecycleState",
-   "controlType": [
-    "planned",
-    "potential",
-    "installed",
-    "pending-removal"
-   ]
-  },
-  "general-directives": {
-   "id": "general-directives",
-   "uml-id": "_9hyUwD0TEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "GeneralDirectives"
-  },
-  "necessary-initial-condition-constraints": {
-   "id": "necessary-initial-condition-constraints",
-   "uml-id": "_J_v_YD0WEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "NecessaryInitialConditionConstraints"
-  },
-  "is-not": {
-   "id": "is-not",
-   "uml-id": "_pzNRQD3XEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "IsNot",
-   "controlType": "checkbox"
-  },
-  "operation-details": {
-   "id": "operation-details",
-   "uml-id": "_J5Hc0T0fEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_g1SeoD0UEeaRI-H69PghuA",
-   "order-number": 7,
-   "is-read-only": false,
-   "uml-name": "_operationDetails"
-  },
-  "action-verb": {
-   "id": "action-verb",
-   "uml-id": "_93jegD0VEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_ljUl4D3WEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "actionVerb",
-   "controlType": [
-    "create-post-add",
-    "set-update-put-modify-write-add",
-    "get-read",
-    "delete-remove"
-   ]
-  },
-  "necessary-initialcondition-constraints": {
-   "id": "necessary-initialcondition-constraints",
-   "uml-id": "_Kc7UgD0fEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_J_v_YD0WEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "_necessaryInitialconditionConstraints"
-  },
-  "operation-envelope": {
-   "id": "operation-envelope",
-   "uml-id": "_52IiYD0TEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "OperationEnvelope"
-  },
-  "operation-set": {
-   "id": "operation-set",
-   "uml-id": "_c9yBkD0UEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "OperationSet"
-  },
-  "generaldirectives": {
-   "id": "generaldirectives",
-   "uml-id": "_Ios90j0fEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_9hyUwD0TEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "generaldirectives"
-  },
-  "operationidentifiers": {
-   "id": "operationidentifiers",
-   "uml-id": "_JQNpwT0fEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_AZx1kD0UEeaRI-H69PghuA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "operationidentifiers"
-  },
-  "operation-identifiers": {
-   "id": "operation-identifiers",
-   "uml-id": "_AZx1kD0UEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "OperationIdentifiers"
-  },
-  "after-operation-set": {
-   "id": "after-operation-set",
-   "uml-id": "_olu8ID0UEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_c9yBkD0UEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "_afterOperationSet"
-  },
-  "before-operation-set": {
-   "id": "before-operation-set",
-   "uml-id": "_xIFXsj0UEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_c9yBkD0UEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "_beforeOperationSet"
-  },
-  "effort-and-action": {
-   "id": "effort-and-action",
-   "uml-id": "_GWLtID0VEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_L4Y9QE2DEeaGxdXEiNf4tA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "effortAndAction",
-   "controlType": [
-    "best-effort",
-    "exact-match"
-   ]
-  },
-  "pause-resume-rule": {
-   "id": "pause-resume-rule",
-   "uml-id": "_ObfAUD0VEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_ndXVME2DEeaGxdXEiNf4tA",
-   "order-number": 4,
-   "is-read-only": false,
-   "uml-name": "pauseResumeRule",
-   "controlType": [
-    "no-pause-possible"
-   ]
-  },
-  "operationset": {
-   "id": "operationset",
-   "uml-id": "_hsSioj0VEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_c9yBkD0UEeaRI-H69PghuA",
-   "order-number": 5,
-   "is-read-only": false,
-   "uml-name": "operationset"
-  },
-  "is-short-lived": {
-   "id": "is-short-lived",
-   "uml-id": "_mdwtkD0VEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 6,
-   "is-read-only": false,
-   "uml-name": "isShortLived",
-   "controlType": "checkbox"
-  },
-  "conector-in-holder": {
-   "id": "conector-in-holder",
-   "uml-id": "_-zMBkkO-EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_o366YEONEeasL6dcjI1vEA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "conectorInHolder"
-  },
-  "connector-on-equipment-for-holder": {
-   "id": "connector-on-equipment-for-holder",
-   "uml-id": "_s5FpwEONEeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A rule class (an abstract specialization of Connector) that represents a connector on an equipment that is intended to mate with a connector in a holder."
-   ],
-   "uml-name": "ConnectorOnEquipmentForHolder"
-  },
-  "connector-cable-end": {
-   "id": "connector-cable-end",
-   "uml-id": "_KCS_IkOPEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_6hyUEEONEeasL6dcjI1vEA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "connectorCableEnd"
-  },
-  "connector-on-equipment-for-cable": {
-   "id": "connector-on-equipment-for-cable",
-   "uml-id": "_1OKeUEONEeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A rule class (an abstract specialization of Connector) that represents a connector exposed on an equipment such that a cable may be plugged in."
-   ],
-   "uml-name": "ConnectorOnEquipmentForCable"
-  },
-  "function-enablers": {
-   "id": "function-enablers",
-   "uml-id": "_1vzsYERJEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_N-qJ8EQyEeasL6dcjI1vEA",
-   "order-number": 8,
-   "is-read-only": false,
-   "uml-name": "_functionEnablers"
-  },
-  "power-state": {
-   "id": "power-state",
-   "uml-id": "_Q9fSkEQyEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "powerState"
-  },
-  "mechanical-functions": {
-   "id": "mechanical-functions",
-   "uml-id": "_KxkFYEQ-EeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents the dynamic aspects of the mechanical functions of the equipment."
-   ],
-   "uml-name": "MechanicalFunctions"
-  },
-  "rotation-speed": {
-   "id": "rotation-speed",
-   "uml-id": "_M1XJIEQ-EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "rotationSpeed"
-  },
-  "physical-properties": {
-   "id": "physical-properties",
-   "uml-id": "_t0pzs0RJEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_QloVwEQ-EeasL6dcjI1vEA",
-   "order-number": 7,
-   "is-read-only": false,
-   "uml-name": "_physicalProperties"
-  },
-  "temperature": {
-   "id": "temperature",
-   "uml-id": "_Vlnd0EQ-EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "temperature"
-  },
-  "holder-monitors": {
-   "id": "holder-monitors",
-   "uml-id": "_6K62skRSEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_5vdx8EQfEeasL6dcjI1vEA",
-   "order-number": 4,
-   "is-read-only": false,
-   "uml-name": "_holderMonitors"
-  },
-  "is-active": {
-   "id": "is-active",
-   "uml-id": "_KFzmEERTEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "isActive",
-   "controlType": "checkbox"
-  },
-  "is-actual-mismatch-with-expected": {
-   "id": "is-actual-mismatch-with-expected",
-   "uml-id": "_XRKNEERTEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "isActualMismatchWithExpected",
-   "controlType": "checkbox"
-  },
-  "aggregate-function": {
-   "id": "aggregate-function",
-   "uml-id": "_VHOWskglEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_8SXNZT-HEeaRI-H69PghuA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "_aggregateFunction"
-  },
-  "location": {
-   "id": "location",
-   "uml-id": "_lNf7kHpKEeaVjtpstJMDXA",
-   "uml-type": "ownedAttribute",
-   "type": "_bh_VAHpJEeaVjtpstJMDXA",
-   "order-number": 18,
-   "is-read-only": false,
-   "uml-name": "_location"
-  },
-  "equipment-location": {
-   "id": "equipment-location",
-   "uml-id": "_RUXMYEQwEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_A15msMDaEeWbqPZwR-Ot6A",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "equipmentLocation"
-  },
-  "geographical-location": {
-   "id": "geographical-location",
-   "uml-id": "_XOQ_AEQwEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_A15msMDaEeWbqPZwR-Ot6A",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "geographicalLocation"
-  },
-  "category": {
-   "id": "category",
-   "uml-id": "_jbGZ8Ec-EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_WCZv8Ec9EeasL6dcjI1vEA",
-   "order-number": 12,
-   "is-read-only": false,
-   "uml-name": "_category"
-  },
-  "equipment-instance": {
-   "id": "equipment-instance",
-   "uml-id": "_CE4sUkRCEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_UB7QwEQuEeasL6dcjI1vEA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "_equipmentInstance"
-  },
-  "manufacture-date": {
-   "id": "manufacture-date",
-   "uml-id": "_YrPlQEQuEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "manufactureDate"
-  },
-  "serial-number": {
-   "id": "serial-number",
-   "uml-id": "_cpqioEQuEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "serialNumber"
-  },
-  "asset-instance-identifier": {
-   "id": "asset-instance-identifier",
-   "uml-id": "_yWCIcEQuEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "assetInstanceIdentifier"
-  },
-  "equipment-type": {
-   "id": "equipment-type",
-   "uml-id": "_1KggkERBEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_BP8YcEQuEeasL6dcjI1vEA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "_equipmentType"
-  },
-  "description": {
-   "id": "description",
-   "uml-id": "_-5svQEQsEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "description"
-  },
-  "model-identifier": {
-   "id": "model-identifier",
-   "uml-id": "_oUmxsEQsEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "modelIdentifier"
-  },
-  "part-type-identifier": {
-   "id": "part-type-identifier",
-   "uml-id": "_3ypNAEQsEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "partTypeIdentifier"
-  },
-  "type-name": {
-   "id": "type-name",
-   "uml-id": "_j105QEQsEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 4,
-   "is-read-only": false,
-   "uml-name": "typeName"
-  },
-  "version": {
-   "id": "version",
-   "uml-id": "_mig3EEQuEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 5,
-   "is-read-only": false,
-   "uml-name": "version"
-  },
-  "holder-structure": {
-   "id": "holder-structure",
-   "uml-id": "_U93mQEc8EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_0U3TwEc7EeasL6dcjI1vEA",
-   "order-number": 7,
-   "is-read-only": false,
-   "uml-name": "_holderStructure"
-  },
-  "holder-category": {
-   "id": "holder-category",
-   "uml-id": "_r240kERLEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_0K-KoERLEeasL6dcjI1vEA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "holderCategory",
-   "controlType": [
-    "slot"
-   ]
-  },
-  "is-captive": {
-   "id": "is-captive",
-   "uml-id": "_4XbukERMEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "isCaptive",
-   "controlType": "checkbox"
-  },
-  "is-guided": {
-   "id": "is-guided",
-   "uml-id": "_-1CEIERMEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "isGuided",
-   "controlType": "checkbox"
-  },
-  "is-quantised-space": {
-   "id": "is-quantised-space",
-   "uml-id": "_Lj7_sERNEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 4,
-   "is-read-only": false,
-   "uml-name": "isQuantisedSpace",
-   "controlType": "checkbox"
-  },
-  "manufactured-thing": {
-   "id": "manufactured-thing",
-   "uml-id": "_XtDuokRCEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_GgBQUERBEeasL6dcjI1vEA",
-   "order-number": 4,
-   "is-read-only": false,
-   "uml-name": "_manufacturedThing"
-  },
-  "manufacturer-properties": {
-   "id": "manufacturer-properties",
-   "uml-id": "_gdoY8EQtEeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents the properties of the manufacturer."
-   ],
-   "uml-name": "ManufacturerProperties"
-  },
-  "operator-augmented-equipment-type": {
-   "id": "operator-augmented-equipment-type",
-   "uml-id": "_Yw99EEc_EeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents the invariant properties of the equipment asset allocated by the operator that define and characterise the type."
-   ],
-   "uml-name": "OperatorAugmentedEquipmentType"
-  },
-  "manufacturer-identifier": {
-   "id": "manufacturer-identifier",
-   "uml-id": "_VTQLMEQtEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "manufacturerIdentifier"
-  },
-  "manufacturer-name": {
-   "id": "manufacturer-name",
-   "uml-id": "_cC-A8EQsEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "manufacturerName"
-  },
-  "mechanical-features": {
-   "id": "mechanical-features",
-   "uml-id": "_X1TkUkRFEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_qZGr8EQfEeasL6dcjI1vEA",
-   "order-number": 6,
-   "is-read-only": false,
-   "uml-name": "_mechanicalFeatures"
-  },
-  "asset-type-identifier": {
-   "id": "asset-type-identifier",
-   "uml-id": "_uHNXkEQuEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_G1gboD4AEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "assetTypeIdentifier"
-  },
-  "physical-characteristics": {
-   "id": "physical-characteristics",
-   "uml-id": "_Kiw98URKEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_TsDsQEQfEeasL6dcjI1vEA",
-   "order-number": 10,
-   "is-read-only": false,
-   "uml-name": "_physicalCharacteristics"
-  },
-  "weight-characeristics": {
-   "id": "weight-characeristics",
-   "uml-id": "_87dRMEQ9EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "weightCharaceristics"
-  },
-  "fire-characteristics": {
-   "id": "fire-characteristics",
-   "uml-id": "__oPnkEQ9EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "fireCharacteristics"
-  },
-  "materials": {
-   "id": "materials",
-   "uml-id": "_BoTa0EQ-EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "materials"
-  },
-  "physical-rating": {
-   "id": "physical-rating",
-   "uml-id": "_EjPzoUdMEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_SRtkMEdLEeasL6dcjI1vEA",
-   "order-number": 8,
-   "is-read-only": false,
-   "uml-name": "_physicalRating"
-  },
-  "thermal-rating": {
-   "id": "thermal-rating",
-   "uml-id": "_fDkGEEdLEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "thermalRating"
-  },
-  "power-rating": {
-   "id": "power-rating",
-   "uml-id": "_i-N9wEdLEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "powerRating"
-  },
-  "position": {
-   "id": "position",
-   "uml-id": "_4DkhskddEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_FWDLAERWEeasL6dcjI1vEA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "_position"
-  },
-  "relative-position": {
-   "id": "relative-position",
-   "uml-id": "_U_6mYERXEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "relativePosition"
-  },
-  "spatial-properties-of-type": {
-   "id": "spatial-properties-of-type",
-   "uml-id": "_bAAS0kRSEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_LAvh8EQfEeasL6dcjI1vEA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "_spatialPropertiesOfType"
-  },
-  "height": {
-   "id": "height",
-   "uml-id": "_k_CVUEQyEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "height"
-  },
-  "width": {
-   "id": "width",
-   "uml-id": "_n6nVoEQyEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "width"
-  },
-  "length": {
-   "id": "length",
-   "uml-id": "_uIPVgEQyEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "length"
-  },
-  "swapability": {
-   "id": "swapability",
-   "uml-id": "_wwGXEUc8EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_kr_E8Ec8EeasL6dcjI1vEA",
-   "order-number": 11,
-   "is-read-only": false,
-   "uml-name": "_swapability"
-  },
-  "is-hot-swappable": {
-   "id": "is-hot-swappable",
-   "uml-id": "_yb3zEEQgEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "isHotSwappable",
-   "controlType": "checkbox"
-  },
-  "cable": {
-   "id": "cable",
-   "uml-id": "_8SXNbD-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Basic model representing a cable with connectors fitted where the cable is  short  (e.g. patch cord, in-station cabling). This is intentionally a very basic representation of a cable. In a more sophisticated representation cable ends might be represented that then associate to the attached connector. At this point it is assumed that the basic model is sufficient."
-   ],
-   "uml-name": "Cable"
-  },
-  "connector": {
-   "id": "connector",
-   "uml-id": "_8SXNcD-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents a connector that may be fully exposed (e.g. to plug in a cable or on the end of a cable) or partially exposed (e.g. backplane to plug in another piece of equipment such as a module)."
-   ],
-   "uml-name": "Connector"
-  },
-  "pin": {
-   "id": "pin",
-   "uml-id": "_8SXNnT-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "An individual physical connection point (male or female). May be capable of carrying electrical or optical signals. A pin may have more than one wire/fiber attached but is such that all attached things get exactly the same signal set."
-   ],
-   "uml-name": "Pin"
-  },
-  "orientation": {
-   "id": "orientation",
-   "uml-id": "_DKSfwGpCEeaBUOurxzA2sw",
-   "uml-type": "ownedAttribute",
-   "type": "_y2WM8EQ-EeasL6dcjI1vEA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "orientation",
-   "controlType": [
-    "male",
-    "female",
-    "symmetric-neutral"
-   ]
-  },
-  "pin-layout": {
-   "id": "pin-layout",
-   "uml-id": "_Fzd-QEQ_EeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The structuring of pins in a connector."
-   ],
-   "uml-name": "PinLayout"
-  },
-  "connector-type": {
-   "id": "connector-type",
-   "uml-id": "_NBXLMEgXEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_aL8EoGnNEeaBUOurxzA2sw",
-   "order-number": 8,
-   "is-read-only": false,
-   "uml-name": "connectorType"
-  },
-  "equipment": {
-   "id": "equipment",
-   "uml-id": "_8SXNej-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents any relevant physical thing. Can be either field replaceable or not field replaceable. Note: The model is currently constrained to inside plant."
-   ],
-   "uml-name": "Equipment"
-  },
-  "contained-holder": {
-   "id": "contained-holder",
-   "uml-id": "_ayDQMj-NEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_8SXNjj-HEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "_containedHolder"
-  },
-  "exposed-cable": {
-   "id": "exposed-cable",
-   "uml-id": "_Fy4CYj-fEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_8SXNbD-HEeaRI-H69PghuA",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "_exposedCable"
-  },
-  "mechanicall-functions": {
-   "id": "mechanicall-functions",
-   "uml-id": "_-Ci-o0RJEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_KxkFYEQ-EeasL6dcjI1vEA",
-   "order-number": 9,
-   "is-read-only": false,
-   "uml-name": "_mechanicallFunctions"
-  },
-  "is-field-replaceable": {
-   "id": "is-field-replaceable",
-   "uml-id": "_f1p94D-WEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 14,
-   "is-read-only": true,
-   "description": [
-    "Indicates whether or not the equipment can be removed and replaced  in the field  (i.e. in a deployment) by normal operations personnel."
-   ],
-   "uml-name": "isFieldReplaceable",
-   "controlType": "checkbox"
-  },
-  "function-block": {
-   "id": "function-block",
-   "uml-id": "_8SXNfj-HEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_8SXNiz-HEeaRI-H69PghuA",
-   "order-number": 15,
-   "is-read-only": false,
-   "uml-name": "_functionBlock"
-  },
-  "expected-equipment": {
-   "id": "expected-equipment",
-   "uml-id": "_8SXNfz-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A definition of the restrictions on the equipment that is expected to be present in the physical network at a particular  place . The expected equipment will state the type and may constrain any other invariant properties. It may also provide desired ranges for dynami properties."
-   ],
-   "uml-name": "ExpectedEquipment"
-  },
-  "actual-equipment": {
-   "id": "actual-equipment",
-   "uml-id": "_8SXNZD-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The equipment that is actually present in the physical network. It will expose all dynamic properties and some critical static properties."
-   ],
-   "uml-name": "ActualEquipment"
-  },
-  "holder": {
-   "id": "holder",
-   "uml-id": "_8SXNjj-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents a space in an equipment in which another equipment can be fitted in the field."
-   ],
-   "uml-name": "Holder"
-  },
-  "occupying-fru": {
-   "id": "occupying-fru",
-   "uml-id": "_X1q3Qj-QEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_8SXNej-HEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "The FRU that is occupying the holder. A holder may be unoccupied. An FRU may occupy more hat one holder (using or blocking are intentionally not distinguished here)."
-   ],
-   "uml-name": "_occupyingFru"
-  },
-  "holder-location": {
-   "id": "holder-location",
-   "uml-id": "_l6LE4ERTEeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_A15msMDaEeWbqPZwR-Ot6A",
-   "order-number": 5,
-   "is-read-only": false,
-   "uml-name": "holderLocation"
-  },
-  "supported-equipment": {
-   "id": "supported-equipment",
-   "uml-id": "_RKzmokg0EeasL6dcjI1vEA",
-   "uml-type": "ownedAttribute",
-   "type": "_Ghvk8EguEeasL6dcjI1vEA",
-   "order-number": 9,
-   "is-read-only": false,
-   "uml-name": "_supportedEquipment"
-  },
-  "expected-holder": {
-   "id": "expected-holder",
-   "uml-id": "_MEUpIEmhEeaDccCv6BIgdg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A definition of a holder expected in the ActualEquipment (i.e. an ActualHolder) as part of the constraints provided by the ExpectedEquipment."
-   ],
-   "uml-name": "ExpectedHolder"
-  },
-  "actual-holder": {
-   "id": "actual-holder",
-   "uml-id": "_NwJ40EmhEeaDccCv6BIgdg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A holder in the ActualEquipment."
-   ],
-   "uml-name": "ActualHolder"
-  },
-  "pin-group": {
-   "id": "pin-group",
-   "uml-id": "_8SXNrj-HEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_8SXNnj-HEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "_pinGroup"
-  },
-  "port": {
-   "id": "port",
-   "uml-id": "_8SXNpD-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A conceptual access point for a group of signals (where that group of signals cannot be separated)."
-   ],
-   "uml-name": "Port"
-  },
-  "signal-ref-pt": {
-   "id": "signal-ref-pt",
-   "uml-id": "_8SXNrz-HEeaRI-H69PghuA",
-   "uml-type": "ownedAttribute",
-   "type": "_8SXNqz-HEeaRI-H69PghuA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "_signalRefPt"
-  },
-  "elemental-signals": {
-   "id": "elemental-signals",
-   "uml-id": "_B4oXwEddEeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The elemental (sub-atomic) parts of an  indivisible  signal where processing in the LTP is required to extract the elemental signals."
-   ],
-   "uml-name": "ElementalSignals"
-  },
-  "signal-ref-pt-group": {
-   "id": "signal-ref-pt-group",
-   "uml-id": "_8SXNrT-HEeaRI-H69PghuA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A physical indivisible group of signals."
-   ],
-   "uml-name": "SignalRefPtGroup"
-  },
-  "group-of-pins": {
-   "id": "group-of-pins",
-   "uml-id": "_uMSwAEdcEeasL6dcjI1vEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "A group of pins from one or more connectors relevant for some purpose."
-   ],
-   "uml-name": "GroupOfPins"
-  },
-  "port-role": {
-   "id": "port-role",
-   "uml-id": "_DUU_sGZ_EeWrX_JIGzXlSg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "The role of a port in the context of the function of the forwarding entity that it bounds."
-   ],
-   "uml-name": "PortRole"
-  },
-  "protection-type": {
-   "id": "protection-type",
-   "uml-id": "_c3Hu8Gb3EeWrX_JIGzXlSg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Identifies the type of protection of an FcSwitch."
-   ],
-   "uml-name": "ProtectionType"
-  },
-  "date-and-time": {
-   "id": "date-and-time",
-   "uml-id": "_oGqi1lLNEeO75dO39GbF8Q",
-   "uml-type": "uml:DataType",
-   "description": [
-    "This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
-   ],
-   "uml-name": "DateAndTime"
-  },
-  "to-be-defined": {
-   "id": "to-be-defined",
-   "uml-id": "_aL8EoGnNEeaBUOurxzA2sw",
-   "uml-type": "uml:DataType",
-   "description": [
-    "This type is used when the actual type of the attrbute is expected to be complex but where the type has not yet been developed. This type should only be used for attributes that are experimental."
-   ],
-   "uml-name": "ToBeDefined"
-  },
-  "name-and-value": {
-   "id": "name-and-value",
-   "uml-id": "_y7oy8I3tEeO38ZmbECnvbg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "A scoped name-value pair."
-   ],
-   "uml-name": "NameAndValue"
-  },
-  "value-name": {
-   "id": "value-name",
-   "uml-id": "_77PyQI3tEeO38ZmbECnvbg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "The name of the value. The value need not have a name."
-   ],
-   "uml-name": "valueName",
-   "controlType": "text"
-  },
-  "value": {
-   "id": "value",
-   "uml-id": "_cbx2gI30EeO38ZmbECnvbg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "The specific value of the universal id."
-   ],
-   "uml-name": "value",
-   "controlType": "text"
-  },
-  "universal-id": {
-   "id": "universal-id",
-   "uml-id": "_SU3Q4I30EeO38ZmbECnvbg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "The universal ID value where the mechanism for generation is defined by some authority not directly referenced in the structure. A example structure is [IETF RFC4122]."
-   ],
-   "uml-name": "UniversalId"
-  },
-  "address": {
-   "id": "address",
-   "uml-id": "_A15msMDaEeWbqPZwR-Ot6A",
-   "uml-type": "uml:DataType",
-   "description": [
-    "A description of location via a hierarchy of narrowing contexts."
-   ],
-   "uml-name": "Address"
-  },
-  "address-name": {
-   "id": "address-name",
-   "uml-id": "_W76bkMDaEeWbqPZwR-Ot6A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "The name of the address (to allow the specific hierarchy to be distinguished from others for the same entity)."
-   ],
-   "uml-name": "addressName",
-   "controlType": "text"
-  },
-  "address-element": {
-   "id": "address-element",
-   "uml-id": "_M_WWsMDYEeWbqPZwR-Ot6A",
-   "uml-type": "uml:DataType",
-   "description": [
-    "One element of a hierarchy of elements. Note that the element must have one and only one value chosen from a list of potential value types."
-   ],
-   "uml-name": "AddressElement"
-  },
-  "local-id-and-class": {
-   "id": "local-id-and-class",
-   "uml-id": "_dCdzAMDuEeWbqPZwR-Ot6A",
-   "uml-type": "uml:DataType",
-   "description": [
-    "The localId and the class of entity that it identifies."
-   ],
-   "uml-name": "LocalIdAndClass"
-  },
-  "class-of-instance": {
-   "id": "class-of-instance",
-   "uml-id": "_NBaUwMDvEeWbqPZwR-Ot6A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "The class to which the name refers."
-   ],
-   "uml-name": "classOfInstance",
-   "controlType": "text"
-  },
-  "name-and-class": {
-   "id": "name-and-class",
-   "uml-id": "_XUarEMDuEeWbqPZwR-Ot6A",
-   "uml-type": "uml:DataType",
-   "description": [
-    "The name and the class of entity that it names."
-   ],
-   "uml-name": "NameAndClass"
-  },
-  "address-element-name": {
-   "id": "address-element-name",
-   "uml-id": "_3mdl0MpUEeWSlYzRfsq8lQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "The name of the address element (e.g.  shelf  as an element of a shelf/slot/port addressing scheme). The remainder of the structure has the reference for the shelf."
-   ],
-   "uml-name": "addressElementName",
-   "controlType": "text"
-  },
-  "arbitrary-element": {
-   "id": "arbitrary-element",
-   "uml-id": "_nPsCsMDzEeWbqPZwR-Ot6A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 5,
-   "is-read-only": false,
-   "description": [
-    "Where the element is from some external model that is not formally represented in this model."
-   ],
-   "uml-name": "arbitraryElement",
-   "controlType": "text"
-  },
-  "2-wp-c8-ec7-ee-wxh-l2-b6-peg6-a": {
-   "id": "2-wp-c8-ec7-ee-wxh-l2-b6-peg6-a",
-   "uml-id": "_2WpC8EC7EeWxhL2B6Peg6A",
-   "enum": [
-    "BIDIRECTIONAL",
-    "INPUT",
-    "OUTPUT",
-    "UNIDENTIFIED_OR_UNKNOWN"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The orientation of flow at the Port of a Forwarding entity"
-   ],
-   "uml-name": "_2WpC8EC7EeWxhL2B6Peg6A"
-  },
-  "d-v67-aec8-ee-wxh-l2-b6-peg6-a": {
-   "id": "d-v67-aec8-ee-wxh-l2-b6-peg6-a",
-   "uml-id": "_dV67AEC8EeWxhL2B6Peg6A",
-   "enum": [
-    "BIDIRECTIONAL",
-    "UNIDIRECTIONAL",
-    "UNDEFINED_OR_UNKNOWN"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The directionality of a Forwarding entity."
-   ],
-   "uml-name": "_dV67AEC8EeWxhL2B6Peg6A"
-  },
-  "rwilyeda-ee-w-qe-o-kb-n-up-p9-a": {
-   "id": "rwilyeda-ee-w-qe-o-kb-n-up-p9-a",
-   "uml-id": "_RWILYEDAEeWQeOKbNUpP9A",
-   "enum": [
-    "BIDIRECTIONAL",
-    "SINK",
-    "SOURCE",
-    "UNDEFINED_OR_UNKNOWN"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The directionality of a termination entity."
-   ],
-   "uml-name": "_RWILYEDAEeWQeOKbNUpP9A"
-  },
-  "t5-gyk-edn-ee-w-qe-o-kb-n-up-p9-a": {
-   "id": "t5-gyk-edn-ee-w-qe-o-kb-n-up-p9-a",
-   "uml-id": "_T5GykEDNEeWQeOKbNUpP9A",
-   "enum": [
-    "CONTRA_DIRECTION_SINK",
-    "CONTRA_DIRECTION_SOURCE"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Extended to include contra-direction considerations. Only applies to LP and elements of LP not to LTP."
-   ],
-   "uml-name": "_T5GykEDNEeWQeOKbNUpP9A"
-  },
-  "6-an-g8-ge-e-ee-wmg-iw-ai-zl-ykq": {
-   "id": "6-an-g8-ge-e-ee-wmg-iw-ai-zl-ykq",
-   "uml-id": "_6anG8GeEEeWmgIwAIZlYKQ",
-   "enum": [
-    "LP_CAN_NEVER_TERMINATE",
-    "LT_NOT_TERMINATED",
-    "TERMINATED_SERVER_TO_CLIENT_FLOW",
-    "TERMINATED_CLIENT_TO_SERVER_FLOW",
-    "TERMINATED_BIDIRECTIONAL",
-    "LT_PERMENANTLY_TERMINATED",
-    "TERMINATION_STATE_UNKNOWN"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."
-   ],
-   "uml-name": "_6anG8GeEEeWmgIwAIZlYKQ"
-  },
-  "sthcg-ci-eea-g-gv-axx-se1-u-a": {
-   "id": "sthcg-ci-eea-g-gv-axx-se1-u-a",
-   "uml-id": "_sthcgCi-EeaGGvAxxSe1uA",
-   "enum": [
-    "WAIT_TO_REVERT",
-    "SIGNAL_DEGRADE",
-    "SIGNAL_FAIL"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The cause of the current protection state."
-   ],
-   "uml-name": "_sthcgCi-EeaGGvAxxSe1uA"
-  },
-  "y-i-kvs-mog-ee-ww-z527-phf-fsa": {
-   "id": "y-i-kvs-mog-ee-ww-z527-phf-fsa",
-   "uml-id": "_yIKvsMOGEeWwZ527PhfFSA",
-   "enum": [
-    "LOCK_OUT"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Possible degrees of administrative control applied to the Route selection."
-   ],
-   "uml-name": "_yIKvsMOGEeWwZ527PhfFSA"
-  },
-  "csw-hk-ci-eea-g-gv-axx-se1-u-a": {
-   "id": "csw-hk-ci-eea-g-gv-axx-se1-u-a",
-   "uml-id": "_cswHkCi-EeaGGvAxxSe1uA",
-   "enum": [],
-   "is-read-only": false,
-   "description": [
-    "The cause of the current route selection."
-   ],
-   "uml-name": "_cswHkCi-EeaGGvAxxSe1uA"
-  },
-  "e-7-dymof-ee-ww-z527-phf-fsa": {
-   "id": "e-7-dymof-ee-ww-z527-phf-fsa",
-   "uml-id": "_e-7DYMOFEeWwZ527PhfFSA",
-   "enum": [
-    "NORMAL",
-    "MANUAL",
-    "FORCED"
-   ],
-   "is-read-only": false,
-   "uml-name": "_e-7DYMOFEeWwZ527PhfFSA"
-  },
-  "z-r-kl-i-ci9-eea-g-gv-axx-se1-u-a": {
-   "id": "z-r-kl-i-ci9-eea-g-gv-axx-se1-u-a",
-   "uml-id": "_zRKlICi9EeaGGvAxxSe1uA",
-   "enum": [],
-   "is-read-only": false,
-   "description": [
-    "Explains the reason for the current switch state."
-   ],
-   "uml-name": "_zRKlICi9EeaGGvAxxSe1uA"
-  },
-  "o-gqjf1-ln-ee-o75-d-o39-gb-f8-q": {
-   "id": "o-gqjf1-ln-ee-o75-d-o39-gb-f8-q",
-   "uml-id": "_oGqjf1LNEeO75dO39GbF8Q",
-   "enum": [
-    "REVERTIVE",
-    "NON-REVERTIVE"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The reversion mode associated with protection."
-   ],
-   "uml-name": "_oGqjf1LNEeO75dO39GbF8Q"
-  },
-  "l-nclk-l-et-ee-sz-ud-yf-p-sdgew": {
-   "id": "l-nclk-l-et-ee-sz-ud-yf-p-sdgew",
-   "uml-id": "_lNclkLEtEeSZUdYfPSdgew",
-   "enum": [
-    "DISABLED",
-    "ENABLED"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The possible values of the operationalState."
-   ],
-   "uml-name": "_lNclkLEtEeSZUdYfPSdgew"
-  },
-  "kskoyl-eu-ee-sz-ud-yf-p-sdgew": {
-   "id": "kskoyl-eu-ee-sz-ud-yf-p-sdgew",
-   "uml-id": "_KSKOYLEuEeSZUdYfPSdgew",
-   "enum": [
-    "LOCKED",
-    "UNLOCKED"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The possible values of the administrativeState."
-   ],
-   "uml-name": "_KSKOYLEuEeSZUdYfPSdgew"
-  },
-  "-x-pe-al-ev-ee-sz-ud-yf-p-sdgew": {
-   "id": "-x-pe-al-ev-ee-sz-ud-yf-p-sdgew",
-   "uml-id": "_-xPeALEvEeSZUdYfPSdgew",
-   "enum": [
-    "UNLOCK",
-    "LOCK_PASSIVE",
-    "LOCK_ACTIVE",
-    "LOCK_IMMEDIATE"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The possible values of the current target administrative state.",
-    "Reflects the current control action when the entity is not in the desired state."
-   ],
-   "uml-name": "_-xPeALEvEeSZUdYfPSdgew"
-  },
-  "mcyhc-gge-ee-wmg-iw-ai-zl-ykq": {
-   "id": "mcyhc-gge-ee-wmg-iw-ai-zl-ykq",
-   "uml-id": "_McyhcGgeEeWmgIwAIZlYKQ",
-   "enum": [
-    "SHUTTING_DOWN_ACTIVE",
-    "SHUTTING_DOWN_PASSIVE"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Possible extensions to AdministrativeState."
-   ],
-   "uml-name": "_McyhcGgeEeWmgIwAIZlYKQ"
-  },
-  "y-ssbo-ggi-ee-wmg-iw-ai-zl-ykq": {
-   "id": "y-ssbo-ggi-ee-wmg-iw-ai-zl-ykq",
-   "uml-id": "_YSsboGgiEeWmgIwAIZlYKQ",
-   "enum": [
-    "PLANNED",
-    "POTENTIAL",
-    "INSTALLED",
-    "PENDING_REMOVAL"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The possible values of the lifecycleState."
-   ],
-   "uml-name": "_YSsboGgiEeWmgIwAIZlYKQ"
-  },
-  "lj-ul4-d3-w-eea-ri-h69-pghu-a": {
-   "id": "lj-ul4-d3-w-eea-ri-h69-pghu-a",
-   "uml-id": "_ljUl4D3WEeaRI-H69PghuA",
-   "enum": [
-    "CREATE_POST_ADD",
-    "SET_UPDATE_PUT_MODIFY_WRITE_ADD",
-    "GET_READ",
-    "DELETE_REMOVE"
-   ],
-   "is-read-only": false,
-   "uml-name": "_ljUl4D3WEeaRI-H69PghuA"
-  },
-  "iyt74-d3-k-eea-ri-h69-pghu-a": {
-   "id": "iyt74-d3-k-eea-ri-h69-pghu-a",
-   "uml-id": "_IYT74D3kEeaRI-H69PghuA",
-   "enum": [
-    "STRUCTURE_IS_NOT",
-    "NEW_STRUCTURE_AND_VALUES",
-    "INCREMENTAL_STRUCTURE_AND_VALUES",
-    "ONLY_VALUES_IN_EXISTING_STRUCTURE",
-    "DEFINED_BY_VERB"
-   ],
-   "is-read-only": false,
-   "uml-name": "_IYT74D3kEeaRI-H69PghuA"
-  },
-  "l4-y9-qe2-d-eea-gxd-x-ei-nf4-t-a": {
-   "id": "l4-y9-qe2-d-eea-gxd-x-ei-nf4-t-a",
-   "uml-id": "_L4Y9QE2DEeaGxdXEiNf4tA",
-   "enum": [
-    "BEST_EFFORT",
-    "EXACT_MATCH"
-   ],
-   "is-read-only": false,
-   "uml-name": "_L4Y9QE2DEeaGxdXEiNf4tA"
-  },
-  "nd-xvme2-d-eea-gxd-x-ei-nf4-t-a": {
-   "id": "nd-xvme2-d-eea-gxd-x-ei-nf4-t-a",
-   "uml-id": "_ndXVME2DEeaGxdXEiNf4tA",
-   "enum": [
-    "NO_PAUSE_POSSIBLE"
-   ],
-   "is-read-only": false,
-   "uml-name": "_ndXVME2DEeaGxdXEiNf4tA"
-  },
-  "y2-wm8-eq-eeas-l6-dcj-i1-v-ea": {
-   "id": "y2-wm8-eq-eeas-l6-dcj-i1-v-ea",
-   "uml-id": "_y2WM8EQ-EeasL6dcjI1vEA",
-   "enum": [
-    "MALE",
-    "FEMALE",
-    "SYMMETRIC_NEUTRAL"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Most connector schems are asymmetric such that there are two orientations of the connector where a mating is only possible between two connectors of different orientations. A multi-pin connector may have a mix of pin orientations. In this case it is expected that the dominant orientation of pin is chosen for the connector orientation."
-   ],
-   "uml-name": "_y2WM8EQ-EeasL6dcjI1vEA"
-  },
-  "m-mo-bg-e-qv-eeas-l6-dcj-i1-v-ea": {
-   "id": "m-mo-bg-e-qv-eeas-l6-dcj-i1-v-ea",
-   "uml-id": "_mMOBgEQvEeasL6dcjI1vEA",
-   "enum": [
-    "SUBRACK",
-    "CIRCUIT_PACK",
-    "SMALL_FORMFACTOR_PLUGGABLE",
-    "STAND_ALONE_UNIT",
-    "RACK"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The form of equipment."
-   ],
-   "uml-name": "_mMOBgEQvEeasL6dcjI1vEA"
-  },
-  "0-k-ko-erl-eeas-l6-dcj-i1-v-ea": {
-   "id": "0-k-ko-erl-eeas-l6-dcj-i1-v-ea",
-   "uml-id": "_0K-KoERLEeasL6dcjI1vEA",
-   "enum": [
-    "SLOT"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The form of holder."
-   ],
-   "uml-name": "_0K-KoERLEeasL6dcjI1vEA"
-  }
- }
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json
deleted file mode 100644
index b8e4d4a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/g.874.1-model.schema-information.json
+++ /dev/null
@@ -1,602 +0,0 @@
-{
- "schema-information": {
-  "otn-current-data": {
-   "id": "otn-current-data",
-   "uml-id": "_OxyHAOGJEeGhaeLtr7IxXg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "This object class is an abstract class from which the OTN layer-specific CurrentData object classes are inherited. This object class is a subclass of the Q.822 CurrentData object class, which in turn is a subclass of X.739 Scanner object class. It inherits the following attributes: scannerId, operationalState, granularityPeriod, administrativeState, suspectIntervalFlag, elapsedTime, observedObjectClass, and observedObjectInstance."
-   ],
-   "uml-name": "OTN_CurrentData"
-  },
-  "timestamp": {
-   "id": "timestamp",
-   "uml-id": "_bGwfoOGJEeGhaeLtr7IxXg",
-   "uml-type": "ownedAttribute",
-   "type": "_X-HZUNwbEeGoneTbGt8X0A",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "The timestamp associated with when the current data was collected."
-   ],
-   "uml-name": "timestamp"
-  },
-  "otn-history-data": {
-   "id": "otn-history-data",
-   "uml-id": "_dQ2mYOGOEeGhaeLtr7IxXg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "This object class is an abstract class from which the OTN layer-specific HistoryData object classes are inherited."
-   ],
-   "uml-name": "OTN_HistoryData"
-  },
-  "suspect-interval-flag": {
-   "id": "suspect-interval-flag",
-   "uml-id": "_M8IDNceIEeSfd5vyUJsimg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are:- Suspect data were detected by the actual resource doing data collection.- Transition of the administrativeState attribute to/from the 'lock' state.- Transition of the operationalState to/from the 'disabled' state.- Scheduler setting that inhibits the collection function.- The performance counters were reset during the interval.- The currentData (or subclass) object instance was created during the monitoring period."
-   ],
-   "uml-name": "suspectIntervalFlag",
-   "controlType": "checkbox"
-  },
-  "«q.822»-current-data": {
-   "id": "«q.822»-current-data",
-   "uml-id": "_M8IDMceIEeSfd5vyUJsimg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "«Q.822»-CurrentData"
-  },
-  "elapsed-time": {
-   "id": "elapsed-time",
-   "uml-id": "_M8IDOMeIEeSfd5vyUJsimg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "elapsedTime",
-   "controlType": "number"
-  },
-  "«q.822»-history-data": {
-   "id": "«q.822»-history-data",
-   "uml-id": "_M8IDVMeIEeSfd5vyUJsimg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "«Q.822»-HistoryData"
-  },
-  "history-data-id": {
-   "id": "history-data-id",
-   "uml-id": "_M8IDWMeIEeSfd5vyUJsimg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "historyDataId",
-   "controlType": "text"
-  },
-  "period-end-time": {
-   "id": "period-end-time",
-   "uml-id": "_M8IDWceIEeSfd5vyUJsimg",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "periodEndTime"
-  },
-  "granularity-period": {
-   "id": "granularity-period",
-   "uml-id": "_M8IDWseIEeSfd5vyUJsimg",
-   "uml-type": "ownedAttribute",
-   "type": "_Y6WUEEamEeabNPX3o7rjtw",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "granularityPeriod",
-   "controlType": [
-    "unknown",
-    "period-15-min",
-    "period-24-hours"
-   ]
-  },
-  "«x.739»-scanner": {
-   "id": "«x.739»-scanner",
-   "uml-id": "_7wb90ceIEeSfd5vyUJsimg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "«X.739»-Scanner"
-  },
-  "scanner-id": {
-   "id": "scanner-id",
-   "uml-id": "_7wb91ceIEeSfd5vyUJsimg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "scannerId",
-   "controlType": "text"
-  },
-  "administrative-state": {
-   "id": "administrative-state",
-   "uml-id": "_7wb92seIEeSfd5vyUJsimg",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_KSKOYLEuEeSZUdYfPSdgew",
-   "order-number": 3,
-   "is-read-only": false,
-   "uml-name": "administrativeState"
-  },
-  "«x.721»-top": {
-   "id": "«x.721»-top",
-   "uml-id": "_BMJ0EceTEeS6-cawxfHpnA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "This is the top level of managed object class hierarchy and every other managed object class is a specialization of either this generic class (top) or a specialization of subclass of top. The parameter miscellaneousError is to be used when a processing failure has occurred and the error condition encountered does not match any of object's defined specific error types."
-   ],
-   "uml-name": "«X.721»-Top"
-  },
-  "object-class": {
-   "id": "object-class",
-   "uml-id": "_BMJ0FceTEeS6-cawxfHpnA",
-   "uml-type": "ownedAttribute",
-   "type": "_ltGzFMeUEeS6-cawxfHpnA",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "ObjectClass ::= CHOICE{ globalForm [0] OBJECT IDENTIFIER, localForm [1] INTEGER}"
-   ],
-   "uml-name": "objectClass"
-  },
-  "name-binding": {
-   "id": "name-binding",
-   "uml-id": "_BMJ0F8eTEeS6-cawxfHpnA",
-   "uml-type": "ownedAttribute",
-   "type": "_ltGzFMeUEeS6-cawxfHpnA",
-   "order-number": 2,
-   "is-read-only": false,
-   "uml-name": "nameBinding"
-  },
-  "date-and-time": {
-   "id": "date-and-time",
-   "uml-id": "_X-HZUNwbEeGoneTbGt8X0A",
-   "uml-type": "uml:DataType",
-   "description": [
-    "This primitive type defines the date and time according to the following structure:  yyyyMMddhhmmss.s[Z|{+|-}HHMm]  where: yyyy  0000 .. 9999  year MM  01 .. 12  month dd  01 .. 31  day hh  00 .. 23  hour mm  00 .. 59  minute ss  00 .. 59  second s  .0 .. .9  tenth of second (set to  .0  if EMS or NE cannot support this granularity) Z  Z  indicates UTC (rather than local time) {+|-}  +  or  -  delta from UTC HH  00 .. 23  time zone difference in hours Mm  00 .. 59  time zone difference in minutes."
-   ],
-   "uml-name": "DateAndTime"
-  },
-  "5-g6-yq-oo-ee-cj-nnlz-cc6-mew": {
-   "id": "5-g6-yq-oo-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_5G6YQOo-EeCjNNLZCc6mew",
-   "enum": [
-    "SINK",
-    "SOURCE",
-    "BIDIRECTIONAL"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The enumeration with the options for directionality of the termination point."
-   ],
-   "uml-name": "_5G6YQOo-EeCjNNLZCc6mew"
-  },
-  "r-u8-a-m-opf-ee-cj-nnlz-cc6-mew": {
-   "id": "r-u8-a-m-opf-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_rU8aMOpfEeCjNNLZCc6mew",
-   "enum": [
-    "GCC1",
-    "GCC2",
-    "GCC1_AND_GCC2"
-   ],
-   "is-read-only": false,
-   "description": [
-    "This enumeration indicates the GCC access represented by the entity."
-   ],
-   "uml-name": "_rU8aMOpfEeCjNNLZCc6mew"
-  },
-  "w7-1-o-opi-ee-cj-nnlz-cc6-mew": {
-   "id": "w7-1-o-opi-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_W7-1oOpiEeCjNNLZCc6mew",
-   "enum": [
-    "ENABLED",
-    "DISABLED"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The list of valid operational states for the connection."
-   ],
-   "uml-name": "_W7-1oOpiEeCjNNLZCc6mew"
-  },
-  "g0-z-cs-os-d-ee-cj-nnlz-cc6-mew": {
-   "id": "g0-z-cs-os-d-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_g0zCsOsDEeCjNNLZCc6mew",
-   "enum": [
-    "REVERTIVE",
-    "NON-REVERTIVE"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The operation type associated with the protection mechanism (either non-revertive or revertive)."
-   ],
-   "uml-name": "_g0zCsOsDEeCjNNLZCc6mew"
-  },
-  "jl09-g-os-k-ee-cj-nnlz-cc6-mew": {
-   "id": "jl09-g-os-k-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_Jl09gOsKEeCjNNLZCc6mew",
-   "enum": [
-    "EXERCISE",
-    "MANUAL_SWITCH",
-    "FORCED_SWITCH",
-    "LOCKOUT",
-    "RELEASE_OF_MANUAL_SWITCH",
-    "RELEASE_OF_FORCED_SWITCH",
-    "RELEASE_OF_LOCKOUT"
-   ],
-   "is-read-only": false,
-   "description": [
-    "This enumeration contains the options for the actions that instruct the protection system for performing specific protection switching operations."
-   ],
-   "uml-name": "_Jl09gOsKEeCjNNLZCc6mew"
-  },
-  "bwx-bq-ow5-ee-cj-nnlz-cc6-mew": {
-   "id": "bwx-bq-ow5-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_bwxBQOw5EeCjNNLZCc6mew",
-   "enum": [
-    "UNLOCKED",
-    "LOCKED",
-    "SHUTTING_DOWN"
-   ],
-   "is-read-only": false,
-   "description": [
-    "For more information on Administrative State, See ITU-T Recs. X.731 and M.3100."
-   ],
-   "uml-name": "_bwxBQOw5EeCjNNLZCc6mew"
-  },
-  "ch-q5-o-ow-ee-cj-nnlz-cc6-mew": {
-   "id": "ch-q5-o-ow-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_ChQ5oOw-EeCjNNLZCc6mew",
-   "enum": [
-    "2.5_G",
-    "10_G",
-    "40_G",
-    "100_G"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Provides an enumeration with the meaning of each  k  value."
-   ],
-   "uml-name": "_ChQ5oOw-EeCjNNLZCc6mew"
-  },
-  "z-bty-u-ow-ee-cj-nnlz-cc6-mew": {
-   "id": "z-bty-u-ow-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_ZBtyUOw_EeCjNNLZCc6mew",
-   "enum": [
-    "DAPI",
-    "SAPI",
-    "BOTH"
-   ],
-   "is-read-only": false,
-   "description": [
-    "List of modes for trace identifier mismatch detection."
-   ],
-   "uml-name": "_ZBtyUOw_EeCjNNLZCc6mew"
-  },
-  "hf864-ox-a-ee-cj-nnlz-cc6-mew": {
-   "id": "hf864-ox-a-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_HF864OxAEeCjNNLZCc6mew",
-   "enum": [
-    "LOS_P",
-    "OCI",
-    "SSF_P",
-    "SSF_O",
-    "SSF",
-    "TIM",
-    "DEG",
-    "BDI"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The valid list of problems for the entity."
-   ],
-   "uml-name": "_HF864OxAEeCjNNLZCc6mew"
-  },
-  "w-po-no-o3-e-ee-cj-nnlz-cc6-mew": {
-   "id": "w-po-no-o3-e-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_WPoNoO3eEeCjNNLZCc6mew",
-   "enum": [
-    "INTRUSIVE",
-    "NON-INTRUSIVE"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Monitoring types for the tandem connection monitoring function."
-   ],
-   "uml-name": "_WPoNoO3eEeCjNNLZCc6mew"
-  },
-  "oi-7-w-o6-q-ee-cj-nnlz-cc6-mew": {
-   "id": "oi-7-w-o6-q-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_OI-7wO6QEeCjNNLZCc6mew",
-   "enum": [
-    "OPERATIONAL",
-    "TRANSPARENT",
-    "MONITOR"
-   ],
-   "is-read-only": false,
-   "description": [
-    "List of value modes for the sink side of the tandem connection monitoring function."
-   ],
-   "uml-name": "_OI-7wO6QEeCjNNLZCc6mew"
-  },
-  "zn-m8-c-o6-z-ee-cj-nnlz-cc6-mew": {
-   "id": "zn-m8-c-o6-z-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_ZnM8cO6ZEeCjNNLZCc6mew",
-   "enum": [
-    "40_G",
-    "100_G"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Provides an enumeration with the meaning of each  k  value."
-   ],
-   "uml-name": "_ZnM8cO6ZEeCjNNLZCc6mew"
-  },
-  "p-v-f8-o6-a-ee-cj-nnlz-cc6-mew": {
-   "id": "p-v-f8-o6-a-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_pV-F8O6aEeCjNNLZCc6mew",
-   "enum": [
-    "LOS",
-    "LOL"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The valid list of problems for the entity."
-   ],
-   "uml-name": "_pV-F8O6aEeCjNNLZCc6mew"
-  },
-  "qw1-syo6-b-ee-cj-nnlz-cc6-mew": {
-   "id": "qw1-syo6-b-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_QW1SYO6bEeCjNNLZCc6mew",
-   "enum": [
-    "LOS"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The valid list of problems for the entity."
-   ],
-   "uml-name": "_QW1SYO6bEeCjNNLZCc6mew"
-  },
-  "o-ouk-o6-b-ee-cj-nnlz-cc6-mew": {
-   "id": "o-ouk-o6-b-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_o-oukO6bEeCjNNLZCc6mew",
-   "enum": [
-    "2.5_G",
-    "10_G",
-    "40_G",
-    "2.5_10_G",
-    "10_40_G",
-    "2.5_10_40_G"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Provides an enumeration with the meaning of each  k  value."
-   ],
-   "uml-name": "_o-oukO6bEeCjNNLZCc6mew"
-  },
-  "krcg4-o6-d-ee-cj-nnlz-cc6-mew": {
-   "id": "krcg4-o6-d-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_KRCG4O6dEeCjNNLZCc6mew",
-   "enum": [
-    "INTRA_DOMAIN",
-    "INTER_DOMAIN"
-   ],
-   "is-read-only": false,
-   "description": [
-    "This enumeration provides the options for the interface associated with OTMn."
-   ],
-   "uml-name": "_KRCG4O6dEeCjNNLZCc6mew"
-  },
-  "eo-py-io6-q-ee-cj-nnlz-cc6-mew": {
-   "id": "eo-py-io6-q-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_EOPyIO6qEeCjNNLZCc6mew",
-   "enum": [
-    "INTRA_OFFICE",
-    "SHORTHAUL",
-    "LONGHAUL"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The valid options for reach of the optical cable."
-   ],
-   "uml-name": "_EOPyIO6qEeCjNNLZCc6mew"
-  },
-  "6-bt3-qo6-q-ee-cj-nnlz-cc6-mew": {
-   "id": "6-bt3-qo6-q-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_6Bt3QO6qEeCjNNLZCc6mew",
-   "enum": [
-    "ON",
-    "OFF"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The enumeration of the options for the Automatic Power Reduction Status."
-   ],
-   "uml-name": "_6Bt3QO6qEeCjNNLZCc6mew"
-  },
-  "f-lz-nqo6-v-ee-cj-nnlz-cc6-mew": {
-   "id": "f-lz-nqo6-v-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_FLzNQO6vEeCjNNLZCc6mew",
-   "enum": [
-    "BDI_P",
-    "BDI_O",
-    "BDI",
-    "TIM",
-    "LOS_P",
-    "LOS_O",
-    "LOS"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The valid list of problems for the entity."
-   ],
-   "uml-name": "_FLzNQO6vEeCjNNLZCc6mew"
-  },
-  "na-el-yo6-w-ee-cj-nnlz-cc6-mew": {
-   "id": "na-el-yo6-w-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_NAElYO6wEeCjNNLZCc6mew",
-   "enum": [
-    "REGULAR",
-    "NONE",
-    "VENDOR_SPECIFIC",
-    "FUNCTIONALLY_STANDARDIZED"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The adaptation options for OTUk_ConnectionTermationPoints."
-   ],
-   "uml-name": "_NAElYO6wEeCjNNLZCc6mew"
-  },
-  "wg-r-hc-o6-w-ee-cj-nnlz-cc6-mew": {
-   "id": "wg-r-hc-o6-w-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_wgRHcO6wEeCjNNLZCc6mew",
-   "enum": [
-    "2.5_G",
-    "10_G",
-    "40_G",
-    "100_G"
-   ],
-   "is-read-only": false,
-   "description": [
-    "Provides an enumeration with the meaning of each  k  value."
-   ],
-   "uml-name": "_wgRHcO6wEeCjNNLZCc6mew"
-  },
-  "6-y-g-eo6-w-ee-cj-nnlz-cc6-mew": {
-   "id": "6-y-g-eo6-w-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_6Y_gEO6wEeCjNNLZCc6mew",
-   "enum": [
-    "LOF",
-    "AIS",
-    "LOM"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The valid list of problems for the entity."
-   ],
-   "uml-name": "_6Y_gEO6wEeCjNNLZCc6mew"
-  },
-  "x-hnwmo6-x-ee-cj-nnlz-cc6-mew": {
-   "id": "x-hnwmo6-x-ee-cj-nnlz-cc6-mew",
-   "uml-id": "_xHNWMO6xEeCjNNLZCc6mew",
-   "enum": [
-    "TIM",
-    "DEG",
-    "BDI",
-    "SSF"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The valid list of problems for the entity."
-   ],
-   "uml-name": "_xHNWMO6xEeCjNNLZCc6mew"
-  },
-  "krq3-mk8-k-ee-g-z-yhf-u3-o-m-yg": {
-   "id": "krq3-mk8-k-ee-g-z-yhf-u3-o-m-yg",
-   "uml-id": "_KRQ3MK8KEeG_zYhfU3oMYg",
-   "enum": [
-    "SINK",
-    "SOURCE"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The enumeration with the options for directionality for nonintrusive monitoring."
-   ],
-   "uml-name": "_KRQ3MK8KEeG_zYhfU3oMYg"
-  },
-  "q-bme4-lu-y-ee-geq-z-lpdv-u3-ba": {
-   "id": "q-bme4-lu-y-ee-geq-z-lpdv-u3-ba",
-   "uml-id": "_qBme4LuYEeGeqZLpdvU3BA",
-   "enum": [
-    "PERCENTAGE",
-    "NUMBER_ERRORED_BLOCKS"
-   ],
-   "is-read-only": false,
-   "description": [
-    "<p>The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer.</p>"
-   ],
-   "uml-name": "_qBme4LuYEeGeqZLpdvU3BA"
-  },
-  "parz8-nw-a-ee-gone-tb-gt8-x0-a": {
-   "id": "parz8-nw-a-ee-gone-tb-gt8-x0-a",
-   "uml-id": "_Parz8NwAEeGoneTbGt8X0A",
-   "enum": [
-    "DWDM",
-    "CWDM",
-    "NO_WDM"
-   ],
-   "is-read-only": false,
-   "uml-name": "_Parz8NwAEeGoneTbGt8X0A"
-  },
-  "v1-tu-a-nw-a-ee-gone-tb-gt8-x0-a": {
-   "id": "v1-tu-a-nw-a-ee-gone-tb-gt8-x0-a",
-   "uml-id": "_V1TuANwAEeGoneTbGt8X0A",
-   "enum": [
-    "STANDARD",
-    "PROPRIETARY"
-   ],
-   "is-read-only": false,
-   "uml-name": "_V1TuANwAEeGoneTbGt8X0A"
-  },
-  "yt7-s4-pzg-ee-g3-u-a-qk-ii-ctg": {
-   "id": "yt7-s4-pzg-ee-g3-u-a-qk-ii-ctg",
-   "uml-id": "_yt7S4PzgEeG3u-aQKIiCtg",
-   "enum": [
-    "PATH",
-    "TCM1",
-    "TCM2",
-    "TCM3",
-    "TCM4",
-    "TCM5",
-    "TCM6",
-    "SECTION"
-   ],
-   "is-read-only": false,
-   "uml-name": "_yt7S4PzgEeG3u-aQKIiCtg"
-  },
-  "lg3-y-qovv-ee-ky-u85-edu-w-r-a": {
-   "id": "lg3-y-qovv-ee-ky-u85-edu-w-r-a",
-   "uml-id": "_LG3yQOVVEeKyU85eduW_rA",
-   "enum": [
-    "CONTROLLER",
-    "RESPONDER"
-   ],
-   "is-read-only": false,
-   "uml-name": "_LG3yQOVVEeKyU85eduW_rA"
-  },
-  "7-fy9-s-jsc-ee-o-lx-kcui-ytz-cg": {
-   "id": "7-fy9-s-jsc-ee-o-lx-kcui-ytz-cg",
-   "uml-id": "_7fy9sJSCEeOLxKCUIYtzCg",
-   "enum": [
-    "INCREASE_BW",
-    "DECREASE_BW"
-   ],
-   "is-read-only": false,
-   "uml-name": "_7fy9sJSCEeOLxKCUIYtzCg"
-  },
-  "y6-wue-eam-eeab-npx3-o7-rjtw": {
-   "id": "y6-wue-eam-eeab-npx3-o7-rjtw",
-   "uml-id": "_Y6WUEEamEeabNPX3o7rjtw",
-   "enum": [
-    "UNKNOWN",
-    "PERIOD_15MIN",
-    "PERIOD_24HOURS"
-   ],
-   "is-read-only": false,
-   "description": [
-    "The enumeration with the options for granularity period of the performance data."
-   ],
-   "uml-name": "_Y6WUEEamEeabNPX3o7rjtw"
-  }
- }
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json
deleted file mode 100644
index 3d0a414..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/maintenancemode.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
-    "maintenancemode": {
-        "DragonWave-Z3":{
-            "node":"DragonWave-Z3",
-            "filter": [{
-                "definition":{},
-                "description":"",
-                "start":"2018-01-01T10:00+00:00",
-                "end":"2018-10-10T10:00+00:00"
-            }]
-        },
-        "MaintenanceMode":{
-            "node":"MaintenanceMode",
-            "filter": [{
-                "definition":{},
-                "description":"",
-                "start":"2018-01-01T10:00+00:00",
-                "end":"2018-10-10T10:00+00:00"
-            }]
-        }
-    }
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json
deleted file mode 100644
index 6568634..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.schema-information.json
+++ /dev/null
@@ -1,3161 +0,0 @@
-{
- "schema-information": {
-  "mw-air-interface-pac": {
-   "id": "mw-air-interface-pac",
-   "uml-id": "__1kQ0Hf4EeW-M8kopGJqEA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "MW_AirInterface_Pac"
-  },
-  "layer-protocol": {
-   "id": "layer-protocol",
-   "uml-id": "_m_QIglpKEeax66gMnmfzpQ",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "description": [
-    "CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"
-   ],
-   "uml-name": "_layerProtocol"
-  },
-  "air-interface-capability-list": {
-   "id": "air-interface-capability-list",
-   "uml-id": "_-LlKoIejEeWaZYk7gpuOtw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."
-   ],
-   "uml-name": "AirInterfaceCapability"
-  },
-  "air-interface-configuration": {
-   "id": "air-interface-configuration",
-   "uml-id": "_KOcsUIe0EeWnUdmvl3PBkw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Configuration of the radio link."
-   ],
-   "uml-name": "AirInterfaceConfiguration"
-  },
-  "air-interface-status": {
-   "id": "air-interface-status",
-   "uml-id": "_iCTioHmIEeWRAfnL3fvovg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Measurements of current values on the air interface and operational status of the device."
-   ],
-   "uml-name": "AirInterfaceStatus"
-  },
-  "air-interface-current-problems": {
-   "id": "air-interface-current-problems",
-   "uml-id": "_UF8VcHmIEeWRAfnL3fvovg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "AirInterfaceCurrentProblems"
-  },
-  "air-interface-current-performance": {
-   "id": "air-interface-current-performance",
-   "uml-id": "_CX-iIKS6EeWyu_jasKgNwA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the air interface at a particular moment."
-   ],
-   "uml-name": "AirInterfaceCurrentPerformance"
-  },
-  "air-interface-historical-performances": {
-   "id": "air-interface-historical-performances",
-   "uml-id": "_fChNMHmHEeWRAfnL3fvovg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the air interface for a pre-defined measurement interval."
-   ],
-   "uml-name": "AirInterfaceHistoricalPerformances"
-  },
-  "type-of-equipment": {
-   "id": "type-of-equipment",
-   "uml-id": "_gK4jMJUBEeWIaZzoaYJ6_A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."
-   ],
-   "uml-name": "typeOfEquipment",
-   "controlType": "text"
-  },
-  "tx-frequency-min": {
-   "id": "tx-frequency-min",
-   "uml-id": "_90Xe0HfcEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Value of the minimum transmit frequency tunable at the air interface."
-   ],
-   "uml-name": "txFrequencyMin",
-   "controlType": "number"
-  },
-  "tx-frequency-max": {
-   "id": "tx-frequency-max",
-   "uml-id": "_-1ztsHfcEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Value of the maximum transmit frequency tunable at the air interface."
-   ],
-   "uml-name": "txFrequencyMax",
-   "controlType": "number"
-  },
-  "rx-frequency-min": {
-   "id": "rx-frequency-min",
-   "uml-id": "_BLqx0HfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 4,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Value of the minimum receive frequency tunable at the air interface."
-   ],
-   "uml-name": "rxFrequencyMin",
-   "controlType": "number"
-  },
-  "rx-frequency-max": {
-   "id": "rx-frequency-max",
-   "uml-id": "_CSBV4HfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 5,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Value of the maximum receive frequency tunable at the air interface."
-   ],
-   "uml-name": "rxFrequencyMax",
-   "controlType": "number"
-  },
-  "adaptive-modulation-is-avail": {
-   "id": "adaptive-modulation-is-avail",
-   "uml-id": "_ClmuUHffEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 6,
-   "is-read-only": true,
-   "description": [
-    "In case the device is capable of adaptive modulation, this field shall contain a 'true'."
-   ],
-   "uml-name": "adaptiveModulationIsAvail",
-   "controlType": "checkbox"
-  },
-  "mimo-is-avail": {
-   "id": "mimo-is-avail",
-   "uml-id": "_qXBrkH2eEeWaPP5xsIT8pQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 7,
-   "is-read-only": true,
-   "description": [
-    "In case the device is capable of MIMO, this field shall contain a 'true'."
-   ],
-   "uml-name": "mimoIsAvail",
-   "controlType": "checkbox"
-  },
-  "mimo-channels": {
-   "id": "mimo-channels",
-   "uml-id": "_qysT4H2eEeWaPP5xsIT8pQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 8,
-   "is-read-only": true,
-   "unit": "channels",
-   "description": [
-    "Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."
-   ],
-   "uml-name": "mimoChannels",
-   "controlType": "number"
-  },
-  "alic-is-avail": {
-   "id": "alic-is-avail",
-   "uml-id": "_a3HgMIL9EeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 9,
-   "is-read-only": true,
-   "description": [
-    "In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."
-   ],
-   "uml-name": "alicIsAvail",
-   "controlType": "checkbox"
-  },
-  "atpc-is-avail": {
-   "id": "atpc-is-avail",
-   "uml-id": "_iRRtgHftEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 10,
-   "is-read-only": true,
-   "description": [
-    "In case the microwave radio is capable of ATPC, this field shall contain a 'true'."
-   ],
-   "uml-name": "atpcIsAvail",
-   "controlType": "checkbox"
-  },
-  "atpc-range": {
-   "id": "atpc-range",
-   "uml-id": "_ErwNYHfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 11,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Extent of the ATPC range."
-   ],
-   "uml-name": "atpcRange",
-   "controlType": "number"
-  },
-  "encryption-is-avail": {
-   "id": "encryption-is-avail",
-   "uml-id": "_4uPM8E58EeaCk6G-lyG1OQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 10,
-   "is-read-only": true,
-   "description": [
-    "Shall be marked 'true', if Ethernet payload encryption is available."
-   ],
-   "uml-name": "encryptionIsAvail",
-   "controlType": "checkbox"
-  },
-  "transmission-mode-list": {
-   "id": "transmission-mode-list",
-   "uml-id": "_nwbvcPXREeW9zIqh2WHHww",
-   "uml-type": "ownedAttribute",
-   "type": "_zG34sPXQEeW9zIqh2WHHww",
-   "order-number": 5,
-   "is-read-only": true,
-   "uml-name": "transmissionModeList"
-  },
-  "maintenance-timer-range": {
-   "id": "maintenance-timer-range",
-   "uml-id": "_I1FYsMWZEeW3xsRKtpCLuA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 14,
-   "is-read-only": true,
-   "unit": "s",
-   "description": [
-    "Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."
-   ],
-   "uml-name": "maintenanceTimerRange",
-   "controlType": "text"
-  },
-  "supported-alarms": {
-   "id": "supported-alarms",
-   "uml-id": "_ecCeb0aqEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."
-   ],
-   "uml-name": "supportedAlarms",
-   "controlType": "text"
-  },
-  "supported-channel-plan-list": {
-   "id": "supported-channel-plan-list",
-   "uml-id": "_8gpNIHfcEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database."
-   ],
-   "uml-name": "supportedChannelPlan",
-   "controlType": "text"
-  },
-  "air-interface-name": {
-   "id": "air-interface-name",
-   "uml-id": "_XMDggIL5EeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "Operator specific microwave link ID (often used for coding area, type of element and sequential number)."
-   ],
-   "uml-name": "airInterfaceName",
-   "controlType": "text"
-  },
-  "radio-signal-id": {
-   "id": "radio-signal-id",
-   "uml-id": "_QY9KoHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check."
-   ],
-   "uml-name": "radioSignalID",
-   "controlType": "text"
-  },
-  "tx-frequency": {
-   "id": "tx-frequency",
-   "uml-id": "_UNE8gHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": false,
-   "unit": "kHz",
-   "description": [
-    "Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."
-   ],
-   "uml-name": "txFrequency",
-   "controlType": "number"
-  },
-  "rx-frequency": {
-   "id": "rx-frequency",
-   "uml-id": "_W7ayEHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 4,
-   "is-read-only": false,
-   "unit": "kHz",
-   "description": [
-    "Center frequency of the receive channel."
-   ],
-   "uml-name": "rxFrequency",
-   "controlType": "number"
-  },
-  "tx-channel-bandwidth": {
-   "id": "tx-channel-bandwidth",
-   "uml-id": "_bhAdIHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 5,
-   "is-read-only": false,
-   "unit": "kHz",
-   "description": [
-    "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
-   ],
-   "uml-name": "txChannelBandwidth",
-   "controlType": "number"
-  },
-  "rx-channel-bandwidth": {
-   "id": "rx-channel-bandwidth",
-   "uml-id": "_eKIbgHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 6,
-   "is-read-only": false,
-   "unit": "kHz",
-   "description": [
-    "Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
-   ],
-   "uml-name": "rxChannelBandwidth",
-   "controlType": "number"
-  },
-  "polarization": {
-   "id": "polarization",
-   "uml-id": "_bVebEI99EeWFluv9KLLl5A",
-   "uml-type": "ownedAttribute",
-   "type": "_e85NsI99EeWFluv9KLLl5A",
-   "order-number": 7,
-   "is-read-only": false,
-   "description": [
-    "Allows documenting the polarization of the air interface."
-   ],
-   "uml-name": "polarization",
-   "controlType": [
-    "not-specified",
-    "horizontal",
-    "vertical"
-   ]
-  },
-  "power-is-on": {
-   "id": "power-is-on",
-   "uml-id": "_p4eR8Hf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 8,
-   "is-read-only": false,
-   "description": [
-    "Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."
-   ],
-   "uml-name": "powerIsOn",
-   "controlType": "checkbox"
-  },
-  "transmitter-is-on": {
-   "id": "transmitter-is-on",
-   "uml-id": "_uYVvgHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 9,
-   "is-read-only": false,
-   "description": [
-    "Activation of the transmitter inside the radio shall be expressed as a 'true'."
-   ],
-   "uml-name": "transmitterIsOn",
-   "controlType": "checkbox"
-  },
-  "receiver-is-on": {
-   "id": "receiver-is-on",
-   "uml-id": "_q_XcwEgnEeathrAE0htMiA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 10,
-   "is-read-only": false,
-   "description": [
-    "Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations."
-   ],
-   "uml-name": "receiverIsOn",
-   "controlType": "checkbox"
-  },
-  "tx-power": {
-   "id": "tx-power",
-   "uml-id": "_ZEXmIHf6EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 11,
-   "is-read-only": false,
-   "unit": "dBm",
-   "description": [
-    "Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."
-   ],
-   "uml-name": "txPower",
-   "controlType": "number"
-  },
-  "adaptive-modulation-is-on": {
-   "id": "adaptive-modulation-is-on",
-   "uml-id": "_0jhfYHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 12,
-   "is-read-only": false,
-   "description": [
-    "Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."
-   ],
-   "uml-name": "adaptiveModulationIsOn",
-   "controlType": "checkbox"
-  },
-  "modulation-min": {
-   "id": "modulation-min",
-   "uml-id": "_dM_BUHf6EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 13,
-   "is-read-only": false,
-   "unit": "symbols",
-   "description": [
-    "Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
-   ],
-   "uml-name": "modulationMin",
-   "controlType": "number"
-  },
-  "modulation-max": {
-   "id": "modulation-max",
-   "uml-id": "_gAHQQHf6EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 14,
-   "is-read-only": false,
-   "unit": "symbols",
-   "description": [
-    "Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
-   ],
-   "uml-name": "modulationMax",
-   "controlType": "number"
-  },
-  "xpic-is-on": {
-   "id": "xpic-is-on",
-   "uml-id": "_4hi0IHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 15,
-   "is-read-only": false,
-   "description": [
-    "Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."
-   ],
-   "uml-name": "xpicIsOn",
-   "controlType": "checkbox"
-  },
-  "mimo-is-on": {
-   "id": "mimo-is-on",
-   "uml-id": "_7t4fIH2dEeWaPP5xsIT8pQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 16,
-   "is-read-only": false,
-   "description": [
-    "Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."
-   ],
-   "uml-name": "mimoIsOn",
-   "controlType": "checkbox"
-  },
-  "alic-is-on": {
-   "id": "alic-is-on",
-   "uml-id": "_FmWHMHf6EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 17,
-   "is-read-only": false,
-   "description": [
-    "Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."
-   ],
-   "uml-name": "alicIsOn",
-   "controlType": "checkbox"
-  },
-  "atpc-is-on": {
-   "id": "atpc-is-on",
-   "uml-id": "_9Hz0oHf5EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 18,
-   "is-read-only": false,
-   "description": [
-    "ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."
-   ],
-   "uml-name": "atpcIsOn",
-   "controlType": "checkbox"
-  },
-  "atpc-thresh-upper": {
-   "id": "atpc-thresh-upper",
-   "uml-id": "_pR7yMHgAEeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 19,
-   "is-read-only": false,
-   "unit": "dBm",
-   "description": [
-    "If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."
-   ],
-   "uml-name": "atpcThreshUpper",
-   "controlType": "number"
-  },
-  "atpc-thresh-lower": {
-   "id": "atpc-thresh-lower",
-   "uml-id": "_sIlPMHgAEeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 20,
-   "is-read-only": false,
-   "unit": "dBm",
-   "description": [
-    "If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."
-   ],
-   "uml-name": "atpcThreshLower",
-   "controlType": "number"
-  },
-  "auto-freq-select-is-on": {
-   "id": "auto-freq-select-is-on",
-   "uml-id": "_dG5VAIL-EeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 21,
-   "is-read-only": false,
-   "description": [
-    "Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."
-   ],
-   "uml-name": "autoFreqSelectIsOn",
-   "controlType": "checkbox"
-  },
-  "auto-freq-select-range": {
-   "id": "auto-freq-select-range",
-   "uml-id": "_yH9XMIMCEeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 22,
-   "is-read-only": false,
-   "unit": "channels",
-   "description": [
-    "Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."
-   ],
-   "uml-name": "autoFreqSelectRange",
-   "controlType": "number"
-  },
-  "modulation-is-on": {
-   "id": "modulation-is-on",
-   "uml-id": "_kxXzwIMGEeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 23,
-   "is-read-only": false,
-   "description": [
-    "Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'."
-   ],
-   "uml-name": "modulationIsOn",
-   "controlType": "checkbox"
-  },
-  "encryption-is-on": {
-   "id": "encryption-is-on",
-   "uml-id": "_uI7bIE58EeaCk6G-lyG1OQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 11,
-   "is-read-only": false,
-   "description": [
-    "Activates encryption of the Ethernet payload."
-   ],
-   "uml-name": "encryptionIsOn",
-   "controlType": "checkbox"
-  },
-  "cryptographic-key": {
-   "id": "cryptographic-key",
-   "uml-id": "_psRpoE58EeaCk6G-lyG1OQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 12,
-   "is-read-only": false,
-   "description": [
-    "Key for transforming plaintext into cipher text data."
-   ],
-   "uml-name": "cryptographicKey",
-   "controlType": "text"
-  },
-  "loop-back-kind-on": {
-   "id": "loop-back-kind-on",
-   "uml-id": "_PyRvsHf6EeW-M8kopGJqEA",
-   "uml-type": "ownedAttribute",
-   "type": "_3CZ3UIsDEead4ersMrOjBQ",
-   "order-number": 26,
-   "is-read-only": false,
-   "description": [
-    "Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."
-   ],
-   "uml-name": "loopBackKindOn",
-   "controlType": [
-    "none",
-    "if",
-    "rf"
-   ]
-  },
-  "maintenance-timer": {
-   "id": "maintenance-timer",
-   "uml-id": "_7-oTwCd5EeaJA6AVLNrv_w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 27,
-   "is-read-only": false,
-   "unit": "s",
-   "description": [
-    "Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."
-   ],
-   "uml-name": "maintenanceTimer",
-   "controlType": "number"
-  },
-  "problem-kind-severity-list": {
-   "id": "problem-kind-severity-list",
-   "uml-id": "_OMQH02z0Eeaf-__BRLM84g",
-   "uml-type": "ownedAttribute",
-   "type": "_eIml0JH1EeWUdbnmmNiTAA",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "Severity of this type of alarm."
-   ],
-   "uml-name": "problemKindSeverity",
-   "controlType": [
-    "non-alarmed",
-    "warning",
-    "minor",
-    "major",
-    "critical"
-   ]
-  },
-  "tx-frequency-cur": {
-   "id": "tx-frequency-cur",
-   "uml-id": "_YZq7gK4tEeWXs6m-9H3KvA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Center frequency of the currently operated transmit channel."
-   ],
-   "uml-name": "txFrequencyCur",
-   "controlType": "number"
-  },
-  "rx-frequency-cur": {
-   "id": "rx-frequency-cur",
-   "uml-id": "_33IdUIL-EeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Center frequency of the currently operated receive channel."
-   ],
-   "uml-name": "rxFrequencyCur",
-   "controlType": "number"
-  },
-  "tx-level-cur": {
-   "id": "tx-level-cur",
-   "uml-id": "_L3B5wHgIEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Current transmit level."
-   ],
-   "uml-name": "txLevelCur",
-   "controlType": "number"
-  },
-  "rx-level-cur": {
-   "id": "rx-level-cur",
-   "uml-id": "_OHN9AHizEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 4,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Current receive level."
-   ],
-   "uml-name": "rxLevelCur",
-   "controlType": "number"
-  },
-  "modulation-cur": {
-   "id": "modulation-cur",
-   "uml-id": "_RBMa0HizEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 5,
-   "is-read-only": true,
-   "unit": "symbols",
-   "description": [
-    "Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."
-   ],
-   "uml-name": "modulationCur",
-   "controlType": "number"
-  },
-  "code-rate-cur": {
-   "id": "code-rate-cur",
-   "uml-id": "_UYyBsHizEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 6,
-   "is-read-only": true,
-   "unit": "%",
-   "description": [
-    "Code rate of the currently operated coding scheme (Net bit rate ≤ Gross bit rate · code rate)."
-   ],
-   "uml-name": "codeRateCur",
-   "controlType": "number"
-  },
-  "snir-cur": {
-   "id": "snir-cur",
-   "uml-id": "_B7G0AEzvEeaRytIQfQ43Wg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Currently measured signal to (noise+interference) ratio of the combined signals."
-   ],
-   "uml-name": "snirCur",
-   "controlType": "number"
-  },
-  "xpd-cur": {
-   "id": "xpd-cur",
-   "uml-id": "_Z7NvgHizEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 8,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Currently measured cross polarization discrimination."
-   ],
-   "uml-name": "xpdCur",
-   "controlType": "number"
-  },
-  "rf-temp-cur": {
-   "id": "rf-temp-cur",
-   "uml-id": "_d6wuQHizEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 9,
-   "is-read-only": true,
-   "unit": "Celsius",
-   "description": [
-    "Current temperature (in degree Celsius) of the radio module inside the outdoor unit."
-   ],
-   "uml-name": "rfTempCur",
-   "controlType": "number"
-  },
-  "last-status-change": {
-   "id": "last-status-change",
-   "uml-id": "_ecCetEaqEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "Time the Container entered its current operational status. _format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
-   ],
-   "uml-name": "lastStatusChange"
-  },
-  "radio-power-is-up": {
-   "id": "radio-power-is-up",
-   "uml-id": "_sFKXcHizEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 11,
-   "is-read-only": true,
-   "description": [
-    "If the radio unit has power and is switched on, this shall be expressed as a 'true'."
-   ],
-   "uml-name": "radioPowerIsUp",
-   "controlType": "checkbox"
-  },
-  "link-is-up": {
-   "id": "link-is-up",
-   "uml-id": "_5JBPUHizEeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 12,
-   "is-read-only": true,
-   "description": [
-    "If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."
-   ],
-   "uml-name": "linkIsUp",
-   "controlType": "checkbox"
-  },
-  "xpic-is-up": {
-   "id": "xpic-is-up",
-   "uml-id": "_ESRbsHi0EeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 13,
-   "is-read-only": true,
-   "description": [
-    "If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."
-   ],
-   "uml-name": "xpicIsUp",
-   "controlType": "checkbox"
-  },
-  "mimo-is-up": {
-   "id": "mimo-is-up",
-   "uml-id": "_DVaQwIL6EeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 14,
-   "is-read-only": true,
-   "description": [
-    "If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."
-   ],
-   "uml-name": "mimoIsUp",
-   "controlType": "checkbox"
-  },
-  "alic-is-up": {
-   "id": "alic-is-up",
-   "uml-id": "_Hte-UHi0EeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 15,
-   "is-read-only": true,
-   "description": [
-    "If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."
-   ],
-   "uml-name": "alicIsUp",
-   "controlType": "checkbox"
-  },
-  "atpc-is-up": {
-   "id": "atpc-is-up",
-   "uml-id": "_VimCgMjNEeWYRsWW_rqpgw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 16,
-   "is-read-only": true,
-   "description": [
-    "If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."
-   ],
-   "uml-name": "atpcIsUp",
-   "controlType": "checkbox"
-  },
-  "auto-freq-select-is-up": {
-   "id": "auto-freq-select-is-up",
-   "uml-id": "_-PXKsIL-EeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 17,
-   "is-read-only": true,
-   "description": [
-    "If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."
-   ],
-   "uml-name": "autoFreqSelectIsUp",
-   "controlType": "checkbox"
-  },
-  "loop-back-kind-up": {
-   "id": "loop-back-kind-up",
-   "uml-id": "_S9prAHi0EeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "_3CZ3UIsDEead4ersMrOjBQ",
-   "order-number": 18,
-   "is-read-only": true,
-   "description": [
-    "The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."
-   ],
-   "uml-name": "loopBackKindUp",
-   "controlType": [
-    "none",
-    "if",
-    "rf"
-   ]
-  },
-  "local-end-point-id": {
-   "id": "local-end-point-id",
-   "uml-id": "_pEsgcFQHEeaCXY7nSBqs6w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 19,
-   "is-read-only": true,
-   "description": [
-    "The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."
-   ],
-   "uml-name": "localEndPointId",
-   "controlType": "text"
-  },
-  "remote-end-point-id": {
-   "id": "remote-end-point-id",
-   "uml-id": "_r3cU4FQHEeaCXY7nSBqs6w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 20,
-   "is-read-only": true,
-   "description": [
-    "The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."
-   ],
-   "uml-name": "remoteEndPointId",
-   "controlType": "text"
-  },
-  "current-problem-list": {
-   "id": "current-problem-list",
-   "uml-id": "_ecCewEaqEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "__h1n4MXpEeWJ6KZuc0h_vw",
-   "order-number": 1,
-   "is-read-only": true,
-   "uml-name": "currentProblemList"
-  },
-  "current-performance-data-list": {
-   "id": "current-performance-data-list",
-   "uml-id": "_ecCexkaqEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "_pA5AQGz6Eeaf-__BRLM84g",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."
-   ],
-   "uml-name": "currentPerformanceDataList"
-  },
-  "historical-performance-data-list": {
-   "id": "historical-performance-data-list",
-   "uml-id": "_ecCeykaqEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "_pTaToGz6Eeaf-__BRLM84g",
-   "order-number": 1,
-   "is-read-only": true,
-   "uml-name": "historicalPerformanceDataList"
-  },
-  "co-channel-group": {
-   "id": "co-channel-group",
-   "uml-id": "_XBs2YJQrEeWOu_cDl8dd7w",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Required for configuring XPIC, MIMO and ALIC."
-   ],
-   "uml-name": "CoChannelGroup"
-  },
-  "co-channel-group-id": {
-   "id": "co-channel-group-id",
-   "uml-id": "_pIjBgEy7EeaRytIQfQ43Wg",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "coChannelGroupId"
-  },
-  "air-interface-list": {
-   "id": "air-interface-list",
-   "uml-id": "_tIadUCJeEeaCUo1MUtSuEg",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."
-   ],
-   "uml-name": "_airInterfaceList"
-  },
-  "sort-of-co-channel-group": {
-   "id": "sort-of-co-channel-group",
-   "uml-id": "_ZrjZcJRrEeWIaZzoaYJ6_A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"
-   ],
-   "uml-name": "sortOfCoChannelGroup",
-   "controlType": "text"
-  },
-  "logical-termination-point": {
-   "id": "logical-termination-point",
-   "uml-id": "_8QgfIKwZEeaK38AermeaCw",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 4,
-   "is-read-only": false,
-   "uml-name": "_logicalTerminationPoint"
-  },
-  "mw-air-interface-hsb-end-point-pac": {
-   "id": "mw-air-interface-hsb-end-point-pac",
-   "uml-id": "_CXKgMJRbEeWMYJZn43K_Aw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."
-   ],
-   "uml-name": "MW_AirInterfaceHsbEndPoint_Pac"
-  },
-  "role": {
-   "id": "role",
-   "uml-id": "_CXKgNpRbEeWMYJZn43K_Aw",
-   "uml-type": "ownedAttribute",
-   "type": "_01_dYJReEeWxIPEwZQ_gmw",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "role",
-   "controlType": [
-    "working",
-    "protection",
-    "protected"
-   ]
-  },
-  "endpoint": {
-   "id": "endpoint",
-   "uml-id": "_dglVQLYgEeWOio-Gg6Q2sw",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_b_lUAFYgEeOVGaP4lO41SQ",
-   "order-number": 2,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "_endpoint"
-  },
-  "mw-air-interface-hsb-fc-switch-pac": {
-   "id": "mw-air-interface-hsb-fc-switch-pac",
-   "uml-id": "_CXNjgJRbEeWMYJZn43K_Aw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."
-   ],
-   "uml-name": "MW_AirInterfaceHsbFcSwitch_Pac"
-  },
-  "prot-type": {
-   "id": "prot-type",
-   "uml-id": "_CXNjiJRbEeWMYJZn43K_Aw",
-   "uml-type": "ownedAttribute",
-   "type": "_DaB5IJRgEeWxIPEwZQ_gmw",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "Indicates the protection scheme that is used for the ProtectionGroup."
-   ],
-   "uml-name": "protType",
-   "controlType": [
-    "hsb"
-   ]
-  },
-  "air-interface-hsb-configuration-is-faulty-severity": {
-   "id": "air-interface-hsb-configuration-is-faulty-severity",
-   "uml-id": "_80BlAJ2gEeWSuvrh9KcclQ",
-   "uml-type": "ownedAttribute",
-   "type": "_eIml0JH1EeWUdbnmmNiTAA",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."
-   ],
-   "uml-name": "airInterfaceHsbConfigurationIsFaultySeverity",
-   "controlType": [
-    "non-alarmed",
-    "warning",
-    "minor",
-    "major",
-    "critical"
-   ]
-  },
-  "air-interface-hsb-is-partly-down-severity": {
-   "id": "air-interface-hsb-is-partly-down-severity",
-   "uml-id": "_r382sJ2mEeWSuvrh9KcclQ",
-   "uml-type": "ownedAttribute",
-   "type": "_eIml0JH1EeWUdbnmmNiTAA",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."
-   ],
-   "uml-name": "airInterfaceHsbIsPartlyDownSeverity",
-   "controlType": [
-    "non-alarmed",
-    "warning",
-    "minor",
-    "major",
-    "critical"
-   ]
-  },
-  "air-interface-hsb-is-down-severity": {
-   "id": "air-interface-hsb-is-down-severity",
-   "uml-id": "_sRGWgJ2mEeWSuvrh9KcclQ",
-   "uml-type": "ownedAttribute",
-   "type": "_eIml0JH1EeWUdbnmmNiTAA",
-   "order-number": 4,
-   "is-read-only": false,
-   "description": [
-    "The level of severity of the total HSB configuration being down shall be chosen from an enumeration."
-   ],
-   "uml-name": "airInterfaceHsbIsDownSeverity",
-   "controlType": [
-    "non-alarmed",
-    "warning",
-    "minor",
-    "major",
-    "critical"
-   ]
-  },
-  "fcswitch": {
-   "id": "fcswitch",
-   "uml-id": "_FS83ILYhEeWOio-Gg6Q2sw",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_a97NQFYhEeOVGaP4lO41SQ",
-   "order-number": 5,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "_fcswitch"
-  },
-  "mw-air-interface-diversity-pac": {
-   "id": "mw-air-interface-diversity-pac",
-   "uml-id": "_WbgFcHgFEeWfutScSwFT9A",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "MW_AirInterfaceDiversity_Pac"
-  },
-  "air-interface-diversity-capability": {
-   "id": "air-interface-diversity-capability",
-   "uml-id": "_vxH2wIekEeWaZYk7gpuOtw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Describes the capabilities in implementing different types of air interface diversity."
-   ],
-   "uml-name": "AirInterfaceDiversityCapability"
-  },
-  "air-interface-diversity-configuration": {
-   "id": "air-interface-diversity-configuration",
-   "uml-id": "_43RTMIe1EeWnUdmvl3PBkw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "AirInterfaceDiversityConfiguration"
-  },
-  "air-interface-diversity-status": {
-   "id": "air-interface-diversity-status",
-   "uml-id": "_EKZYcJOXEeWz-6sqLzUedw",
-   "uml-type": "ownedAttribute",
-   "type": "_DUJs8JOXEeWz-6sqLzUedw",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "Status of the air interface bundle."
-   ],
-   "uml-name": "airInterfaceDiversityStatus",
-   "controlType": [
-    "group-down",
-    "not-all-ai-active",
-    "all-ai-active"
-   ]
-  },
-  "air-interface-diversity-current-problems": {
-   "id": "air-interface-diversity-current-problems",
-   "uml-id": "_CAvhEHvtEeWzooKF5kx0aw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "AirInterfaceDiversityCurrentProblems"
-  },
-  "air-interface-diversity-current-performance": {
-   "id": "air-interface-diversity-current-performance",
-   "uml-id": "_GIsAQKjDEeWlgMiFXLmCIQ",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the air interface diversity configuration at a particular moment."
-   ],
-   "uml-name": "AirInterfaceDiversityCurrentPerformance"
-  },
-  "air-interface-diversity-historical-performances": {
-   "id": "air-interface-diversity-historical-performances",
-   "uml-id": "_8IIu8HvsEeWzooKF5kx0aw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."
-   ],
-   "uml-name": "AirInterfaceDiversityHistoricalPerformances"
-  },
-  "available-kinds-of-diversity": {
-   "id": "available-kinds-of-diversity",
-   "uml-id": "_luAGENyVEeW-SfXlFFFI0Q",
-   "uml-type": "ownedAttribute",
-   "type": "_pTliINyUEeW-SfXlFFFI0Q",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "Available types of diversity to be listed."
-   ],
-   "uml-name": "availableKindsOfDiversity"
-  },
-  "air-interface-diversity": {
-   "id": "air-interface-diversity",
-   "uml-id": "_hynTIHi_EeWfutScSwFT9A",
-   "uml-type": "ownedAttribute",
-   "type": "_pTliINyUEeW-SfXlFFFI0Q",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "Type of air interface diversity configured at the link."
-   ],
-   "uml-name": "airInterfaceDiversity"
-  },
-  "air-interface-ltp-list": {
-   "id": "air-interface-ltp-list",
-   "uml-id": "_xRMKgNyXEeW-SfXlFFFI0Q",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_eEpDMFX4EeOVGaP4lO41SQ",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"
-   ],
-   "uml-name": "_airInterfaceLtpList"
-  },
-  "mw-pure-ethernet-structure-pac": {
-   "id": "mw-pure-ethernet-structure-pac",
-   "uml-id": "__OTQ0UaeEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."
-   ],
-   "uml-name": "MW_PureEthernetStructure_Pac"
-  },
-  "pure-ethernet-structure-capability-list": {
-   "id": "pure-ethernet-structure-capability-list",
-   "uml-id": "__OTQ4EaeEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport."
-   ],
-   "uml-name": "PureEthernetStructureCapability"
-  },
-  "pure-ethernet-structure-configuration": {
-   "id": "pure-ethernet-structure-configuration",
-   "uml-id": "__OTQ8UaeEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "PureEthernetStructureConfiguration"
-  },
-  "pure-ethernet-structure-status": {
-   "id": "pure-ethernet-structure-status",
-   "uml-id": "__OTQ_UaeEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "PureEthernetStructureStatus"
-  },
-  "pure-ethernet-structure-current-problems": {
-   "id": "pure-ethernet-structure-current-problems",
-   "uml-id": "__OTRCUaeEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "PureEthernetStructureCurrentProblems"
-  },
-  "pure-ethernet-structure-current-performance": {
-   "id": "pure-ethernet-structure-current-performance",
-   "uml-id": "__OTRD0aeEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."
-   ],
-   "uml-name": "PureEthernetStructureCurrentPerformance"
-  },
-  "pure-ethernet-structure-historical-performances": {
-   "id": "pure-ethernet-structure-historical-performances",
-   "uml-id": "__OTRE0aeEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."
-   ],
-   "uml-name": "PureEthernetStructureHistoricalPerformances"
-  },
-  "structure-id": {
-   "id": "structure-id",
-   "uml-id": "_Bzxo5EagEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Identifies the Structure for bundling and container."
-   ],
-   "uml-name": "structureId"
-  },
-  "segment-status-list": {
-   "id": "segment-status-list",
-   "uml-id": "_BzxpAEagEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "_KwZVcMUCEeW3xsRKtpCLuA",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"
-   ],
-   "uml-name": "segmentStatusList"
-  },
-  "mw-hybrid-mw-structure-pac": {
-   "id": "mw-hybrid-mw-structure-pac",
-   "uml-id": "_Bzxo0UagEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."
-   ],
-   "uml-name": "MW_HybridMwStructure_Pac"
-  },
-  "hybrid-mw-structure-capability": {
-   "id": "hybrid-mw-structure-capability",
-   "uml-id": "_Bzxo4EagEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available."
-   ],
-   "uml-name": "HybridMwStructureCapability"
-  },
-  "hybrid-mw-structure-configuration": {
-   "id": "hybrid-mw-structure-configuration",
-   "uml-id": "_Bzxo8UagEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "HybridMwStructureConfiguration"
-  },
-  "hybrid-mw-structure-status": {
-   "id": "hybrid-mw-structure-status",
-   "uml-id": "_Bzxo_UagEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "HybridMwStructureStatus"
-  },
-  "hybrid-mw-structure-current-problems": {
-   "id": "hybrid-mw-structure-current-problems",
-   "uml-id": "_BzxpCUagEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "HybridMwStructureCurrentProblems"
-  },
-  "hybrid-mw-structure-current-performance": {
-   "id": "hybrid-mw-structure-current-performance",
-   "uml-id": "_BzxpD0agEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the structure of a hybrid microwave at a particular moment."
-   ],
-   "uml-name": "HybridMwStructureCurrentPerformance"
-  },
-  "hybrid-mw-structure-historical-performances": {
-   "id": "hybrid-mw-structure-historical-performances",
-   "uml-id": "_BzxpE0agEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."
-   ],
-   "uml-name": "HybridMwStructureHistoricalPerformances"
-  },
-  "supported-tdm-structure-types-list": {
-   "id": "supported-tdm-structure-types-list",
-   "uml-id": "_tA-uQEduEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "_jRAQsEdoEeax2rWez10Siw",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "Lists the TDM frame types that are supported."
-   ],
-   "uml-name": "supportedTdmStructureTypesList"
-  },
-  "structure-type": {
-   "id": "structure-type",
-   "uml-id": "_cduh4EdvEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "_jRAQsEdoEeax2rWez10Siw",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "TDM frame to be applied."
-   ],
-   "uml-name": "structureType"
-  },
-  "number-of-tdm-segments-to-be-reserved": {
-   "id": "number-of-tdm-segments-to-be-reserved",
-   "uml-id": "_Bzxo9EagEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"
-   ],
-   "uml-name": "numberOfTdmSegmentsToBeReserved",
-   "controlType": "number"
-  },
-  "mw-ethernet-container-pac": {
-   "id": "mw-ethernet-container-pac",
-   "uml-id": "_4uEBgUafEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "MW_EthernetContainer_Pac"
-  },
-  "ethernet-container-capability": {
-   "id": "ethernet-container-capability",
-   "uml-id": "_4uEBmEafEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetContainerCapability"
-  },
-  "ethernet-container-configuration": {
-   "id": "ethernet-container-configuration",
-   "uml-id": "_4uEBwUafEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetContainerConfiguration"
-  },
-  "ethernet-container-status": {
-   "id": "ethernet-container-status",
-   "uml-id": "_4uECAUafEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetContainerStatus"
-  },
-  "ethernet-container-current-problems": {
-   "id": "ethernet-container-current-problems",
-   "uml-id": "_4uECDUafEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetContainerCurrentProblems"
-  },
-  "ethernet-container-current-performance": {
-   "id": "ethernet-container-current-performance",
-   "uml-id": "_4uECE0afEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the Ethernet container at a particular moment."
-   ],
-   "uml-name": "EthernetContainerCurrentPerformance"
-  },
-  "ethernet-container-historical-performances": {
-   "id": "ethernet-container-historical-performances",
-   "uml-id": "_4uECF0afEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the Ethernet container for a pre-defined measurement interval."
-   ],
-   "uml-name": "EthernetContainerHistoricalPerformances"
-  },
-  "bundling-is-avail": {
-   "id": "bundling-is-avail",
-   "uml-id": "_IzCGMNyCEeW-SfXlFFFI0Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 4,
-   "is-read-only": true,
-   "description": [
-    "If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'."
-   ],
-   "uml-name": "bundlingIsAvail",
-   "controlType": "checkbox"
-  },
-  "packet-compression-is-avail": {
-   "id": "packet-compression-is-avail",
-   "uml-id": "_4uEBp0afEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."
-   ],
-   "uml-name": "packetCompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "layer2-compression-is-avail": {
-   "id": "layer2-compression-is-avail",
-   "uml-id": "_4uEBqkafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 3,
-   "is-read-only": true,
-   "description": [
-    "Packet compression on layer 2 available at the device."
-   ],
-   "uml-name": "layer2CompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "vlan-compression-is-avail": {
-   "id": "vlan-compression-is-avail",
-   "uml-id": "_4uEBrUafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 4,
-   "is-read-only": true,
-   "description": [
-    "Packet compression on VLAN layer available at the device."
-   ],
-   "uml-name": "vlanCompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "q-in-q-compression-is-avail": {
-   "id": "q-in-q-compression-is-avail",
-   "uml-id": "_4uEBsEafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 5,
-   "is-read-only": true,
-   "description": [
-    "Packet compression on layer of a second VLAN available at the device."
-   ],
-   "uml-name": "qInQCompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "mpls-compression-is-avail": {
-   "id": "mpls-compression-is-avail",
-   "uml-id": "_4uEBs0afEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 6,
-   "is-read-only": true,
-   "description": [
-    "Packet compression on mpls layer available at the device."
-   ],
-   "uml-name": "mplsCompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "ipv4-compression-is-avail": {
-   "id": "ipv4-compression-is-avail",
-   "uml-id": "_4uEBtkafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 7,
-   "is-read-only": true,
-   "description": [
-    "Packet compression on layer 3 for IPv4 available at the device."
-   ],
-   "uml-name": "ipv4CompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "ipv6-compression-is-avail": {
-   "id": "ipv6-compression-is-avail",
-   "uml-id": "_4uEBuUafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 8,
-   "is-read-only": true,
-   "description": [
-    "Packet compression on layer 3 for IPv6 available at the device."
-   ],
-   "uml-name": "ipv6CompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "layer4-compression-is-avail": {
-   "id": "layer4-compression-is-avail",
-   "uml-id": "_4uEBvEafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 9,
-   "is-read-only": true,
-   "description": [
-    "Packet compression on layer 4 (TCP and UDP header) available at the device."
-   ],
-   "uml-name": "layer4CompressionIsAvail",
-   "controlType": "checkbox"
-  },
-  "container-id": {
-   "id": "container-id",
-   "uml-id": "_ecCeS0aqEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller."
-   ],
-   "uml-name": "containerID",
-   "controlType": "text"
-  },
-  "segments-id-list": {
-   "id": "segments-id-list",
-   "uml-id": "_4uEBy0afEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."
-   ],
-   "uml-name": "segmentsIdList"
-  },
-  "packet-compression-is-on": {
-   "id": "packet-compression-is-on",
-   "uml-id": "_4uEB1UafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."
-   ],
-   "uml-name": "packetCompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "layer2-compression-is-on": {
-   "id": "layer2-compression-is-on",
-   "uml-id": "_4uEB2kafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 4,
-   "is-read-only": false,
-   "description": [
-    "Packet compression on layer 2 configured at the device."
-   ],
-   "uml-name": "layer2CompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "vlan-compression-is-on": {
-   "id": "vlan-compression-is-on",
-   "uml-id": "_4uEB30afEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 5,
-   "is-read-only": false,
-   "description": [
-    "Packet compression on VLAN layer configured at the device."
-   ],
-   "uml-name": "vlanCompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "q-in-q-compression-is-on": {
-   "id": "q-in-q-compression-is-on",
-   "uml-id": "_4uEB5EafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 6,
-   "is-read-only": false,
-   "description": [
-    "Packet compression on layer of a second VLAN configured at the device."
-   ],
-   "uml-name": "qInQCompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "mpls-compression-is-on": {
-   "id": "mpls-compression-is-on",
-   "uml-id": "_4uEB6UafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 7,
-   "is-read-only": false,
-   "description": [
-    "Packet compression on MPLS layer configured at the device."
-   ],
-   "uml-name": "mplsCompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "ipv4-compression-is-on": {
-   "id": "ipv4-compression-is-on",
-   "uml-id": "_4uEB7kafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 8,
-   "is-read-only": false,
-   "description": [
-    "Packet compression on layer 3 for IPv4 configured at the device."
-   ],
-   "uml-name": "ipv4CompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "ipv6-compression-is-on": {
-   "id": "ipv6-compression-is-on",
-   "uml-id": "_4uEB80afEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 9,
-   "is-read-only": false,
-   "description": [
-    "Packet compression on layer 3 for IPv6 configured at the device."
-   ],
-   "uml-name": "ipv6CompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "layer4-compression-is-on": {
-   "id": "layer4-compression-is-on",
-   "uml-id": "_4uEB-EafEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 10,
-   "is-read-only": false,
-   "description": [
-    "Packet compression on layer 4 (TCP and UDP header) configured at the device."
-   ],
-   "uml-name": "layer4CompressionIsOn",
-   "controlType": "checkbox"
-  },
-  "mw-tdm-container-pac": {
-   "id": "mw-tdm-container-pac",
-   "uml-id": "_ecCeMUaqEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "MW_TdmContainer_Pac"
-  },
-  "tdm-container-capability": {
-   "id": "tdm-container-capability",
-   "uml-id": "_ecCeSEaqEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Bundling is not available."
-   ],
-   "uml-name": "TdmContainerCapability"
-  },
-  "tdm-container-configuration": {
-   "id": "tdm-container-configuration",
-   "uml-id": "_ecCecUaqEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "TdmContainerConfiguration"
-  },
-  "tdm-container-status": {
-   "id": "tdm-container-status",
-   "uml-id": "_ecCesUaqEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "TdmContainerStatus"
-  },
-  "tdm-container-current-problems": {
-   "id": "tdm-container-current-problems",
-   "uml-id": "_ecCevUaqEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "TdmContainerCurrentProblems"
-  },
-  "tdm-container-current-performance": {
-   "id": "tdm-container-current-performance",
-   "uml-id": "_ecCew0aqEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the TDM container at a particular moment."
-   ],
-   "uml-name": "TdmContainerCurrentPerformance"
-  },
-  "tdm-container-historical-performances": {
-   "id": "tdm-container-historical-performances",
-   "uml-id": "_ecCex0aqEeas2eqI3oKNtg",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "description": [
-    "Aggregated performance information of the TDM container for a pre-defined measurement interval."
-   ],
-   "uml-name": "TdmContainerHistoricalPerformances"
-  },
-  "supported-tdm-container-types-list": {
-   "id": "supported-tdm-container-types-list",
-   "uml-id": "_R5hG0EdwEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "_rgbigEdjEeax2rWez10Siw",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "Lists the TDM containers that are supported."
-   ],
-   "uml-name": "supportedTdmContainerTypesList"
-  },
-  "container-type": {
-   "id": "container-type",
-   "uml-id": "_be7AoMWkEeW3xsRKtpCLuA",
-   "uml-type": "uml:DataType",
-   "uml-name": "ContainerType"
-  },
-  "segment-id": {
-   "id": "segment-id",
-   "uml-id": "_ecCee0aqEeas2eqI3oKNtg",
-   "uml-type": "ownedAttribute",
-   "type": "_Nd1F4MKuEeWwLJhHQlOGSQ",
-   "order-number": 3,
-   "is-read-only": false,
-   "description": [
-    "Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"
-   ],
-   "uml-name": "segmentID"
-  },
-  "mw-current-problem": {
-   "id": "mw-current-problem",
-   "uml-id": "_LKRM4JNQEeWuAeXkr703BA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "MwCurrentProblem"
-  },
-  "sequence-number": {
-   "id": "sequence-number",
-   "uml-id": "_YadH4CJbEeaHpPYk5sscIg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Unique sequence number of the current problem object."
-   ],
-   "uml-name": "sequenceNumber",
-   "controlType": "number"
-  },
-  "time-stamp": {
-   "id": "time-stamp",
-   "uml-id": "_lB4EQJN1EeWuAeXkr703BA",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_oGqi1lLNEeO75dO39GbF8Q",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "Time and date of the problem. _format:yyyyMMddhhmmss.s[Z|{+|-}HHMm]; yyyy='0000'..'9999' year; MM='01'..'12' month; dd='01'..'31' day; hh='00'..'23' hour; mm='00'..'59' minute; ss='00'..'59' second; s='.0'..'.9'tenth of second (set to '.0' if EMS or NE cannot support this granularity); Z='Z' indicates UTC (rather than local time); {+|-}='+' or '-' delta from UTC; HH='00'..'23' time zone difference in hours; Mm='00'..'59' time zone difference in minutes."
-   ],
-   "uml-name": "timeStamp"
-  },
-  "problem-severity": {
-   "id": "problem-severity",
-   "uml-id": "_qInZ8KT4EeapooeghKN-dA",
-   "uml-type": "ownedAttribute",
-   "type": "_eIml0JH1EeWUdbnmmNiTAA",
-   "order-number": 3,
-   "is-read-only": true,
-   "description": [
-    "Severity of the alarm."
-   ],
-   "uml-name": "problemSeverity",
-   "controlType": [
-    "non-alarmed",
-    "warning",
-    "minor",
-    "major",
-    "critical"
-   ]
-  },
-  "channel-plan-type": {
-   "id": "channel-plan-type",
-   "uml-id": "_oQf6IPXSEeW9zIqh2WHHww",
-   "uml-type": "uml:DataType",
-   "uml-name": "ChannelPlanType"
-  },
-  "duplex-distance-is-variable": {
-   "id": "duplex-distance-is-variable",
-   "uml-id": "_OPxkQK42EeWxIavXll_b0A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "To be set on 'true', if the distance between transmitted and received frequency is variable."
-   ],
-   "uml-name": "duplexDistanceIsVariable",
-   "controlType": "checkbox"
-  },
-  "duplex-distance": {
-   "id": "duplex-distance",
-   "uml-id": "_BEr_wIMEEeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Distance between transmitted and received frequency."
-   ],
-   "uml-name": "duplexDistance",
-   "controlType": "number"
-  },
-  "auto-freq-select-is-avail": {
-   "id": "auto-freq-select-is-avail",
-   "uml-id": "_te6XMIL8EeWMcJAvkeTn2w",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 4,
-   "is-read-only": true,
-   "description": [
-    "In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."
-   ],
-   "uml-name": "autoFreqSelectIsAvail",
-   "controlType": "checkbox"
-  },
-  "transmission-mode-type": {
-   "id": "transmission-mode-type",
-   "uml-id": "_zG34sPXQEeW9zIqh2WHHww",
-   "uml-type": "uml:DataType",
-   "uml-name": "TransmissionModeType"
-  },
-  "transmission-mode-id": {
-   "id": "transmission-mode-id",
-   "uml-id": "_afdYoNumEeWHIeLurhMv0A",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Indentifies the transmissionMode for internal reference."
-   ],
-   "uml-name": "transmissionModeId"
-  },
-  "channel-bandwidth": {
-   "id": "channel-bandwidth",
-   "uml-id": "_FteJEHfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "kHz",
-   "description": [
-    "Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"
-   ],
-   "uml-name": "channelBandwidth",
-   "controlType": "number"
-  },
-  "modulation-scheme": {
-   "id": "modulation-scheme",
-   "uml-id": "_G4H-UHfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "symbols",
-   "description": [
-    "Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256')."
-   ],
-   "uml-name": "modulationScheme",
-   "controlType": "number"
-  },
-  "code-rate": {
-   "id": "code-rate",
-   "uml-id": "_jE7-EHf4EeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 4,
-   "is-read-only": true,
-   "unit": "%",
-   "description": [
-    "Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate)."
-   ],
-   "uml-name": "codeRate",
-   "controlType": "number"
-  },
-  "tx-power-min": {
-   "id": "tx-power-min",
-   "uml-id": "_I3nJ0HfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 5,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Value of the minimum transmit power the modem can operate in dBm."
-   ],
-   "uml-name": "txPowerMin",
-   "controlType": "number"
-  },
-  "tx-power-max": {
-   "id": "tx-power-max",
-   "uml-id": "_KB7A0HfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 6,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Value of the maximum transmit power the modem can operate in dBm."
-   ],
-   "uml-name": "txPowerMax",
-   "controlType": "number"
-  },
-  "rx-threshold": {
-   "id": "rx-threshold",
-   "uml-id": "_LCr6QHfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 7,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."
-   ],
-   "uml-name": "rxThreshold",
-   "controlType": "number"
-  },
-  "am-upshift-level": {
-   "id": "am-upshift-level",
-   "uml-id": "_MGguwHfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 8,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Value of the receive level that has to be exceeded to shift into a higher modulation scheme."
-   ],
-   "uml-name": "amUpshiftLevel",
-   "controlType": "number"
-  },
-  "am-downshift-level": {
-   "id": "am-downshift-level",
-   "uml-id": "_NIvAwHfdEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 9,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."
-   ],
-   "uml-name": "amDownshiftLevel",
-   "controlType": "number"
-  },
-  "xpic-is-avail": {
-   "id": "xpic-is-avail",
-   "uml-id": "_QHd9kHfvEeW-h9gN8LYm4Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 10,
-   "is-read-only": true,
-   "description": [
-    "In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case."
-   ],
-   "uml-name": "xpicIsAvail",
-   "controlType": "checkbox"
-  },
-  "air-interface-problem-severity-type": {
-   "id": "air-interface-problem-severity-type",
-   "uml-id": "_ZKdWgGnuEeaZwMagYjVCHQ",
-   "uml-type": "uml:DataType",
-   "uml-name": "AirInterfaceProblemSeverityType"
-  },
-  "problem-kind-name": {
-   "id": "problem-kind-name",
-   "uml-id": "_OMQH0Gz0Eeaf-__BRLM84g",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "description": [
-    "Name of the alarm according to Container::ContainerCapability::supportedAlarms"
-   ],
-   "uml-name": "problemKindName",
-   "controlType": "text"
-  },
-  "air-interface-current-problem-type": {
-   "id": "air-interface-current-problem-type",
-   "uml-id": "_umuZUMXjEeW3xsRKtpCLuA",
-   "uml-type": "uml:DataType",
-   "uml-name": "AirInterfaceCurrentProblemType"
-  },
-  "problem-name": {
-   "id": "problem-name",
-   "uml-id": "__h1n4cXpEeWJ6KZuc0h_vw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "Name of the alarm according to Container::ContainerCapability::supportedAlarms"
-   ],
-   "uml-name": "problemName",
-   "controlType": "text"
-  },
-  "air-interface-performance-type": {
-   "id": "air-interface-performance-type",
-   "uml-id": "_OvFYwEQbEea3g-FxAUaYRg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Consolidated performance information of the air interface."
-   ],
-   "uml-name": "AirInterfacePerformanceType"
-  },
-  "es": {
-   "id": "es",
-   "uml-id": "_DbVzpUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": true,
-   "unit": "s",
-   "description": [
-    "Number of errored seconds."
-   ],
-   "uml-name": "es",
-   "controlType": "number"
-  },
-  "ses": {
-   "id": "ses",
-   "uml-id": "_DbVzqUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "s",
-   "description": [
-    "Number of severely errored seconds."
-   ],
-   "uml-name": "ses",
-   "controlType": "number"
-  },
-  "cses": {
-   "id": "cses",
-   "uml-id": "_DbVzrUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "s",
-   "description": [
-    "Number of consecutive severely errored seconds."
-   ],
-   "uml-name": "cses",
-   "controlType": "number"
-  },
-  "unavailability": {
-   "id": "unavailability",
-   "uml-id": "_DbVzsUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 4,
-   "is-read-only": true,
-   "unit": "s",
-   "description": [
-    "Total time of unavailability in seconds."
-   ],
-   "uml-name": "unavailability",
-   "controlType": "number"
-  },
-  "tx-level-min": {
-   "id": "tx-level-min",
-   "uml-id": "_DbVztUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 5,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Minimum transmit power. Signed integers are required."
-   ],
-   "uml-name": "txLevelMin",
-   "controlType": "number"
-  },
-  "tx-level-max": {
-   "id": "tx-level-max",
-   "uml-id": "_DbVzuUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 6,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Maximum transmit power. Signed integers are required."
-   ],
-   "uml-name": "txLevelMax",
-   "controlType": "number"
-  },
-  "tx-level-avg": {
-   "id": "tx-level-avg",
-   "uml-id": "_DbVzvUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 7,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Averaged transmit power. Signed integers are required."
-   ],
-   "uml-name": "txLevelAvg",
-   "controlType": "number"
-  },
-  "rx-level-min": {
-   "id": "rx-level-min",
-   "uml-id": "_DbVzwUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 8,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Minimum receive level. Signed integers are required."
-   ],
-   "uml-name": "rxLevelMin",
-   "controlType": "number"
-  },
-  "rx-level-max": {
-   "id": "rx-level-max",
-   "uml-id": "_DbVzxUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 9,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Maximum receive level. Signed integers are required."
-   ],
-   "uml-name": "rxLevelMax",
-   "controlType": "number"
-  },
-  "rx-level-avg": {
-   "id": "rx-level-avg",
-   "uml-id": "_DbVzyUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 10,
-   "is-read-only": true,
-   "unit": "dBm",
-   "description": [
-    "Averaged receive level. Signed integers are required."
-   ],
-   "uml-name": "rxLevelAvg",
-   "controlType": "number"
-  },
-  "time2-states": {
-   "id": "time2-states",
-   "uml-id": "_DbVzzUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 11,
-   "is-read-only": true,
-   "unit": "s",
-   "description": [
-    "Sum of all seconds the transmitter operated in e.g. BPSK."
-   ],
-   "uml-name": "time2States",
-   "controlType": "number"
-  },
-  "time4-states-s": {
-   "id": "time4-states-s",
-   "uml-id": "_DbVz0kQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 12,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time4StatesS",
-   "controlType": "number"
-  },
-  "time4-states": {
-   "id": "time4-states",
-   "uml-id": "_DbVz2EQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 13,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time4States",
-   "controlType": "number"
-  },
-  "time8-states": {
-   "id": "time8-states",
-   "uml-id": "_DbVz3UQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 14,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time8States",
-   "controlType": "number"
-  },
-  "time16-states-s": {
-   "id": "time16-states-s",
-   "uml-id": "_DbVz4kQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 15,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time16StatesS",
-   "controlType": "number"
-  },
-  "time16-states": {
-   "id": "time16-states",
-   "uml-id": "_DbVz50QbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 16,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time16States",
-   "controlType": "number"
-  },
-  "time32-states": {
-   "id": "time32-states",
-   "uml-id": "_DbVz7EQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 17,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time32States",
-   "controlType": "number"
-  },
-  "time64-states": {
-   "id": "time64-states",
-   "uml-id": "_DbVz8UQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 18,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time64States",
-   "controlType": "number"
-  },
-  "time128-states": {
-   "id": "time128-states",
-   "uml-id": "_DbVz9kQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 19,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time128States",
-   "controlType": "number"
-  },
-  "time256-states": {
-   "id": "time256-states",
-   "uml-id": "_DbVz-0QbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 20,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time256States",
-   "controlType": "number"
-  },
-  "time512-states": {
-   "id": "time512-states",
-   "uml-id": "_DbV0AEQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 21,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time512States",
-   "controlType": "number"
-  },
-  "time512-states-l": {
-   "id": "time512-states-l",
-   "uml-id": "_DbV0BUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 22,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time512StatesL",
-   "controlType": "number"
-  },
-  "time1024-states": {
-   "id": "time1024-states",
-   "uml-id": "_DbV0CkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 23,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time1024States",
-   "controlType": "number"
-  },
-  "time1024-states-l": {
-   "id": "time1024-states-l",
-   "uml-id": "_DbV0D0QbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 24,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time1024StatesL",
-   "controlType": "number"
-  },
-  "time2048-states": {
-   "id": "time2048-states",
-   "uml-id": "_DbV0FEQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 25,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time2048States",
-   "controlType": "number"
-  },
-  "time2048-states-l": {
-   "id": "time2048-states-l",
-   "uml-id": "_DbV0GUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 26,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time2048StatesL",
-   "controlType": "number"
-  },
-  "time4096-states": {
-   "id": "time4096-states",
-   "uml-id": "_DbV0HkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 27,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time4096States",
-   "controlType": "number"
-  },
-  "time4096-states-l": {
-   "id": "time4096-states-l",
-   "uml-id": "_DbV0I0QbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 28,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time4096StatesL",
-   "controlType": "number"
-  },
-  "time8192-states": {
-   "id": "time8192-states",
-   "uml-id": "_DbV0KEQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 29,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time8192States",
-   "controlType": "number"
-  },
-  "time8192-states-l": {
-   "id": "time8192-states-l",
-   "uml-id": "_DbV0LUQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 30,
-   "is-read-only": true,
-   "unit": "s",
-   "uml-name": "time8192StatesL",
-   "controlType": "number"
-  },
-  "snir-min": {
-   "id": "snir-min",
-   "uml-id": "_nG-NsEzvEeaRytIQfQ43Wg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Minimum signal to (noise+interference) ratio of the combined signals."
-   ],
-   "uml-name": "snirMin",
-   "controlType": "number"
-  },
-  "snir-max": {
-   "id": "snir-max",
-   "uml-id": "_n_OEUEzvEeaRytIQfQ43Wg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Maximum signal to (noise+interference) ratio of the combined signals."
-   ],
-   "uml-name": "snirMax",
-   "controlType": "number"
-  },
-  "snir-avg": {
-   "id": "snir-avg",
-   "uml-id": "_oU3kMEzvEeaRytIQfQ43Wg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Average signal to (noise+interference) ratio of the combined signals."
-   ],
-   "uml-name": "snirAvg",
-   "controlType": "number"
-  },
-  "xpd-min": {
-   "id": "xpd-min",
-   "uml-id": "_DbV0PkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 34,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Minimum cross polarization discrimination."
-   ],
-   "uml-name": "xpdMin",
-   "controlType": "number"
-  },
-  "xpd-max": {
-   "id": "xpd-max",
-   "uml-id": "_DbV0QkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 35,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Maximum cross polarization discrimination."
-   ],
-   "uml-name": "xpdMax",
-   "controlType": "number"
-  },
-  "xpd-avg": {
-   "id": "xpd-avg",
-   "uml-id": "_DbV0RkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 36,
-   "is-read-only": true,
-   "unit": "dB",
-   "description": [
-    "Averaged cross polarization discrimination."
-   ],
-   "uml-name": "xpdAvg",
-   "controlType": "number"
-  },
-  "rf-temp-min": {
-   "id": "rf-temp-min",
-   "uml-id": "_DbV0SkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 37,
-   "is-read-only": true,
-   "unit": "C",
-   "description": [
-    "Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."
-   ],
-   "uml-name": "rfTempMin",
-   "controlType": "number"
-  },
-  "rf-temp-max": {
-   "id": "rf-temp-max",
-   "uml-id": "_DbV0TkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 38,
-   "is-read-only": true,
-   "unit": "C",
-   "description": [
-    "Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."
-   ],
-   "uml-name": "rfTempMax",
-   "controlType": "number"
-  },
-  "rf-temp-avg": {
-   "id": "rf-temp-avg",
-   "uml-id": "_DbV0UkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 39,
-   "is-read-only": true,
-   "unit": "C",
-   "description": [
-    "Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."
-   ],
-   "uml-name": "rfTempAvg",
-   "controlType": "number"
-  },
-  "defect-blocks-sum": {
-   "id": "defect-blocks-sum",
-   "uml-id": "_DbV0VkQbEea3g-FxAUaYRg",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 40,
-   "is-read-only": true,
-   "unit": "blocks",
-   "description": [
-    "Total number of blocks that were defect after receiving and could not be corrected by the FEC."
-   ],
-   "uml-name": "defectBlocksSum",
-   "controlType": "number"
-  },
-  "time-period": {
-   "id": "time-period",
-   "uml-id": "_Nyme4H1IEeWHjMaYlqnBcw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 4,
-   "is-read-only": true,
-   "unit": "s",
-   "description": [
-    "Total length of the measurement period in seconds."
-   ],
-   "uml-name": "timePeriod",
-   "controlType": "number"
-  },
-  "air-interface-current-performance-type": {
-   "id": "air-interface-current-performance-type",
-   "uml-id": "_pQ_y4GoHEeaZwMagYjVCHQ",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
-   ],
-   "uml-name": "AirInterfaceCurrentPerformanceType"
-  },
-  "performance-data": {
-   "id": "performance-data",
-   "uml-id": "_i5STYGz7Eeaf-__BRLM84g",
-   "uml-type": "ownedAttribute",
-   "type": "_U9tW0EQeEea3g-FxAUaYRg",
-   "order-number": 1,
-   "is-read-only": true,
-   "uml-name": "performanceData"
-  },
-  "air-interface-historical-performance-type": {
-   "id": "air-interface-historical-performance-type",
-   "uml-id": "_t18kwGoHEeaZwMagYjVCHQ",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-   ],
-   "uml-name": "AirInterfaceHistoricalPerformanceType"
-  },
-  "diversity-type": {
-   "id": "diversity-type",
-   "uml-id": "_pTliINyUEeW-SfXlFFFI0Q",
-   "uml-type": "uml:DataType",
-   "uml-name": "DiversityType"
-  },
-  "diversity-name": {
-   "id": "diversity-name",
-   "uml-id": "_uYhboNyUEeW-SfXlFFFI0Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"
-   ],
-   "uml-name": "diversityName",
-   "controlType": "text"
-  },
-  "number-of-air-interfaces-max": {
-   "id": "number-of-air-interfaces-max",
-   "uml-id": "_wKDDoNyUEeW-SfXlFFFI0Q",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "air interfaces",
-   "description": [
-    "Maximum number of air interfaces that could be part of this kind of diversity."
-   ],
-   "uml-name": "numberOfAirInterfacesMax",
-   "controlType": "number"
-  },
-  "air-interface-diversity-problem-severity-type": {
-   "id": "air-interface-diversity-problem-severity-type",
-   "uml-id": "_2kMRYGzzEeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "uml-name": "AirInterfaceDiversityProblemSeverityType"
-  },
-  "air-interface-diversity-current-problem-type": {
-   "id": "air-interface-diversity-current-problem-type",
-   "uml-id": "_z1XWgMXlEeWJ6KZuc0h_vw",
-   "uml-type": "uml:DataType",
-   "uml-name": "AirInterfaceDiversityCurrentProblemType"
-  },
-  "air-interface-diversity-performance-type": {
-   "id": "air-interface-diversity-performance-type",
-   "uml-id": "_EH3QgEQdEea3g-FxAUaYRg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Consolidated performance information of the air interface diversity group."
-   ],
-   "uml-name": "AirInterfaceDiversityPerformanceType"
-  },
-  "air-interface-diversity-current-performance-type": {
-   "id": "air-interface-diversity-current-performance-type",
-   "uml-id": "_n4wTgGz6Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
-   ],
-   "uml-name": "AirInterfaceDiversityCurrentPerformanceType"
-  },
-  "air-interface-diversity-historical-performance-type": {
-   "id": "air-interface-diversity-historical-performance-type",
-   "uml-id": "_pG0pIGz6Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-   ],
-   "uml-name": "AirInterfaceDiversityHistoricalPerformanceType"
-  },
-  "tdm-structure-type": {
-   "id": "tdm-structure-type",
-   "uml-id": "_jRAQsEdoEeax2rWez10Siw",
-   "uml-type": "uml:DataType",
-   "uml-name": "TdmStructureType"
-  },
-  "tdm-structure-name": {
-   "id": "tdm-structure-name",
-   "uml-id": "_1bJF4EdoEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
-   ],
-   "uml-name": "tdmStructureName",
-   "controlType": "text"
-  },
-  "tdm-segment-size": {
-   "id": "tdm-segment-size",
-   "uml-id": "_hPq1oEdpEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "kbit/s",
-   "description": [
-    "Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
-   ],
-   "uml-name": "tdmSegmentSize",
-   "controlType": "number"
-  },
-  "max-number-of-segments-reservable": {
-   "id": "max-number-of-segments-reservable",
-   "uml-id": "_EJnsgEdpEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "segments",
-   "description": [
-    "Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."
-   ],
-   "uml-name": "maxNumberOfSegmentsReservable",
-   "controlType": "number"
-  },
-  "structure-problem-severity-type": {
-   "id": "structure-problem-severity-type",
-   "uml-id": "_LPgp4Gz0Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "uml-name": "StructureProblemSeverityType"
-  },
-  "structure-current-problem-type": {
-   "id": "structure-current-problem-type",
-   "uml-id": "_UC0gAMXnEeWJ6KZuc0h_vw",
-   "uml-type": "uml:DataType",
-   "uml-name": "StructureCurrentProblemType"
-  },
-  "structure-performance-type": {
-   "id": "structure-performance-type",
-   "uml-id": "_kzEicEQdEea3g-FxAUaYRg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Consolidated performance information of the Structure."
-   ],
-   "uml-name": "StructurePerformanceType"
-  },
-  "structure-current-performance-type": {
-   "id": "structure-current-performance-type",
-   "uml-id": "_o7jNQGz6Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
-   ],
-   "uml-name": "StructureCurrentPerformanceType"
-  },
-  "structure-historical-performance-type": {
-   "id": "structure-historical-performance-type",
-   "uml-id": "_pNAJoGz6Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-   ],
-   "uml-name": "StructureHistoricalPerformanceType"
-  },
-  "container-name": {
-   "id": "container-name",
-   "uml-id": "_o0IuQMWkEeW3xsRKtpCLuA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
-   ],
-   "uml-name": "containerName",
-   "controlType": "text"
-  },
-  "number-of-time-slots-required": {
-   "id": "number-of-time-slots-required",
-   "uml-id": "_sZ82MMXXEeW3xsRKtpCLuA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "timeslots",
-   "description": [
-    "Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated."
-   ],
-   "uml-name": "numberOfTimeSlotsRequired",
-   "controlType": "number"
-  },
-  "tdm-time-slots-is-required": {
-   "id": "tdm-time-slots-is-required",
-   "uml-id": "_hIagINrWEeWcA7plcJPZ7A",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 3,
-   "is-read-only": true,
-   "description": [
-    "Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport."
-   ],
-   "uml-name": "tdmTimeSlotsIsRequired",
-   "controlType": "checkbox"
-  },
-  "tdm-container-type": {
-   "id": "tdm-container-type",
-   "uml-id": "_rgbigEdjEeax2rWez10Siw",
-   "uml-type": "uml:DataType",
-   "uml-name": "TdmContainerType"
-  },
-  "tdm-container-name": {
-   "id": "tdm-container-name",
-   "uml-id": "_rgbigkdjEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "description": [
-    "Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"
-   ],
-   "uml-name": "tdmContainerName",
-   "controlType": "text"
-  },
-  "tdm-container-size": {
-   "id": "tdm-container-size",
-   "uml-id": "_rgbihEdjEeax2rWez10Siw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "kbit/s",
-   "description": [
-    "Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"
-   ],
-   "uml-name": "tdmContainerSize",
-   "controlType": "number"
-  },
-  "segment-id-type": {
-   "id": "segment-id-type",
-   "uml-id": "_Nd1F4MKuEeWwLJhHQlOGSQ",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Identifies the segments, which are used to transport the container."
-   ],
-   "uml-name": "SegmentIDType"
-  },
-  "structure-id-ref": {
-   "id": "structure-id-ref",
-   "uml-id": "_N4GKkMKvEeWwLJhHQlOGSQ",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_SU3Q4I30EeO38ZmbECnvbg",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "structureIdRef"
-  },
-  "segment-id-ref": {
-   "id": "segment-id-ref",
-   "uml-id": "_nVubgMKvEeWwLJhHQlOGSQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": false,
-   "is-key": 2,
-   "description": [
-    "Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."
-   ],
-   "uml-name": "segmentIdRef",
-   "controlType": "number"
-  },
-  "segment-status-type": {
-   "id": "segment-status-type",
-   "uml-id": "_KwZVcMUCEeW3xsRKtpCLuA",
-   "uml-type": "uml:DataType",
-   "uml-name": "SegmentStatusType"
-  },
-  "segment-status-type-id": {
-   "id": "segment-status-type-id",
-   "uml-id": "_7JBAYOLbEeWM2vUDE3Xqhw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": true,
-   "is-key": 1,
-   "uml-name": "segmentStatusTypeId",
-   "controlType": "number"
-  },
-  "segment-is-reserved-for-tdm": {
-   "id": "segment-is-reserved-for-tdm",
-   "uml-id": "__1DMwMUCEeW3xsRKtpCLuA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."
-   ],
-   "uml-name": "segmentIsReservedForTdm",
-   "controlType": "checkbox"
-  },
-  "operational-status": {
-   "id": "operational-status",
-   "uml-id": "_ZA94EMUCEeW3xsRKtpCLuA",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-CoreModel/CoreModel.uml#_lNclkLEtEeSZUdYfPSdgew",
-   "order-number": 3,
-   "is-read-only": true,
-   "description": [
-    "Current operational status of each segment."
-   ],
-   "uml-name": "operationalStatus"
-  },
-  "obsolete-priority-class": {
-   "id": "obsolete-priority-class",
-   "uml-id": "_ebslwMnAEeWYRsWW_rqpgw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 4,
-   "is-read-only": true,
-   "description": [
-    "PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank."
-   ],
-   "uml-name": "obsoletePriorityClass",
-   "controlType": "number"
-  },
-  "obsolete-drop-order-rank": {
-   "id": "obsolete-drop-order-rank",
-   "uml-id": "_DbJpMMnDEeWYRsWW_rqpgw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 5,
-   "is-read-only": true,
-   "description": [
-    "In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. _unique: within Structure::StructureStatus::segmentStatusList"
-   ],
-   "uml-name": "obsoleteDropOrderRank",
-   "controlType": "number"
-  },
-  "container-problem-severity-type": {
-   "id": "container-problem-severity-type",
-   "uml-id": "_OMPgwGz0Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "uml-name": "ContainerProblemSeverityType"
-  },
-  "container-current-problem-type": {
-   "id": "container-current-problem-type",
-   "uml-id": "__h1n4MXpEeWJ6KZuc0h_vw",
-   "uml-type": "uml:DataType",
-   "uml-name": "ContainerCurrentProblemType"
-  },
-  "container-performance-type": {
-   "id": "container-performance-type",
-   "uml-id": "_U9tW0EQeEea3g-FxAUaYRg",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Consolidated performance information of the Container."
-   ],
-   "uml-name": "ContainerPerformanceType"
-  },
-  "tx-ethernet-bytes-max-s": {
-   "id": "tx-ethernet-bytes-max-s",
-   "uml-id": "_MaHB8H1IEeWHjMaYlqnBcw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": true,
-   "unit": "Bytes/s",
-   "description": [
-    "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers."
-   ],
-   "uml-name": "txEthernetBytesMaxS",
-   "controlType": "number"
-  },
-  "tx-ethernet-bytes-max-m": {
-   "id": "tx-ethernet-bytes-max-m",
-   "uml-id": "_M3NNoH1IEeWHjMaYlqnBcw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 2,
-   "is-read-only": true,
-   "unit": "Bytes/min",
-   "description": [
-    "Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers."
-   ],
-   "uml-name": "txEthernetBytesMaxM",
-   "controlType": "number"
-  },
-  "tx-ethernet-bytes-sum": {
-   "id": "tx-ethernet-bytes-sum",
-   "uml-id": "_NWtNEH1IEeWHjMaYlqnBcw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 3,
-   "is-read-only": true,
-   "unit": "Bytes",
-   "description": [
-    "Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers."
-   ],
-   "uml-name": "txEthernetBytesSum",
-   "controlType": "number"
-  },
-  "container-current-performance-type": {
-   "id": "container-current-performance-type",
-   "uml-id": "_pA5AQGz6Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into current performance information by inheriting from OTN_CurrentData."
-   ],
-   "uml-name": "ContainerCurrentPerformanceType"
-  },
-  "container-historical-performance-type": {
-   "id": "container-historical-performance-type",
-   "uml-id": "_pTaToGz6Eeaf-__BRLM84g",
-   "uml-type": "uml:DataType",
-   "description": [
-    "Turns performance information into historical performance information by inheriting from OTN_HistoryData."
-   ],
-   "uml-name": "ContainerHistoricalPerformanceType"
-  },
-  "3-cz3-u-is-d-eead4-ers-mr-oj-bq": {
-   "id": "3-cz3-u-is-d-eead4-ers-mr-oj-bq",
-   "uml-id": "_3CZ3UIsDEead4ersMrOjBQ",
-   "enum": [
-    "NON",
-    "IF",
-    "RF"
-   ],
-   "is-read-only": false,
-   "uml-name": "_3CZ3UIsDEead4ersMrOjBQ"
-  },
-  "e-iml0-jh1-ee-w-udbnmm-ni-taa": {
-   "id": "e-iml0-jh1-ee-w-udbnmm-ni-taa",
-   "uml-id": "_eIml0JH1EeWUdbnmmNiTAA",
-   "enum": [
-    "NON_ALARMED",
-    "WARNING",
-    "MINOR",
-    "MAJOR",
-    "CRITICAL"
-   ],
-   "is-read-only": false,
-   "description": [
-    "According to ITU-T M.3160"
-   ],
-   "uml-name": "_eIml0JH1EeWUdbnmmNiTAA"
-  },
-  "e85-ns-i99-ee-w-fluv9-kl-ll5-a": {
-   "id": "e85-ns-i99-ee-w-fluv9-kl-ll5-a",
-   "uml-id": "_e85NsI99EeWFluv9KLLl5A",
-   "enum": [
-    "NOT_SPECIFIED",
-    "HORIZONTAL",
-    "VERTICAL"
-   ],
-   "is-read-only": false,
-   "uml-name": "_e85NsI99EeWFluv9KLLl5A"
-  },
-  "da-b5-ij-rg-ee-wx-ip-ew-zq-gmw": {
-   "id": "da-b5-ij-rg-ee-wx-ip-ew-zq-gmw",
-   "uml-id": "_DaB5IJRgEeWxIPEwZQ_gmw",
-   "enum": [
-    "HSB"
-   ],
-   "is-read-only": false,
-   "uml-name": "_DaB5IJRgEeWxIPEwZQ_gmw"
-  },
-  "01-d-yj-re-ee-wx-ip-ew-zq-gmw": {
-   "id": "01-d-yj-re-ee-wx-ip-ew-zq-gmw",
-   "uml-id": "_01_dYJReEeWxIPEwZQ_gmw",
-   "enum": [
-    "WORKING",
-    "PROTECTION",
-    "PROTECTED"
-   ],
-   "is-read-only": false,
-   "uml-name": "_01_dYJReEeWxIPEwZQ_gmw"
-  },
-  "du-js8-jox-ee-wz-6-sq-lz-uedw": {
-   "id": "du-js8-jox-ee-wz-6-sq-lz-uedw",
-   "uml-id": "_DUJs8JOXEeWz-6sqLzUedw",
-   "enum": [
-    "GROUP_DOWN",
-    "NOT_ALL_AI_ACTIVE",
-    "ALL_AI_ACTIVE"
-   ],
-   "is-read-only": false,
-   "uml-name": "_DUJs8JOXEeWz-6sqLzUedw"
-  }
- }
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json
deleted file mode 100755
index 0601324..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model.yin.json
+++ /dev/null
@@ -1,257 +0,0 @@
-{
-	"module": {
-		"name": "microwave-model",
-		"microwave-model": {
-			"wire-interface-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"wirebased-interface-capability": {
-					"name": "wirebased-interface-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"wirebased-interface-configuration": {
-					"name": "wirebased-interface-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"wirebased-interface-status": {
-					"name": "wirebased-interface-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"wirebased-interface-current-problems": {
-					"name": "wirebased-interface-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"wirebased-interface-current-performance": {
-					"name": "wirebased-interface-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"wirebased-interface-historical-performances": {
-					"name": "wirebased-interface-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"mw-air-interface-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"air-interface-capability": {
-					"name": "air-interface-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"air-interface-configuration": {
-					"name": "air-interface-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"air-interface-status": {
-					"name": "air-interface-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"air-interface-current-problems": {
-					"name": "air-interface-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"air-interface-current-performance": {
-					"name": "air-interface-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"air-interface-historical-performances": {
-					"name": "air-interface-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"co-channel-group": {
-				"type": "list",
-				"key": "co-channel-group-id"
-			},
-			"mw-air-interface-hsb-end-point-pac": {
-				"type": "list",
-				"key": "endpoint"
-			},
-			"mw-air-interface-hsb-fc-switch-pac": {
-				"type": "list",
-				"key": "fcswitch"
-			},
-			"mw-air-interface-diversity-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"air-interface-diversity-capability": {
-					"name": "air-interface-diversity-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"air-interface-diversity-configuration": {
-					"name": "air-interface-diversity-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"air-interface-diversity-status": {
-					"name": "air-interface-diversity-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"air-interface-diversity-current-problems": {
-					"name": "air-interface-diversity-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"air-interface-diversity-current-performance": {
-					"name": "air-interface-diversity-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"air-interface-diversity-historical-performances": {
-					"name": "air-interface-diversity-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"mw-pure-ethernet-structure-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"pure-ethernet-structure-capability": {
-					"name": "pure-ethernet-structure-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"pure-ethernet-structure-configuration": {
-					"name": "pure-ethernet-structure-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"pure-ethernet-structure-status": {
-					"name": "pure-ethernet-structure-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"pure-ethernet-structure-current-problems": {
-					"name": "pure-ethernet-structure-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"pure-ethernet-structure-current-performance": {
-					"name": "pure-ethernet-structure-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"pure-ethernet-structure-historical-performances": {
-					"name": "pure-ethernet-structure-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"mw-hybrid-mw-structure-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"hybrid-mw-structure-capability": {
-					"name": "hybrid-mw-structure-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"hybrid-mw-structure-configuration": {
-					"name": "hybrid-mw-structure-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"hybrid-mw-structure-status": {
-					"name": "hybrid-mw-structure-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"hybrid-mw-structure-current-problems": {
-					"name": "hybrid-mw-structure-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"hybrid-mw-structure-current-performance": {
-					"name": "hybrid-mw-structure-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"hybrid-mw-structure-historical-performances": {
-					"name": "hybrid-mw-structure-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"mw-ethernet-container-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"ethernet-container-capability": {
-					"name": "ethernet-container-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"ethernet-container-configuration": {
-					"name": "ethernet-container-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"ethernet-container-status": {
-					"name": "ethernet-container-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"ethernet-container-current-problems": {
-					"name": "ethernet-container-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"ethernet-container-current-performance": {
-					"name": "ethernet-container-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"ethernet-container-historical-performances": {
-					"name": "ethernet-container-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"mw-tdm-container-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"tdm-container-capability": {
-					"name": "tdm-container-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"tdm-container-configuration": {
-					"name": "tdm-container-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"tdm-container-status": {
-					"name": "tdm-container-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"tdm-container-current-problems": {
-					"name": "tdm-container-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"tdm-container-current-performance": {
-					"name": "tdm-container-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"tdm-container-historical-performances": {
-					"name": "tdm-container-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json
deleted file mode 100644
index 9b6be29..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/microwave-model@2018-10-10.schema-information.json
+++ /dev/null
@@ -1,3548 +0,0 @@
-{ "schema-information": {
-
-"microwave-model": {
-"id": "microwave-model",
-"is-read-only": false,
-"description": ["This module contains a collection of YANG definitions for managing wireless networks. This model is for vendor agnostic management of wireless network elements."]
-},
-"rf-to-remote": {
-"id": "rf-to-remote",
-"is-read-only": false,
-"description": ["Returning the header information of the remote site back to the remote site on the radio interface between both outdoor units."]
-},
-"rf-to-local": {
-"id": "rf-to-local",
-"is-read-only": false,
-"description": ["Returning the header information of the local site back to the local site on the radio interface between both outdoor units."]
-},
-"if-to-remote": {
-"id": "if-to-remote",
-"is-read-only": false,
-"description": ["Returning the header information of the remote site back to the remote site on the intermediate frequency interface between local indoor unit and outdoor unit."]
-},
-"if-to-local": {
-"id": "if-to-local",
-"is-read-only": false,
-"description": ["Returning the header information of the local site back to the local site on the intermediate frequency interface between local indoor unit and outdoor unit."]
-},
-"none": {
-"id": "none",
-"is-read-only": false,
-"description": ["none"]
-},
-"if": {
-"id": "if",
-"is-read-only": false,
-"description": ["Intermediate Frequency on the interface between indoor and outdoor unit."]
-},
-"rf": {
-"id": "rf",
-"is-read-only": false,
-"description": ["Radio Frequency on the interface between outdoor unit and outdoor unit at the remote site."]
-},
-"loop-back-type": {
-"id": "loop-back-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"non-alarmed": {
-"id": "non-alarmed",
-"is-read-only": false,
-"description": ["none"]
-},
-"warning": {
-"id": "warning",
-"is-read-only": false,
-"description": ["none"]
-},
-"minor": {
-"id": "minor",
-"is-read-only": false,
-"description": ["none"]
-},
-"major": {
-"id": "major",
-"is-read-only": false,
-"description": ["none"]
-},
-"critical": {
-"id": "critical",
-"is-read-only": false,
-"description": ["none"]
-},
-"severity-type": {
-"id": "severity-type",
-"is-read-only": false,
-"description": ["According to ITU-T M.3160"]
-},
-"supported-channel-plan": {
-"id": "supported-channel-plan",
-"is-read-only": false,
-"description": ["Unique name (e.g. ECC/REC/(01)04_Annex 5) of a document, which describes a frequency grid that can be adjusted at the air interface. Corresponding channel plans to be delivered by the hardware vendor and to be stored by the operator in an controller/application attached database."]
-},
-"duplex-distance-is-variable": {
-"id": "duplex-distance-is-variable",
-"is-read-only": false,
-"description": ["To be set on 'true', if the distance between transmitted and received frequency is variable."]
-},
-"duplex-distance-list": {
-"id": "duplex-distance-list",
-"is-read-only": false,
-"description": ["Distance between transmitted and received frequency. To be filled with single value, in case duplex distance is not variable. To be filled with all configurable values, in case duplex distance is variable."]
-},
-"duplex-distance": {
-"id": "duplex-distance",
-"is-read-only": false,
-"description": ["Distance between transmitted and received frequency."]
-},
-"auto-freq-select-is-avail": {
-"id": "auto-freq-select-is-avail",
-"is-read-only": false,
-"description": ["In case the microwave radio is capable of automatically selecting the transmit frequency in unlicensed bands, this field shall contain a 'true'."]
-},
-"transmission-mode-list": {
-"id": "transmission-mode-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"channel-plan-type-g": {
-"id": "channel-plan-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"transmission-mode-id": {
-"id": "transmission-mode-id",
-"is-read-only": false,
-"description": ["Indentifies the transmissionMode for internal reference."]
-},
-"transmission-mode-name": {
-"id": "transmission-mode-name",
-"is-read-only": false,
-"description": ["Name of the transmission mode. BBBB-m*-i*/t*-r*. B=four digits of channel bandwidth in MHz. m*=required number of digits for modulation name. (i*/t*=code rate.) i*=required number of digits for number of information bits. t*=required number of digits for total bits. r*=required number of digits for rate reduction factor. Example: 028-4QAM-188/204-1"]
-},
-"channel-bandwidth": {
-"id": "channel-bandwidth",
-"is-read-only": false,
-"description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"]
-},
-"modulation-scheme": {
-"id": "modulation-scheme",
-"is-read-only": false,
-"description": ["Modulation scheme, which is base to the other characteristics described in the same transmissionModeType data type. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256')."]
-},
-"code-rate": {
-"id": "code-rate",
-"is-read-only": false,
-"description": ["Code rate of the coding scheme in % (Net bit rate ≤ Gross bit rate · code rate)."]
-},
-"symbol-rate-reduction-factor": {
-"id": "symbol-rate-reduction-factor",
-"is-read-only": false,
-"description": ["Reduction factor for the symbol rate. Example: value would be 4 for 1/4BPSK."]
-},
-"tx-power-min": {
-"id": "tx-power-min",
-"is-read-only": false,
-"description": ["Value of the minimum transmit power the modem can operate in dBm."]
-},
-"tx-power-max": {
-"id": "tx-power-max",
-"is-read-only": false,
-"description": ["Value of the maximum transmit power the modem can operate in dBm."]
-},
-"rx-threshold": {
-"id": "rx-threshold",
-"is-read-only": false,
-"description": ["Value of the receive level required to decode the received signal with a Bit Error Rate of 1e-6 or less."]
-},
-"am-upshift-level": {
-"id": "am-upshift-level",
-"is-read-only": false,
-"description": ["Value of the receive level that has to be exceeded to shift into a higher modulation scheme."]
-},
-"am-downshift-level": {
-"id": "am-downshift-level",
-"is-read-only": false,
-"description": ["Value of the receive level that has to be exceeded for not shifting into a lower modulation scheme."]
-},
-"xpic-is-avail": {
-"id": "xpic-is-avail",
-"is-read-only": false,
-"description": ["In case this air interface type is capable of XPIC, this field shall contain a 'true'. This information shall purely relate to capabilities of the equipment type, but not to the operational capability of a specific hardware composition on site. Means for example that this attribute might contain a 'true' statement, even if an additional cable would have been required to actually operate XPIC in a specific case."]
-},
-"transmission-mode-type-g": {
-"id": "transmission-mode-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"not-specified": {
-"id": "not-specified",
-"is-read-only": false,
-"description": ["none"]
-},
-"horizontal": {
-"id": "horizontal",
-"is-read-only": false,
-"description": ["none"]
-},
-"vertical": {
-"id": "vertical",
-"is-read-only": false,
-"description": ["none"]
-},
-"polarization-type": {
-"id": "polarization-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"es": {
-"id": "es",
-"is-read-only": false,
-"description": ["Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::es ."]
-},
-"ses": {
-"id": "ses",
-"is-read-only": false,
-"description": ["Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::ses ."]
-},
-"cses": {
-"id": "cses",
-"is-read-only": false,
-"description": ["Consecutive Severely Errored Seconds. Threshold cross alarm will relate to TypeDefinitions::AirInterfacePerformanceType::cses ."]
-},
-"not-specified": {
-"id": "not-specified",
-"is-read-only": false,
-"description": ["none"]
-},
-"g826-type": {
-"id": "g826-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"g826-value-kind": {
-"id": "g826-value-kind",
-"is-read-only": false,
-"description": ["Kind of performance value that shall be equipped with a threshold alarm."]
-},
-"granularity-period": {
-"id": "granularity-period",
-"is-read-only": false,
-"description": ["Period of the performance data collection."]
-},
-"alarm-raising-threshold": {
-"id": "alarm-raising-threshold",
-"is-read-only": false,
-"description": ["Number of events required for raising the threshold cross alarm."]
-},
-"alarm-clearing-threshold": {
-"id": "alarm-clearing-threshold",
-"is-read-only": false,
-"description": ["Number of events required for clearing the threshold cross alarm."]
-},
-"threshold-cross-alarm-type-g": {
-"id": "threshold-cross-alarm-type-g",
-"is-read-only": false,
-"description": ["Allows defining a threshold cross alarm."]
-},
-"problem-kind-name": {
-"id": "problem-kind-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"]
-},
-"problem-kind-severity": {
-"id": "problem-kind-severity",
-"is-read-only": false,
-"description": ["Severity of this type of alarm."]
-},
-"air-interface-problem-severity-type-g": {
-"id": "air-interface-problem-severity-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-name": {
-"id": "problem-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"]
-},
-"air-interface-current-problem-type-g": {
-"id": "air-interface-current-problem-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"transmission-mode": {
-"id": "transmission-mode",
-"is-read-only": false,
-"description": ["Operated transmission mode."]
-},
-"time": {
-"id": "time",
-"is-read-only": false,
-"description": ["Sum of all seconds the transmitter operated the transmission mode."]
-},
-"time-x-states-type-g": {
-"id": "time-x-states-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"es": {
-"id": "es",
-"is-read-only": false,
-"description": ["Number of errored seconds."]
-},
-"ses": {
-"id": "ses",
-"is-read-only": false,
-"description": ["Number of severely errored seconds."]
-},
-"cses": {
-"id": "cses",
-"is-read-only": false,
-"description": ["Number of consecutive severely errored seconds."]
-},
-"unavailability": {
-"id": "unavailability",
-"is-read-only": false,
-"description": ["Total time of unavailability in seconds."]
-},
-"tx-level-min": {
-"id": "tx-level-min",
-"is-read-only": false,
-"description": ["Minimum transmit power. Signed integers are required."]
-},
-"tx-level-max": {
-"id": "tx-level-max",
-"is-read-only": false,
-"description": ["Maximum transmit power. Signed integers are required."]
-},
-"tx-level-avg": {
-"id": "tx-level-avg",
-"is-read-only": false,
-"description": ["Averaged transmit power. Signed integers are required."]
-},
-"rx-level-min": {
-"id": "rx-level-min",
-"is-read-only": false,
-"description": ["Minimum receive level. Signed integers are required."]
-},
-"rx-level-max": {
-"id": "rx-level-max",
-"is-read-only": false,
-"description": ["Maximum receive level. Signed integers are required."]
-},
-"rx-level-avg": {
-"id": "rx-level-avg",
-"is-read-only": false,
-"description": ["Averaged receive level. Signed integers are required."]
-},
-"time-x-states-list": {
-"id": "time-x-states-list",
-"is-read-only": false,
-"description": ["Time period the transmitter operated in the respective transmission mode."]
-},
-"time2-states": {
-"id": "time2-states",
-"is-read-only": false,
-"description": ["Sum of all seconds the transmitter operated in e.g. BPSK."]
-},
-"time4-states-s": {
-"id": "time4-states-s",
-"is-read-only": false,
-"description": ["none"]
-},
-"time4-states": {
-"id": "time4-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time8-states": {
-"id": "time8-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time16-states-s": {
-"id": "time16-states-s",
-"is-read-only": false,
-"description": ["none"]
-},
-"time16-states": {
-"id": "time16-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time32-states": {
-"id": "time32-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time64-states": {
-"id": "time64-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time128-states": {
-"id": "time128-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time256-states": {
-"id": "time256-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time512-states": {
-"id": "time512-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time512-states-l": {
-"id": "time512-states-l",
-"is-read-only": false,
-"description": ["none"]
-},
-"time1024-states": {
-"id": "time1024-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time1024-states-l": {
-"id": "time1024-states-l",
-"is-read-only": false,
-"description": ["none"]
-},
-"time2048-states": {
-"id": "time2048-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time2048-states-l": {
-"id": "time2048-states-l",
-"is-read-only": false,
-"description": ["none"]
-},
-"time4096-states": {
-"id": "time4096-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time4096-states-l": {
-"id": "time4096-states-l",
-"is-read-only": false,
-"description": ["none"]
-},
-"time8192-states": {
-"id": "time8192-states",
-"is-read-only": false,
-"description": ["none"]
-},
-"time8192-states-l": {
-"id": "time8192-states-l",
-"is-read-only": false,
-"description": ["none"]
-},
-"snir-min": {
-"id": "snir-min",
-"is-read-only": false,
-"description": ["Minimum signal to (noise+interference) ratio."]
-},
-"snir-max": {
-"id": "snir-max",
-"is-read-only": false,
-"description": ["Maximum signal to (noise+interference) ratio."]
-},
-"snir-avg": {
-"id": "snir-avg",
-"is-read-only": false,
-"description": ["Averaged signal to (noise+interference) ratio."]
-},
-"xpd-min": {
-"id": "xpd-min",
-"is-read-only": false,
-"description": ["Minimum cross polarization discrimination."]
-},
-"xpd-max": {
-"id": "xpd-max",
-"is-read-only": false,
-"description": ["Maximum cross polarization discrimination."]
-},
-"xpd-avg": {
-"id": "xpd-avg",
-"is-read-only": false,
-"description": ["Averaged cross polarization discrimination."]
-},
-"rf-temp-min": {
-"id": "rf-temp-min",
-"is-read-only": false,
-"description": ["Lowest temperature (in degree Celsius) of the radio module inside the outdoor unit."]
-},
-"rf-temp-max": {
-"id": "rf-temp-max",
-"is-read-only": false,
-"description": ["Highest temperature (in degree Celsius) of the radio module inside the outdoor unit."]
-},
-"rf-temp-avg": {
-"id": "rf-temp-avg",
-"is-read-only": false,
-"description": ["Averaged temperature (in degree Celsius) of the radio module inside the outdoor unit."]
-},
-"defect-blocks-sum": {
-"id": "defect-blocks-sum",
-"is-read-only": false,
-"description": ["Total number of blocks that were defect after receiving and could not be corrected by the FEC."]
-},
-"time-period": {
-"id": "time-period",
-"is-read-only": false,
-"description": ["Total length of the measurement period."]
-},
-"air-interface-performance-type-g": {
-"id": "air-interface-performance-type-g",
-"is-read-only": false,
-"description": ["Consolidated performance information of the air interface."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-current-performance-type-g": {
-"id": "air-interface-current-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-historical-performance-type-g": {
-"id": "air-interface-historical-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
-},
-"hsb": {
-"id": "hsb",
-"is-read-only": false,
-"description": ["none"]
-},
-"protection-type": {
-"id": "protection-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"working": {
-"id": "working",
-"is-read-only": false,
-"description": ["none"]
-},
-"protection": {
-"id": "protection",
-"is-read-only": false,
-"description": ["none"]
-},
-"protected": {
-"id": "protected",
-"is-read-only": false,
-"description": ["none"]
-},
-"role-type": {
-"id": "role-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"diversity-name": {
-"id": "diversity-name",
-"is-read-only": false,
-"description": ["Names to be chosen from the following list: 'spaceDiversity', 'frequencyDiversity'"]
-},
-"number-of-air-interfaces-max": {
-"id": "number-of-air-interfaces-max",
-"is-read-only": false,
-"description": ["Maximum number of air interfaces that could be part of this kind of diversity."]
-},
-"diversity-type-g": {
-"id": "diversity-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"group-down": {
-"id": "group-down",
-"is-read-only": false,
-"description": ["All air interfaces that are members of the diversity configuration are down."]
-},
-"not-all-ai-active": {
-"id": "not-all-ai-active",
-"is-read-only": false,
-"description": ["At least one, but not all of the air interfaces that are part of the diversity configuration is not working."]
-},
-"all-ai-active": {
-"id": "all-ai-active",
-"is-read-only": false,
-"description": ["All air interfaces that are part of the diversity configuration are working."]
-},
-"air-interface-diversity-status-type": {
-"id": "air-interface-diversity-status-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-kind-name": {
-"id": "problem-kind-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"]
-},
-"problem-kind-severity": {
-"id": "problem-kind-severity",
-"is-read-only": false,
-"description": ["Severity of this type of alarm."]
-},
-"air-interface-diversity-problem-severity-type-g": {
-"id": "air-interface-diversity-problem-severity-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-name": {
-"id": "problem-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms"]
-},
-"air-interface-diversity-current-problem-type-g": {
-"id": "air-interface-diversity-current-problem-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"snir-min": {
-"id": "snir-min",
-"is-read-only": false,
-"description": ["Minimum signal to (noise+interference) ratio of the combined signals."]
-},
-"snir-max": {
-"id": "snir-max",
-"is-read-only": false,
-"description": ["Maximum signal to (noise+interference) ratio of the combined signals."]
-},
-"snir-avg": {
-"id": "snir-avg",
-"is-read-only": false,
-"description": ["Average signal to (noise+interference) ratio of the combined signals."]
-},
-"air-interface-diversity-performance-type-g": {
-"id": "air-interface-diversity-performance-type-g",
-"is-read-only": false,
-"description": ["Consolidated performance information of the air interface diversity group."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-current-performance-type-g": {
-"id": "air-interface-diversity-current-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-historical-performance-type-g": {
-"id": "air-interface-diversity-historical-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
-},
-"tdm-structure-name": {
-"id": "tdm-structure-name",
-"is-read-only": false,
-"description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"]
-},
-"tdm-segment-size": {
-"id": "tdm-segment-size",
-"is-read-only": false,
-"description": ["Size of the TDM segment in kbit/s. Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"]
-},
-"max-number-of-segments-reservable": {
-"id": "max-number-of-segments-reservable",
-"is-read-only": false,
-"description": ["Device specific maximum number of segments (not depending on current air interface configuration) that can be reserved for this type of segment on a single air interface."]
-},
-"tdm-structure-type-g": {
-"id": "tdm-structure-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-kind-name": {
-"id": "problem-kind-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"]
-},
-"problem-kind-severity": {
-"id": "problem-kind-severity",
-"is-read-only": false,
-"description": ["Severity of this type of alarm."]
-},
-"structure-problem-severity-type-g": {
-"id": "structure-problem-severity-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-name": {
-"id": "problem-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to Structure::StructureCapability::supportedAlarms"]
-},
-"structure-current-problem-type-g": {
-"id": "structure-current-problem-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"time-period": {
-"id": "time-period",
-"is-read-only": false,
-"description": ["Total length of the measurement period in seconds."]
-},
-"es": {
-"id": "es",
-"is-read-only": false,
-"description": ["Number of errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
-},
-"ses": {
-"id": "ses",
-"is-read-only": false,
-"description": ["Number of severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
-},
-"cses": {
-"id": "cses",
-"is-read-only": false,
-"description": ["Number of consecutive severely errored seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
-},
-"unavailability": {
-"id": "unavailability",
-"is-read-only": false,
-"description": ["Total time of unavailability in seconds. 1+0: Same value as for single air interface. 1+1 and Diversity: Value representing the combined signals."]
-},
-"rx-level-min": {
-"id": "rx-level-min",
-"is-read-only": false,
-"description": ["Minimum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."]
-},
-"rx-level-max": {
-"id": "rx-level-max",
-"is-read-only": false,
-"description": ["Maximum receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."]
-},
-"rx-level-avg": {
-"id": "rx-level-avg",
-"is-read-only": false,
-"description": ["Averaged receive level. 1+0: Same value as for single air interface. 1+1: Value representing the combined signals. Diversity: To be left on default value."]
-},
-"structure-performance-type-g": {
-"id": "structure-performance-type-g",
-"is-read-only": false,
-"description": ["Consolidated performance information of the Structure."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"structure-current-performance-type-g": {
-"id": "structure-current-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"structure-historical-performance-type-g": {
-"id": "structure-historical-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
-},
-"container-name": {
-"id": "container-name",
-"is-read-only": false,
-"description": ["Names to be chosen from the following list: 'ethernet','e1','t1','j1','e3','ds3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"]
-},
-"number-of-time-slots-required": {
-"id": "number-of-time-slots-required",
-"is-read-only": false,
-"description": ["Number of time slots required for transporting this type of container. Value must be calculated by the vendor after defining the timeSlotCapacity. For containers of fixed size: numberOfTimeSlotsRequired = required bandwidth of the container divided by timeSlotCapacity. For containers of variable size the minimum (most probably 1) is to be stated."]
-},
-"tdm-time-slots-is-required": {
-"id": "tdm-time-slots-is-required",
-"is-read-only": false,
-"description": ["Shall be set to '1', if this container type requires bandwidth (times slots) reserved for TDM transport."]
-},
-"bundling-is-avail": {
-"id": "bundling-is-avail",
-"is-read-only": false,
-"description": ["If it is possible to combine transport resources of several radio links to transport this container type, this attribute shall be set to '1'."]
-},
-"container-type-g": {
-"id": "container-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-name": {
-"id": "tdm-container-name",
-"is-read-only": false,
-"description": ["Names to be chosen from the following list: 'e1','t1','j1','e3','t3','stm1','cpri1','cpri2','cpri3','cpri4','cpri5','cpri6' or 'cpri7'"]
-},
-"tdm-container-size": {
-"id": "tdm-container-size",
-"is-read-only": false,
-"description": ["Capacity required for transporting this type of container (in kbit/s). Values to be chosen from the following list: '2048','1544','34000','44736 ','155520','614400','1228800','2457600','3072000','4915200','6144000' or '9830400;"]
-},
-"tdm-container-type-g": {
-"id": "tdm-container-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"structure-id-ref": {
-"id": "structure-id-ref",
-"is-read-only": false,
-"description": ["none"]
-},
-"segment-id-ref": {
-"id": "segment-id-ref",
-"is-read-only": false,
-"description": ["Combinations of structureId and segmentId must be unique inside the device to assure that every resource is used just once."]
-},
-"segment-id-type-g": {
-"id": "segment-id-type-g",
-"is-read-only": false,
-"description": ["Identifies the segments, which are used to transport the container."]
-},
-"segment-status-type-id": {
-"id": "segment-status-type-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"segment-is-reserved-for-tdm": {
-"id": "segment-is-reserved-for-tdm",
-"is-read-only": false,
-"description": ["The number of segments, which is configured by Structure::StructureConfiguration::tdmReservedNumberOfSegements, has to be reserved for TDM. Starting from the lowest index value, these segments have to be marked with a 'true' in segmentIsReservedForTdm."]
-},
-"operational-status": {
-"id": "operational-status",
-"is-read-only": false,
-"description": ["Current operational status of each segment."]
-},
-"obsolete-priority-class": {
-"id": "obsolete-priority-class",
-"is-read-only": false,
-"description": ["PriorityClass as inherited from the associated Container::ContainerConfiguration::priorityClass. In case the device is capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, priorityClass shall be considered, while calculating the dropOrderRank."]
-},
-"obsolete-drop-order-rank": {
-"id": "obsolete-drop-order-rank",
-"is-read-only": false,
-"description": ["In case the device is NOT capable of adapting the sequence, in which segments are being dropped in case of decreasing capacity of the air interface, dropOrderRank is number of segments minus sequence number of the segment. In case the device is capable of adapting the sequence, dropOrderRank has to be calculated by the device in dependency to the assigned priorityClass. _unique: within Structure::StructureStatus::segmentStatusList"]
-},
-"segment-status-type-g": {
-"id": "segment-status-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-kind-name": {
-"id": "problem-kind-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"]
-},
-"problem-kind-severity": {
-"id": "problem-kind-severity",
-"is-read-only": false,
-"description": ["Severity of this type of alarm."]
-},
-"container-problem-severity-type-g": {
-"id": "container-problem-severity-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-name": {
-"id": "problem-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to Container::ContainerCapability::supportedAlarms"]
-},
-"container-current-problem-type-g": {
-"id": "container-current-problem-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"tx-ethernet-bytes-max-s": {
-"id": "tx-ethernet-bytes-max-s",
-"is-read-only": false,
-"description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a second and keeps the highest value within the measurement period. Field to be left blank for all types of TDM containers."]
-},
-"tx-ethernet-bytes-max-m": {
-"id": "tx-ethernet-bytes-max-m",
-"is-read-only": false,
-"description": ["Counts the number of Bytes of Ethernet traffic (before header compression) transmitted within a minute and keeps the highest value with in the measurement period. Field to be left blank for all types of TDM containers."]
-},
-"tx-ethernet-bytes-sum": {
-"id": "tx-ethernet-bytes-sum",
-"is-read-only": false,
-"description": ["Total number of Bytes of Ethernet traffic (before header compression) transmitted (in direction out of the device) during the measurement period. Field to be left blank for all types of TDM containers."]
-},
-"time-period": {
-"id": "time-period",
-"is-read-only": false,
-"description": ["Total length of the measurement period in seconds."]
-},
-"container-performance-type-g": {
-"id": "container-performance-type-g",
-"is-read-only": false,
-"description": ["Consolidated performance information of the Container."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"container-current-performance-type-g": {
-"id": "container-current-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"container-historical-performance-type-g": {
-"id": "container-historical-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
-},
-"gbic": {
-"id": "gbic",
-"is-read-only": false,
-"description": ["none"]
-},
-"soldered-connector": {
-"id": "soldered-connector",
-"is-read-only": false,
-"description": ["none"]
-},
-"sfp-sfp-plus-sfp28": {
-"id": "sfp-sfp-plus-sfp28",
-"is-read-only": false,
-"description": ["none"]
-},
-"xbi-300-pin": {
-"id": "xbi-300-pin",
-"is-read-only": false,
-"description": ["none"]
-},
-"xenpak": {
-"id": "xenpak",
-"is-read-only": false,
-"description": ["none"]
-},
-"xfp": {
-"id": "xfp",
-"is-read-only": false,
-"description": ["none"]
-},
-"xfp-e": {
-"id": "xfp-e",
-"is-read-only": false,
-"description": ["none"]
-},
-"xpak": {
-"id": "xpak",
-"is-read-only": false,
-"description": ["none"]
-},
-"x2": {
-"id": "x2",
-"is-read-only": false,
-"description": ["none"]
-},
-"dwdm-sfp-sfp-plus": {
-"id": "dwdm-sfp-sfp-plus",
-"is-read-only": false,
-"description": ["none"]
-},
-"qsfp": {
-"id": "qsfp",
-"is-read-only": false,
-"description": ["none"]
-},
-"qsfp-plus": {
-"id": "qsfp-plus",
-"is-read-only": false,
-"description": ["none"]
-},
-"cxp": {
-"id": "cxp",
-"is-read-only": false,
-"description": ["none"]
-},
-"shielded-mini-multilane-hd-4-x": {
-"id": "shielded-mini-multilane-hd-4-x",
-"is-read-only": false,
-"description": ["none"]
-},
-"shielded-mini-multilane-hd-8-x": {
-"id": "shielded-mini-multilane-hd-8-x",
-"is-read-only": false,
-"description": ["none"]
-},
-"qsfp28": {
-"id": "qsfp28",
-"is-read-only": false,
-"description": ["none"]
-},
-"cxp2": {
-"id": "cxp2",
-"is-read-only": false,
-"description": ["none"]
-},
-"cdfp-style1-style2": {
-"id": "cdfp-style1-style2",
-"is-read-only": false,
-"description": ["none"]
-},
-"shielded-mini-multilane-hd-4-x-fan-out": {
-"id": "shielded-mini-multilane-hd-4-x-fan-out",
-"is-read-only": false,
-"description": ["none"]
-},
-"shielded-mini-multilane-hd-8-x-fan-out": {
-"id": "shielded-mini-multilane-hd-8-x-fan-out",
-"is-read-only": false,
-"description": ["none"]
-},
-"cdfp-style3": {
-"id": "cdfp-style3",
-"is-read-only": false,
-"description": ["none"]
-},
-"qsfp-micro": {
-"id": "qsfp-micro",
-"is-read-only": false,
-"description": ["none"]
-},
-"qsfp-dd": {
-"id": "qsfp-dd",
-"is-read-only": false,
-"description": ["none"]
-},
-"qsfp-plus-rate-select-v1": {
-"id": "qsfp-plus-rate-select-v1",
-"is-read-only": false,
-"description": ["none"]
-},
-"qsfp-plus-rate-select-v2": {
-"id": "qsfp-plus-rate-select-v2",
-"is-read-only": false,
-"description": ["none"]
-},
-"not-yet-defined": {
-"id": "not-yet-defined",
-"is-read-only": false,
-"description": ["none"]
-},
-"mii-kind-type": {
-"id": "mii-kind-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"sc": {
-"id": "sc",
-"is-read-only": false,
-"description": ["Subscriber Connector"]
-},
-"fibre-channel-style-1": {
-"id": "fibre-channel-style-1",
-"is-read-only": false,
-"description": ["Copper connector"]
-},
-"fibre-channel-style-2": {
-"id": "fibre-channel-style-2",
-"is-read-only": false,
-"description": ["Copper connector"]
-},
-"bnc-tnc": {
-"id": "bnc-tnc",
-"is-read-only": false,
-"description": ["Bayonet/Threaded Neill-Concelman"]
-},
-"fc": {
-"id": "fc",
-"is-read-only": false,
-"description": ["Fibre Channel coax headers"]
-},
-"fiber-jack": {
-"id": "fiber-jack",
-"is-read-only": false,
-"description": ["none"]
-},
-"lc": {
-"id": "lc",
-"is-read-only": false,
-"description": ["Lucent Connector"]
-},
-"mt-rj": {
-"id": "mt-rj",
-"is-read-only": false,
-"description": ["Mechanical Transfer - Registered Jack"]
-},
-"mu": {
-"id": "mu",
-"is-read-only": false,
-"description": ["Multiple Optical"]
-},
-"sg": {
-"id": "sg",
-"is-read-only": false,
-"description": ["none"]
-},
-"optical-pigtail": {
-"id": "optical-pigtail",
-"is-read-only": false,
-"description": ["none"]
-},
-"mpo1-x12": {
-"id": "mpo1-x12",
-"is-read-only": false,
-"description": ["Multifiber Parallel Optic"]
-},
-"mpo2-x16": {
-"id": "mpo2-x16",
-"is-read-only": false,
-"description": ["Multifiber Parallel Optic"]
-},
-"hssdc-ii": {
-"id": "hssdc-ii",
-"is-read-only": false,
-"description": ["High Speed Serial Data Connector"]
-},
-"copper-pigtail": {
-"id": "copper-pigtail",
-"is-read-only": false,
-"description": ["none"]
-},
-"rj45": {
-"id": "rj45",
-"is-read-only": false,
-"description": ["8P8C, according to Clause 3 and Figures 1 through 5 of IEC 60603-7"]
-},
-"no-seperable-connector": {
-"id": "no-seperable-connector",
-"is-read-only": false,
-"description": ["none"]
-},
-"mxc2-x16": {
-"id": "mxc2-x16",
-"is-read-only": false,
-"description": ["none"]
-},
-"st": {
-"id": "st",
-"is-read-only": false,
-"description": ["according to IEC 60874-10:1992, also often called BFOC/2.5"]
-},
-"not-yet-defined": {
-"id": "not-yet-defined",
-"is-read-only": false,
-"description": ["none"]
-},
-"mdi-kind-type": {
-"id": "mdi-kind-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"tp-cat3": {
-"id": "tp-cat3",
-"is-read-only": false,
-"description": ["none"]
-},
-"tp-cat5": {
-"id": "tp-cat5",
-"is-read-only": false,
-"description": ["none"]
-},
-"tp-cat6": {
-"id": "tp-cat6",
-"is-read-only": false,
-"description": ["none"]
-},
-"tp-cat8": {
-"id": "tp-cat8",
-"is-read-only": false,
-"description": ["none"]
-},
-"single-mode": {
-"id": "single-mode",
-"is-read-only": false,
-"description": ["none"]
-},
-"multi-mode": {
-"id": "multi-mode",
-"is-read-only": false,
-"description": ["none"]
-},
-"not-yet-defined": {
-"id": "not-yet-defined",
-"is-read-only": false,
-"description": ["none"]
-},
-"medium-kind-type": {
-"id": "medium-kind-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"10-base5": {
-"id": "10-base5",
-"is-read-only": false,
-"description": ["Thick coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 8"]
-},
-"foirl": {
-"id": "foirl",
-"is-read-only": false,
-"description": ["FOIRL Medium Attachment Unit (MAU) as specified in 802.3 Clause 9.9"]
-},
-"10-base2": {
-"id": "10-base2",
-"is-read-only": false,
-"description": ["Thin coax Medium Attachment Unit (MAU) as specified in 802.3 Clause 10"]
-},
-"10-broad36": {
-"id": "10-broad36",
-"is-read-only": false,
-"description": ["Broadband DTE Medium Attachment Unit (MAU) as specified in 802.3 Clause 11"]
-},
-"10-base-t": {
-"id": "10-base-t",
-"is-read-only": false,
-"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14. Only to be applied when duplex mode unknown"]
-},
-"10-base-thd": {
-"id": "10-base-thd",
-"is-read-only": false,
-"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in half duplex mode"]
-},
-"10-base-tfd": {
-"id": "10-base-tfd",
-"is-read-only": false,
-"description": ["Twisted-pair cabling Medium Attachment Unit (MAU) as specified in 802.3 Clause 14 in full duplex mode"]
-},
-"10-base-fp": {
-"id": "10-base-fp",
-"is-read-only": false,
-"description": ["Passive fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 16"]
-},
-"10-base-fb": {
-"id": "10-base-fb",
-"is-read-only": false,
-"description": ["Synchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 17"]
-},
-"10-base-fl": {
-"id": "10-base-fl",
-"is-read-only": false,
-"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18. Only to be applied when duplex mode unknown"]
-},
-"10-base-flhd": {
-"id": "10-base-flhd",
-"is-read-only": false,
-"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in half duplex mode"]
-},
-"10-base-flfd": {
-"id": "10-base-flfd",
-"is-read-only": false,
-"description": ["Asynchronous fiber Medium Attachment Unit (MAU) as specified in 802.3 Clause 18 in full duplex mode"]
-},
-"100-base-t4": {
-"id": "100-base-t4",
-"is-read-only": false,
-"description": ["Four-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 23"]
-},
-"100-base-tx": {
-"id": "100-base-tx",
-"is-read-only": false,
-"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25. Only to be applied when duplex mode unknown"]
-},
-"100-base-txhd": {
-"id": "100-base-txhd",
-"is-read-only": false,
-"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in half duplex mode"]
-},
-"100-base-txfd": {
-"id": "100-base-txfd",
-"is-read-only": false,
-"description": ["Two-pair Category 5 twisted-pair cabling as specified in 802.3 Clause 25 in full duplex mode"]
-},
-"100-base-bx10-d": {
-"id": "100-base-bx10-d",
-"is-read-only": false,
-"description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 58"]
-},
-"100-base-bx10-u": {
-"id": "100-base-bx10-u",
-"is-read-only": false,
-"description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 58"]
-},
-"100-base-fx": {
-"id": "100-base-fx",
-"is-read-only": false,
-"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26. Only to be applied when duplex mode unknown"]
-},
-"100-base-fxhd": {
-"id": "100-base-fxhd",
-"is-read-only": false,
-"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in half duplex mode"]
-},
-"100-base-fxfd": {
-"id": "100-base-fxfd",
-"is-read-only": false,
-"description": ["X fiber over Physical Medium Dependent (PMD) as specified in 802.3 Clause 26 in full duplex mode"]
-},
-"100-base-lx10": {
-"id": "100-base-lx10",
-"is-read-only": false,
-"description": ["Two fiber Physical layer entity (PHY) as specified in 802.3 Clause 58"]
-},
-"100-base-t2": {
-"id": "100-base-t2",
-"is-read-only": false,
-"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32. Only to be applied when duplex mode unknown"]
-},
-"100-base-t2-hd": {
-"id": "100-base-t2-hd",
-"is-read-only": false,
-"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in half duplex mode"]
-},
-"100-base-t2-fd": {
-"id": "100-base-t2-fd",
-"is-read-only": false,
-"description": ["Two-pair Category 3 twisted-pair cabling as specified in 802.3 Clause 32 in full duplex mode"]
-},
-"1000-base-x": {
-"id": "1000-base-x",
-"is-read-only": false,
-"description": ["X as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD and duplex mode unknown"]
-},
-"1000-base-bx10-d": {
-"id": "1000-base-bx10-d",
-"is-read-only": false,
-"description": ["One single-mode fiber Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 59"]
-},
-"1000-base-bx10-u": {
-"id": "1000-base-bx10-u",
-"is-read-only": false,
-"description": ["One single-mode fiber Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 59"]
-},
-"1000-base-xhd": {
-"id": "1000-base-xhd",
-"is-read-only": false,
-"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in half duplex mode. Not to be configured and only to be returned when underlying PMD unknown"]
-},
-"1000-base-xfd": {
-"id": "1000-base-xfd",
-"is-read-only": false,
-"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 36 over undefined Physical Medium Dependent (PMD) in full duplex mode. Not to be configured and only to be returned when underlying PMD unknown"]
-},
-"1000-base-lx": {
-"id": "1000-base-lx",
-"is-read-only": false,
-"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"]
-},
-"1000-base-lxhd": {
-"id": "1000-base-lxhd",
-"is-read-only": false,
-"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"]
-},
-"1000-base-lxfd": {
-"id": "1000-base-lxfd",
-"is-read-only": false,
-"description": ["X fiber over long-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"]
-},
-"1000-base-lx10": {
-"id": "1000-base-lx10",
-"is-read-only": false,
-"description": ["Two fiber 10km Physical layer entity (PHY) as specified in 802.3 Clause 59"]
-},
-"1000-base-sx": {
-"id": "1000-base-sx",
-"is-read-only": false,
-"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38. Only to be applied when duplex mode unknown"]
-},
-"1000-base-sxhd": {
-"id": "1000-base-sxhd",
-"is-read-only": false,
-"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in half duplex mode"]
-},
-"1000-base-sxfd": {
-"id": "1000-base-sxfd",
-"is-read-only": false,
-"description": ["X fiber over short-wavelength laser Physical Medium Dependent (PMD) as specified in 802.3 Clause 38 in full duplex mode"]
-},
-"1000-base-cx": {
-"id": "1000-base-cx",
-"is-read-only": false,
-"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39. Only to be applied when duplex mode unknown"]
-},
-"1000-base-cxhd": {
-"id": "1000-base-cxhd",
-"is-read-only": false,
-"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in half duplex mode"]
-},
-"1000-base-cxfd": {
-"id": "1000-base-cxfd",
-"is-read-only": false,
-"description": ["X copper over 150-Ohm balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 39 in full duplex mode"]
-},
-"1000-base-kx": {
-"id": "1000-base-kx",
-"is-read-only": false,
-"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 70"]
-},
-"1000-base-t": {
-"id": "1000-base-t",
-"is-read-only": false,
-"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40. Only to be applied when duplex mode unknown"]
-},
-"1000-base-thd": {
-"id": "1000-base-thd",
-"is-read-only": false,
-"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in half duplex mode"]
-},
-"1000-base-tfd": {
-"id": "1000-base-tfd",
-"is-read-only": false,
-"description": ["Four-pair Category 5 twisted-pair cabling Physical layer entity (PHY) as specified in 802.3 Clause 40 in full duplex mode"]
-},
-"10-gbase-x": {
-"id": "10-gbase-x",
-"is-read-only": false,
-"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 48 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
-},
-"10-gbase-lx4": {
-"id": "10-gbase-lx4",
-"is-read-only": false,
-"description": ["X fiber over 4 lane 1310nm optics as specified in 802.3 Clause 53"]
-},
-"10-gbase-cx4": {
-"id": "10-gbase-cx4",
-"is-read-only": false,
-"description": ["X copper over 8 pair 100-Ohm balanced cable as specified in 802.3 Clause 54"]
-},
-"10-gbase-kx4": {
-"id": "10-gbase-kx4",
-"is-read-only": false,
-"description": ["X Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 71"]
-},
-"10-gbase-r": {
-"id": "10-gbase-r",
-"is-read-only": false,
-"description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) as specified in 802.3 Clause 49 over undefined Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
-},
-"10-gbase-er": {
-"id": "10-gbase-er",
-"is-read-only": false,
-"description": ["R fiber over 1550nm optics as specified in 802.3 Clause 52"]
-},
-"10-gbase-lr": {
-"id": "10-gbase-lr",
-"is-read-only": false,
-"description": ["R fiber over 1310nm optics as specified in 802.3 Clause 52"]
-},
-"10-gbase-sr": {
-"id": "10-gbase-sr",
-"is-read-only": false,
-"description": ["R fiber over 850nm optics as specified in 802.3 Clause 52"]
-},
-"10-gbase-lrm": {
-"id": "10-gbase-lrm",
-"is-read-only": false,
-"description": ["R fiber over 1310 nm optics as specified in 802.3 Clause 68"]
-},
-"10-gbase-kr": {
-"id": "10-gbase-kr",
-"is-read-only": false,
-"description": ["R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 72"]
-},
-"10-gbase-t": {
-"id": "10-gbase-t",
-"is-read-only": false,
-"description": ["Four-pair twisted-pair balanced copper cabling Physical layer entity (PHY) as specified in 802.3 Clause 55"]
-},
-"10-gbase-pr-d1": {
-"id": "10-gbase-pr-d1",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"10-gbase-pr-d2": {
-"id": "10-gbase-pr-d2",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"10-gbase-pr-d3": {
-"id": "10-gbase-pr-d3",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"10-gbase-pr-d4": {
-"id": "10-gbase-pr-d4",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Line Terminal (OLT=>office side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"10-gbase-pr-u1": {
-"id": "10-gbase-pr-u1",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"10-gbase-pr-u2": {
-"id": "10-gbase-pr-u2",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"10-gbase-pr-u3": {
-"id": "10-gbase-pr-u3",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"10-gbase-pr-u4": {
-"id": "10-gbase-pr-u4",
-"is-read-only": false,
-"description": ["One single-mode fiber 10.3125 GBd continuous downstream / burst mode upstream Optical Network Unit (ONU=>customer side) Physical layer entity (PHY) as specified in 802.3 Clause 75"]
-},
-"40-gbase-r": {
-"id": "40-gbase-r",
-"is-read-only": false,
-"description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
-},
-"40-gbase-kr4": {
-"id": "40-gbase-kr4",
-"is-read-only": false,
-"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 84"]
-},
-"40-gbase-cr4": {
-"id": "40-gbase-cr4",
-"is-read-only": false,
-"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"]
-},
-"40-gbase-sr4": {
-"id": "40-gbase-sr4",
-"is-read-only": false,
-"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"]
-},
-"4-x10-gbase-sr": {
-"id": "4-x10-gbase-sr",
-"is-read-only": false,
-"description": ["4 times 10GBASE-S compatible to 802.3 Clause 52 over 4 lane multimode fiber"]
-},
-"40-gbase-lr4": {
-"id": "40-gbase-lr4",
-"is-read-only": false,
-"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 87"]
-},
-"40-gbase-er4": {
-"id": "40-gbase-er4",
-"is-read-only": false,
-"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 87"]
-},
-"40-gbase-fr": {
-"id": "40-gbase-fr",
-"is-read-only": false,
-"description": ["40GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over single mode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 89"]
-},
-"100-gbase-r": {
-"id": "100-gbase-r",
-"is-read-only": false,
-"description": ["Multi-lane PCS as specified in 802.3 Clause 82 over undefined 100GBASE-R or 100GBASE-P Physical Medium Attachment (PMA) and Physical Medium Dependent (PMD). Not to be configured and only to be returned when underlying PMD unknown"]
-},
-"100-gbase-cr4": {
-"id": "100-gbase-cr4",
-"is-read-only": false,
-"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 92"]
-},
-"100-gbase-kr4": {
-"id": "100-gbase-kr4",
-"is-read-only": false,
-"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 93"]
-},
-"100-gbase-kp4": {
-"id": "100-gbase-kp4",
-"is-read-only": false,
-"description": ["100GBASE-P Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over an electrical backplane Physical Medium Dependent (PMD) as specified in 802.3 Clause 94"]
-},
-"100-gbase-cr10": {
-"id": "100-gbase-cr10",
-"is-read-only": false,
-"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane shielded copper balanced cable Physical Medium Dependent (PMD) as specified in 802.3 Clause 85"]
-},
-"100-gbase-sr4": {
-"id": "100-gbase-sr4",
-"is-read-only": false,
-"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 95"]
-},
-"100-gbase-sr10": {
-"id": "100-gbase-sr10",
-"is-read-only": false,
-"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 10 lane multimode fiber Physical Medium Dependent (PMD) as specified in 802.3 Clause 86"]
-},
-"2-x40-gbase-sr": {
-"id": "2-x40-gbase-sr",
-"is-read-only": false,
-"description": ["2 times 40GBASE-S compatible to 802.3 Clause 86 over 10 lane multimode fiber"]
-},
-"10-x10-gbase-sr": {
-"id": "10-x10-gbase-sr",
-"is-read-only": false,
-"description": ["10 times 10GBASE-S compatible to 802.3 Clause 52 over 10 lane multimode fiber"]
-},
-"12-x10-gbase-sr": {
-"id": "12-x10-gbase-sr",
-"is-read-only": false,
-"description": ["12 times 10GBASE-S compatible to 802.3 Clause 52 over 12 lane multimode fiber"]
-},
-"100-gbase-lr4": {
-"id": "100-gbase-lr4",
-"is-read-only": false,
-"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with long reach, as specified in 802.3 Clause 88"]
-},
-"100-gbase-er4": {
-"id": "100-gbase-er4",
-"is-read-only": false,
-"description": ["100GBASE-R Physical Coding Sublayer (PCS) and Physical Medium Attachment (PMA) over 4 WDM lane single mode fiber Physical Medium Dependent (PMD), with extended reach, as specified in 802.3 Clause 88"]
-},
-"not-yet-defined": {
-"id": "not-yet-defined",
-"is-read-only": false,
-"description": ["none"]
-},
-"pmd-name-type": {
-"id": "pmd-name-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"signal-ordering-kind-name": {
-"id": "signal-ordering-kind-name",
-"is-read-only": false,
-"description": ["To be filled according to TR-541. Must be unique for referencing during configuration of the interface."]
-},
-"signal-list": {
-"id": "signal-list",
-"is-read-only": false,
-"description": ["Desciption of the signals on the Media Dependent Interface (MDI), might be e.g. 'TX+' in case of e.g. 10BASE-T, might be e.g. '1,295.56 nm' in case of e.g. 100GBASE-LR4"]
-},
-"signal-ordering-type-g": {
-"id": "signal-ordering-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mau-id": {
-"id": "mau-id",
-"is-read-only": false,
-"description": ["802.3 according to 30.5.1.1.1 aMAUID Unique identifier of the Medium Attachment Unit (MAU) instance within the data about the device"]
-},
-"mii-kind": {
-"id": "mii-kind",
-"is-read-only": false,
-"description": ["SFF8472_SFF8636 Kind of Medium Independent Interface (MII) provided by this Medium Attachment Unit (MAU) (e.g. SFP, moldered port)"]
-},
-"mdi-kind": {
-"id": "mdi-kind",
-"is-read-only": false,
-"description": ["Kind of Medium Dependent Interface (MDI) provided by this Medium Attachment Unit (MAU)"]
-},
-"required-medium-kind": {
-"id": "required-medium-kind",
-"is-read-only": false,
-"description": ["Kind of medium required for operating this Medium Attachment Unit (MAU), more like an information field"]
-},
-"wavelength-min": {
-"id": "wavelength-min",
-"is-read-only": false,
-"description": ["SFF-8690 Minimum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMax = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5"]
-},
-"wavelength-max": {
-"id": "wavelength-max",
-"is-read-only": false,
-"description": ["Maximum laser wavelength in pico meter, -1 = not applicable, 0 = not known, wavelengthMin = wavelength cannot be configured; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"]
-},
-"wavelength-grid-min": {
-"id": "wavelength-grid-min",
-"is-read-only": false,
-"description": ["Minimum grid spacing supported by the transceiver, -1 = not applicable, 0 = not known SFF-8690"]
-},
-"link-length-max": {
-"id": "link-length-max",
-"is-read-only": false,
-"description": ["Indicates the maximum link length that is supported by the transceiver on the medium, which is specified in the standard referenced in TypeDefinitions::phyType::phyKind."]
-},
-"vendor-name": {
-"id": "vendor-name",
-"is-read-only": false,
-"description": ["Name of the vendor of the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerName"]
-},
-"vendor-oui": {
-"id": "vendor-oui",
-"is-read-only": false,
-"description": ["Describes the IEEE Company identifier of the vendor of the transceiver (1st part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::ManufacturerProperties::manufacturerIdentifier"]
-},
-"part-number": {
-"id": "part-number",
-"is-read-only": false,
-"description": ["802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as six bit model number Uniquely identifies the transceiver in the vendor's product lists Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::partTypeIdentifier"]
-},
-"revision-number": {
-"id": "revision-number",
-"is-read-only": false,
-"description": ["Identifies the revision number of the transceiver (3rd part of 802.3 ResourceTypeID) 802.3 22.2.4.3.1 PHY Identifier; also referenced in 45.2.1.13 PMA/PMD package identifier as four-bit revision number Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentType::version"]
-},
-"serial-number": {
-"id": "serial-number",
-"is-read-only": false,
-"description": ["Vendor's serial number for the transceiver. 0 = not applicable Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::serialNumber"]
-},
-"date-code": {
-"id": "date-code",
-"is-read-only": false,
-"description": ["Vendor's date code for the transceiver Will be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::InvariantDetails::EquipmentInstance::manufactureDate"]
-},
-"pmd-list": {
-"id": "pmd-list",
-"is-read-only": false,
-"description": ["List of Physical Medium Dependent (PMD) that can be operated *** In case ordering of the signals depends on the PMD, pmdList has to be put into the datatype for the signal ordering ***"]
-},
-"signal-ordering-list": {
-"id": "signal-ordering-list",
-"is-read-only": false,
-"description": ["Describes the different (e.g. MDI, MDI-X) ways of ordering the signals on the physical medium"]
-},
-"auto-signal-ordering-is-avail": {
-"id": "auto-signal-ordering-is-avail",
-"is-read-only": false,
-"description": ["1 = there is a mechanism for automatically crossing over tx and rx implemented"]
-},
-"short-reach-mode-is-avail": {
-"id": "short-reach-mode-is-avail",
-"is-read-only": false,
-"description": ["1 = Indicates that Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64 is available"]
-},
-"eee-is-avail": {
-"id": "eee-is-avail",
-"is-read-only": false,
-"description": ["1 = Indicates that Energy-Efficient Ethernet (EEE) is available at the device."]
-},
-"unidirectional-operation-is-avail": {
-"id": "unidirectional-operation-is-avail",
-"is-read-only": false,
-"description": ["1 = Medium Attachment Unit (MAU) able to transmit from Media Independent Interface (MII) regardless of whether the MAU has determined that a valid link has been established, 0 = MAU able to transmit from MII only when the MAU has determined that a valid link has been established 802.3"]
-},
-"supported-alarms": {
-"id": "supported-alarms",
-"is-read-only": false,
-"description": ["MW IM Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."]
-},
-"mau-type-g": {
-"id": "mau-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-kind-name": {
-"id": "problem-kind-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"]
-},
-"problem-kind-severity": {
-"id": "problem-kind-severity",
-"is-read-only": false,
-"description": ["Severity of this type of alarm."]
-},
-"wire-interface-problem-severity-type-g": {
-"id": "wire-interface-problem-severity-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"problem-name": {
-"id": "problem-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to WireInterface::WireInterfaceCapability::supportedAlarms"]
-},
-"wire-interface-current-problem-type-g": {
-"id": "wire-interface-current-problem-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"es": {
-"id": "es",
-"is-read-only": false,
-"description": ["802.3 30.8.1.1.13 aLineESs Number of errored seconds"]
-},
-"ses": {
-"id": "ses",
-"is-read-only": false,
-"description": ["802.3 30.8.1.1.12 aLineSESs Number of severely errored seconds"]
-},
-"symbol-error-during-carrier": {
-"id": "symbol-error-during-carrier",
-"is-read-only": false,
-"description": ["802.3 according to 30.3.2.1.5 aSymbolErrorDuringCarrier Number of times when valid carrier was present and an invalid data symbol occured."]
-},
-"low-power-idle-transmitter-ms": {
-"id": "low-power-idle-transmitter-ms",
-"is-read-only": false,
-"description": ["802.3 similar to 30.3.2.1.8 aTransmitLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the transmitter was in power save mode"]
-},
-"low-power-idle-receiver-ms": {
-"id": "low-power-idle-receiver-ms",
-"is-read-only": false,
-"description": ["802.3 similar to 30.3.2.1.9 aReceiveLPIMicroseconds Number of milliseconds (original counter expresses microseconds), during which the receiver was in power save mode"]
-},
-"wire-interface-performance-type-g": {
-"id": "wire-interface-performance-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"wire-interface-current-performance-type-g": {
-"id": "wire-interface-current-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into current performance information by inheriting from OTN_CurrentData."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"wire-interface-historical-performance-type-g": {
-"id": "wire-interface-historical-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into historical performance information by inheriting from OTN_HistoryData."]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"air-interface-capability": {
-"id": "air-interface-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-configuration": {
-"id": "air-interface-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-status": {
-"id": "air-interface-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-current-problems": {
-"id": "air-interface-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-current-performance": {
-"id": "air-interface-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-historical-performances": {
-"id": "air-interface-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-air-interface-pac": {
-"id": "mw-air-interface-pac",
-"is-read-only": false,
-"description": ["none"]
-},
-"type-of-equipment": {
-"id": "type-of-equipment",
-"is-read-only": false,
-"description": ["This parameter indicates the equipment type. Instead of uploading the complete set of capabilities, capabilities of the same equipment type could be reused. Should be unique for a combination of modem, radio and their respective firmware."]
-},
-"tx-frequency-min": {
-"id": "tx-frequency-min",
-"is-read-only": false,
-"description": ["Value of the minimum transmit frequency tunable at the air interface."]
-},
-"tx-frequency-max": {
-"id": "tx-frequency-max",
-"is-read-only": false,
-"description": ["Value of the maximum transmit frequency tunable at the air interface."]
-},
-"rx-frequency-min": {
-"id": "rx-frequency-min",
-"is-read-only": false,
-"description": ["Value of the minimum receive frequency tunable at the air interface."]
-},
-"rx-frequency-max": {
-"id": "rx-frequency-max",
-"is-read-only": false,
-"description": ["Value of the maximum receive frequency tunable at the air interface."]
-},
-"adaptive-modulation-is-avail": {
-"id": "adaptive-modulation-is-avail",
-"is-read-only": false,
-"description": ["In case the device is capable of adaptive modulation, this field shall contain a 'true'."]
-},
-"mimo-is-avail": {
-"id": "mimo-is-avail",
-"is-read-only": false,
-"description": ["In case the device is capable of MIMO, this field shall contain a 'true'."]
-},
-"mimo-channels": {
-"id": "mimo-channels",
-"is-read-only": false,
-"description": ["Maximum number (n) of spatial multiplexing streams that can be conveyed by an n x n MIMO configuration."]
-},
-"alic-is-avail": {
-"id": "alic-is-avail",
-"is-read-only": false,
-"description": ["In case the microwave radio is capable of Adjacent Link Interference Cancelation (canceling of interference cause by transmitters located at the same site), this field shall contain a 'true'."]
-},
-"atpc-is-avail": {
-"id": "atpc-is-avail",
-"is-read-only": false,
-"description": ["In case the microwave radio is capable of ATPC, this field shall contain a 'true'."]
-},
-"atpc-range": {
-"id": "atpc-range",
-"is-read-only": false,
-"description": ["Extent of the ATPC range. This value represents a device specific maximum value. The actual range of the ATPC at a specific link might be limited by the difference between configured transmit power (AirInterface::AirInterfaceConfiguration::txPower) and minimum transmit power of the device (TypeDefinitions::TransmissionModeType::txPowerMin)."]
-},
-"encryption-is-avail": {
-"id": "encryption-is-avail",
-"is-read-only": false,
-"description": ["Shall be marked 'true', if payload encryption is available."]
-},
-"supported-loop-back-kind-list": {
-"id": "supported-loop-back-kind-list",
-"is-read-only": false,
-"description": ["List of supported kinds of looping back of header information to the remote site."]
-},
-"maintenance-timer-range": {
-"id": "maintenance-timer-range",
-"is-read-only": false,
-"description": ["Available time periods for maintenance configurations (e.g. the loop back of microwave header information) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."]
-},
-"supported-alarm-list": {
-"id": "supported-alarm-list",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','signalIDMismatching','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the vendor."]
-},
-"supported-alarms": {
-"id": "supported-alarms",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'signalIsLost','rslIsExceeded','temperatureIsExceeded','modemIsFaulty','radioIsFaulty' and 'modulationIsDownShifted'. Further alarms might be added by the device. Names are to be separated by commas."]
-},
-"supported-channel-plan-list": {
-"id": "supported-channel-plan-list",
-"is-read-only": false,
-"description": ["List of channel spacing that are supported by the device."]
-},
-"air-interface-capability-g": {
-"id": "air-interface-capability-g",
-"is-read-only": false,
-"description": ["Describes the 'analog' capabilities of modem and transmitter of the microwave device. Value ranges of attributes are not independently (e.g. min. and max. transmit power depends on modulation). Legal combinations of values are expressed in transmissionModeTypes."]
-},
-"air-interface-name": {
-"id": "air-interface-name",
-"is-read-only": false,
-"description": ["Operator specific microwave link ID (often used for coding area, type of element and sequential number)."]
-},
-"remote-air-interface-name": {
-"id": "remote-air-interface-name",
-"is-read-only": false,
-"description": ["Name of the air interface, which belongs to the same link, at the remote site."]
-},
-"expected-signal-id": {
-"id": "expected-signal-id",
-"is-read-only": false,
-"description": ["If set on '0', the receiver ignores the signal ID of the received signal. If set on any other value, the receiver exclusively synchronizes on signals with the same signal ID."]
-},
-"transmitted-signal-id": {
-"id": "transmitted-signal-id",
-"is-read-only": false,
-"description": ["Transmitted radio signal ID for synchronizing the receiver."]
-},
-"radio-signal-id": {
-"id": "radio-signal-id",
-"is-read-only": false,
-"description": ["The radioSignalId is transmitted on the air interface so the remote site of the link synchronizes on the correct transmitter. The local radio MUST NOT synchronize on a radio signal with a different radioSignalId. The link ID is neither an ID necessary to span the model nor an ID referencing external data. It is just some sort of name of the link transmitted so the correct remote site can be identified in an interference situation. The value zero might be used to make the microwave to disable the link ID check."]
-},
-"tx-frequency": {
-"id": "tx-frequency",
-"is-read-only": false,
-"description": ["Center frequency of the transmit channel. The values to be configured have to exactly match the values listed in the international agreement referenced in channelPlanID. In case of automated selection of the transmit frequency this field shall describe the lowest center frequency selectable."]
-},
-"rx-frequency": {
-"id": "rx-frequency",
-"is-read-only": false,
-"description": ["Center frequency of the receive channel."]
-},
-"transmission-mode-min": {
-"id": "transmission-mode-min",
-"is-read-only": false,
-"description": ["Minimum transmission mode to be configured (in case adaptive modulation is not used, this value represents also the fixed transmission mode)."]
-},
-"transmission-mode-max": {
-"id": "transmission-mode-max",
-"is-read-only": false,
-"description": ["Maximum transmission mode to be configured."]
-},
-"tx-channel-bandwidth": {
-"id": "tx-channel-bandwidth",
-"is-read-only": false,
-"description": ["Bandwidth of the transmit channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"]
-},
-"rx-channel-bandwidth": {
-"id": "rx-channel-bandwidth",
-"is-read-only": false,
-"description": ["Bandwidth of the receive channel. The value shall be expressed explicitly (means in kHz) not as a reference to an international agreement. The values shall be chosen from the following _list: 3.500, 7.000, 14.000, 27.500, 28.000, 29.000, 29.650, 30.000, 40.000, 50.000, 55.000, 56.000, 59.300, 60.000, 80.000, 100.000, 112.000, 120.000, 150.000, 200.000, 250.000, 500.000, 750.000, 1.000.000, 1.250.000, 1.500.000, 1.750.000, 2.000.000;"]
-},
-"polarization": {
-"id": "polarization",
-"is-read-only": false,
-"description": ["Allows documenting the polarization of the air interface."]
-},
-"power-is-on": {
-"id": "power-is-on",
-"is-read-only": false,
-"description": ["Power ON. Activation of the entire radio in a split mount configuration shall be expressed as a 'true'."]
-},
-"transmitter-is-on": {
-"id": "transmitter-is-on",
-"is-read-only": false,
-"description": ["Activation of the transmitter inside the radio shall be expressed as a 'true'."]
-},
-"receiver-is-on": {
-"id": "receiver-is-on",
-"is-read-only": false,
-"description": ["Maintenance Feature. Activation of the receiver inside the radio shall be expressed as a 'true'. Attribute shall also be used for RX main and RX diversity squelches in case of diversity configurations."]
-},
-"tx-power": {
-"id": "tx-power",
-"is-read-only": false,
-"description": ["Transmit power to be configured on the microwave link. Signed Byte is required. The actually operated transmit power might be lower depending on adaptive modulation and ATPC."]
-},
-"adaptive-modulation-is-on": {
-"id": "adaptive-modulation-is-on",
-"is-read-only": false,
-"description": ["Adaptive Modulation. Activation of adaptive modulation shall be expressed as a 'true'."]
-},
-"modulation-min": {
-"id": "modulation-min",
-"is-read-only": false,
-"description": ["Minimum modulation to be configured (in case adaptive modulation is not used, this value represents also the fixed modulation). The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."]
-},
-"modulation-max": {
-"id": "modulation-max",
-"is-read-only": false,
-"description": ["Maximum modulation to be configured. The value of this field is only relevant, if Adaptive Modulation has been activated. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."]
-},
-"xpic-is-on": {
-"id": "xpic-is-on",
-"is-read-only": false,
-"description": ["Activation of Cross Polarization Interference Cancelation shall be expressed as a 'true'. In case XPIC is not available for the current combination of channel bandwidth and modulation or the hardware in general, this parameter shall always be set to 'false'."]
-},
-"mimo-is-on": {
-"id": "mimo-is-on",
-"is-read-only": false,
-"description": ["Activation of Multiple Input Multiple Output (MIMO) shall be expressed as a 'true'."]
-},
-"alic-is-on": {
-"id": "alic-is-on",
-"is-read-only": false,
-"description": ["Activation of Adjacent Link Interference Cancelation (ALIC) shall be expressed as a 'true'."]
-},
-"atpc-is-on": {
-"id": "atpc-is-on",
-"is-read-only": false,
-"description": ["ATPC. Activation of Automated Transmit Power Control shall be expressed as a 'true'."]
-},
-"atpc-thresh-upper": {
-"id": "atpc-thresh-upper",
-"is-read-only": false,
-"description": ["If the receive level is higher than the upper threshold value, the transmitter is notified to decrease transmit power."]
-},
-"atpc-thresh-lower": {
-"id": "atpc-thresh-lower",
-"is-read-only": false,
-"description": ["If the receive level is lower than the lower threshold value, the transmitter is notified to increase transmit power."]
-},
-"atpc-tx-power-min": {
-"id": "atpc-tx-power-min",
-"is-read-only": false,
-"description": ["Transmit power, which is not to be undercut, while operating ATPC."]
-},
-"auto-freq-select-is-on": {
-"id": "auto-freq-select-is-on",
-"is-read-only": false,
-"description": ["Activation of automatically selecting the transmit frequency in unlicensed bands shall be expressed as a 'true'."]
-},
-"auto-freq-select-range": {
-"id": "auto-freq-select-range",
-"is-read-only": false,
-"description": ["Number of transmit channels (starting at the center frequency defined in txFrequency and with channel bandwidth according to txChannelBandwidth) that define the range within the transmit frequency can automatically been chosen."]
-},
-"modulation-is-on": {
-"id": "modulation-is-on",
-"is-read-only": false,
-"description": ["Maintenance Feature. De-activation of the modulation of the carrier signal for fault management shall be expressed as a 'false'."]
-},
-"encryption-is-on": {
-"id": "encryption-is-on",
-"is-read-only": false,
-"description": ["Activates encryption of the payload."]
-},
-"cryptographic-key": {
-"id": "cryptographic-key",
-"is-read-only": false,
-"description": ["Key for transforming plaintext into ciphertext data."]
-},
-"performance-monitoring-collection-is-on": {
-"id": "performance-monitoring-collection-is-on",
-"is-read-only": false,
-"description": ["Enables measurement, collection, storage and access to performance data."]
-},
-"threshold-cross-alarm-list": {
-"id": "threshold-cross-alarm-list",
-"is-read-only": false,
-"description": ["List of threshold cross alarms to be configured."]
-},
-"loop-back-kind-on": {
-"id": "loop-back-kind-on",
-"is-read-only": false,
-"description": ["Maintenance Feature. The currently configured type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."]
-},
-"maintenance-timer": {
-"id": "maintenance-timer",
-"is-read-only": false,
-"description": ["Time of existence of any maintenance configuration (e.g. the loop back of microwave header information). Valid values are defined in AirInterface::AirInterfaceCapability::maintenanceTimerRange."]
-},
-"problem-kind-severity-list": {
-"id": "problem-kind-severity-list",
-"is-read-only": false,
-"description": ["Severity of the problem to be configured."]
-},
-"air-interface-configuration-g": {
-"id": "air-interface-configuration-g",
-"is-read-only": false,
-"description": ["Configuration of the radio link."]
-},
-"tx-frequency-cur": {
-"id": "tx-frequency-cur",
-"is-read-only": false,
-"description": ["Center frequency of the currently operated transmit channel."]
-},
-"rx-frequency-cur": {
-"id": "rx-frequency-cur",
-"is-read-only": false,
-"description": ["Center frequency of the currently operated receive channel."]
-},
-"tx-level-cur": {
-"id": "tx-level-cur",
-"is-read-only": false,
-"description": ["Current transmit level."]
-},
-"rx-level-cur": {
-"id": "rx-level-cur",
-"is-read-only": false,
-"description": ["Current receive level."]
-},
-"transmission-mode-cur": {
-"id": "transmission-mode-cur",
-"is-read-only": false,
-"description": ["Currently operated transmission mode according to definitions in Capabilities."]
-},
-"modulation-cur": {
-"id": "modulation-cur",
-"is-read-only": false,
-"description": ["Currently operated modulation on transmit path. The modulation scheme shall be described by the number of states in the phase diagram (e.g. BPSK->'2' or 256QAM->'256'). Allowed values are defined in TypeDefinitions::transmissionModeType::modulationScheme."]
-},
-"code-rate-cur": {
-"id": "code-rate-cur",
-"is-read-only": false,
-"description": ["Code rate of the currently operated coding scheme (Net bit rate ? Gross bit rate ? code rate)."]
-},
-"received-signal-id": {
-"id": "received-signal-id",
-"is-read-only": false,
-"description": ["ID of the signal, which the receiver is currently synchronized on."]
-},
-"snir-cur": {
-"id": "snir-cur",
-"is-read-only": false,
-"description": ["Currently measured signal to (noise+interference) ratio."]
-},
-"xpd-cur": {
-"id": "xpd-cur",
-"is-read-only": false,
-"description": ["Currently measured cross polarization discrimination."]
-},
-"rf-temp-cur": {
-"id": "rf-temp-cur",
-"is-read-only": false,
-"description": ["Current temperature (in degree Celsius) of the radio module inside the outdoor unit."]
-},
-"last-status-change": {
-"id": "last-status-change",
-"is-read-only": false,
-"description": ["Time the Air Interface entered its current operational status."]
-},
-"radio-power-is-up": {
-"id": "radio-power-is-up",
-"is-read-only": false,
-"description": ["If the radio unit has power and is switched on, this shall be expressed as a 'true'."]
-},
-"link-is-up": {
-"id": "link-is-up",
-"is-read-only": false,
-"description": ["If connection is established to the remote site with the same linkID, this shall be expressed as a 'true'."]
-},
-"xpic-is-up": {
-"id": "xpic-is-up",
-"is-read-only": false,
-"description": ["If XPIC is currently actually working (not just configured), this shall be expressed as a 'true'."]
-},
-"mimo-is-up": {
-"id": "mimo-is-up",
-"is-read-only": false,
-"description": ["If MIMO is currently actually working (not just configured), this shall be expressed as a 'true'."]
-},
-"alic-is-up": {
-"id": "alic-is-up",
-"is-read-only": false,
-"description": ["If Adjacent Link Interference Cancelation (ALIC) is currently actually working (not just configured), this shall be expressed as a 'true'."]
-},
-"atpc-is-up": {
-"id": "atpc-is-up",
-"is-read-only": false,
-"description": ["If ATPC is currently actually working (not just configured), this shall be expressed as a 'true'."]
-},
-"auto-freq-select-is-up": {
-"id": "auto-freq-select-is-up",
-"is-read-only": false,
-"description": ["If automated frequency selection is currently actually working (not just configured), this shall be expressed as a 'true'."]
-},
-"loop-back-kind-up": {
-"id": "loop-back-kind-up",
-"is-read-only": false,
-"description": ["The currently active (not just configured) type of looping back of the air interface header shall be expressed here. The received header is returned to the remote site."]
-},
-"local-end-point-id": {
-"id": "local-end-point-id",
-"is-read-only": false,
-"description": ["The value of the localEndPointId is a vendor specific identifier of the air interface, used by the node to discover a microwave radio link."]
-},
-"remote-end-point-id": {
-"id": "remote-end-point-id",
-"is-read-only": false,
-"description": ["The value of the remoteEndPointId is a vendor specific identifier or the airinterface at the remote side, used to by the node to discover a microwave radio link."]
-},
-"air-interface-status-g": {
-"id": "air-interface-status-g",
-"is-read-only": false,
-"description": ["Measurements of current values on the air interface and operational status of the device."]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-current-problems-g": {
-"id": "air-interface-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
-},
-"air-interface-current-performance-g": {
-"id": "air-interface-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-historical-performances-g": {
-"id": "air-interface-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."]
-},
-"co-channel-group": {
-"id": "co-channel-group",
-"is-read-only": false,
-"description": ["none"]
-},
-"co-channel-group-id": {
-"id": "co-channel-group-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-list": {
-"id": "air-interface-list",
-"is-read-only": false,
-"description": ["List of air interfaces, which are part of the co-channel (XPIC, MIMO, ALIC) group."]
-},
-"sort-of-co-channel-group": {
-"id": "sort-of-co-channel-group",
-"is-read-only": false,
-"description": ["Type of group of air interfaces with the same transmit and receive frequency. The values shall be chosen from the following _list:'XPIC', 'MIMO', 'ALIC';"]
-},
-"logical-termination-point": {
-"id": "logical-termination-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"co-channel-group-g": {
-"id": "co-channel-group-g",
-"is-read-only": false,
-"description": ["Required for configuring XPIC, MIMO and ALIC."]
-},
-"role": {
-"id": "role",
-"is-read-only": false,
-"description": ["none"]
-},
-"endpoint": {
-"id": "endpoint",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-air-interface-hsb-end-point-pac": {
-"id": "mw-air-interface-hsb-end-point-pac",
-"is-read-only": false,
-"description": ["The EndPoint (EP) object class models the access to the FC function. Each EndPoint instance has a role (e.g., working, protection, protected, hub, spoke, leaf, root, etc.) with respect to the FC function. The association of the FC to LTPs is made via EndPoints (essentially the ports of the FC) where each EndPoint (EP) of the FC has a role in the context of the FC. The traffic forwarding between the associated End PointsEPs of the FC depends upon the type of FC and may be associated with FCSwitch object instances. In cases where there is protection conveys the protecting role of the access to the FC. The EP replaces the Protection Unit of a traditional protection model. It represents a protected (resilient/reliable) point or a protecting (unreliable working or protection) point."]
-},
-"prot-type": {
-"id": "prot-type",
-"is-read-only": false,
-"description": ["Indicates the protection scheme that is used for the ProtectionGroup."]
-},
-"air-interface-hsb-configuration-is-faulty-severity": {
-"id": "air-interface-hsb-configuration-is-faulty-severity",
-"is-read-only": false,
-"description": ["The level of severity of an airInterfaceHsbConfigurationIsFaulty alarm shall be chosen from an enumeration."]
-},
-"air-interface-hsb-is-partly-down-severity": {
-"id": "air-interface-hsb-is-partly-down-severity",
-"is-read-only": false,
-"description": ["The level of severity for one link out of the HSB configuration being down shall be chosen from an enumeration."]
-},
-"air-interface-hsb-is-down-severity": {
-"id": "air-interface-hsb-is-down-severity",
-"is-read-only": false,
-"description": ["The level of severity of the total HSB configuration being down shall be chosen from an enumeration."]
-},
-"fcswitch": {
-"id": "fcswitch",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-air-interface-hsb-fc-switch-pac": {
-"id": "mw-air-interface-hsb-fc-switch-pac",
-"is-read-only": false,
-"description": ["Represents and defines a protection switch structure encapsulated in the forwarding construct. Essentially performs the function of Protection Group. Associates to 2 or more Endpoints each playing the role of a Protection Unit. One or more protection EndPoints (standby/backup) provide protection for one or more working (i.e. regular/main/preferred) Endpoints where either protection or working can feed one or more protected Endpoint. May be used in revertive or non-revertive (symmetric) mode. When in revertive mode may define waitToRestore time. May be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 ane 1:1). May be lockout (prevented from switching), force switched or manual switched. Will indicate switch state and change of state."]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"air-interface-diversity-capability": {
-"id": "air-interface-diversity-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-configuration": {
-"id": "air-interface-diversity-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-status": {
-"id": "air-interface-diversity-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-current-problems": {
-"id": "air-interface-diversity-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-current-performance": {
-"id": "air-interface-diversity-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-historical-performances": {
-"id": "air-interface-diversity-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-air-interface-diversity-pac": {
-"id": "mw-air-interface-diversity-pac",
-"is-read-only": false,
-"description": ["none"]
-},
-"available-kinds-of-diversity": {
-"id": "available-kinds-of-diversity",
-"is-read-only": false,
-"description": ["Available types of diversity to be listed."]
-},
-"supported-alarm-list": {
-"id": "supported-alarm-list",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the vendor."]
-},
-"supported-alarms": {
-"id": "supported-alarms",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'airInterfaceDiversityConfigurationIsPartlyDown' (at least one air interface is down, but not all of them) and 'airInterfaceDiversityConfigurationIsDown' (all air interfaces are down). Further alarms might be added by the device. Names are to be separated by commas."]
-},
-"air-interface-diversity-capability-g": {
-"id": "air-interface-diversity-capability-g",
-"is-read-only": false,
-"description": ["Describes the capabilities in implementing different types of air interface diversity."]
-},
-"air-interface-diversity": {
-"id": "air-interface-diversity",
-"is-read-only": false,
-"description": ["Type of air interface diversity configured at the link."]
-},
-"air-interface-ltp-list": {
-"id": "air-interface-ltp-list",
-"is-read-only": false,
-"description": ["_multiplicity:2-ThisAirInterfaceDiversity::AirInterfaceDiversityConfiguration::airInterfaceDiversity::diversityType::numberOfAirInterfacesMax"]
-},
-"performance-monitoring-collection-is-on": {
-"id": "performance-monitoring-collection-is-on",
-"is-read-only": false,
-"description": ["Enables measurement, collection, storage and access to performance data."]
-},
-"threshold-cross-alarm-list": {
-"id": "threshold-cross-alarm-list",
-"is-read-only": false,
-"description": ["List of threshold cross alarms to be configured."]
-},
-"problem-kind-severity-list": {
-"id": "problem-kind-severity-list",
-"is-read-only": false,
-"description": ["Severity of the problem to be configured."]
-},
-"air-interface-diversity-configuration-g": {
-"id": "air-interface-diversity-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"snir-cur": {
-"id": "snir-cur",
-"is-read-only": false,
-"description": ["Currently measured signal to (noise+interference) ratio of the combined signals."]
-},
-"air-interface-diversity-status": {
-"id": "air-interface-diversity-status",
-"is-read-only": false,
-"description": ["Status of the air interface bundle."]
-},
-"last-status-change": {
-"id": "last-status-change",
-"is-read-only": false,
-"description": ["Time the Diversity Group entered its current operational status."]
-},
-"air-interface-diversity-status-g": {
-"id": "air-interface-diversity-status-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-current-problems-g": {
-"id": "air-interface-diversity-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
-},
-"air-interface-diversity-current-performance-g": {
-"id": "air-interface-diversity-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface diversity configuration at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"air-interface-diversity-historical-performances-g": {
-"id": "air-interface-diversity-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface diversity configuration for a pre-defined measurement interval."]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"pure-ethernet-structure-capability": {
-"id": "pure-ethernet-structure-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"pure-ethernet-structure-configuration": {
-"id": "pure-ethernet-structure-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"pure-ethernet-structure-status": {
-"id": "pure-ethernet-structure-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"pure-ethernet-structure-current-problems": {
-"id": "pure-ethernet-structure-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"pure-ethernet-structure-current-performance": {
-"id": "pure-ethernet-structure-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"pure-ethernet-structure-historical-performances": {
-"id": "pure-ethernet-structure-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-pure-ethernet-structure-pac": {
-"id": "mw-pure-ethernet-structure-pac",
-"is-read-only": false,
-"description": ["The pureEthernetStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting Ethernet traffic only."]
-},
-"structure-id": {
-"id": "structure-id",
-"is-read-only": false,
-"description": ["Identifies the Structure for bundling and container."]
-},
-"supported-alarm-list": {
-"id": "supported-alarm-list",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."]
-},
-"supported-alarms": {
-"id": "supported-alarms",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."]
-},
-"pure-ethernet-structure-capability-g": {
-"id": "pure-ethernet-structure-capability-g",
-"is-read-only": false,
-"description": ["Describes the logical structuring of the physical capacity provided by a pure Ethernet microwave device. Segmentation is not available. No fixed segment size. No TDM transport."]
-},
-"performance-monitoring-collection-is-on": {
-"id": "performance-monitoring-collection-is-on",
-"is-read-only": false,
-"description": ["Enables measurement, collection, storage and access to performance data."]
-},
-"problem-kind-severity-list": {
-"id": "problem-kind-severity-list",
-"is-read-only": false,
-"description": ["Severity of the type of problem to be configured."]
-},
-"pure-ethernet-structure-configuration-g": {
-"id": "pure-ethernet-structure-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"segment-status-list": {
-"id": "segment-status-list",
-"is-read-only": false,
-"description": ["Status of the Ethernet transport segment. Always just one segment."]
-},
-"last-status-change": {
-"id": "last-status-change",
-"is-read-only": false,
-"description": ["Time and date of the last update of the status information."]
-},
-"pure-ethernet-structure-status-g": {
-"id": "pure-ethernet-structure-status-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"pure-ethernet-structure-current-problems-g": {
-"id": "pure-ethernet-structure-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
-},
-"pure-ethernet-structure-current-performance-g": {
-"id": "pure-ethernet-structure-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the structure of an pure Ethernet microwave at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"pure-ethernet-structure-historical-performances-g": {
-"id": "pure-ethernet-structure-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the structure of an pure Ethernet microwave for a pre-defined measurement interval."]
-},
-"pure-ethernet": {
-"id": "pure-ethernet",
-"is-read-only": false,
-"description": ["Feature 'pure-ethernet' is mandatory for device types transporting pure Ethernet."]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"hybrid-mw-structure-capability": {
-"id": "hybrid-mw-structure-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"hybrid-mw-structure-configuration": {
-"id": "hybrid-mw-structure-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"hybrid-mw-structure-status": {
-"id": "hybrid-mw-structure-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"hybrid-mw-structure-current-problems": {
-"id": "hybrid-mw-structure-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"hybrid-mw-structure-current-performance": {
-"id": "hybrid-mw-structure-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"hybrid-mw-structure-historical-performances": {
-"id": "hybrid-mw-structure-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-hybrid-mw-structure-pac": {
-"id": "mw-hybrid-mw-structure-pac",
-"is-read-only": false,
-"description": ["The HybridMwStructure_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM and Ethernet traffic."]
-},
-"structure-id": {
-"id": "structure-id",
-"is-read-only": false,
-"description": ["Identifies the Structure for bundling and container."]
-},
-"supported-tdm-structure-types-list": {
-"id": "supported-tdm-structure-types-list",
-"is-read-only": false,
-"description": ["Lists the TDM frame types that are supported."]
-},
-"supported-alarm-list": {
-"id": "supported-alarm-list",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the vendor."]
-},
-"supported-alarms": {
-"id": "supported-alarms",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:non. Names are to be separated by commas. Further alarms might be added by the device."]
-},
-"hybrid-mw-structure-capability-g": {
-"id": "hybrid-mw-structure-capability-g",
-"is-read-only": false,
-"description": ["Describes the logical structuring of the physical capacity provided by a hybrid microwave device (TDM + Ethernet). Segmentation is available. TDM transport is available."]
-},
-"structure-kind": {
-"id": "structure-kind",
-"is-read-only": false,
-"description": ["TDM frame to be applied."]
-},
-"structure-type": {
-"id": "structure-type",
-"is-read-only": false,
-"description": ["TDM frame to be applied."]
-},
-"number-of-tdm-segments-to-be-reserved": {
-"id": "number-of-tdm-segments-to-be-reserved",
-"is-read-only": false,
-"description": ["Allows to configure the number of segments reserved for TDM frames of the type specified in HybridMwStructure::HybridMwStructureConfiguration::structureType"]
-},
-"performance-monitoring-collection-is-on": {
-"id": "performance-monitoring-collection-is-on",
-"is-read-only": false,
-"description": ["Enables measurement, collection, storage and access to performance data."]
-},
-"problem-kind-severity-list": {
-"id": "problem-kind-severity-list",
-"is-read-only": false,
-"description": ["Severity of the type of problem to be configured."]
-},
-"hybrid-mw-structure-configuration-g": {
-"id": "hybrid-mw-structure-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"segment-status-list": {
-"id": "segment-status-list",
-"is-read-only": false,
-"description": ["Status of each segment (all TDM and one Ethernet). Multiplicity = HybridMwStructure::StructureConfiguration::tdmReservedNumberOfSegments + 1"]
-},
-"last-status-change": {
-"id": "last-status-change",
-"is-read-only": false,
-"description": ["Time and date of the last update of the status information."]
-},
-"hybrid-mw-structure-status-g": {
-"id": "hybrid-mw-structure-status-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"hybrid-mw-structure-current-problems-g": {
-"id": "hybrid-mw-structure-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
-},
-"hybrid-mw-structure-current-performance-g": {
-"id": "hybrid-mw-structure-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the structure of a hybrid microwave at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"hybrid-mw-structure-historical-performances-g": {
-"id": "hybrid-mw-structure-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the structure of a hybrid microwave for a pre-defined measurement interval."]
-},
-"hybrid-microwave": {
-"id": "hybrid-microwave",
-"is-read-only": false,
-"description": ["Feature 'hybrid-microwave' is mandatory for device types transporting Ethernet + TDM."]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"ethernet-container-capability": {
-"id": "ethernet-container-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-configuration": {
-"id": "ethernet-container-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-status": {
-"id": "ethernet-container-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-current-problems": {
-"id": "ethernet-container-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-current-performance": {
-"id": "ethernet-container-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-historical-performances": {
-"id": "ethernet-container-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-ethernet-container-pac": {
-"id": "mw-ethernet-container-pac",
-"is-read-only": false,
-"description": ["none"]
-},
-"bundling-is-avail": {
-"id": "bundling-is-avail",
-"is-read-only": false,
-"description": ["This attribute has to be set on 'true', if the device allows combining resources from several air interfaces for transporting this Ethernet container."]
-},
-"packet-compression-is-avail": {
-"id": "packet-compression-is-avail",
-"is-read-only": false,
-"description": ["In case packet compression can be activated, but not configured to a certain type, packetCompressionAvail shall be set on 'true', but none of the compression level specific booleans."]
-},
-"layer2-compression-is-avail": {
-"id": "layer2-compression-is-avail",
-"is-read-only": false,
-"description": ["Packet compression on layer 2 available at the device."]
-},
-"vlan-compression-is-avail": {
-"id": "vlan-compression-is-avail",
-"is-read-only": false,
-"description": ["Packet compression on VLAN layer available at the device."]
-},
-"q-in-q-compression-is-avail": {
-"id": "q-in-q-compression-is-avail",
-"is-read-only": false,
-"description": ["Packet compression on layer of a second VLAN available at the device."]
-},
-"mpls-compression-is-avail": {
-"id": "mpls-compression-is-avail",
-"is-read-only": false,
-"description": ["Packet compression on mpls layer available at the device."]
-},
-"ipv4-compression-is-avail": {
-"id": "ipv4-compression-is-avail",
-"is-read-only": false,
-"description": ["Packet compression on layer 3 for IPv4 available at the device."]
-},
-"ipv6-compression-is-avail": {
-"id": "ipv6-compression-is-avail",
-"is-read-only": false,
-"description": ["Packet compression on layer 3 for IPv6 available at the device."]
-},
-"layer4-compression-is-avail": {
-"id": "layer4-compression-is-avail",
-"is-read-only": false,
-"description": ["Packet compression on layer 4 (TCP and UDP header) available at the device."]
-},
-"encryption-is-avail": {
-"id": "encryption-is-avail",
-"is-read-only": false,
-"description": ["Shall be marked 'true', if Ethernet payload encryption is available."]
-},
-"supported-alarm-list": {
-"id": "supported-alarm-list",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."]
-},
-"supported-alarms": {
-"id": "supported-alarms",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."]
-},
-"ethernet-container-capability-g": {
-"id": "ethernet-container-capability-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"container-id": {
-"id": "container-id",
-"is-read-only": false,
-"description": ["ContainterID in Netconf must be the same as EthernetPortID in OpenFlow so a connection can be made between the two items, which separately exist in the controller."]
-},
-"segments-id-list": {
-"id": "segments-id-list",
-"is-read-only": false,
-"description": ["Lists the segments used for transporting this Ethernet container. In case EthernetContainer::ContainerCapability::bundlingIsAvail==0, all TypeDefinitions::segmentIdType::structureId must be identical in the list."]
-},
-"packet-compression-is-on": {
-"id": "packet-compression-is-on",
-"is-read-only": false,
-"description": ["In case packet compression is activated, but no type is activated, it is assumed that the device chooses the optimum."]
-},
-"layer2-compression-is-on": {
-"id": "layer2-compression-is-on",
-"is-read-only": false,
-"description": ["Packet compression on layer 2 configured at the device."]
-},
-"vlan-compression-is-on": {
-"id": "vlan-compression-is-on",
-"is-read-only": false,
-"description": ["Packet compression on VLAN layer configured at the device."]
-},
-"q-in-q-compression-is-on": {
-"id": "q-in-q-compression-is-on",
-"is-read-only": false,
-"description": ["Packet compression on layer of a second VLAN configured at the device."]
-},
-"mpls-compression-is-on": {
-"id": "mpls-compression-is-on",
-"is-read-only": false,
-"description": ["Packet compression on MPLS layer configured at the device."]
-},
-"ipv4-compression-is-on": {
-"id": "ipv4-compression-is-on",
-"is-read-only": false,
-"description": ["Packet compression on layer 3 for IPv4 configured at the device."]
-},
-"ipv6-compression-is-on": {
-"id": "ipv6-compression-is-on",
-"is-read-only": false,
-"description": ["Packet compression on layer 3 for IPv6 configured at the device."]
-},
-"layer4-compression-is-on": {
-"id": "layer4-compression-is-on",
-"is-read-only": false,
-"description": ["Packet compression on layer 4 (TCP and UDP header) configured at the device."]
-},
-"encryption-is-on": {
-"id": "encryption-is-on",
-"is-read-only": false,
-"description": ["Activates encryption of the Ethernet payload."]
-},
-"cryptographic-key": {
-"id": "cryptographic-key",
-"is-read-only": false,
-"description": ["Key for transforming plaintext into cipher text data."]
-},
-"performance-monitoring-collection-is-on": {
-"id": "performance-monitoring-collection-is-on",
-"is-read-only": false,
-"description": ["Enables measurement, collection, storage and access to performance data."]
-},
-"problem-kind-severity-list": {
-"id": "problem-kind-severity-list",
-"is-read-only": false,
-"description": ["Severity of the problem to be configured."]
-},
-"ethernet-container-configuration-g": {
-"id": "ethernet-container-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"last-status-change": {
-"id": "last-status-change",
-"is-read-only": false,
-"description": ["Time the Container entered its current operational status."]
-},
-"ethernet-container-status-g": {
-"id": "ethernet-container-status-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-current-problems-g": {
-"id": "ethernet-container-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-current-performance-g": {
-"id": "ethernet-container-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the Ethernet container at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"ethernet-container-historical-performances-g": {
-"id": "ethernet-container-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the Ethernet container for a pre-defined measurement interval."]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"tdm-container-capability": {
-"id": "tdm-container-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-configuration": {
-"id": "tdm-container-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-status": {
-"id": "tdm-container-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-current-problems": {
-"id": "tdm-container-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-current-performance": {
-"id": "tdm-container-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-historical-performances": {
-"id": "tdm-container-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"mw-tdm-container-pac": {
-"id": "mw-tdm-container-pac",
-"is-read-only": false,
-"description": ["The TdmContainer_Pac and its attached classes MUST be provided on management interfaces of microwave devices, which are transporting TDM traffic."]
-},
-"supported-tdm-container-types-list": {
-"id": "supported-tdm-container-types-list",
-"is-read-only": false,
-"description": ["Lists the TDM containers that are supported."]
-},
-"supported-alarm-list": {
-"id": "supported-alarm-list",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the vendor."]
-},
-"supported-alarms": {
-"id": "supported-alarms",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'framingIsFaulty' and 'containerIsDown'. Further alarms might be added by the device."]
-},
-"tdm-container-capability-g": {
-"id": "tdm-container-capability-g",
-"is-read-only": false,
-"description": ["Bundling is not available."]
-},
-"container-id": {
-"id": "container-id",
-"is-read-only": false,
-"description": ["ContainterID in Netconf must be the same as TDM Flow ID so a connection can be made between the two items, which separately exist in the controller."]
-},
-"container-type": {
-"id": "container-type",
-"is-read-only": false,
-"description": ["Type of TDM container."]
-},
-"segment-id": {
-"id": "segment-id",
-"is-read-only": false,
-"description": ["Multiplicity = 1; One segment per TDM container; Type of segment must match type of container;"]
-},
-"performance-monitoring-collection-is-on": {
-"id": "performance-monitoring-collection-is-on",
-"is-read-only": false,
-"description": ["Enables measurement, collection, storage and access to performance data."]
-},
-"problem-kind-severity-list": {
-"id": "problem-kind-severity-list",
-"is-read-only": false,
-"description": ["Severity of the problem to be configured."]
-},
-"tdm-container-configuration-g": {
-"id": "tdm-container-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"last-status-change": {
-"id": "last-status-change",
-"is-read-only": false,
-"description": ["Time the Container entered its current operational status."]
-},
-"tdm-container-status-g": {
-"id": "tdm-container-status-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-current-problems-g": {
-"id": "tdm-container-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
-},
-"tdm-container-current-performance-g": {
-"id": "tdm-container-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the TDM container at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"tdm-container-historical-performances-g": {
-"id": "tdm-container-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the TDM container for a pre-defined measurement interval."]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"wirebased-interface-capability": {
-"id": "wirebased-interface-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"wirebased-interface-configuration": {
-"id": "wirebased-interface-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"wirebased-interface-status": {
-"id": "wirebased-interface-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"wirebased-interface-current-problems": {
-"id": "wirebased-interface-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"wirebased-interface-current-performance": {
-"id": "wirebased-interface-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"wirebased-interface-historical-performances": {
-"id": "wirebased-interface-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"wire-interface-pac": {
-"id": "wire-interface-pac",
-"is-read-only": false,
-"description": ["none"]
-},
-"available-mau-list": {
-"id": "available-mau-list",
-"is-read-only": false,
-"description": ["List of Medium Attachment Units (MAUs) that are available for being selected. If rate and service configuration (e.g. SFF-8079) are not supported, the MAU determined by hardware shall be described."]
-},
-"auto-pmd-negotiation-is-avail": {
-"id": "auto-pmd-negotiation-is-avail",
-"is-read-only": false,
-"description": ["Parameter 1 = Indicates that device is supporting Auto-negotiation"]
-},
-"auto-pmd-negotiation-max-is-avail": {
-"id": "auto-pmd-negotiation-max-is-avail",
-"is-read-only": false,
-"description": ["1 = Indicates that device is supporting definition of the maximum speed/Medium Attached Unit (MAU) automatically chosen when (autoNegotiationIsOn=1)"]
-},
-"supported-loop-back-kind-list": {
-"id": "supported-loop-back-kind-list",
-"is-read-only": false,
-"description": ["List of supported kinds of looping back of header information to the remote site. 802.3 45.2.1.12.1 PMA remote loopback ability"]
-},
-"maintenance-timer-range": {
-"id": "maintenance-timer-range",
-"is-read-only": false,
-"description": ["MW IM Available time periods for maintenance configurations (e.g. the loop back) to be described. Concrete values shall be separated by commas (e.g. '10, 60, 360'). Ranges shall be expressed as two values separated by a minus (e.g. '10-360')."]
-},
-"supported-alarm-list": {
-"id": "supported-alarm-list",
-"is-read-only": false,
-"description": ["Available alarms to be listed. Mandatory:'txFault', 'rxLos', 'tempHigh', 'tempLow', 'rxLevelHigh', 'rxLevelLow'. Optional:'vccHigh', 'vccLow', 'txBiasHigh', 'txBiasLow', 'txPowerHigh', 'txPowerLow', 'laserTempHigh', 'laserTempLow', 'tecCurrentHigh', 'tecCurrentLow'. Further alarms might be added by the device. Names are to be separated by commas."]
-},
-"wire-interface-capability-g": {
-"id": "wire-interface-capability-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"wire-interface-name": {
-"id": "wire-interface-name",
-"is-read-only": false,
-"description": ["Text field for the wire interface being named by the operator. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network Parameter"]
-},
-"remote-wire-interface-name": {
-"id": "remote-wire-interface-name",
-"is-read-only": false,
-"description": ["Learning from MW IM Text field for defining the wire interface this one is connected with. Ideally used for entering unique numbers or names for unambiguously identifying the connection within the network"]
-},
-"interface-is-on": {
-"id": "interface-is-on",
-"is-read-only": false,
-"description": ["1 = Activation of the interface (it gets powered and can be managed even if the transceiver is not yet transmitting or receiving). In case there is no Medium Attachment Unit (MAU) (e.g. no SFP in the cage) SETting (interfaceIsOn=1) must be ignored and GETing must return (interfaceIsOn=0) 802.3 according 30.3.2.2.1 acPhyAdminControl"]
-},
-"transceiver-is-on-list": {
-"id": "transceiver-is-on-list",
-"is-read-only": false,
-"description": ["802.3 22.?.? and additionally 802.3 45.2.1.8 PMD transmit disable register (Register 1.9) 1 = Activation of the transmitter and receiver (e.g. laser) of the PHY; transceiverIsOnList[0]:total interface; transceiverIsOnList[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"]
-},
-"auto-pmd-negotiation-is-on": {
-"id": "auto-pmd-negotiation-is-on",
-"is-read-only": false,
-"description": ["Parameter 1 = Auto-negotiation is switched on"]
-},
-"fixed-pmd": {
-"id": "fixed-pmd",
-"is-read-only": false,
-"description": ["If (autoPmdNegotiationIsOn=0) configuration of the concrete kind of Physical Medium Dependent (PMD). If (autoNegotiationIsOn=1) value of this field becomes irrelevant"]
-},
-"auto-pmd-negotiation-max": {
-"id": "auto-pmd-negotiation-max",
-"is-read-only": false,
-"description": ["Parameter If (autoNegotiationIsOn=1) AND (autoNegotiationMauMaxIsAvail=1) configuration of the maximum speed/Physical Medium Dependent (PMD), which is automatically chosen by Auto-negotiation"]
-},
-"auto-signal-ordering-is-on": {
-"id": "auto-signal-ordering-is-on",
-"is-read-only": false,
-"description": ["1 = e.g. auto-MDI-X is switched on"]
-},
-"fixed-signal-ordering": {
-"id": "fixed-signal-ordering",
-"is-read-only": false,
-"description": ["If (autoSignalOrderingIsOn=0) configuration of the concrete kind of signal ordering on the media (e.g. MDI, or MDI-X). If (autoSignalOrderingIsOn=1) value of this field becomes irrelevant"]
-},
-"short-reach-mode-is-on": {
-"id": "short-reach-mode-is-on",
-"is-read-only": false,
-"description": ["Activation of the Short Reach Mode for 10GBASE-T according to 802.3 45.2.1.64"]
-},
-"unidirectional-operation-is-on": {
-"id": "unidirectional-operation-is-on",
-"is-read-only": false,
-"description": ["If (autoNegotiationIsOn=1) OR manualDuplexSelection=0 (=half duplex), this bit is ignored. When autoNegotiationIsOn=0 AND manualDuplexSelection=1 (=full duplex): 1 = Enable transmit from media independent interface regardless of whether the PHY has determined that a valid link has been established, 0 = Enable transmit from media independent interface only when the PHY has determined that a valid link has been established 802.3 Parameter"]
-},
-"wavelength-list": {
-"id": "wavelength-list",
-"is-read-only": false,
-"description": ["Wavelength of the signal of laser in pico meter; multiplicity=0..3 for 10GBASE-LX4 according to 802.3 53.5 SFF-8690"]
-},
-"temperature-high-threshold": {
-"id": "temperature-high-threshold",
-"is-read-only": false,
-"description": ["Threshold for alarming high temperature values. Will move to somewhere in the Physical Segment of the Core IM"]
-},
-"temperature-low-threshold": {
-"id": "temperature-low-threshold",
-"is-read-only": false,
-"description": ["Threshold for alarming low temperature values. Will move to somewhere in the Physical Segment of the Core IM"]
-},
-"rxlevel-high-threshold": {
-"id": "rxlevel-high-threshold",
-"is-read-only": false,
-"description": ["Threshold for alarming high RX levels."]
-},
-"rxlevel-low-threshold": {
-"id": "rxlevel-low-threshold",
-"is-read-only": false,
-"description": ["Threshold for alarming low RX levels."]
-},
-"loop-back-kind-on": {
-"id": "loop-back-kind-on",
-"is-read-only": false,
-"description": ["Parameter 802.3 according 22.2.4.1.2 Loopback Maintenance Feature. The currently configured type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site. Activation of local loopback mode on physical layer"]
-},
-"isolation-is-on": {
-"id": "isolation-is-on",
-"is-read-only": false,
-"description": ["1 = Activation of the separation of the PHY from higher network layers 802.3"]
-},
-"restart-pmd-negotiation-is-on": {
-"id": "restart-pmd-negotiation-is-on",
-"is-read-only": false,
-"description": ["Restarts the auto negotiation process 802.3"]
-},
-"reset-mau-is-on": {
-"id": "reset-mau-is-on",
-"is-read-only": false,
-"description": ["802.3 Resets the entire Medium Access Unit (MAU)"]
-},
-"maintenance-timer": {
-"id": "maintenance-timer",
-"is-read-only": false,
-"description": ["Parameter and MW IM Time of existence of any maintenance configuration (e.g. the loop back). Valid values are defined in WireInterface::WireInterfaceCapability::maintenanceTimerRange"]
-},
-"problem-kind-severity-list": {
-"id": "problem-kind-severity-list",
-"is-read-only": false,
-"description": ["Severity of the problem to be configured."]
-},
-"wire-interface-configuration-g": {
-"id": "wire-interface-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"interface-is-up": {
-"id": "interface-is-up",
-"is-read-only": false,
-"description": ["802.3 according 30.3.2.1.7 aPhyAdminState 1 = A Physical layer entity (PHY) exists (including Medium Attachment Unit (e.g. SFP) ) and it is powered and can be managed"]
-},
-"receive-signal-is-detected": {
-"id": "receive-signal-is-detected",
-"is-read-only": false,
-"description": ["802.3 45.2.1.9 PMD receive signal detect 1 = Receiver (e.g. laser) detects signal; receiveSignalIsDetected[0]:total interface; receiveSignalIsDetected[1..10] different lanes of a multilane Medium Attachment Unit (MAU)"]
-},
-"pmd-is-up": {
-"id": "pmd-is-up",
-"is-read-only": false,
-"description": ["Inverse of 802.3 45.2.1.2.3 Fault (1.1.7) If (interfaceIsUp=1) BUT 0 = there is a fault in either transmit or receive path"]
-},
-"pmd-cur": {
-"id": "pmd-cur",
-"is-read-only": false,
-"description": ["Indicates the kind of Physical Medium Dependent (PMD) currently operated at this interface"]
-},
-"signal-ordering-kind-cur": {
-"id": "signal-ordering-kind-cur",
-"is-read-only": false,
-"description": ["Reference on a SignalOrderingType for expressing the currently active way of ordering the signals on the physical medium. Must contain a value as defined in TypeDefinitions::SignalOrderingType::signalOrderingKindName"]
-},
-"eee-is-up": {
-"id": "eee-is-up",
-"is-read-only": false,
-"description": ["1 = Energy Efficient Ethernet is supported at both ends of the link and it is activated"]
-},
-"link-is-up": {
-"id": "link-is-up",
-"is-read-only": false,
-"description": ["Parameter 1 = (transceiverIsUp=1) AND communication is established to the remote site"]
-},
-"link-is-idle": {
-"id": "link-is-idle",
-"is-read-only": false,
-"description": ["1 = (linkIsUp=1) AND (eeeIsAvail=1) AND (eeeIsOn=1) AND link is currently in idle mode. If Energy Efficient Ethernet is not supported or switched off, this attribute must be 0."]
-},
-"tx-level-cur": {
-"id": "tx-level-cur",
-"is-read-only": false,
-"description": ["Current transmit power"]
-},
-"rx-level-cur": {
-"id": "rx-level-cur",
-"is-read-only": false,
-"description": ["Current receive power; Also used for receive signal power measured at the Medium Dependent Interface (MDI) of 10GBASE-T during training as described in 802.3 55.4.3.1"]
-},
-"temp-cur": {
-"id": "temp-cur",
-"is-read-only": false,
-"description": ["Current temperature (in degree Celsius) inside the transceiver To be moved to CoreModel::CorePhysicalModel-Initial::EquipmentDetail::ObjectClasses::DynamicDetails::PhysicalProperties"]
-},
-"loop-back-kind-up": {
-"id": "loop-back-kind-up",
-"is-read-only": false,
-"description": ["Paramter and MW IM The currently active (not just configured) type of looping back of the wire interface header shall be expressed here. The received header is returned to the remote site."]
-},
-"wire-interface-status-g": {
-"id": "wire-interface-status-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"wire-interface-current-problems-g": {
-"id": "wire-interface-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
-},
-"wire-interface-current-performance-g": {
-"id": "wire-interface-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"wire-interface-historical-performances-g": {
-"id": "wire-interface-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."]
-},
-"sequence-number": {
-"id": "sequence-number",
-"is-read-only": false,
-"description": ["Unique sequence number of the current problem object."]
-},
-"time-stamp": {
-"id": "time-stamp",
-"is-read-only": false,
-"description": ["Time and date of the problem."]
-},
-"problem-severity": {
-"id": "problem-severity",
-"is-read-only": false,
-"description": ["Severity of the alarm."]
-},
-"mw-current-problem-g": {
-"id": "mw-current-problem-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"object-creation-notification": {
-"id": "object-creation-notification",
-"is-read-only": false,
-"description": ["none"]
-},
-"counter": {
-"id": "counter",
-"is-read-only": false,
-"description": ["Counts object creation notifications."]
-},
-"time-stamp": {
-"id": "time-stamp",
-"is-read-only": false,
-"description": ["none"]
-},
-"object-id-ref": {
-"id": "object-id-ref",
-"is-read-only": false,
-"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
-},
-"object-type": {
-"id": "object-type",
-"is-read-only": false,
-"description": ["Type of Object to be chosen from the following list of values: 'MW_AirInterface_Pac', 'MW_AirInterfaceDiversity_Pac', 'MW_Structure_Pac', 'MW_PureEthernetStructure_Pac', 'MW_HybridMwStructure_Pac', 'MW_Container_Pac', 'MW_EthernetContainer_Pac' or 'MW_TdmContainer_Pac'."]
-},
-"object-creation-notification-g": {
-"id": "object-creation-notification-g",
-"is-read-only": false,
-"description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac has to be instancieted in the controller."]
-},
-"object-deletion-notification": {
-"id": "object-deletion-notification",
-"is-read-only": false,
-"description": ["none"]
-},
-"counter": {
-"id": "counter",
-"is-read-only": false,
-"description": ["Counts object deletion notifications."]
-},
-"time-stamp": {
-"id": "time-stamp",
-"is-read-only": false,
-"description": ["none"]
-},
-"object-id-ref": {
-"id": "object-id-ref",
-"is-read-only": false,
-"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
-},
-"object-deletion-notification-g": {
-"id": "object-deletion-notification-g",
-"is-read-only": false,
-"description": ["To be sent when a new MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac instance has to be deleted in the controller."]
-},
-"attribute-value-changed-notification": {
-"id": "attribute-value-changed-notification",
-"is-read-only": false,
-"description": ["none"]
-},
-"counter": {
-"id": "counter",
-"is-read-only": false,
-"description": ["Counts attribute value changed notifications."]
-},
-"time-stamp": {
-"id": "time-stamp",
-"is-read-only": false,
-"description": ["none"]
-},
-"object-id-ref": {
-"id": "object-id-ref",
-"is-read-only": false,
-"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
-},
-"attribute-name": {
-"id": "attribute-name",
-"is-read-only": false,
-"description": ["Name of the attribute that has been changed."]
-},
-"new-value": {
-"id": "new-value",
-"is-read-only": false,
-"description": ["Attribute value converted to a string (xml, json, ...)"]
-},
-"attribute-value-changed-notification-g": {
-"id": "attribute-value-changed-notification-g",
-"is-read-only": false,
-"description": ["To be sent when an attribute has changed and one or more controllers have to update their data."]
-},
-"problem-notification": {
-"id": "problem-notification",
-"is-read-only": false,
-"description": ["none"]
-},
-"counter": {
-"id": "counter",
-"is-read-only": false,
-"description": ["Counts problem notifications"]
-},
-"time-stamp": {
-"id": "time-stamp",
-"is-read-only": false,
-"description": ["none"]
-},
-"object-id-ref": {
-"id": "object-id-ref",
-"is-read-only": false,
-"description": ["ID of the affected MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
-},
-"problem": {
-"id": "problem",
-"is-read-only": false,
-"description": ["Name of the problem according to AirInterface::AirInterfaceCapability::supportedAlarms or AirInterfaceDiversity::AirInterfaceDiversityCapability::supportedAlarms or Structure::StructureCapability::supportedAlarms or PureEthernetStructure::PureEthernetStructureCapability::supportedAlarms or HybridMwStructure::HybridMwStructureCapability::supportedAlarms or Container::ContainerCapability::supportedAlarms or EthernetContainer::EthernetContainerCapability::supportedAlarms or TdmContainer::TdmContainerCapability::supportedAlarms."]
-},
-"severity": {
-"id": "severity",
-"is-read-only": false,
-"description": ["Severity of the problem according to AirInterface::AirInterfaceConfiguration::problemSeverityList, AirInterfaceDiversity::AirInterfaceDiversityConfiguration::problemSeverityList, Structure::StructureConfiguration::problemSeverityList, PureEthernetStructure::PureEthernetStructureConfiguration::problemSeverityList, HybridMwStructure::HybridMwStructureConfiguration::problemSeverityList, Container::ContainerConfiguration::problemSeverityList, EthernetContainer::EthernetContainerConfiguration::problemSeverityList or TdmContainer::TdmContainerConfiguration::problemSeverityList"]
-},
-"problem-notification-g": {
-"id": "problem-notification-g",
-"is-read-only": false,
-"description": ["To be sent when a problem occurs at a MW_AirInterface_Pac, MW_AirInterfaceDiversity_Pac, MW_Structure_Pac, MW_PureEthernetStructure_Pac, MW_HybridMwStructure_Pac, MW_Container_Pac, MW_EthernetContainer_Pac or MW_TdmContainer_Pac."]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json
deleted file mode 100644
index 5d3014f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.schema-information.json
+++ /dev/null
@@ -1,337 +0,0 @@
-{
- "schema-information": {
-  "network-element-pac": {
-   "id": "network-element-pac",
-   "uml-id": "_RamCUPaMEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "NetworkElement_Pac"
-  },
-  "network-element": {
-   "id": "network-element",
-   "uml-id": "_5z06cPaNEeaW9u5N6usiTA",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel/CoreModel.uml#_oGqnr1LNEeO75dO39GbF8Q",
-   "order-number": 1,
-   "is-read-only": false,
-   "uml-name": "_networkElement"
-  },
-  "network-element-capability": {
-   "id": "network-element-capability",
-   "uml-id": "_1_TVYPaMEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "NetworkElementCapability"
-  },
-  "network-element-configuration": {
-   "id": "network-element-configuration",
-   "uml-id": "_Pu6HIPaNEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "NetworkElementConfiguration"
-  },
-  "network-element-status": {
-   "id": "network-element-status",
-   "uml-id": "_g5u0YPaNEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "NetworkElementStatus"
-  },
-  "network-element-current-problems": {
-   "id": "network-element-current-problems",
-   "uml-id": "_Pu6HIfaNEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "NetworkElementCurrentProblems"
-  },
-  "supported-alarms": {
-   "id": "supported-alarms",
-   "uml-id": "_444DuBd_EeegALpYen9G6g",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "Available alarms to be listed. Names are to be separated by commas."
-   ],
-   "uml-name": "supportedAlarms",
-   "controlType": "text"
-  },
-  "problem-type-severity": {
-   "id": "problem-type-severity",
-   "uml-id": "_rvDABPasEeaW9u5N6usiTA",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel-MicrowaveTransportNetwork/MicrowaveModel.uml#_eIml0JH1EeWUdbnmmNiTAA",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "Severity of this type of alarm."
-   ],
-   "uml-name": "problemTypeSeverity"
-  },
-  "trigger-refresh": {
-   "id": "trigger-refresh",
-   "uml-id": "_F6C-8Pm7EeaOH6heSczBpQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Boolean",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "A trigger to instuct the netconf server to refresh its internal database/cache. It is primary used for alarms status, but could used for anything else too. It is assumed that the refresh mechanismn takes somes time. In order to indictate the process to the controller a refreshStatus attribute is used."
-   ],
-   "uml-name": "triggerRefresh",
-   "controlType": "checkbox"
-  },
-  "refresh-status": {
-   "id": "refresh-status",
-   "uml-id": "_w0x8wPm3EeaOH6heSczBpQ",
-   "uml-type": "ownedAttribute",
-   "type": "_7HZcEPm3EeaOH6heSczBpQ",
-   "order-number": 1,
-   "is-read-only": true,
-   "uml-name": "refreshStatus",
-   "controlType": [
-    "done",
-    "processing"
-   ]
-  },
-  "current-problem-list": {
-   "id": "current-problem-list",
-   "uml-id": "_444DwRd_EeegALpYen9G6g",
-   "uml-type": "ownedAttribute",
-   "type": "_TBaooPasEeaW9u5N6usiTA",
-   "order-number": 1,
-   "is-read-only": true,
-   "uml-name": "currentProblemList"
-  },
-  "equipment-pac": {
-   "id": "equipment-pac",
-   "uml-id": "_VtO8MPaMEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "Equipment_Pac"
-  },
-  "equipment": {
-   "id": "equipment",
-   "uml-id": "_92PqMfaREeaW9u5N6usiTA",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel/CoreModel.uml#_8SXNej-HEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "_equipment"
-  },
-  "equipment-capability": {
-   "id": "equipment-capability",
-   "uml-id": "_g5u0YfaNEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EquipmentCapability"
-  },
-  "equipment-configuration": {
-   "id": "equipment-configuration",
-   "uml-id": "_OGWN4PaNEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EquipmentConfiguration"
-  },
-  "equipment-status": {
-   "id": "equipment-status",
-   "uml-id": "_gJH6APaREeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EquipmentStatus"
-  },
-  "equipment-current-problems": {
-   "id": "equipment-current-problems",
-   "uml-id": "_kRHqIPaREeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EquipmentCurrentProblems"
-  },
-  "holder-pac": {
-   "id": "holder-pac",
-   "uml-id": "_dECKoPaMEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "Holder_Pac"
-  },
-  "holder": {
-   "id": "holder",
-   "uml-id": "_TNk0IfaSEeaW9u5N6usiTA",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel/CoreModel.uml#_8SXNjj-HEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "_holder"
-  },
-  "holder-capability": {
-   "id": "holder-capability",
-   "uml-id": "_gtTvsPaSEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "HolderCapability"
-  },
-  "holder-configuration": {
-   "id": "holder-configuration",
-   "uml-id": "_g8TN8PaSEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "HolderConfiguration"
-  },
-  "holder-status": {
-   "id": "holder-status",
-   "uml-id": "_hDSmwPaSEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "HolderStatus"
-  },
-  "holder-current-problems": {
-   "id": "holder-current-problems",
-   "uml-id": "_hJQE0PaSEeaW9u5N6usiTA",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "HolderCurrentProblems"
-  },
-  "connector-pac": {
-   "id": "connector-pac",
-   "uml-id": "_444DsRd_EeegALpYen9G6g",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "Connector_Pac"
-  },
-  "connector": {
-   "id": "connector",
-   "uml-id": "_eDZ5QBeDEeegALpYen9G6g",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel/CoreModel.uml#_8SXNcD-HEeaRI-H69PghuA",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "_connector"
-  },
-  "connector-capability": {
-   "id": "connector-capability",
-   "uml-id": "_444Dtxd_EeegALpYen9G6g",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "ConnectorCapability"
-  },
-  "connector-configuration": {
-   "id": "connector-configuration",
-   "uml-id": "_444Duhd_EeegALpYen9G6g",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "ConnectorConfiguration"
-  },
-  "connector-status": {
-   "id": "connector-status",
-   "uml-id": "_444Dvxd_EeegALpYen9G6g",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "ConnectorStatus"
-  },
-  "connector-current-problems": {
-   "id": "connector-current-problems",
-   "uml-id": "_444DwBd_EeegALpYen9G6g",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "ConnectorCurrentProblems"
-  },
-  "remote-end-point": {
-   "id": "remote-end-point",
-   "uml-id": "_RDCPsBeCEeegALpYen9G6g",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 2,
-   "is-read-only": false,
-   "description": [
-    "A network wide identifier of the remote connector. The value is used for topology discovery. Please see also ConnectorStatus::localEndPoint."
-   ],
-   "uml-name": "remoteEndPoint",
-   "controlType": "text"
-  },
-  "local-end-point": {
-   "id": "local-end-point",
-   "uml-id": "_NZGKABeBEeegALpYen9G6g",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "A network wide global identifier of the this connector, which can be used to discover the physical connectivitiy. The value should contain the network element name, because the network element software can assume that the network element name is unique in the network. The value should be formated: <connector:uuid>@<network-element-name> Please see also ConnectorConfiguration::remoteEndPoint"
-   ],
-   "uml-name": "localEndPoint",
-   "controlType": "text"
-  },
-  "current-problem-type": {
-   "id": "current-problem-type",
-   "uml-id": "_TBaooPasEeaW9u5N6usiTA",
-   "uml-type": "uml:DataType",
-   "uml-name": "CurrentProblemType"
-  },
-  "problem-name": {
-   "id": "problem-name",
-   "uml-id": "_0XQ-UvmyEeaOH6heSczBpQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": true,
-   "description": [
-    "Name of the alarm according capability::supportedAlarms."
-   ],
-   "uml-name": "problemName",
-   "controlType": "text"
-  },
-  "network-element-current-problem-type": {
-   "id": "network-element-current-problem-type",
-   "uml-id": "_0XQ-UPmyEeaOH6heSczBpQ",
-   "uml-type": "uml:DataType",
-   "uml-name": "NetworkElementCurrentProblemType"
-  },
-  "object-reference": {
-   "id": "object-reference",
-   "uml-id": "_BW8g0PmzEeaOH6heSczBpQ",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 2,
-   "is-read-only": true,
-   "description": [
-    "An explaining string of the related object class. This is necesseary, because the current problem list of the NetworkElement object class acts as a container for all alarms, where its object classes are not modeled."
-   ],
-   "uml-name": "objectReference",
-   "controlType": "text"
-  },
-  "problem-severity-type": {
-   "id": "problem-severity-type",
-   "uml-id": "_rvDAAPasEeaW9u5N6usiTA",
-   "uml-type": "uml:DataType",
-   "uml-name": "ProblemSeverityType"
-  },
-  "problem-type-name": {
-   "id": "problem-type-name",
-   "uml-id": "_rvDAAfasEeaW9u5N6usiTA",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#String",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "description": [
-    "Name of the alarm according to Capability::supportedAlarms"
-   ],
-   "uml-name": "problemTypeName",
-   "controlType": "text"
-  },
-  "7-h-zc-e-pm3-eea-oh6-he-scz-bp-q": {
-   "id": "7-h-zc-e-pm3-eea-oh6-he-scz-bp-q",
-   "uml-id": "_7HZcEPm3EeaOH6heSczBpQ",
-   "enum": [
-    "DONE",
-    "PROCESSING"
-   ],
-   "is-read-only": false,
-   "uml-name": "_7HZcEPm3EeaOH6heSczBpQ"
-  }
- }
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json
deleted file mode 100755
index ae603d5..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-core-model-conditional-packages.yin.json
+++ /dev/null
@@ -1,79 +0,0 @@
-{
-	"module": {
-		"name": "onf-core-model-conditional-packages",
-		"onf-core-model-conditional-packages": {
-			"equipment-pac": {
-				"type": "list",
-				"key": "equipment",
-				"equipment-capability": {
-					"name": "equipment-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"equipment-configuration": {
-					"name": "equipment-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"equipment-status": {
-					"name": "equipment-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"equipment-current-problems": {
-					"name": "equipment-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				}
-			},
-			"holder-pac": {
-				"type": "list",
-				"key": "holder",
-				"holder-capability": {
-					"name": "holder-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"holder-configuration": {
-					"name": "holder-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"holder-status": {
-					"name": "holder-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"holder-current-problems": {
-					"name": "holder-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				}
-			},
-			"connector-pac": {
-				"type": "list",
-				"key": "connector",
-				"connector-capability": {
-					"name": "connector-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"connector-configuration": {
-					"name": "connector-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"connector-status": {
-					"name": "connector-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"connector-current-problems": {
-					"name": "connector-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json
deleted file mode 100644
index 50a8d3b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.schema-information.json
+++ /dev/null
@@ -1,76 +0,0 @@
-{
- "schema-information": {
-  "ethernet-pac": {
-   "id": "ethernet-pac",
-   "uml-id": "_fytUABOvEeeV4YL-goyoXw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "Ethernet_Pac"
-  },
-  "layer-protocol": {
-   "id": "layer-protocol",
-   "uml-id": "_D0ijgBOwEeeV4YL-goyoXw",
-   "uml-type": "ownedAttribute",
-   "type": "../OnfModel/CoreModel.uml#_gROecFYXEeOVGaP4lO41SQ",
-   "order-number": 1,
-   "is-read-only": false,
-   "is-key": 1,
-   "uml-name": "_layerProtocol"
-  },
-  "ethernet-capability": {
-   "id": "ethernet-capability",
-   "uml-id": "_1ukHUBOvEeeV4YL-goyoXw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetCapability"
-  },
-  "ethernet-configuration": {
-   "id": "ethernet-configuration",
-   "uml-id": "_mZ64kBOvEeeV4YL-goyoXw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetConfiguration"
-  },
-  "ethernet-status": {
-   "id": "ethernet-status",
-   "uml-id": "_3WQd4BOvEeeV4YL-goyoXw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetStatus"
-  },
-  "ethernet-current-problems": {
-   "id": "ethernet-current-problems",
-   "uml-id": "_-VkZYBOvEeeV4YL-goyoXw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetCurrentProblems"
-  },
-  "ethernet-current-performance": {
-   "id": "ethernet-current-performance",
-   "uml-id": "_4nyXMBOvEeeV4YL-goyoXw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetCurrentPerformance"
-  },
-  "ethernet-historical-performances": {
-   "id": "ethernet-historical-performances",
-   "uml-id": "_A2670BOwEeeV4YL-goyoXw",
-   "uml-type": "uml:Class",
-   "is-read-only": false,
-   "uml-name": "EthernetHistoricalPerformances"
-  },
-  "vlan-id": {
-   "id": "vlan-id",
-   "uml-id": "_14axcBOwEeeV4YL-goyoXw",
-   "uml-type": "ownedAttribute",
-   "type": "pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#Integer",
-   "order-number": 1,
-   "is-read-only": false,
-   "description": [
-    "value = 0: frames on ingress must be untagged, frames on egress get untagged; value = any other positive integer < 4096: frames on ingress must be tagged with this VLAN ID, frames on egress either already have or get this VLAN ID attached;"
-   ],
-   "uml-name": "vlanId",
-   "controlType": "number"
-  }
- }
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json
deleted file mode 100755
index 67cedf4..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ethernet-conditional-packages.yin.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-	"module": {
-		"name": "onf-ethernet-conditional-packages",
-		"onf-ethernet-conditional-packages": {
-			"ethernet-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"ethernet-capability": {
-					"name": "ethernet-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"ethernet-configuration": {
-					"name": "ethernet-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"ethernet-status": {
-					"name": "ethernet-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"ethernet-current-problems": {
-					"name": "ethernet-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"ethernet-current-performance": {
-					"name": "ethernet-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"ethernet-historical-performances": {
-					"name": "ethernet-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json
deleted file mode 100644
index 5c6e41a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/onf-ptp-dataset.schema-information.json
+++ /dev/null
@@ -1,435 +0,0 @@
-{
-    "schema-information": {
-        "instance-number": {
-            "id": "instance-number",
-            "type": "uint16",
-            "order-number": 1,
-            "is-read-only": true,
-            "description": ["There is only one clock per device in the 4th PoC - value 1 should be used as instance-number."]
-        },
-        "two-step-flag": {
-            "id": "two-step-flag",
-            "type": "boolean",
-            "order-number": 80,
-            "is-read-only": true,
-            "description": ["Indicates whether PTP clock is a two-step clock"]
-        },
-        "clock-quality": {
-            "id": "clock-quality",
-            "type": "",
-            "order-number": 6,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "clock-class": {
-            "id": "clock-class",
-            "type": "",
-            "order-number": 7,
-            "is-read-only": true,
-            "description": ["Clock Class acc. to IEEE 1588-2008, 7.6.2.4 and ITU-T G.8275.1, 6.4"]
-        },
-        "clock-accuracy": {
-            "id": "clock-accuracy",
-            "type": "",
-            "order-number": 8,
-            "is-read-only": true,
-            "description": ["Clock accuracy acc. to IEEE 1588-2008, 7.6.2.5 and ITU-T G.8275.1, 6.3.5"]
-        },
-        "offset-scaled-log-variance": {
-            "id": "offset-scaled-log-variance",
-            "type": "",
-            "order-number": 9,
-            "is-read-only": true,
-            "description": ["Offset of scaled log variance acc. to IEEE 1588-2008, 7.6.3.5 and ITU-T G.8275.1, 6.3.5"]
-        },
-        "priority1": {
-            "id": "priority1",
-            "type": "number",
-            "min": 0,
-            "max": 255,
-            "order-number": 10,
-            "is-read-only": true,
-            "description": ["Priority 1 acc. to IEEE 1588-2008, 7.6.2.2"]
-        },
-        "priority2": {
-            "id": "priority2",
-            "type": "number",
-            "min": 0,
-            "max": 255,
-            "order-number": 11,
-            "is-read-only": false,
-            "description": ["Priority 2 acc. to IEEE 1588-2008, 7.6.2.3"]
-        },
-        "domain-number": {
-            "id": "domain-number",
-            "type": "number",
-            "min": 24,
-            "max": 43,
-            "order-number": 12,
-            "is-read-only": false,
-            "description": ["PTP domain number acc. to IEEE 1588-2008, 7.1. See ptpDS.domainNumber."]
-        },
-        "slave-only": {
-            "id": "slave-only",
-            "type": "boolean",
-            "order-number": 81,
-            "is-read-only": false,
-            "description": ["Indicates whether PTP clock may only operate as SC. See IEEE 1588-2008, 9.2."]
-        },
-        "current-ds": {
-            "id": "current-ds",
-            "type": "",
-            "order-number": 14,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "steps-removed": {
-            "id": "steps-removed",
-            "type": "",
-            "order-number": 15,
-            "is-read-only": true,
-            "description": ["Number of communication paths traversed between local clock and GM"]
-        },
-        "offset-from-master": {
-            "id": "offset-from-master",
-            "type": "",
-            "order-number": 16,
-            "is-read-only": true,
-            "unit": "ns*2^16",
-            "description": ["Time off-set from master"]
-        },
-        "mean-path-delay": {
-            "id": "mean-path-delay",
-            "type": "",
-            "order-number": 17,
-            "is-read-only": true,
-            "unit": "ns*2^16",
-            "description": ["Mean propagation time between master and slave"]
-        },
-        "parrent-ds": {
-            "id": "parrent-ds",
-            "type": "",
-            "order-number": 18,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "parent-port-identity": {
-            "id": "parent-port-identity",
-            "type": "",
-            "order-number": 19,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "parent-stats": {
-            "id": "parent-stats",
-            "type": "",
-            "order-number": 22,
-            "is-read-only": true,
-            "description": ["Indicates whether there are valid parent stats."]
-        },
-        "observed-parent-offset-scaled-log-variance": {
-            "id": "observed-parent-offset-scaled-log-variance",
-            "type": "",
-            "order-number": 23,
-            "is-read-only": true,
-            "description": ["Estimate of parent's clock PTP variance as observed by slave clock acc. to IEEE 1588-2008, 7.6.4.4."]
-        },
-        "observed-parent-clock-phase-change-rate": {
-            "id": "observed-parent-clock-phase-change-rate",
-            "type": "",
-            "order-number": 24,
-            "is-read-only": true,
-            "description": ["Estimate of parent's clock PTP phase change rate as observed by slave clock acc. to IEEE 1588-2008, 7.6.4.4."]
-        },
-        "grandmaster-identity": {
-            "id": "grandmaster-identity",
-            "type": "",
-            "order-number": 25,
-            "is-read-only": true,
-            "description": ["Grandmaster clock ID acc. to IEEE 1588-2008, 7.6.2.1"]
-        },
-        "grandmaster-clock-quality": {
-            "id": "grandmaster-clock-quality",
-            "type": "",
-            "order-number": 26,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "grandmaster-priority1": {
-            "id": "grandmaster-priority1",
-            "type": "",
-            "order-number": 30,
-            "is-read-only": true,
-            "description": ["Grandmaster's priority 1 acc. to IEEE 1588-2008, 7.6.2.2"]
-        },
-        "grandmaster-priority2": {
-            "id": "grandmaster-priority2",
-            "type": "",
-            "order-number": 31,
-            "is-read-only": true,
-            "description": ["Grandmaster's priority 2 acc. to IEEE 1588-2008, 7.6.2.3"]
-        },
-        "time-properties-ds": {
-            "id": "time-properties-ds",
-            "type": "",
-            "order-number": 32,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "current-utc-offset-valid": {
-            "id": "current-utc-offset-valid",
-            "type": "",
-            "order-number": 33,
-            "is-read-only": true,
-            "description": ["Indicates wheterh current UTC offset is correct."]
-        },
-        "current-utc-offset": {
-            "id": "current-utc-offset",
-            "type": "",
-            "order-number": 34,
-            "is-read-only": true,
-            "description": ["Offset between TAI and UTC acc. to IEEE 1588-2008, 7.2.3"]
-        },
-        "leap59": {
-            "id": "leap59",
-            "type": "",
-            "order-number": 35,
-            "is-read-only": true,
-            "description": ["Inidcates that last minute of current UTC day has 59 seconds."]
-        },
-        "leap61": {
-            "id": "leap61",
-            "type": "",
-            "order-number": 36,
-            "is-read-only": true,
-            "description": ["Inidcates that last minute of current UTC day has 61 seconds."]
-        },
-        "time-tracable": {
-            "id": "time-tracable",
-            "type": "",
-            "order-number": 37,
-            "is-read-only": true,
-            "description": ["Indicates that current UTC offset and timescale are traceable to a PRC"]
-        },
-        "frequency-tracable": {
-            "id": "frequency-tracable",
-            "type": "",
-            "order-number": 38,
-            "is-read-only": true,
-            "description": ["Indicates that frequency determining timescale is traceable to a PRC"]
-        },
-        "ptp-timescale": {
-            "id": "ptp-timescale",
-            "type": "",
-            "order-number": 39,
-            "is-read-only": true,
-            "description": ["Indicates thet timescale of grandmaster clock is PTP."]
-        },
-        "time-source": {
-            "id": "time-source",
-            "type": "",
-            "order-number": 40,
-            "is-read-only": true,
-            "description": ["Time source used by grandmaster. See IEEE 1588-2008, 7.6.2.6."]
-        },
-        "port-state": {
-            "id": "port-state",
-            "type": "",
-            "order-number": 45,
-            "is-read-only": true,
-            "description": ["State of this local port"]
-        },
-        "log-min-delay-req-interval": {
-            "id": "log-min-delay-req-interval",
-            "type": "",
-            "order-number": 46,
-            "is-read-only": true,
-            "description": ["Minimum permitted mean time interval between successive Delay_Req messages"]
-        },
-        "peer-mean-path-delay": {
-            "id": "peer-mean-path-delay",
-            "type": "",
-            "order-number": 47,
-            "is-read-only": true,
-            "unit": "ns*2^16",
-            "description": ["Not applicable with this profile"]
-        },
-        "log-announce-interval": {
-            "id": "log-announce-interval",
-            "type": "",
-            "order-number": 48,
-            "is-read-only": true,
-            "description": ["Mean time interval between successive Announce messages"]
-        },
-        "announce-receipt-timeout": {
-            "id": "announce-receipt-timeout",
-            "type": "",
-            "order-number": 49,
-            "is-read-only": true,
-            "description": ["Number of announce intervals w/o announce message before timeout acc. to IEEE 1588-2008, 7.7.3.1."]
-        },
-        "log-sync-interval": {
-            "id": "log-sync-interval",
-            "type": "",
-            "order-number": 50,
-            "is-read-only": true,
-            "description": ["Mean SyncInterval for multicast messages"]
-        },
-        "delay-mechanism": {
-            "id": "delay-mechanism",
-            "type": "string",
-            "controlType": "text",
-            "order-number": 51,
-            "is-read-only": true,
-            "description": ["Delay mechanism acc. to IEEE 1588-2008, 8.2.5.4.4."]
-        },
-        "version-number": {
-            "id": "version-number",
-            "type": "",
-            "order-number": 53,
-            "is-read-only": true,
-            "description": ["PTP version used on this port"]
-        },
-        "transparent-clock-default-ds": {
-            "id": "transparent-clock-default-ds",
-            "type": "",
-            "order-number": 54,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "number-ports": {
-            "id": "number-ports",
-            "type": "",
-            "order-number": -6,
-            "is-read-only": true,
-            "description": ["Number of ports of the device"]
-        },
-        "primary-domain": {
-            "id": "primary-domain",
-            "type": "",
-            "order-number": 58,
-            "is-read-only": true,
-            "description": ["Domain number of primary syntonization domain acc. to IEEE 1588-2008, 10.1"]
-        },
-        "transparent-clock-port-ds-list": {
-            "id": "transparent-clock-port-ds-list",
-            "type": "",
-            "order-number": 59,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "log-min-pdelay-req-interval": {
-            "id": "log-min-pdelay-req-interval",
-            "type": "",
-            "order-number": 63,
-            "is-read-only": true,
-            "description": ["Not applicable with this profile"]
-        },
-        "faulty-flag": {
-            "id": "faulty-flag",
-            "type": "",
-            "order-number": 64,
-            "is-read-only": true,
-            "description": ["Indicates whether port is faulty."]
-        },
-        "default-ds": {
-            "id": "default-ds",
-            "type": "",
-            "order-number": 68,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "local-priority": {
-            "id": "local-priority",
-            "type": "number",
-            "min": 1,
-            "max": 255,
-            "order-number": 69,
-            "is-read-only": true,
-            "description": ["See ITU-T G.8275.1, 6.3.2."]
-        },
-        "max-steps-removed": {
-            "id": "max-steps-removed",
-            "type": "number",
-            "min": 1,
-            "max": 255,
-            "order-number": 70,
-            "is-read-only": true,
-            "description": ["See ITU-T G.8275.1, 6.3."]
-        },
-        "port-ds-list": {
-            "id": "port-ds-list",
-            "type": "",
-            "order-number": 73,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "clock-identity": {
-            "id": "clock-identity",
-            "type": "",
-            "order-number": -10,
-            "is-read-only": true,
-            "description": ["ID of the local clock"]
-        },
-        "port-number": {
-            "id": "port-number",
-            "type": "",
-            "order-number": 76,
-            "is-read-only": true,
-            "description": ["Port number of this port on the local clock"]
-        },
-        "onf-ptp-dataset:master-only": {
-            "id": "onf-ptp-dataset:master-only",
-            "type": "boolean",
-            "order-number": 83,
-            "is-read-only": false,
-            "description": ["Indicates that port can only be a master."]
-        },
-        "onf-ptp-dataset:local-priority": {
-            "id": "onf-ptp-dataset:local-priority",
-            "type": "number",
-            "min":1,
-            "max":255,
-            "order-number": -2,
-            "is-read-only": false,
-            "description": ["Local priority as used for Alternate BMCA. See ITU-T G.8275.1, 6.3.2."]
-        },
-        "onf-ptp-dataset:designated-enabled": {
-            "id": "onf-ptp-dataset:designated-enabled",
-            "type": "boolean",
-            "order-number": 82,
-            "is-read-only": false,
-            "description": ["A PTP Port needs to be enabled by management acc. to IEEE 1588-2008, 9.2."]
-        },
-        "onf-ptp-dataset:delay-asymmetry": {
-            "id": "onf-ptp-dataset:delay-asymmetry",
-            "type": "number",
-            "order-number": 80,
-            "is-read-only": true,
-            "description": ["Known path asymmetry in ns acc. to IEEE 1588-2008, 7.4.2."]
-        },
-        "onf-ptp-dataset:logical-termination-point": {
-            "id": "onf-ptp-dataset:logical-termination-point ",
-            "type": "string",
-            "order-number": 81,
-            "is-read-only": true,
-            "description": [""]
-        },
-        "onf-ptp-dataset:multicast-mac-address": {
-            "id": "onf-ptp-dataset:multicast-mac-address",
-            "type": "",
-            "order-number": -5,
-            "is-read-only": true,
-            "description": ["In 4th PoC the value is fixed."]
-        },
-        "onf-ptp-dataset:max-steps-removed": {
-            "id": "onf-ptp-dataset:max-steps-removed",
-            "type": "number",
-            "min":1,
-            "max":255,
-            "order-number": 70,
-            "is-read-only": false,
-            "description": ["See ITU-T G.8275.1, 6.3."]
-        }
-    }
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json
deleted file mode 100644
index 3091cc0..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/otn-odu-conditional-packages.yin.json
+++ /dev/null
@@ -1,75 +0,0 @@
-{
-	"module": {
-		"name": "otn-odu-conditional-packages",
-		"otn-odu-conditional-packages": {
-			"otn-odu-connection-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"otn-odu-connection-capability": {
-					"name": "otn-odu-connection-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"otn-odu-connection-configuration": {
-					"name": "otn-odu-connection-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"otn-odu-connection-status": {
-					"name": "otn-odu-connection-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"otn-odu-connection-current-problems": {
-					"name": "otn-odu-connection-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"otn-odu-connection-current-performance": {
-					"name": "otn-odu-connection-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"otn-odu-connection-historical-performances": {
-					"name": "otn-odu-connection-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			},
-			"otn-odu-termination-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"otn-odu-termination-capability": {
-					"name": "otn-odu-termination-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"otn-odu-termination-configuration": {
-					"name": "otn-odu-termination-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"otn-odu-termination-status": {
-					"name": "otn-odu-termination-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"otn-odu-termination-current-problems": {
-					"name": "otn-odu-termination-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"otn-odu-termination-current-performance": {
-					"name": "otn-odu-termination-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"otn-odu-termination-historical-performances": {
-					"name": "otn-odu-termination-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json
deleted file mode 100644
index 6ccdcca..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-09-24.schema-information.json
+++ /dev/null
@@ -1,168 +0,0 @@
-{ "schema-information": {
-
-"photonic-media": {
-"id": "photonic-media",
-"is-read-only": false,
-"description": ["This module contains a collection of YANG definitions for managing Optical networks. This model is for vendor agnostic management of Optical Transport."]
-},
-"non-alarmed": {
-"id": "non-alarmed",
-"is-read-only": false,
-"description": ["none"]
-},
-"warning": {
-"id": "warning",
-"is-read-only": false,
-"description": ["none"]
-},
-"minor": {
-"id": "minor",
-"is-read-only": false,
-"description": ["none"]
-},
-"major": {
-"id": "major",
-"is-read-only": false,
-"description": ["none"]
-},
-"critical": {
-"id": "critical",
-"is-read-only": false,
-"description": ["none"]
-},
-"severity-type": {
-"id": "severity-type",
-"is-read-only": false,
-"description": ["According to ITU-T M.3160"]
-},
-"fec-properties-pac": {
-"id": "fec-properties-pac",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-performance-type-g": {
-"id": "otsi-interface-performance-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-current-performance-type-g": {
-"id": "otsi-interface-current-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into current performance information by inheriting from TAPI OAM current data."]
-},
-"performance-data": {
-"id": "performance-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-historical-performance-type-g": {
-"id": "otsi-interface-historical-performance-type-g",
-"is-read-only": false,
-"description": ["Turns performance information into historical performance information by inheriting from TAPI OAM History data."]
-},
-"current-performance-data-list": {
-"id": "current-performance-data-list",
-"is-read-only": false,
-"description": ["At least values of the counters, which are reset every 15 minutes, are to be provided. If available, the current values of the counters, which are reset every 24 hour, can be provided, too."]
-},
-"otsi-interface-current-performance-g": {
-"id": "otsi-interface-current-performance-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface at a particular moment."]
-},
-"historical-performance-data-list": {
-"id": "historical-performance-data-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-historical-performances-g": {
-"id": "otsi-interface-historical-performances-g",
-"is-read-only": false,
-"description": ["Aggregated performance information of the air interface for a pre-defined measurement interval."]
-},
-"problem-name": {
-"id": "problem-name",
-"is-read-only": false,
-"description": ["Name of the alarm according to AirInterface::AirInterfaceCapability::supportedAlarms"]
-},
-"otsi-interface-current-problem-type-g": {
-"id": "otsi-interface-current-problem-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"current-problem-list": {
-"id": "current-problem-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-current-problems-g": {
-"id": "otsi-interface-current-problems-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol": {
-"id": "layer-protocol",
-"is-read-only": false,
-"description": ["CoreModel-CoreNetworkModule-ObjectClasses:NetworkElement/_ltpRefList/_lpList/uuid"]
-},
-"otsi-interface-capability": {
-"id": "otsi-interface-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-configuration": {
-"id": "otsi-interface-configuration",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-status": {
-"id": "otsi-interface-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-current-problems": {
-"id": "otsi-interface-current-problems",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-current-performance": {
-"id": "otsi-interface-current-performance",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-historical-performances": {
-"id": "otsi-interface-historical-performances",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-interface-pac": {
-"id": "otsi-interface-pac",
-"is-read-only": false,
-"description": ["none"]
-},
-"sequence-number": {
-"id": "sequence-number",
-"is-read-only": false,
-"description": ["Unique sequence number of the current problem object."]
-},
-"time-stamp": {
-"id": "time-stamp",
-"is-read-only": false,
-"description": ["Time and date of the problem."]
-},
-"problem-severity": {
-"id": "problem-severity",
-"is-read-only": false,
-"description": ["Severity of the alarm."]
-},
-"otsi-current-problem-g": {
-"id": "otsi-current-problem-g",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json
deleted file mode 100644
index 11bf0f1..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/photonic-media@2018-0924.yin.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
-	"module": {
-		"name": "photonic-media",
-		"photonic-media": {
-			"otsi-interface-pac": {
-				"type": "list",
-				"key": "layer-protocol",
-				"otsi-interface-capability": {
-					"name": "otsi-interface-capability",
-					"local-name": "capability",
-					"type": "container"
-				},
-				"otsi-interface-configuration": {
-					"name": "otsi-interface-configuration",
-					"local-name": "configuration",
-					"type": "container"
-				},
-				"otsi-interface-status": {
-					"name": "otsi-interface-status",
-					"local-name": "status",
-					"type": "container"
-				},
-				"otsi-interface-current-problems": {
-					"name": "otsi-interface-current-problems",
-					"local-name": "current-problems",
-					"type": "container"
-				},
-				"otsi-interface-current-performance": {
-					"name": "otsi-interface-current-performance",
-					"local-name": "current-performance",
-					"type": "container"
-				},
-				"otsi-interface-historical-performances": {
-					"name": "otsi-interface-historical-performances",
-					"local-name": "historical-performances",
-					"type": "container"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json
deleted file mode 100644
index 576ca3a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/plannedNetworkElements.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{"planned-network-elements":{
-    
-"ADVA-EthSwitch-1":{"id":"ADVA-EthSwitch-1","name":"ADVA-EthSwitch-1","siteRef":"Berlin-north-east","radioType":"FSP 150"},
-"ADVA-EthSwitch-2":{"id":"ADVA-EthSwitch-2","name":"ADVA-EthSwitch-2","siteRef":"Berlin-south","radioType":"FSP 150"},
-"ADVA-ROADM-A":{"id":"ADVA-ROADM-A","name":"ADVA-ROADM-A","siteRef":"Berlin-north-east","radioType":"FSP 3000R7"},
-"ADVA-ROADM-B":{"id":"ADVA-ROADM-B","name":"ADVA-ROADM-B","siteRef":"Berlin-south","radioType":"FSP 3000R7"},
-"ADVA-ROADM-C":{"id":"ADVA-ROADM-C","name":"ADVA-ROADM-C","siteRef":"Berlin-north-west","radioType":"FSP 3000R7"},
-"Nokia-eNodeB-1":{"id":"Nokia-eNodeB-1","name":"Nokia-eNodeB-1","siteRef":"Berlin-south-west","radioType":"Nokia-eNodeB-1"},
-
-"ZTE-24":{"id":"ZTE-24","name":"ZTE-24","siteRef":"Bejing","radioType":"ZXMW NR8120A"},
-"ZTE-81":{"id":"ZTE-81","name":"ZTE-81","siteRef":"Tianjin","radioType":"ZXMW NR8120A"},
-"SIAE-S1":{"id":"SIAE-S1","name":"SIAE-S1","siteRef":"Milan","radioType":"AGS-20"},
-"SIAE-S2":{"id":"SIAE-S2","name":"SIAE-S2","siteRef":"Malpensa","radioType":"AGS-20"},
-"DragonWave-A1":{"id":"DragonWave-A1","name":"DragonWave-A1","siteRef":"Ottawa-Center","radioType":"Horizon Compact Plus"},
-"DragonWave-Z1":{"id":"DragonWave-Z1","name":"DragonWave-Z1","siteRef":"Ottawa-Airport","radioType":"Horizon Compact Plus"},
-"DragonWave-A2":{"id":"DragonWave-A2","name":"DragonWave-A2","siteRef":"Ottawa-Airport","radioType":"Horizon Compact Plus"},
-"DragonWave-Z2":{"id":"DragonWave-Z2","name":"DragonWave-Z2","siteRef":"Ottawa-south-west","radioType":"Horizon Compact Plus"},
-"DragonWave-A3":{"id":"DragonWave-A3","name":"DragonWave-A3","siteRef":"Ottawa-south-west","radioType":"Horizon Quantum"},
-"DragonWave-Z3":{"id":"DragonWave-Z3","name":"DragonWave-Z3","siteRef":"Ottawa-Center","radioType":"Horizon Quantum"},
-"Intracom-A":{"id":"Intracom-A","name":"Intracom-A","siteRef":"Peania ","radioType":"OSDR-13H13"},
-"Intracom-Z":{"id":"Intracom-Z","name":"Intracom-Z","siteRef":"Athens","radioType":"OSDR-13H13"},
-"DragonWave-A4":{"id":"DragonWave-A4","name":"DragonWave-A4","siteRef":"Middletown-north","radioType":"Horizon Quantum"},
-"DragonWave-Z4":{"id":"DragonWave-Z4","name":"DragonWave-Z4","siteRef":"Middletown-south-east","radioType":"Horizon Quantum"},
-"Nokia-61":{"id":"Nokia-61","name":"Nokia-61","siteRef":"Middletown-south-east","radioType":"Nokia 7.1"},
-"Nokia-62":{"id":"Nokia-62","name":"Nokia-62","siteRef":"Middletown-south-west","radioType":"Nokia 7.1"},
-"Ericsson-23":{"id":"Ericsson-23","name":"Ericsson-23","siteRef":"Middletown-south-west","radioType":"MINI-LINK 6352"},
-"Ericsson-24":{"id":"Ericsson-24","name":"Ericsson-24","siteRef":"Middletown-north","radioType":"MINI-LINK 6352"},
-"CommScope-DAS":{"id":"CommScope-DAS","name":"CommScope-DAS","siteRef":"owl-north","radioType":"Andrew "},
-"Ericsson-A1":{"id":"Ericsson-A1","name":"Ericsson-A1","siteRef":"owl-north","radioType":"MINI-LINK 6352"},
-"Ericsson-B1":{"id":"Ericsson-B1","name":"Ericsson-B1","siteRef":"owl-north-east","radioType":"MINI-LINK 6352"},
-"Ericsson-A2":{"id":"Ericsson-A2","name":"Ericsson-A2","siteRef":"owl-north-east","radioType":"MINI-LINK 6352"},
-"Ericsson-B2":{"id":"Ericsson-B2","name":"Ericsson-B2","siteRef":"owl-east","radioType":"MINI-LINK 6352"},
-"Ceragon-A1":{"id":"Ceragon-A1","name":"Ceragon-A1","siteRef":"Tel-Aviv","radioType":"Simulator"},
-"Ceragon-Z1":{"id":"Ceragon-Z1","name":"Ceragon-Z1","siteRef":"Tel-Aviv-north","radioType":"Simulator"},
-"Ceragon-A2":{"id":"Ceragon-A2","name":"Ceragon-A2","siteRef":"Bucharest-north","radioType":"Simulator"},
-"Ceragon-Z2":{"id":"Ceragon-Z2","name":"Ceragon-Z2","siteRef":"Politehnica-Bucharest","radioType":"Simulator"},
-"AltioStar-RRH-1":{"id":"AltioStar-RRH-1","name":"AltioStar-RRH-1","siteRef":"Petrol-Bedminster","radioType":"LTE-RRH-44380400"},
-"AltioStar-RRH-2":{"id":"AltioStar-RRH-2","name":"AltioStar-RRH-2","siteRef":"US78/US287","radioType":"LTE-RRH-44380400"},
-"WinLab-RRH-1":{"id":"WinLab-RRH-1","name":"WinLab-RRH-1","siteRef":"owl-south-east","radioType":"WhiteBox"},
-"WinLab-RRH-2":{"id":"WinLab-RRH-2","name":"WinLab-RRH-2","siteRef":"owl-south","radioType":"WhiteBox"},
-"WinLab-RRH-3":{"id":"WinLab-RRH-3","name":"WinLab-RRH-3","siteRef":"owl-south-west","radioType":"WhiteBox"},
-"WinLab-RRH-4":{"id":"WinLab-RRH-4","name":"WinLab-RRH-4","siteRef":"owl-west","radioType":"WhiteBox"},
-"WinLab-RRH-5":{"id":"WinLab-RRH-5","name":"WinLab-RRH-5","siteRef":"owl-north-west","radioType":"WhiteBox"},
-"WinLab-RRH-6":{"id":"WinLab-RRH-6","name":"WinLab-RRH-6","siteRef":"owl-north","radioType":"WhiteBox"}
-
-}}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site-link.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site-link.json
deleted file mode 100644
index c3e8110..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site-link.json
+++ /dev/null
@@ -1,73 +0,0 @@
-{
-  "site-link": {
-"OWL-DC-Prague-DC":{"id":"OWL-DC-Prague-DC","name":"OWL-DC-Prague-DC","siteA":"OWL-DC","siteZ":"Prague-DC","siteNameA":"OWL-DC","siteNameZ":"Prague-DC","length":"6616.552612","azimuthAZ":"48.118867","azimuthZA":"298.029587","type":"data-center-interconnect"},
-"OWL-DC-Berlin-DC":{"id":"OWL-DC-Berlin-DC","name":"OWL-DC-Berlin-DC","siteA":"OWL-DC","siteZ":"Berlin-DC","siteNameA":"OWL-DC","siteNameZ":"Berlin-DC","length":"6429.038709","azimuthAZ":"45.947698","azimuthZA":"296.078746","type":"data-center-interconnect"},
-"Berlin-DC-Berlin-north-east":{"id":"Berlin-DC-Berlin-north-east","name":"Berlin-DC-Berlin-north-east","siteA":"Berlin-DC","siteZ":"Berlin-north-east","siteNameA":"Berlin-DC","siteNameZ":"Berlin-north-east","length":"3.380233","azimuthAZ":"41.694092","azimuthZA":"221.720463","type":"control"},
-"Berlin-DC-Berlin-south":{"id":"Berlin-DC-Berlin-south","name":"Berlin-DC-Berlin-south","siteA":"Berlin-DC","siteZ":"Berlin-south","siteNameA":"Berlin-DC","siteNameZ":"Berlin-south","length":"4.643667","azimuthAZ":"179.964138","azimuthZA":"359.964172","type":"control"},
-"Berlin-DC-Berlin-north-west":{"id":"Berlin-DC-Berlin-north-west","name":"Berlin-DC-Berlin-north-west","siteA":"Berlin-DC","siteZ":"Berlin-north-west","siteNameA":"Berlin-DC","siteNameZ":"Berlin-north-west","length":"5.138948","azimuthAZ":"313.910582","azimuthZA":"133.867146","type":"control"},
-"Prague-DC-Bejing":{"id":"Prague-DC-Bejing","name":"Prague-DC-Bejing","siteA":"Prague-DC","siteZ":"Bejing","siteNameA":"Prague-DC","siteNameZ":"Bejing","length":"7447.977801","azimuthAZ":"54.538202","azimuthZA":"316.994495","type":"control"},
-"Prague-DC-Tianjin":{"id":"Prague-DC-Tianjin","name":"Prague-DC-Tianjin","siteA":"Prague-DC","siteZ":"Tianjin","siteNameA":"Prague-DC","siteNameZ":"Tianjin","length":"7555.330624","azimuthAZ":"54.770138","azimuthZA":"317.494792","type":"control"},
-"Prague-DC-Milan":{"id":"Prague-DC-Milan","name":"Prague-DC-Milan","siteA":"Prague-DC","siteZ":"Milan","siteNameA":"Prague-DC","siteNameZ":"Milan","length":"644.680616","azimuthAZ":"219.303918","azimuthZA":"35.422554","type":"control"},
-"Prague-DC-Malpensa":{"id":"Prague-DC-Malpensa","name":"Prague-DC-Malpensa","siteA":"Prague-DC","siteZ":"Malpensa","siteNameA":"Prague-DC","siteNameZ":"Malpensa","length":"652.094431","azimuthAZ":"222.787408","azimuthZA":"38.559020","type":"control"},
-"Prague-DC-Ottawa-Center":{"id":"Prague-DC-Ottawa-Center","name":"Prague-DC-Ottawa-Center","siteA":"Prague-DC","siteZ":"Ottawa-Center","siteNameA":"Prague-DC","siteNameZ":"Ottawa-Center","length":"6367.273928","azimuthAZ":"303.185800","azimuthZA":"49.712092","type":"control"},
-"Prague-DC-Ottawa-Airport":{"id":"Prague-DC-Ottawa-Airport","name":"Prague-DC-Ottawa-Airport","siteA":"Prague-DC","siteZ":"Ottawa-Airport","siteNameA":"Prague-DC","siteNameZ":"Ottawa-Airport","length":"6330.919511","azimuthAZ":"302.923958","azimuthZA":"49.965269","type":"control"},
-"Prague-DC-Ottawa-south-west":{"id":"Prague-DC-Ottawa-south-west","name":"Prague-DC-Ottawa-south-west","siteA":"Prague-DC","siteZ":"Ottawa-south-west","siteNameA":"Prague-DC","siteNameZ":"Ottawa-south-west","length":"6350.304846","azimuthAZ":"303.180200","azimuthZA":"49.829862","type":"control"},
-"Bejing-Tianjin":{"id":"Bejing-Tianjin","name":"Bejing-Tianjin","siteA":"Bejing","siteZ":"Tianjin","siteNameA":"Bejing","siteNameZ":"Tianjin","length":"109.963655","azimuthAZ":"149.549553","azimuthZA":"329.960966","type":"traffic"},
-"Berlin-north-east-Berlin-south":{"id":"Berlin-north-east-Berlin-south","name":"Berlin-north-east-Berlin-south","siteA":"Berlin-north-east","siteZ":"Berlin-south","siteNameA":"Berlin-north-east","siteNameZ":"Berlin-south","length":"7.511203","azimuthAZ":"197.420857","azimuthZA":"17.394527","type":"traffic"},
-"Berlin-south-Berlin-north-west":{"id":"Berlin-south-Berlin-north-west","name":"Berlin-south-Berlin-north-west","siteA":"Berlin-south","siteZ":"Berlin-north-west","siteNameA":"Berlin-south","siteNameZ":"Berlin-north-west","length":"9.005241","azimuthAZ":"335.704657","azimuthZA":"155.661200","type":"traffic"},
-"Berlin-north-west-Berlin-north-east":{"id":"Berlin-north-west-Berlin-north-east","name":"Berlin-north-west-Berlin-north-east","siteA":"Berlin-north-west","siteZ":"Berlin-north-east","siteNameA":"Berlin-north-west","siteNameZ":"Berlin-north-east","length":"6.040787","azimuthAZ":"99.870133","azimuthZA":"279.939953","type":"traffic"},
-"Ottawa-Airport-Ottawa-south-west":{"id":"Ottawa-Airport-Ottawa-south-west","name":"Ottawa-Airport-Ottawa-south-west","siteA":"Ottawa-Airport","siteZ":"Ottawa-south-west","siteNameA":"Ottawa-Airport","siteNameZ":"Ottawa-south-west","length":"30.774747","azimuthAZ":"280.991574","azimuthZA":"100.716701","type":"traffic"},
-"Ottawa-Center-Ottawa-Airport":{"id":"Ottawa-Center-Ottawa-Airport","name":"Ottawa-Center-Ottawa-Airport","siteA":"Ottawa-Center","siteZ":"Ottawa-Airport","siteNameA":"Ottawa-Center","siteNameZ":"Ottawa-Airport","length":"43.808751","azimuthAZ":"83.558464","azimuthZA":"263.953862","type":"traffic"},
-"Ottawa-south-west-Ottawa-Center":{"id":"Ottawa-south-west-Ottawa-Center","name":"Ottawa-south-west-Ottawa-Center","siteA":"Ottawa-south-west","siteZ":"Ottawa-Center","siteNameA":"Ottawa-south-west","siteNameZ":"Ottawa-Center","length":"16.977148","azimuthAZ":"231.597684","azimuthZA":"51.476879","type":"traffic"},
-"Milan-Malpensa":{"id":"Milan-Malpensa","name":"Milan-Malpensa","siteA":"Milan","siteZ":"Malpensa","siteNameA":"Milan","siteNameZ":"Malpensa","length":"40.038623","azimuthAZ":"296.489417","azimuthZA":"116.160408","type":"traffic"},
-"Berlin-south-Berlin-south-west":{"id":"Berlin-south-Berlin-south-west","name":"Berlin-south-Berlin-south-west","siteA":"Berlin-south","siteZ":"Berlin-south-west","siteNameA":"Berlin-south","siteNameZ":"Berlin-south-west","length":"2.224253","azimuthAZ":"270.013016","azimuthZA":"89.986984","type":"traffic"},
-"Athens-Peania":{"id":"Athens-Peania","name":"Athens-Peania","siteA":"Athens","siteZ":"Peania","siteNameA":"Athens","siteNameZ":"Peania","length":"15.888460","azimuthAZ":"110.077853","azimuthZA":"290.182549","type":"traffic"},
-"Prague-DC-Peania":{"id":"Prague-DC-Peania","name":"Prague-DC-Peania","siteA":"Prague-DC","siteZ":"Peania","siteNameA":"Prague-DC","siteNameZ":"Peania","length":"1544.391815","azimuthAZ":"147.341741","azimuthZA":"333.955286","type":"control"},
-"Prague-DC-Athens":{"id":"Prague-DC-Athens","name":"Prague-DC-Athens","siteA":"Prague-DC","siteZ":"Athens","siteNameA":"Prague-DC","siteNameZ":"Athens","length":"1532.957557","azimuthAZ":"147.756559","azimuthZA":"334.253368","type":"control"},
-"OWL-DC-AT&T-Labs":{"id":"OWL-DC-AT&T-Labs","name":"OWL-DC-AT&T-Labs","siteA":"OWL-DC","siteZ":"AT&T-Labs","siteNameA":"OWL-DC","siteNameZ":"AT&T-Labs","length":"27.561824","azimuthAZ":"106.456393","azimuthZA":"286.658844","type":"data-center-interconnect"},
-"Tel-Aviv-Tel-Aviv-north":{"id":"Tel-Aviv-Tel-Aviv-north","name":"Tel-Aviv-Tel-Aviv-north","siteA":"Tel-Aviv","siteZ":"Tel-Aviv-north","siteNameA":"Tel-Aviv","siteNameZ":"Tel-Aviv-north","length":"8.563466","azimuthAZ":"33.551029","azimuthZA":"213.577785","type":"traffic"},
-"Prague-DC-Tel-Aviv":{"id":"Prague-DC-Tel-Aviv","name":"Prague-DC-Tel-Aviv","siteA":"Prague-DC","siteZ":"Tel-Aviv","siteNameA":"Prague-DC","siteNameZ":"Tel-Aviv","length":"2612.860322","azimuthAZ":"132.178310","azimuthZA":"325.846592","type":"control"},
-"Prague-DC-Tel-Aviv-north":{"id":"Prague-DC-Tel-Aviv-north","name":"Prague-DC-Tel-Aviv-north","siteA":"Prague-DC","siteZ":"Tel-Aviv-north","siteNameA":"Prague-DC","siteNameZ":"Tel-Aviv-north","length":"2609.622822","azimuthAZ":"131.999388","azimuthZA":"325.709247","type":"control"},
-"Bucharest-north-Politehnica-Bucharest":{"id":"Bucharest-north-Politehnica-Bucharest","name":"Bucharest-north-Politehnica-Bucharest","siteA":"Bucharest-north","siteZ":"Politehnica-Bucharest","siteNameA":"Bucharest-north","siteNameZ":"Politehnica-Bucharest","length":"3.117085","azimuthAZ":"237.672480","azimuthZA":"57.649251","type":"traffic"},
-"Prague-DC-Bucharest-north":{"id":"Prague-DC-Bucharest-north","name":"Prague-DC-Bucharest-north","siteA":"Prague-DC","siteZ":"Bucharest-north","siteNameA":"Prague-DC","siteNameZ":"Bucharest-north","length":"1078.751804","azimuthAZ":"121.021694","azimuthZA":"309.618632","type":"control"},
-"Prague-DC-Politehnica-Bucharest":{"id":"Prague-DC-Politehnica-Bucharest","name":"Prague-DC-Politehnica-Bucharest","siteA":"Prague-DC","siteZ":"Politehnica-Bucharest","siteNameA":"Prague-DC","siteNameZ":"Politehnica-Bucharest","length":"1077.789821","azimuthAZ":"121.179995","azimuthZA":"309.751443","type":"control"},
-"AT&T-Labs-Middletown-north":{"id":"AT&T-Labs-Middletown-north","name":"AT&T-Labs-Middletown-north","siteA":"AT&T-Labs","siteZ":"Middletown-north","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-north","length":"2.902164","azimuthAZ":"27.192037","azimuthZA":"207.202193","type":"control"},
-"AT&T-Labs-Middletown-south-east":{"id":"AT&T-Labs-Middletown-south-east","name":"AT&T-Labs-Middletown-south-east","siteA":"AT&T-Labs","siteZ":"Middletown-south-east","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-south-east","length":"3.988925","azimuthAZ":"90.260555","azimuthZA":"270.291084","type":"control"},
-"AT&T-Labs-Middletown-south-west":{"id":"AT&T-Labs-Middletown-south-west","name":"AT&T-Labs-Middletown-south-west","siteA":"AT&T-Labs","siteZ":"Middletown-south-west","siteNameA":"AT&T-Labs","siteNameZ":"Middletown-south-west","length":".382001","azimuthAZ":"164.604183","azimuthZA":"344.604959","type":"control"},
-"Middletown-south-west-Middletown-north":{"id":"Middletown-south-west-Middletown-north","name":"Middletown-south-west-Middletown-north","siteA":"Middletown-south-west","siteZ":"Middletown-north","siteNameA":"Middletown-south-west","siteNameZ":"Middletown-north","length":"3.193888","azimuthAZ":"22.550318","azimuthZA":"202.559698","type":"traffic"},
-"Middletown-north-Middletown-south-east":{"id":"Middletown-north-Middletown-south-east","name":"Middletown-north-Middletown-south-east","siteA":"Middletown-north","siteZ":"Middletown-south-east","siteNameA":"Middletown-north","siteNameZ":"Middletown-south-east","length":"3.721223","azimuthAZ":"134.323008","azimuthZA":"314.343388","type":"traffic"},
-"Middletown-south-east-Middletown-south-west":{"id":"Middletown-south-east-Middletown-south-west","name":"Middletown-south-east-Middletown-south-west","siteA":"Middletown-south-east","siteZ":"Middletown-south-west","siteNameA":"Middletown-south-east","siteNameZ":"Middletown-south-west","length":"3.903206","azimuthAZ":"264.883660","azimuthZA":"84.853909","type":"traffic"},
-"OWL-DC-owl-north":{"id":"OWL-DC-owl-north","name":"OWL-DC-owl-north","siteA":"OWL-DC","siteZ":"owl-north","siteNameA":"OWL-DC","siteNameZ":"owl-north","length":"1.522605","azimuthAZ":"350.001998","azimuthZA":"169.999969","type":"control"},
-"OWL-DC-owl-north-east":{"id":"OWL-DC-owl-north-east","name":"OWL-DC-owl-north-east","siteA":"OWL-DC","siteZ":"owl-north-east","siteNameA":"OWL-DC","siteNameZ":"owl-north-east","length":"1.522567","azimuthAZ":"34.994401","azimuthZA":"215.001103","type":"control"},
-"OWL-DC-owl-east":{"id":"OWL-DC-owl-east","name":"OWL-DC-owl-east","siteA":"OWL-DC","siteZ":"owl-east","siteNameA":"OWL-DC","siteNameZ":"owl-east","length":"1.522583","azimuthAZ":"79.994074","azimuthZA":"260.005579","type":"control"},
-"owl-north-owl-north-east":{"id":"owl-north-owl-north-east","name":"owl-north-owl-north-east","siteA":"owl-north","siteZ":"owl-north-east","siteNameA":"owl-north","siteNameZ":"owl-north-east","length":"1.165150","azimuthAZ":"102.497861","azimuthZA":"282.506593","type":"traffic"},
-"owl-north-east-owl-east":{"id":"owl-north-east-owl-east","name":"owl-north-east-owl-east","siteA":"owl-north-east","siteZ":"owl-east","siteNameA":"owl-north-east","siteNameZ":"owl-east","length":"1.165321","azimuthAZ":"147.500226","azimuthZA":"327.505031","type":"traffic"},
-"OWL-DC-AT&T-Bedminster":{"id":"OWL-DC-AT&T-Bedminster","name":"OWL-DC-AT&T-Bedminster","siteA":"OWL-DC","siteZ":"AT&T-Bedminster","siteNameA":"OWL-DC","siteNameZ":"AT&T-Bedminster","length":"27.437179","azimuthAZ":"324.485016","azimuthZA":"144.362105","type":"data-center-interconnect"},
-"AT&T-Bedminster-Petrol-Bedminster":{"id":"AT&T-Bedminster-Petrol-Bedminster","name":"AT&T-Bedminster-Petrol-Bedminster","siteA":"AT&T-Bedminster","siteZ":"Petrol-Bedminster","siteNameA":"AT&T-Bedminster","siteNameZ":"Petrol-Bedminster","length":"1.819953","azimuthAZ":"312.782236","azimuthZA":"132.771911","type":"control"},
-"AT&T-Bedminster-US78/US287":{"id":"AT&T-Bedminster-US78/US287","name":"AT&T-Bedminster-US78/US287","siteA":"AT&T-Bedminster","siteZ":"US78/US287","siteNameA":"AT&T-Bedminster","siteNameZ":"US78/US287","length":"2.954947","azimuthAZ":"197.233564","azimuthZA":"17.226804","type":"control"},
-"San-Ramon-DC-sr-east":{"id":"San-Ramon-DC-sr-east","name":"San-Ramon-DC-sr-east","siteA":"San-Ramon-DC","siteZ":"sr-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-east","length":"1.580364","azimuthAZ":"80.363571","azimuthZA":"260.374428","type":"control"},
-"San-Ramon-DC-sr-west":{"id":"San-Ramon-DC-sr-west","name":"San-Ramon-DC-sr-west","siteA":"San-Ramon-DC","siteZ":"sr-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-west","length":"1.580413","azimuthAZ":"260.374731","azimuthZA":"80.363875","type":"control"},
-"San-Ramon-DC-sr-north":{"id":"San-Ramon-DC-sr-north","name":"San-Ramon-DC-sr-north","siteA":"San-Ramon-DC","siteZ":"sr-north","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north","length":"1.524434","azimuthAZ":"349.619184","azimuthZA":"169.617269","type":"control"},
-"San-Ramon-DC-sr-north-east":{"id":"San-Ramon-DC-sr-north-east","name":"San-Ramon-DC-sr-north-east","siteA":"San-Ramon-DC","siteZ":"sr-north-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north-east","length":"1.542411","azimuthAZ":"36.034000","azimuthZA":"216.040324","type":"control"},
-"San-Ramon-DC-sr-north-west":{"id":"San-Ramon-DC-sr-north-west","name":"San-Ramon-DC-sr-north-west","siteA":"San-Ramon-DC","siteZ":"sr-north-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-north-west","length":"1.562756","azimuthAZ":"303.980237","azimuthZA":"123.971206","type":"control"},
-"San-Ramon-DC-sr-south":{"id":"San-Ramon-DC-sr-south","name":"San-Ramon-DC-sr-south","siteA":"San-Ramon-DC","siteZ":"sr-south","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south","length":"1.524443","azimuthAZ":"169.615417","azimuthZA":"349.617331","type":"control"},
-"San-Ramon-DC-sr-south-east":{"id":"San-Ramon-DC-sr-south-east","name":"San-Ramon-DC-sr-south-east","siteA":"San-Ramon-DC","siteZ":"sr-south-east","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south-east","length":"1.562870","azimuthAZ":"123.968387","azimuthZA":"303.977417","type":"control"},
-"San-Ramon-DC-sr-south-west":{"id":"San-Ramon-DC-sr-south-west","name":"San-Ramon-DC-sr-south-west","siteA":"San-Ramon-DC","siteZ":"sr-south-west","siteNameA":"San-Ramon-DC","siteNameZ":"sr-south-west","length":"1.542492","azimuthAZ":"216.044457","azimuthZA":"36.038135","type":"control"},
-"OWL-DC-San-Ramon-DC":{"id":"OWL-DC-San-Ramon-DC","name":"OWL-DC-San-Ramon-DC","siteA":"OWL-DC","siteZ":"San-Ramon-DC","siteNameA":"OWL-DC","siteNameZ":"San-Ramon-DC","length":"4060.445351","azimuthAZ":"281.575258","azimuthZA":"70.526201","type":"data-center-interconnect"},
-"Telia-Lab-ADVA-R1":{"id":"Telia-Lab-ADVA-R1","name":"Telia-Lab-ADVA-R1","siteA":"Telia-Lab","siteZ":"ADVA-R1","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"90.381269","azimuthAZ":"249.241681","azimuthZA":"67.971555","type":"control"},
-"Telia-Lab-ADVA-R2":{"id":"Telia-Lab-ADVA-R2","name":"Telia-Lab-ADVA-R2","siteA":"Telia-Lab","siteZ":"ADVA-R2","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"56.942201","azimuthAZ":"305.498100","azimuthZA":"124.787029","type":"control"},
-"Telia-Lab-ADVA-R3":{"id":"Telia-Lab-ADVA-R3","name":"Telia-Lab-ADVA-R3","siteA":"Telia-Lab","siteZ":"ADVA-R3","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"49.939534","azimuthAZ":"257.937548","azimuthZA":"77.198580","type":"control"},
-"Telia-Lab-Coriant-R1":{"id":"Telia-Lab-Coriant-R1","name":"Telia-Lab-Coriant-R1","siteA":"Telia-Lab","siteZ":"Coriant-R1","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"59.605946","azimuthAZ":"82.969019","azimuthZA":"263.869082","type":"control"},
-"Telia-Lab-Coriant-R2":{"id":"Telia-Lab-Coriant-R2","name":"Telia-Lab-Coriant-R2","siteA":"Telia-Lab","siteZ":"Coriant-R2","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"32.655947","azimuthAZ":"354.958972","azimuthZA":"174.914963","type":"control"},
-"Telia-Lab-Coriant-R3":{"id":"Telia-Lab-Coriant-R3","name":"Telia-Lab-Coriant-R3","siteA":"Telia-Lab","siteZ":"Coriant-R3","siteNameA":"Telia-Lab","siteNameZ":"Telia-Lab","length":"11.365269","azimuthAZ":"198.597495","azimuthZA":"18.542652","type":"control"},
-"ADVA-R1-ADVA-R2":{"id":"ADVA-R1-ADVA-R2","name":"ADVA-R1-ADVA-R2","siteA":"ADVA-R1","siteZ":"ADVA-R2","siteNameA":"ADVA-R1","siteNameZ":"ADVA-R2","length":"75.455304","azimuthAZ":"29.104148","azimuthZA":"209.666223","type":"traffic"},
-"ADVA-R2-ADVA-R3":{"id":"ADVA-R2-ADVA-R3","name":"ADVA-R2-ADVA-R3","siteA":"ADVA-R2","siteZ":"ADVA-R3","siteNameA":"ADVA-R2","siteNameZ":"ADVA-R3","length":"43.571339","azimuthAZ":"182.550186","azimuthZA":"2.520807","type":"traffic"},
-"ADVA-R3-ADVA-R1":{"id":"ADVA-R3-ADVA-R1","name":"ADVA-R3-ADVA-R1","siteA":"ADVA-R3","siteZ":"ADVA-R1","siteNameA":"ADVA-R3","siteNameZ":"ADVA-R1","length":"41.704912","azimuthAZ":"238.072776","azimuthZA":"57.541137","type":"traffic"},
-"Coriant-R1-Coriant-R3":{"id":"Coriant-R1-Coriant-R3","name":"Coriant-R1-Coriant-R3","siteA":"Coriant-R1","siteZ":"Coriant-R3","siteNameA":"Coriant-R1","siteNameZ":"Coriant-R3","length":"65.330426","azimuthAZ":"254.844777","azimuthZA":"73.890302","type":"traffic"},
-"Coriant-R2-Coriant-R1":{"id":"Coriant-R2-Coriant-R1","name":"Coriant-R2-Coriant-R1","siteA":"Coriant-R2","siteZ":"Coriant-R1","siteNameA":"Coriant-R2","siteNameZ":"Coriant-R1","length":"66.963183","azimuthAZ":"112.092350","azimuthZA":"293.037795","type":"traffic"},
-"Coriant-R3-Coriant-R2":{"id":"Coriant-R3-Coriant-R2","name":"Coriant-R3-Coriant-R2","siteA":"Coriant-R3","siteZ":"Coriant-R2","siteNameA":"Coriant-R3","siteNameZ":"Coriant-R2","length":"43.308017","azimuthAZ":".944183","azimuthZA":"180.955123","type":"traffic"},
-"ADVA-R2-Coriant-R2":{"id":"ADVA-R2-Coriant-R2","name":"ADVA-R2-Coriant-R2","siteA":"ADVA-R2","siteZ":"Coriant-R2","siteNameA":"ADVA-R2","siteNameZ":"Coriant-R2","length":"43.492285","azimuthAZ":"89.993872","azimuthZA":"270.661932","type":"traffic"},
-"ADVA-R3-Coriant-R3":{"id":"ADVA-R3-Coriant-R3","name":"ADVA-R3-Coriant-R3","siteA":"ADVA-R3","siteZ":"Coriant-R3","siteNameA":"ADVA-R3","siteNameZ":"Coriant-R3","length":"45.213525","azimuthAZ":"89.686360","azimuthZA":"270.370141","type":"traffic"}
-
-  }
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site.json
deleted file mode 100644
index 77f12e9..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/site.json
+++ /dev/null
@@ -1,55 +0,0 @@
-{
-    "site": {
-"Bejing":{"id":"Bejing","name":"Bejing","location":{"lat":39.979597,"lon":116.369298},"amsl-ground":55,"type":"physical-network-function","references":{"site-links":["Prague-DC-Bejing","Bejing-Tianjin"],"network-elements":["ZTE-24"]}},
-"Berlin-DC":{"id":"Berlin-DC","name":"Berlin-DC","location":{"lat":52.501305,"lon":13.366917},"amsl-ground":52,"type":"data-center","references":{"site-links":["OWL-DC-Berlin-DC","Berlin-DC-Berlin-north-east","Berlin-DC-Berlin-south","Berlin-DC-Berlin-north-west"],"network-elements":[]}},
-"Berlin-north-east":{"id":"Berlin-north-east","name":"Berlin-north-east","location":{"lat":52.524000,"lon":13.400152},"amsl-ground":60,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-north-east","Berlin-north-east-Berlin-south","Berlin-north-west-Berlin-north-east"],"network-elements":["ADVA-EthSwitch-1","ADVA-ROADM-A"]}},
-"Berlin-north-west":{"id":"Berlin-north-west","name":"Berlin-north-west","location":{"lat":52.533346,"lon":13.312181},"amsl-ground":35,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-north-west","Berlin-south-Berlin-north-west","Berlin-north-west-Berlin-north-east"],"network-elements":["ADVA-ROADM-C"]}},
-"Berlin-south":{"id":"Berlin-south","name":"Berlin-south","location":{"lat":52.459541,"lon":13.366960},"amsl-ground":35,"type":"physical-network-function","references":{"site-links":["Berlin-DC-Berlin-south","Berlin-north-east-Berlin-south","Berlin-south-Berlin-north-west","Berlin-south-Berlin-south-west"],"network-elements":["ADVA-EthSwitch-2","ADVA-ROADM-B"]}},
-"Berlin-south-west":{"id":"Berlin-south-west","name":"Berlin-south-west","location":{"lat":52.459541,"lon":13.334130},"amsl-ground":59,"type":"physical-network-function","references":{"site-links":["Berlin-south-Berlin-south-west"],"network-elements":["Nokia-eNodeB-1"]}},
-"Malpensa":{"id":"Malpensa","name":"Malpensa","location":{"lat":45.630000,"lon":8.723056},"amsl-ground":220,"type":"physical-network-function","references":{"site-links":["Prague-DC-Malpensa","Milan-Malpensa"],"network-elements":["SIAE-S2"]}},
-"Milan":{"id":"Milan","name":"Milan","location":{"lat":45.470312,"lon":9.183940},"amsl-ground":122,"type":"physical-network-function","references":{"site-links":["Prague-DC-Milan","Milan-Malpensa"],"network-elements":["SIAE-S1"]}},
-"Ottawa-Airport":{"id":"Ottawa-Airport","name":"Ottawa-Airport","location":{"lat":45.293149,"lon":-75.523889},"amsl-ground":113,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-Airport","Ottawa-Airport-Ottawa-south-west","Ottawa-Center-Ottawa-Airport"],"network-elements":["DragonWave-Z1","DragonWave-A2"]}},
-"Ottawa-Center":{"id":"Ottawa-Center","name":"Ottawa-Center","location":{"lat":45.250298,"lon":-76.080431},"amsl-ground":87,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-Center","Ottawa-Center-Ottawa-Airport","Ottawa-south-west-Ottawa-Center"],"network-elements":["DragonWave-A1","DragonWave-Z3"]}},
-"Ottawa-south-west":{"id":"Ottawa-south-west","name":"Ottawa-south-west","location":{"lat":45.345269,"lon":-75.910469},"amsl-ground":111,"type":"physical-network-function","references":{"site-links":["Prague-DC-Ottawa-south-west","Ottawa-Airport-Ottawa-south-west","Ottawa-south-west-Ottawa-Center"],"network-elements":["DragonWave-Z2","DragonWave-A3"]}},
-"OWL-DC":{"id":"OWL-DC","name":"OWL-DC","location":{"lat":40.468102,"lon":-74.447872},"amsl-ground":32,"type":"data-center","references":{"site-links":["OWL-DC-Prague-DC","OWL-DC-Berlin-DC","OWL-DC-AT&T-Labs","OWL-DC-owl-north","OWL-DC-owl-north-east","OWL-DC-owl-east","OWL-DC-AT&T-Bedminster","OWL-DC-San-Ramon-DC"],"network-elements":[]}},
-"owl-east":{"id":"owl-east","name":"owl-east","location":{"lat":40.470480,"lon":-74.430146},"amsl-ground":25,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-east","owl-north-east-owl-east"],"network-elements":["Ericsson-B2","Airspan-LTE-BS4"]}},
-"owl-west":{"id":"owl-west","name":"owl-west","location":{"lat":40.465724,"lon":-74.465599},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-LTE-BS2"]}},
-"owl-north":{"id":"owl-north","name":"owl-north","location":{"lat":40.481588,"lon":-74.450998},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-north","owl-north-owl-north-east"],"network-elements":["Commscope-DAS-01","Ericsson-A1","NEC-WiMAX-BS3"]}},
-"owl-north-east":{"id":"owl-north-east","name":"owl-north-east","location":{"lat":40.479319,"lon":-74.437548},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["OWL-DC-owl-north-east","owl-north-owl-north-east","owl-north-east-owl-east"],"network-elements":["Ericsson-B1","Ericsson-A2","Airspan-LTE-BS3"]}},
-"owl-north-west":{"id":"owl-north-west","name":"owl-north-west","location":{"lat":40.475956,"lon":-74.462617},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":[],"network-elements":["NEC-WiMAX-BS2"]}},
-"owl-south":{"id":"owl-south","name":"owl-south","location":{"lat":40.454616,"lon":-74.444747},"amsl-ground":2,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-WiMAX-BS1"]}},
-"owl-south-east":{"id":"owl-south-east","name":"owl-south-east","location":{"lat":40.460248,"lon":-74.433127},"amsl-ground":28,"type":"physical-network-function","references":{"site-links":[],"network-elements":["NEC-WiMAX-BS1","Commscope-OneCell-01","Ericsson-LTE-Sim-05","Nokia-LTE-Sim-06","Samsung-LTE-Sim-07"]}},
-"owl-south-west":{"id":"owl-south-west","name":"owl-south-west","location":{"lat":40.456885,"lon":-74.458197},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":[],"network-elements":["Airspan-LTE-BS1"]}},
-"Prague-DC":{"id":"Prague-DC","name":"Prague-DC","location":{"lat":50.082702,"lon":14.419391},"amsl-ground":192,"type":"data-center","references":{"site-links":["OWL-DC-Prague-DC","Prague-DC-Bejing","Prague-DC-Tianjin","Prague-DC-Milan","Prague-DC-Malpensa","Prague-DC-Ottawa-Center","Prague-DC-Ottawa-Airport","Prague-DC-Ottawa-south-west","Prague-DC-Peania","Prague-DC-Athens","Prague-DC-Tel-Aviv","Prague-DC-Tel-Aviv-north","Prague-DC-Bucharest-north","Prague-DC-Politehnica-Bucharest"],"network-elements":[]}},
-"Tianjin":{"id":"Tianjin","name":"Tianjin","location":{"lat":39.125229,"lon":117.015355},"amsl-ground":4,"type":"physical-network-function","references":{"site-links":["Prague-DC-Tianjin","Bejing-Tianjin"],"network-elements":["ZTE-81"]}},
-"Peania":{"id":"Peania","name":"Peania","location":{"lat":37.941722,"lon":23.873501},"amsl-ground":95,"type":"physical-network-function","references":{"site-links":["Athens-Peania","Prague-DC-Peania"],"network-elements":[]}},
-"Athens":{"id":"Athens","name":"Athens","location":{"lat":37.990900,"lon":23.703320},"amsl-ground":88,"type":"physical-network-function","references":{"site-links":["Athens-Peania","Prague-DC-Athens"],"network-elements":["Intracom-Z"]}},
-"AT&T-Labs":{"id":"AT&T-Labs","name":"AT&T-Labs","location":{"lat":40.397461,"lon":-74.135717},"amsl-ground":49,"type":"data-center","references":{"site-links":["OWL-DC-AT&T-Labs","AT&T-Labs-Middletown-north","AT&T-Labs-Middletown-south-east","AT&T-Labs-Middletown-south-west"],"network-elements":[]}},
-"Middletown-north":{"id":"Middletown-north","name":"Middletown-north","location":{"lat":40.420676,"lon":-74.120049},"amsl-ground":15,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-north","Middletown-south-west-Middletown-north","Middletown-north-Middletown-south-east"],"network-elements":["DragonWave-A4","Ericsson-24"]}},
-"Middletown-south-east":{"id":"Middletown-south-east","name":"Middletown-south-east","location":{"lat":40.397288,"lon":-74.088610},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-south-east","Middletown-north-Middletown-south-east","Middletown-south-east-Middletown-south-west"],"network-elements":["DragonWave-Z4","Nokia-61"]}},
-"Middletown-south-west":{"id":"Middletown-south-west","name":"Middletown-south-west","location":{"lat":40.394148,"lon":-74.134519},"amsl-ground":48,"type":"physical-network-function","references":{"site-links":["AT&T-Labs-Middletown-south-west","Middletown-south-west-Middletown-north","Middletown-south-east-Middletown-south-west"],"network-elements":["Nokia-62","Ericsson-23"]}},
-"Tel-Aviv":{"id":"Tel-Aviv","name":"Tel-Aviv","location":{"lat":32.111466,"lon":34.836747},"amsl-ground":23,"type":"physical-network-function","references":{"site-links":["Tel-Aviv-Tel-Aviv-north","Prague-DC-Tel-Aviv"],"network-elements":["Ceragon-A1"]}},
-"Tel-Aviv-north":{"id":"Tel-Aviv-north","name":"Tel-Aviv-north","location":{"lat":32.175641,"lon":34.887036},"amsl-ground":70,"type":"physical-network-function","references":{"site-links":["Tel-Aviv-Tel-Aviv-north","Prague-DC-Tel-Aviv-north"],"network-elements":["Ceragon-Z1"]}},
-"Bucharest-north":{"id":"Bucharest-north","name":"Bucharest-north","location":{"lat":44.448833,"lon":26.091029},"amsl-ground":97,"type":"physical-network-function","references":{"site-links":["Bucharest-north-Politehnica-Bucharest","Prague-DC-Bucharest-north"],"network-elements":["Ceragon-A2"]}},
-"Politehnica-Bucharest":{"id":"Politehnica-Bucharest","name":"Politehnica-Bucharest","location":{"lat":44.433837,"lon":26.057854},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["Bucharest-north-Politehnica-Bucharest","Prague-DC-Politehnica-Bucharest"],"network-elements":["Ceragon-Z2"]}},
-"AT&T-Bedminster":{"id":"AT&T-Bedminster","name":"AT&T-Bedminster","location":{"lat":40.668802,"lon":-74.636862},"amsl-ground":104,"type":"data-center","references":{"site-links":["OWL-DC-AT&T-Bedminster","AT&T-Bedminster-Petrol-Bedminster","AT&T-Bedminster-US78/US287"],"network-elements":[]}},
-"Petrol-Bedminster":{"id":"Petrol-Bedminster","name":"Petrol-Bedminster","location":{"lat":40.679919,"lon":-74.652703},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["AT&T-Bedminster-Petrol-Bedminster"],"network-elements":["AltioStar-RRH-1"]}},
-"US78/US287":{"id":"US78/US287","name":"US78/US287","location":{"lat":40.643419,"lon":-74.647239},"amsl-ground":104,"type":"physical-network-function","references":{"site-links":["AT&T-Bedminster-US78/US287"],"network-elements":["AltioStar-RRH-2"]}},
-"San-Ramon-DC":{"id":"San-Ramon-DC","name":"San-Ramon-DC","location":{"lat":37.766128,"lon":-121.963456},"amsl-ground":32,"type":"data-center","references":{"site-links":["San-Ramon-DC-sr-east","San-Ramon-DC-sr-west","San-Ramon-DC-sr-north","San-Ramon-DC-sr-north-east","San-Ramon-DC-sr-north-west","San-Ramon-DC-sr-south","San-Ramon-DC-sr-south-east","San-Ramon-DC-sr-south-west","OWL-DC-San-Ramon-DC"],"network-elements":[]}},
-"sr-east":{"id":"sr-east","name":"sr-east","location":{"lat":37.768506,"lon":-121.945729},"amsl-ground":25,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-east"],"network-elements":[]}},
-"sr-west":{"id":"sr-west","name":"sr-west","location":{"lat":37.763750,"lon":-121.981183},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-west"],"network-elements":[]}},
-"sr-north":{"id":"sr-north","name":"sr-north","location":{"lat":37.779614,"lon":-121.966582},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north"],"network-elements":[]}},
-"sr-north-east":{"id":"sr-north-east","name":"sr-north-east","location":{"lat":37.777345,"lon":-121.953132},"amsl-ground":32,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north-east"],"network-elements":[]}},
-"sr-north-west":{"id":"sr-north-west","name":"sr-north-west","location":{"lat":37.773982,"lon":-121.978201},"amsl-ground":37,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-north-west"],"network-elements":[]}},
-"sr-south":{"id":"sr-south","name":"sr-south","location":{"lat":37.752642,"lon":-121.960330},"amsl-ground":2,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south"],"network-elements":[]}},
-"sr-south-east":{"id":"sr-south-east","name":"sr-south-east","location":{"lat":37.758274,"lon":-121.948711},"amsl-ground":28,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south-east"],"network-elements":[]}},
-"sr-south-west":{"id":"sr-south-west","name":"sr-south-west","location":{"lat":37.754911,"lon":-121.973780},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["San-Ramon-DC-sr-south-west"],"network-elements":[]}},
-"Telia-Lab":{"id":"Telia-Lab","name":"Telia-Lab","location":{"lat":59.357212,"lon":17.974854},"amsl-ground":18,"type":"data-center","references":{"site-links":["Telia-Lab-ADVA-R1","Telia-Lab-ADVA-R2","Telia-Lab-ADVA-R3","Telia-Lab-Coriant-R1","Telia-Lab-Coriant-R2","Telia-Lab-Coriant-R3"],"network-elements":[]}},
-"ADVA-R1":{"id":"ADVA-R1","name":"ADVA-R1","location":{"lat":59.060684,"lon":16.496340},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R1","ADVA-R1-ADVA-R2","ADVA-R3-ADVA-R1"],"network-elements":["ADVA-R1","Coriant-204"]}},
-"ADVA-R2":{"id":"ADVA-R2","name":"ADVA-R2","location":{"lat":59.652001,"lon":17.149636},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R2","ADVA-R1-ADVA-R2","ADVA-R2-ADVA-R3","ADVA-R2-Coriant-R2"],"network-elements":["ADVA-R2","Coriant-202"]}},
-"ADVA-R3":{"id":"ADVA-R3","name":"ADVA-R3","location":{"lat":59.260519,"lon":17.115525},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-ADVA-R3","ADVA-R2-ADVA-R3","ADVA-R3-ADVA-R1","ADVA-R3-Coriant-R3"],"network-elements":["ADVA-R3"]}},
-"Coriant-R1":{"id":"Coriant-R1","name":"Coriant-R1","location":{"lat":59.418652,"lon":19.020660},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R1","Coriant-R1-Coriant-R3","Coriant-R2-Coriant-R1"],"network-elements":["Coriant-R1","Coriant-201"]}},
-"Coriant-R2":{"id":"Coriant-R2","name":"Coriant-R2","location":{"lat":59.649762,"lon":17.923781},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R2","Coriant-R2-Coriant-R1","Coriant-R3-Coriant-R2","ADVA-R2-Coriant-R2"],"network-elements":["Coriant-R2"]}},
-"Coriant-R3":{"id":"Coriant-R3","name":"Coriant-R3","location":{"lat":59.260319,"lon":17.911079},"amsl-ground":18,"type":"physical-network-function","references":{"site-links":["Telia-Lab-Coriant-R3","Coriant-R1-Coriant-R3","Coriant-R3-Coriant-R2","ADVA-R3-Coriant-R3"],"network-elements":["Coriant-R3","Coriant-203"]}}
-    }
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json
deleted file mode 100644
index c226245..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-common@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,738 +0,0 @@
-{ "schema-information": {
-
-"tapi-common": {
-"id": "tapi-common",
-"is-read-only": false,
-"description": ["This module contains TAPI Common Model definitions. Source: TapiCommon.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"service-interface-point-uuid": {
-"id": "service-interface-point-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-interface-point-ref-g": {
-"id": "service-interface-point-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"administrative-state": {
-"id": "administrative-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"operational-state": {
-"id": "operational-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"lifecycle-state": {
-"id": "lifecycle-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"admin-state-pac-g": {
-"id": "admin-state-pac-g",
-"is-read-only": false,
-"description": ["Provides state attributes that are applicable to an entity that can be administered. Such an entity also has operational and lifecycle aspects."]
-},
-"uuid": {
-"id": "uuid",
-"is-read-only": false,
-"description": ["UUID: An identifier that is universally unique within an identifier space, where the identifier space is itself globally unique, and immutable. An UUID carries no semantics with respect to the purpose or state of the entity. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"]
-},
-"name": {
-"id": "name",
-"is-read-only": false,
-"description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."]
-},
-"global-class-g": {
-"id": "global-class-g",
-"is-read-only": false,
-"description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."]
-},
-"lifecycle-state": {
-"id": "lifecycle-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"lifecycle-state-pac-g": {
-"id": "lifecycle-state-pac-g",
-"is-read-only": false,
-"description": ["Provides state attributes for an entity that has lifeccycle aspects only."]
-},
-"local-id": {
-"id": "local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"name": {
-"id": "name",
-"is-read-only": false,
-"description": ["List of names. A property of an entity with a value that is unique in some namespace but may change during the life of the entity. A name carries no semantics with respect to the purpose of the entity."]
-},
-"local-class-g": {
-"id": "local-class-g",
-"is-read-only": false,
-"description": ["The TAPI GlobalComponent serves as the super class for all TAPI entities that can be directly retrieved by their ID. As such, these are first class entities and their ID is expected to be globally unique."]
-},
-"operational-state": {
-"id": "operational-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"lifecycle-state": {
-"id": "lifecycle-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"operational-state-pac-g": {
-"id": "operational-state-pac-g",
-"is-read-only": false,
-"description": ["Provides state attributes that are applicable to an entity that reflects operational aspects. Such an entity is expected to also have lifecycle aspects."]
-},
-"context": {
-"id": "context",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-interface-point": {
-"id": "service-interface-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"tapi-context-g": {
-"id": "tapi-context-g",
-"is-read-only": false,
-"description": ["The Network Control Domain (NCD) object class represents the scope of control that a particular SDN controller has with respect to a particular network, (i.e., encompassing a designated set of interconnected (virtual) network elements)."]
-},
-"resource-spec-g": {
-"id": "resource-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-spec-g": {
-"id": "service-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["Usage of layerProtocolName [>1] in the ServiceInterfacePoint should be considered experimental"]
-},
-"supported-layer-protocol-qualifier": {
-"id": "supported-layer-protocol-qualifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-interface-point-g": {
-"id": "service-interface-point-g",
-"is-read-only": false,
-"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."]
-},
-"total-potential-capacity": {
-"id": "total-potential-capacity",
-"is-read-only": false,
-"description": ["An optimistic view of the capacity of the TopologicalEntity assuming that any shared capacity is available to be taken."]
-},
-"available-capacity": {
-"id": "available-capacity",
-"is-read-only": false,
-"description": ["Capacity available to be assigned."]
-},
-"capacity-pac-g": {
-"id": "capacity-pac-g",
-"is-read-only": false,
-"description": ["The TopologicalEntity derives capacity from the underlying realization. A TopologicalEntity may be an abstraction and virtualization of a subset of the underlying capability offered in a view or may be directly reflecting the underlying realization. A TopologicalEntity may be directly used in the view or may be assigned to another view for use. The clients supported by a multi-layer TopologicalEntity may interact such that the resources used by one client may impact those available to another. This is derived from the LTP spec details. Represents the capacity available to user (client) along with client interaction and usage. A TopologicalEntity may reflect one or more client protocols and one or more members for each profile."]
-},
-"termination-direction": {
-"id": "termination-direction",
-"is-read-only": false,
-"description": ["The overall directionality of the LP. - A BIDIRECTIONAL LP will have some SINK and/or SOURCE flowss. - A SINK LP can only contain elements with SINK flows or CONTRA_DIRECTION_SOURCE flows - A SOURCE LP can only contain SOURCE flows or CONTRA_DIRECTION_SINK flows"]
-},
-"termination-state": {
-"id": "termination-state",
-"is-read-only": false,
-"description": ["Indicates whether the layer is terminated and if so how."]
-},
-"termination-pac-g": {
-"id": "termination-pac-g",
-"is-read-only": false,
-"description": ["Each transport layer is represented by a LayerProtocol (LP) instance. The LayerProtocol instances it can be used for controlling termination and monitoring functionality. It can also be used for controlling the adaptation (i.e. encapsulation and/or multiplexing of client signal), tandem connection monitoring, traffic conditioning and/or shaping functionality at an intermediate point along a connection. Where the client – server relationship is fixed 1:1 and immutable, the layers can be encapsulated in a single LTP instance. Where the is a n:1 relationship between client and server, the layers must be split over two separate instances of LTP."]
-},
-"LAYER_PROTOCOL_QUALIFIER": {
-"id": "LAYER_PROTOCOL_QUALIFIER",
-"is-read-only": false,
-"description": ["none"]
-},
-"LOCKED": {
-"id": "LOCKED",
-"is-read-only": false,
-"description": ["Users are administratively prohibited from making use of the resource."]
-},
-"UNLOCKED": {
-"id": "UNLOCKED",
-"is-read-only": false,
-"description": ["Users are allowed to use the resource"]
-},
-"administrative-state": {
-"id": "administrative-state",
-"is-read-only": false,
-"description": ["The possible values of the administrativeState."]
-},
-"date-and-time": {
-"id": "date-and-time",
-"is-read-only": false,
-"description": ["This primitive type defines the date and time according to the following structure: yyyyMMddhhmmss.s[Z|{+|-}HHMm] where: yyyy 0000..9999 year MM 01..12 month dd 01..31 day hh 00..23 hour mm 00..59 minute ss 00..59 second s .0...9 tenth of second (set to .0 if EMS or NE cannot support this granularity) Z Z indicates UTC (rather than local time) {+|-} + or - delta from UTC HH 00..23 time zone difference in hours Mm 00..59 time zone difference in minutes."]
-},
-"MINIMIZE": {
-"id": "MINIMIZE",
-"is-read-only": false,
-"description": ["none"]
-},
-"MAXIMIZE": {
-"id": "MAXIMIZE",
-"is-read-only": false,
-"description": ["none"]
-},
-"ALLOW": {
-"id": "ALLOW",
-"is-read-only": false,
-"description": ["none"]
-},
-"DISALLOW": {
-"id": "DISALLOW",
-"is-read-only": false,
-"description": ["none"]
-},
-"DONT_CARE": {
-"id": "DONT_CARE",
-"is-read-only": false,
-"description": ["none"]
-},
-"directive-value": {
-"id": "directive-value",
-"is-read-only": false,
-"description": ["none"]
-},
-"BIDIRECTIONAL": {
-"id": "BIDIRECTIONAL",
-"is-read-only": false,
-"description": ["The Fowarding entity supports both BIDIRECTIONAL flows at all Ports (i.e. all Ports have both an INPUT flow and an OUTPUT flow defined)"]
-},
-"UNIDIRECTIONAL": {
-"id": "UNIDIRECTIONAL",
-"is-read-only": false,
-"description": ["The Forwarding entity has Ports that are either INPUT or OUTPUT. It has no BIDIRECTIONAL Ports."]
-},
-"UNDEFINED_OR_UNKNOWN": {
-"id": "UNDEFINED_OR_UNKNOWN",
-"is-read-only": false,
-"description": ["Not a normal state. The system is unable to determine the correct value."]
-},
-"forwarding-direction": {
-"id": "forwarding-direction",
-"is-read-only": false,
-"description": ["The directionality of a Forwarding entity."]
-},
-"ODU": {
-"id": "ODU",
-"is-read-only": false,
-"description": ["Models the ODU layer as per ITU-T G.872"]
-},
-"ETH": {
-"id": "ETH",
-"is-read-only": false,
-"description": ["Models the ETH layer as per ITU-T G.8010"]
-},
-"DSR": {
-"id": "DSR",
-"is-read-only": false,
-"description": ["Models a Digital Signal of an unspecified rate. This value can be used when the intent is to respresent an generic digital layer signal without making any statement on its format or overhead (processing) capabilities."]
-},
-"PHOTONIC_MEDIA": {
-"id": "PHOTONIC_MEDIA",
-"is-read-only": false,
-"description": ["Models the OCH, OTSi, OTSiA, OTSiG, OMS, OTS and Media channels as per ITU-T G.872 (2017) version 4"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["Provides a controlled list of layer protocol names and indicates the naming authority. Note that it is expected that attributes will be added to this structure to convey the naming authority name, the name of the layer protocol using a human readable string and any particular standard reference. Layer protocol names include: - Layer 1 (L1): OTU, ODU - Layer 2 (L2): Carrier Grade Ethernet (ETY, ETH), MPLS-TP (MT)"]
-},
-"PLANNED": {
-"id": "PLANNED",
-"is-read-only": false,
-"description": ["The resource is planned but is not present in the network."]
-},
-"POTENTIAL_AVAILABLE": {
-"id": "POTENTIAL_AVAILABLE",
-"is-read-only": false,
-"description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."]
-},
-"POTENTIAL_BUSY": {
-"id": "POTENTIAL_BUSY",
-"is-read-only": false,
-"description": ["The supporting resources are present in the network but are shared with other clients; or require further configuration before they can be used; or both. o When a potential resource is configured and allocated to a client it is moved to the installed state for that client. o If the potential resource has been consumed (e.g. allocated to another client) it is moved to the planned state for all other clients."]
-},
-"INSTALLED": {
-"id": "INSTALLED",
-"is-read-only": false,
-"description": ["The resource is present in the network and is capable of providing the service expected."]
-},
-"PENDING_REMOVAL": {
-"id": "PENDING_REMOVAL",
-"is-read-only": false,
-"description": ["The resource has been marked for removal"]
-},
-"lifecycle-state": {
-"id": "lifecycle-state",
-"is-read-only": false,
-"description": ["The possible values of the lifecycleState."]
-},
-"value-name": {
-"id": "value-name",
-"is-read-only": false,
-"description": ["The name of the value. The value need not have a name."]
-},
-"value": {
-"id": "value",
-"is-read-only": false,
-"description": ["The value"]
-},
-"name-and-value-g": {
-"id": "name-and-value-g",
-"is-read-only": false,
-"description": ["A scoped name-value pair"]
-},
-"DISABLED": {
-"id": "DISABLED",
-"is-read-only": false,
-"description": ["The resource is unable to meet the SLA of the user of the resource. If no (explicit) SLA is defined the resource is disabled if it is totally inoperable and unable to provide service to the user."]
-},
-"ENABLED": {
-"id": "ENABLED",
-"is-read-only": false,
-"description": ["The resource is partially or fully operable and available for use"]
-},
-"operational-state": {
-"id": "operational-state",
-"is-read-only": false,
-"description": ["The possible values of the operationalState."]
-},
-"BIDIRECTIONAL": {
-"id": "BIDIRECTIONAL",
-"is-read-only": false,
-"description": ["The Port has both an INPUT flow and an OUTPUT flow defined."]
-},
-"INPUT": {
-"id": "INPUT",
-"is-read-only": false,
-"description": ["The Port only has definition for a flow into the Forwarding entity (i.e. an ingress flow)."]
-},
-"OUTPUT": {
-"id": "OUTPUT",
-"is-read-only": false,
-"description": ["The Port only has definition for a flow out of the Forwarding entity (i.e. an egress flow)."]
-},
-"UNIDENTIFIED_OR_UNKNOWN": {
-"id": "UNIDENTIFIED_OR_UNKNOWN",
-"is-read-only": false,
-"description": ["Not a normal state. The system is unable to determine the correct value."]
-},
-"port-direction": {
-"id": "port-direction",
-"is-read-only": false,
-"description": ["The orientation of flow at the Port of a Forwarding entity"]
-},
-"SYMMETRIC": {
-"id": "SYMMETRIC",
-"is-read-only": false,
-"description": ["none"]
-},
-"ROOT": {
-"id": "ROOT",
-"is-read-only": false,
-"description": ["none"]
-},
-"LEAF": {
-"id": "LEAF",
-"is-read-only": false,
-"description": ["none"]
-},
-"TRUNK": {
-"id": "TRUNK",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNKNOWN": {
-"id": "UNKNOWN",
-"is-read-only": false,
-"description": ["none"]
-},
-"port-role": {
-"id": "port-role",
-"is-read-only": false,
-"description": ["The role of an end in the context of the function of the forwarding entity that it bounds"]
-},
-"BIDIRECTIONAL": {
-"id": "BIDIRECTIONAL",
-"is-read-only": false,
-"description": ["A Termination with both SINK and SOURCE flows."]
-},
-"SINK": {
-"id": "SINK",
-"is-read-only": false,
-"description": ["The flow is up the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SINK flow: - will arrive at at the base of the termination function (the server side) where it is essentially at an INPUT to the termination component - then will be decoded and deconstructed - then relevant parts of the flow will be sent out of the termination function (the client side) where it is essentially at an OUTPUT from the termination component A SINK termination is one that only supports a SINK flow. A SINK termiation can be bound to an OUTPUT Port of a Forwarding entity"]
-},
-"SOURCE": {
-"id": "SOURCE",
-"is-read-only": false,
-"description": ["The flow is down the layer stack from the server side to the client side. Considering an example of a Termination function within the termination entity, a SOURCE flow: - will arrive at at the top of the termination function (the client side) where it is essentially at an INPUT to the termination component - then will be assembled with various overheads etc and will be coded - then coded form of the assembly of flow will be sent out of the termination function (the server side) where it is essentially at an OUTPUT from the termination component A SOURCE termination is one that only supports a SOURCE flow. A SOURCE termiation can be bound to an INPUT Port of a Forwarding entity"]
-},
-"UNDEFINED_OR_UNKNOWN": {
-"id": "UNDEFINED_OR_UNKNOWN",
-"is-read-only": false,
-"description": ["Not a normal state. The system is unable to determine the correct value."]
-},
-"termination-direction": {
-"id": "termination-direction",
-"is-read-only": false,
-"description": ["The directionality of a termination entity"]
-},
-"LP_CAN_NEVER_TERMINATE": {
-"id": "LP_CAN_NEVER_TERMINATE",
-"is-read-only": false,
-"description": ["A non-flexible case that can never be terminated."]
-},
-"LT_NOT_TERMINATED": {
-"id": "LT_NOT_TERMINATED",
-"is-read-only": false,
-"description": ["A flexible termination that can terminate but is currently not terminated."]
-},
-"TERMINATED_SERVER_TO_CLIENT_FLOW": {
-"id": "TERMINATED_SERVER_TO_CLIENT_FLOW",
-"is-read-only": false,
-"description": ["A flexible termination that is currently terminated for server to client flow only."]
-},
-"TERMINATED_CLIENT_TO_SERVER_FLOW": {
-"id": "TERMINATED_CLIENT_TO_SERVER_FLOW",
-"is-read-only": false,
-"description": ["A flexible termination that is currently terminated for client to server flow only."]
-},
-"TERMINATED_BIDIRECTIONAL": {
-"id": "TERMINATED_BIDIRECTIONAL",
-"is-read-only": false,
-"description": ["A flexible termination that is currently terminated in both directions of flow."]
-},
-"LT_PERMENANTLY_TERMINATED": {
-"id": "LT_PERMENANTLY_TERMINATED",
-"is-read-only": false,
-"description": ["A non-flexible termination that is always terminated (in both directions of flow for a bidirectional case and in the one direction of flow for both unidirectional cases)."]
-},
-"TERMINATION_STATE_UNKNOWN": {
-"id": "TERMINATION_STATE_UNKNOWN",
-"is-read-only": false,
-"description": ["There TerminationState cannot be determined."]
-},
-"termination-state": {
-"id": "termination-state",
-"is-read-only": false,
-"description": ["Provides support for the range of behaviours and specific states that an LP can take with respect to termination of the signal. Indicates to what degree the LayerTermination is terminated."]
-},
-"uuid": {
-"id": "uuid",
-"is-read-only": false,
-"description": ["The univeral ID value where the mechanism for generation is defned by some authority not directly referenced in the structure. UUID here uses string representation as defined in RFC 4122. The canonical representation uses lowercase characters. Pattern: [0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-' + '[0-9a-fA-F]{4}-[0-9a-fA-F]{12} Example of a UUID in string representation: f81d4fae-7dec-11d0-a765-00a0c91e6bf6"]
-},
-"total-size": {
-"id": "total-size",
-"is-read-only": false,
-"description": ["Total capacity of the TopologicalEntity in MB/s. In case of bandwidthProfile, this is expected to same as the committedInformationRate."]
-},
-"bandwidth-profile": {
-"id": "bandwidth-profile",
-"is-read-only": false,
-"description": ["none"]
-},
-"capacity-g": {
-"id": "capacity-g",
-"is-read-only": false,
-"description": ["Information on capacity of a particular TopologicalEntity."]
-},
-"bw-profile-type": {
-"id": "bw-profile-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"committed-information-rate": {
-"id": "committed-information-rate",
-"is-read-only": false,
-"description": ["none"]
-},
-"committed-burst-size": {
-"id": "committed-burst-size",
-"is-read-only": false,
-"description": ["none"]
-},
-"peak-information-rate": {
-"id": "peak-information-rate",
-"is-read-only": false,
-"description": ["none"]
-},
-"peak-burst-size": {
-"id": "peak-burst-size",
-"is-read-only": false,
-"description": ["none"]
-},
-"color-aware": {
-"id": "color-aware",
-"is-read-only": false,
-"description": ["none"]
-},
-"coupling-flag": {
-"id": "coupling-flag",
-"is-read-only": false,
-"description": ["none"]
-},
-"bandwidth-profile-g": {
-"id": "bandwidth-profile-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"value": {
-"id": "value",
-"is-read-only": false,
-"description": ["none"]
-},
-"unit": {
-"id": "unit",
-"is-read-only": false,
-"description": ["none"]
-},
-"capacity-value-g": {
-"id": "capacity-value-g",
-"is-read-only": false,
-"description": ["The Capacity (Bandwidth) values that are applicable for digital layers."]
-},
-"TB": {
-"id": "TB",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in TeraBytes"]
-},
-"TBPS": {
-"id": "TBPS",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in Terabit-per-second"]
-},
-"GB": {
-"id": "GB",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in GigaBytes"]
-},
-"GBPS": {
-"id": "GBPS",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in Gigabit-per-second"]
-},
-"MB": {
-"id": "MB",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in MegaBytes"]
-},
-"MBPS": {
-"id": "MBPS",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in Megabit-per-second"]
-},
-"KB": {
-"id": "KB",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in KiloBytes"]
-},
-"KBPS": {
-"id": "KBPS",
-"is-read-only": false,
-"description": ["Indicates that the integer CapacityValue is in Kilobit-per-second"]
-},
-"GHz": {
-"id": "GHz",
-"is-read-only": false,
-"description": ["none"]
-},
-"MHz": {
-"id": "MHz",
-"is-read-only": false,
-"description": ["none"]
-},
-"capacity-unit": {
-"id": "capacity-unit",
-"is-read-only": false,
-"description": ["none"]
-},
-"MEF_10.x": {
-"id": "MEF_10.x",
-"is-read-only": false,
-"description": ["none"]
-},
-"RFC_2697": {
-"id": "RFC_2697",
-"is-read-only": false,
-"description": ["none"]
-},
-"RFC_2698": {
-"id": "RFC_2698",
-"is-read-only": false,
-"description": ["none"]
-},
-"RFC_4115": {
-"id": "RFC_4115",
-"is-read-only": false,
-"description": ["none"]
-},
-"bandwidth-profile-type": {
-"id": "bandwidth-profile-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-time": {
-"id": "end-time",
-"is-read-only": false,
-"description": ["none"]
-},
-"start-time": {
-"id": "start-time",
-"is-read-only": false,
-"description": ["none"]
-},
-"time-range-g": {
-"id": "time-range-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"value": {
-"id": "value",
-"is-read-only": false,
-"description": ["none"]
-},
-"unit": {
-"id": "unit",
-"is-read-only": false,
-"description": ["none"]
-},
-"time-period-g": {
-"id": "time-period-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"YEARS": {
-"id": "YEARS",
-"is-read-only": false,
-"description": ["none"]
-},
-"MONTHS": {
-"id": "MONTHS",
-"is-read-only": false,
-"description": ["none"]
-},
-"DAYS": {
-"id": "DAYS",
-"is-read-only": false,
-"description": ["none"]
-},
-"HOURS": {
-"id": "HOURS",
-"is-read-only": false,
-"description": ["none"]
-},
-"MINUTES": {
-"id": "MINUTES",
-"is-read-only": false,
-"description": ["none"]
-},
-"SECONDS": {
-"id": "SECONDS",
-"is-read-only": false,
-"description": ["none"]
-},
-"MILLISECONDS": {
-"id": "MILLISECONDS",
-"is-read-only": false,
-"description": ["none"]
-},
-"MICROSECONDS": {
-"id": "MICROSECONDS",
-"is-read-only": false,
-"description": ["none"]
-},
-"NANOSECONDS": {
-"id": "NANOSECONDS",
-"is-read-only": false,
-"description": ["none"]
-},
-"PICOSECONDS": {
-"id": "PICOSECONDS",
-"is-read-only": false,
-"description": ["none"]
-},
-"time-unit": {
-"id": "time-unit",
-"is-read-only": false,
-"description": ["none"]
-},
-"period": {
-"id": "period",
-"is-read-only": false,
-"description": ["none"]
-},
-"time-interval-g": {
-"id": "time-interval-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-qualifier": {
-"id": "layer-protocol-qualifier",
-"is-read-only": false,
-"description": ["This enumeration is used to qualify the sub-layers (if applicable) for a specific LayerProtocol. This extensible enumeration is intentionally empty in the common module and will be augmented with layer-specific values in the respective technology-specific modules. Examples: - LayerProtocolName := OPTICAL_DATA_UNIT LayerProtocolQualifier := 'ODU_FLEX', 'ODU_0', 'ODU_1', 'ODU_2', 'ODU_2E', 'ODU_3', 'ODU_4'', 'ODU_CBR'', 'ODU_GFP'', 'ODU_GFP_HAO', etc - LayerProtocolName := DIGITAL_SIGNAL_RATE LayerProtocolQualifier := 'GBE', '10_GBE_WAN', '10_GBE_LAN', '100_GBE', 'FC_100', 'FC_200', 'FC_400', 'FC_800', 'FC_1200', 'FC_1600', 'FC_3200', 'STM_1', 'STM_4', 'STM_16', 'STM_64', 'STM_256', 'OC_3', 'OC_12', 'OC_48', 'OC_192', 'OC_768', 'OTU_1', 'OTU_2', 'OTU_2E', 'OTU_3', 'OTU_4', 'GPON', 'XGPON', 'IB_SDR', 'IB_DDR', 'IB_QDR', 'SBCON_ESCON', 'DVB_ASI', 'SDI', 'SDI_1G5', 'SDI_3G', etc - LayerProtocolName := PHOTONIC_MEDIA LayerProtocolQualifier := OCH, OTSi, OTSiA, NMC, NMCA, SMC, SMCA, OMS, OTS"]
-},
-"get-service-interface-point-details": {
-"id": "get-service-interface-point-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"sip-id-or-name": {
-"id": "sip-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"sip": {
-"id": "sip",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-service-interface-point-list": {
-"id": "get-service-interface-point-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"sip": {
-"id": "sip",
-"is-read-only": false,
-"description": ["none"]
-},
-"update-service-interface-point": {
-"id": "update-service-interface-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"sip-id-or-name": {
-"id": "sip-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json
deleted file mode 100644
index d363f43..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-connectivity@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,693 +0,0 @@
-{ "schema-information": {
-
-"tapi-connectivity": {
-"id": "tapi-connectivity",
-"is-read-only": false,
-"description": ["This module contains TAPI Connectivity Model definitions. Source: TapiConnectivity.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"connectivity-service-uuid": {
-"id": "connectivity-service-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-service-ref-g": {
-"id": "connectivity-service-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-service-end-point-local-id": {
-"id": "connectivity-service-end-point-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-service-end-point-ref-g": {
-"id": "connectivity-service-end-point-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-end-point-uuid": {
-"id": "connection-end-point-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-end-point-ref-g": {
-"id": "connection-end-point-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-uuid": {
-"id": "connection-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-ref-g": {
-"id": "connection-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"switch-control-uuid": {
-"id": "switch-control-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"switch-control-ref-g": {
-"id": "switch-control-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"route-local-id": {
-"id": "route-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"route-ref-g": {
-"id": "route-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-end-point": {
-"id": "connection-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"lower-connection": {
-"id": "lower-connection",
-"is-read-only": false,
-"description": ["An Connection object supports a recursive aggregation relationship such that the internal construction of an Connection can be exposed as multiple lower level Connection objects (partitioning). Aggregation is used as for the Node/Topology to allow changes in hierarchy. Connection aggregation reflects Node/Topology aggregation. The FC represents a Cross-Connection in an NE. The Cross-Connection in an NE is not necessarily the lowest level of FC partitioning."]
-},
-"supported-client-link": {
-"id": "supported-client-link",
-"is-read-only": false,
-"description": ["none"]
-},
-"route": {
-"id": "route",
-"is-read-only": false,
-"description": ["none"]
-},
-"switch-control": {
-"id": "switch-control",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-g": {
-"id": "connection-g",
-"is-read-only": false,
-"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-qualifier": {
-"id": "layer-protocol-qualifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"parent-node-edge-point": {
-"id": "parent-node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"client-node-edge-point": {
-"id": "client-node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"aggregated-connection-end-point": {
-"id": "aggregated-connection-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-port-direction": {
-"id": "connection-port-direction",
-"is-read-only": false,
-"description": ["The orientation of defined flow at the EndPoint."]
-},
-"connection-port-role": {
-"id": "connection-port-role",
-"is-read-only": false,
-"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
-},
-"connection-end-point-g": {
-"id": "connection-end-point-g",
-"is-read-only": false,
-"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."]
-},
-"service-layer": {
-"id": "service-layer",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-type": {
-"id": "service-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-level": {
-"id": "service-level",
-"is-read-only": false,
-"description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"]
-},
-"requested-capacity": {
-"id": "requested-capacity",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-direction": {
-"id": "connectivity-direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"schedule": {
-"id": "schedule",
-"is-read-only": false,
-"description": ["none"]
-},
-"coroute-inclusion": {
-"id": "coroute-inclusion",
-"is-read-only": false,
-"description": ["none"]
-},
-"diversity-exclusion": {
-"id": "diversity-exclusion",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-constraint-g": {
-"id": "connectivity-constraint-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection": {
-"id": "connection",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-service-g": {
-"id": "connectivity-service-g",
-"is-read-only": false,
-"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-qualifier": {
-"id": "layer-protocol-qualifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-interface-point": {
-"id": "service-interface-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-end-point": {
-"id": "connection-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"capacity": {
-"id": "capacity",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["The orientation of defined flow at the EndPoint."]
-},
-"role": {
-"id": "role",
-"is-read-only": false,
-"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
-},
-"protection-role": {
-"id": "protection-role",
-"is-read-only": false,
-"description": ["To specify the protection role of this Port when create or update ConnectivityService."]
-},
-"connectivity-service-end-point-g": {
-"id": "connectivity-service-end-point-g",
-"is-read-only": false,
-"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"]
-},
-"connection-end-point": {
-"id": "connection-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"route-g": {
-"id": "route-g",
-"is-read-only": false,
-"description": ["The FC Route (FcRoute) object class models the individual routes of an FC. The route of an FC object is represented by a list of FCs at a lower level. Note that depending on the service supported by an FC, an the FC can have multiple routes."]
-},
-"connectivity-service": {
-"id": "connectivity-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection": {
-"id": "connection",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-context-g": {
-"id": "connectivity-context-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"selected-connection-end-point": {
-"id": "selected-connection-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"selected-route": {
-"id": "selected-route",
-"is-read-only": false,
-"description": ["none"]
-},
-"selection-control": {
-"id": "selection-control",
-"is-read-only": false,
-"description": ["Degree of administrative control applied to the switch selection."]
-},
-"selection-reason": {
-"id": "selection-reason",
-"is-read-only": false,
-"description": ["The reason for the current switch selection."]
-},
-"switch-direction": {
-"id": "switch-direction",
-"is-read-only": false,
-"description": ["Indicates whether the switch selects from ingress to the FC or to egress of the FC, or both."]
-},
-"switch-g": {
-"id": "switch-g",
-"is-read-only": false,
-"description": ["The class models the switched forwarding of traffic (traffic flow) between FcPorts (ConnectionEndPoints) and is present where there is protection functionality in the FC (Connection). If an FC exposes protection (having two or more FcPorts that provide alternative identical inputs/outputs), the FC will have one or more associated FcSwitch objects to represent the alternative flow choices visible at the edge of the FC. The FC switch represents and defines a protection switch structure encapsulated in the FC. Essentially performs one of the functions of the Protection Group in a traditional model. It associates to 2 or more FcPorts each playing the role of a Protection Unit. One or more protection, i.e. standby/backup, FcPorts provide protection for one or more working (i.e. regular/main/preferred) FcPorts where either protection or working can feed one or more protected FcPort. The switch may be used in revertive or non-revertive (symmetric) mode. When in revertive mode it may define a waitToRestore time. It may be used in one of several modes including source switch, destination switched, source and destination switched etc (covering cases such as 1+1 and 1:1). It may be locked out (prevented from switching), force switched or manual switched. It will indicate switch state and change of state. The switch can be switched away from all sources such that it becomes open and hence two coordinated switches can both feed the same LTP so long as at least one of the two is switched away from all sources (is 'open'). The ability for a Switch to be 'high impedance' allows bidirectional ForwardingConstructs to be overlaid on the same bidirectional LTP where the appropriate control is enabled to prevent signal conflict. This ability allows multiple alternate routes to be present that otherwise would be in conflict."]
-},
-"sub-switch-control": {
-"id": "sub-switch-control",
-"is-read-only": false,
-"description": ["none"]
-},
-"switch": {
-"id": "switch",
-"is-read-only": false,
-"description": ["none"]
-},
-"switch-control-g": {
-"id": "switch-control-g",
-"is-read-only": false,
-"description": ["Represents the capability to control and coordinate switches, to add/delete/modify FCs and to add/delete/modify LTPs/LPs so as to realize a protection scheme."]
-},
-"resilience-type": {
-"id": "resilience-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"restoration-coordinate-type": {
-"id": "restoration-coordinate-type",
-"is-read-only": false,
-"description": ["The coordination mechanism between multi-layers."]
-},
-"restore-priority": {
-"id": "restore-priority",
-"is-read-only": false,
-"description": ["none"]
-},
-"reversion-mode": {
-"id": "reversion-mode",
-"is-read-only": false,
-"description": ["Indcates whether the protection scheme is revertive or non-revertive."]
-},
-"wait-to-revert-time": {
-"id": "wait-to-revert-time",
-"is-read-only": false,
-"description": ["If the protection system is revertive, this attribute specifies the time, in minutes, to wait after a fault clears on a higher priority (preferred) resource before reverting to the preferred resource."]
-},
-"hold-off-time": {
-"id": "hold-off-time",
-"is-read-only": false,
-"description": ["This attribute indicates the time, in milliseconds, between declaration of signal degrade or signal fail, and the initialization of the protection switching algorithm."]
-},
-"is-lock-out": {
-"id": "is-lock-out",
-"is-read-only": false,
-"description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."]
-},
-"is-frozen": {
-"id": "is-frozen",
-"is-read-only": false,
-"description": ["Temporarily prevents any switch action to be taken and, as such, freezes the current state. Until the freeze is cleared, additional near-end external commands are rejected and fault condition changes and received APS messages are ignored. All administrative controls of any aspect of protection are rejected."]
-},
-"is-coordinated-switching-both-ends": {
-"id": "is-coordinated-switching-both-ends",
-"is-read-only": false,
-"description": ["Is operating such that switching at both ends of each flow acorss the FC is coordinated at both ingress and egress ends."]
-},
-"max-switch-times": {
-"id": "max-switch-times",
-"is-read-only": false,
-"description": ["Used to limit the maximum swtich times. When work fault disappears , and traffic return to the original work path, switch counter reset."]
-},
-"preferred-restoration-layer": {
-"id": "preferred-restoration-layer",
-"is-read-only": false,
-"description": ["Indicate which layer this resilience parameters package configured for."]
-},
-"resilience-constraint-g": {
-"id": "resilience-constraint-g",
-"is-read-only": false,
-"description": ["A list of control parameters to apply to a switch."]
-},
-"connection-end-point": {
-"id": "connection-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"cep-list-g": {
-"id": "cep-list-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"POINT_TO_POINT_CONNECTIVITY": {
-"id": "POINT_TO_POINT_CONNECTIVITY",
-"is-read-only": false,
-"description": ["none"]
-},
-"POINT_TO_MULTIPOINT_CONNECTIVITY": {
-"id": "POINT_TO_MULTIPOINT_CONNECTIVITY",
-"is-read-only": false,
-"description": ["none"]
-},
-"MULTIPOINT_CONNECTIVITY": {
-"id": "MULTIPOINT_CONNECTIVITY",
-"is-read-only": false,
-"description": ["none"]
-},
-"ROOTED_MULTIPOINT_CONNECTIVITY": {
-"id": "ROOTED_MULTIPOINT_CONNECTIVITY",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-type": {
-"id": "service-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"REVERTIVE": {
-"id": "REVERTIVE",
-"is-read-only": false,
-"description": ["An FC switched to a lower priority (non-preferred) resource will revert to a higher priority (preferred) resource when that recovers (potentially after some hold-off time)."]
-},
-"NON-REVERTIVE": {
-"id": "NON-REVERTIVE",
-"is-read-only": false,
-"description": ["An FC switched to a lower priority (non-preferred) resource will not revert to a higher priority (preferred) resource when that recovers."]
-},
-"reversion-mode": {
-"id": "reversion-mode",
-"is-read-only": false,
-"description": ["The reversion mode associated with protection."]
-},
-"LOCK_OUT": {
-"id": "LOCK_OUT",
-"is-read-only": false,
-"description": ["The resource is configured to temporarily not be available for use in the protection scheme(s) it is part of. This overrides all other protection control states including forced. If the item is locked out then it cannot be used under any circumstances. Note: Only relevant when part of a protection scheme."]
-},
-"NORMAL": {
-"id": "NORMAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"MANUAL": {
-"id": "MANUAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"FORCED": {
-"id": "FORCED",
-"is-read-only": false,
-"description": ["none"]
-},
-"selection-control": {
-"id": "selection-control",
-"is-read-only": false,
-"description": ["Possible degrees of administrative control applied to the Route selection."]
-},
-"LOCKOUT": {
-"id": "LOCKOUT",
-"is-read-only": false,
-"description": ["none"]
-},
-"NORMAL": {
-"id": "NORMAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"MANUAL": {
-"id": "MANUAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"FORCED": {
-"id": "FORCED",
-"is-read-only": false,
-"description": ["none"]
-},
-"WAIT_TO_REVERT": {
-"id": "WAIT_TO_REVERT",
-"is-read-only": false,
-"description": ["none"]
-},
-"SIGNAL_DEGRADE": {
-"id": "SIGNAL_DEGRADE",
-"is-read-only": false,
-"description": ["none"]
-},
-"SIGNAL_FAIL": {
-"id": "SIGNAL_FAIL",
-"is-read-only": false,
-"description": ["none"]
-},
-"selection-reason": {
-"id": "selection-reason",
-"is-read-only": false,
-"description": ["The cause of the current route selection."]
-},
-"NO_COORDINATE": {
-"id": "NO_COORDINATE",
-"is-read-only": false,
-"description": ["none"]
-},
-"HOLD_OFF_TIME": {
-"id": "HOLD_OFF_TIME",
-"is-read-only": false,
-"description": ["none"]
-},
-"WAIT_FOR_NOTIFICATION": {
-"id": "WAIT_FOR_NOTIFICATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"coordinate-type": {
-"id": "coordinate-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"WORK": {
-"id": "WORK",
-"is-read-only": false,
-"description": ["none"]
-},
-"PROTECT": {
-"id": "PROTECT",
-"is-read-only": false,
-"description": ["none"]
-},
-"PROTECTED": {
-"id": "PROTECTED",
-"is-read-only": false,
-"description": ["none"]
-},
-"NA": {
-"id": "NA",
-"is-read-only": false,
-"description": ["none"]
-},
-"WORK_RESTORE": {
-"id": "WORK_RESTORE",
-"is-read-only": false,
-"description": ["none"]
-},
-"PROTECT_RESTORE": {
-"id": "PROTECT_RESTORE",
-"is-read-only": false,
-"description": ["none"]
-},
-"protection-role": {
-"id": "protection-role",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-connection-details": {
-"id": "get-connection-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id-or-name": {
-"id": "service-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-id-or-name": {
-"id": "connection-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection": {
-"id": "connection",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-connectivity-service-list": {
-"id": "get-connectivity-service-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-connectivity-service-details": {
-"id": "get-connectivity-service-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id-or-name": {
-"id": "service-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"create-connectivity-service": {
-"id": "create-connectivity-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-constraint": {
-"id": "connectivity-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"routing-constraint": {
-"id": "routing-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-constraint": {
-"id": "topology-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"resilience-constraint": {
-"id": "resilience-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"update-connectivity-service": {
-"id": "update-connectivity-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id-or-name": {
-"id": "service-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-constraint": {
-"id": "connectivity-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"routing-constraint": {
-"id": "routing-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-constraint": {
-"id": "topology-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"resilience-constraint": {
-"id": "resilience-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"delete-connectivity-service": {
-"id": "delete-connectivity-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id-or-name": {
-"id": "service-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json
deleted file mode 100644
index 01b8c92..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-dsr@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,203 +0,0 @@
-{ "schema-information": {
-
-"tapi-dsr": {
-"id": "tapi-dsr",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE": {
-"id": "DIGITAL_SIGNAL_TYPE",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_GigE": {
-"id": "DIGITAL_SIGNAL_TYPE_GigE",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_10_GigE_LAN": {
-"id": "DIGITAL_SIGNAL_TYPE_10_GigE_LAN",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_10_GigE_WAN": {
-"id": "DIGITAL_SIGNAL_TYPE_10_GigE_WAN",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_40_GigE": {
-"id": "DIGITAL_SIGNAL_TYPE_40_GigE",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_100_GigE": {
-"id": "DIGITAL_SIGNAL_TYPE_100_GigE",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_FC_100": {
-"id": "DIGITAL_SIGNAL_TYPE_FC_100",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_FC_200": {
-"id": "DIGITAL_SIGNAL_TYPE_FC_200",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_FC_400": {
-"id": "DIGITAL_SIGNAL_TYPE_FC_400",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_FC_800": {
-"id": "DIGITAL_SIGNAL_TYPE_FC_800",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_FC_1200": {
-"id": "DIGITAL_SIGNAL_TYPE_FC_1200",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_FC_1600": {
-"id": "DIGITAL_SIGNAL_TYPE_FC_1600",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_FC_3200": {
-"id": "DIGITAL_SIGNAL_TYPE_FC_3200",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_STM_1": {
-"id": "DIGITAL_SIGNAL_TYPE_STM_1",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_STM_4": {
-"id": "DIGITAL_SIGNAL_TYPE_STM_4",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_STM_16": {
-"id": "DIGITAL_SIGNAL_TYPE_STM_16",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_STM_64": {
-"id": "DIGITAL_SIGNAL_TYPE_STM_64",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_STM_256": {
-"id": "DIGITAL_SIGNAL_TYPE_STM_256",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OC_3": {
-"id": "DIGITAL_SIGNAL_TYPE_OC_3",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OC_12": {
-"id": "DIGITAL_SIGNAL_TYPE_OC_12",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OC_48": {
-"id": "DIGITAL_SIGNAL_TYPE_OC_48",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OC_192": {
-"id": "DIGITAL_SIGNAL_TYPE_OC_192",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OC_768": {
-"id": "DIGITAL_SIGNAL_TYPE_OC_768",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OTU_1": {
-"id": "DIGITAL_SIGNAL_TYPE_OTU_1",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OTU_2": {
-"id": "DIGITAL_SIGNAL_TYPE_OTU_2",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OTU_2E": {
-"id": "DIGITAL_SIGNAL_TYPE_OTU_2E",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OTU_3": {
-"id": "DIGITAL_SIGNAL_TYPE_OTU_3",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_OTU_4": {
-"id": "DIGITAL_SIGNAL_TYPE_OTU_4",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_GPON": {
-"id": "DIGITAL_SIGNAL_TYPE_GPON",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_XGPON": {
-"id": "DIGITAL_SIGNAL_TYPE_XGPON",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_IB_SDR": {
-"id": "DIGITAL_SIGNAL_TYPE_IB_SDR",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_IB_DDR": {
-"id": "DIGITAL_SIGNAL_TYPE_IB_DDR",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_IB_QDR": {
-"id": "DIGITAL_SIGNAL_TYPE_IB_QDR",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_SBCON_ESCON": {
-"id": "DIGITAL_SIGNAL_TYPE_SBCON_ESCON",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_DVB_ASI": {
-"id": "DIGITAL_SIGNAL_TYPE_DVB_ASI",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_SDI": {
-"id": "DIGITAL_SIGNAL_TYPE_SDI",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_SDI_1G5": {
-"id": "DIGITAL_SIGNAL_TYPE_SDI_1G5",
-"is-read-only": false,
-"description": ["none"]
-},
-"DIGITAL_SIGNAL_TYPE_SDI_3G": {
-"id": "DIGITAL_SIGNAL_TYPE_SDI_3G",
-"is-read-only": false,
-"description": ["none"]
-},
-"digital-signal-type": {
-"id": "digital-signal-type",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json
deleted file mode 100644
index 177d081..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-eth@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,1778 +0,0 @@
-{ "schema-information": {
-
-"tapi-eth": {
-"id": "tapi-eth",
-"is-read-only": false,
-"description": ["This module contains TAPI ETH Model definitions. Source: TapiEth.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"auxiliary-function-position-sequence": {
-"id": "auxiliary-function-position-sequence",
-"is-read-only": false,
-"description": ["This attribute indicates the positions (i.e., the relative order) of all the MEP, MIP, and TCS objects which are associated with the CTP."]
-},
-"vlan-config": {
-"id": "vlan-config",
-"is-read-only": false,
-"description": ["This attribute models the ETHx/ETH-m_A_So_MI_Vlan_Config information defined in G.8021. range of type : -1, 0, 1..4094"]
-},
-"csf-rdi-fdi-enable": {
-"id": "csf-rdi-fdi-enable",
-"is-read-only": false,
-"description": ["This attribute models the MI_CSFrdifdiEnable information defined in G.8021."]
-},
-"csf-report": {
-"id": "csf-report",
-"is-read-only": false,
-"description": ["This attribute models the MI_CSF_Reported information defined in G.8021. range of type : true, false"]
-},
-"filter-config-snk": {
-"id": "filter-config-snk",
-"is-read-only": false,
-"description": ["This attribute models the FilteConfig MI defined in 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."]
-},
-"mac-length": {
-"id": "mac-length",
-"is-read-only": false,
-"description": ["This attribute models the MAC_Lenght MI defined in 8.6/G.8021 for the MAC Length Check process. It indicates the allowed maximum frame length in bytes. range of type : 1518, 1522, 2000"]
-},
-"filter-config": {
-"id": "filter-config",
-"is-read-only": false,
-"description": ["This attribute models the FilterConfig MI defined in section 8.3/G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: - All bridges address: 01-80-C2-00-00-10, - Reserved addresses: 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, - GARP Application addresses: 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed."]
-},
-"is-ssf-reported": {
-"id": "is-ssf-reported",
-"is-read-only": false,
-"description": ["This attribute provisions whether the SSF defect should be reported as fault cause or not. It models the ETH-LAG_FT_Sk_MI_SSF_Reported defined in G.8021."]
-},
-"pll-thr": {
-"id": "pll-thr",
-"is-read-only": false,
-"description": ["This attribute provisions the threshold for the number of active ports. If the number of active ports is more than zero but less than the provisioned threshold, a cPLL (Partial Link Loss) is raised. See section 9.7.1.2 of G.8021. range of type : 0..number of ports"]
-},
-"actor-oper-key": {
-"id": "actor-oper-key",
-"is-read-only": false,
-"description": ["See 802.1AX: The current operational value of the Key for the Aggregator. The administrative Key value may differ from the operational Key value for the reasons discussed in 5.6.2. The meaning of particular Key values is of local significance. range of type : 16 bit"]
-},
-"actor-system-id": {
-"id": "actor-system-id",
-"is-read-only": false,
-"description": ["See 802.1AX: A MAC address used as a unique identifier for the System that contains this Aggregator."]
-},
-"actor-system-priority": {
-"id": "actor-system-priority",
-"is-read-only": false,
-"description": ["See 802.1AX: Indicating the priority associated with the Actor’s System ID. range of type : 2-octet"]
-},
-"collector-max-delay": {
-"id": "collector-max-delay",
-"is-read-only": false,
-"description": ["See 802.1AX: The value of this attribute defines the maximum delay, in tens of microseconds, that may be imposed by the Frame Collector between receiving a frame from an Aggregator Parser, and either delivering the frame to its MAC Client or discarding the frame (see IEEE 802.1AX clause 5.2.3.1.1). range of type : 16-bit"]
-},
-"data-rate": {
-"id": "data-rate",
-"is-read-only": false,
-"description": ["See 802.1AX: The current data rate, in bits per second, of the aggregate link. The value is calculated as N times the data rate of a single link in the aggregation, where N is the number of active links."]
-},
-"partner-oper-key": {
-"id": "partner-oper-key",
-"is-read-only": false,
-"description": ["See 802.1AX: The current operational value of the Key for the Aggregator’s current protocol Partner. If the aggregation is manually configured, this Key value will be a value assigned by the local System. range of type : 16-bit"]
-},
-"partner-system-id": {
-"id": "partner-system-id",
-"is-read-only": false,
-"description": ["See 802.1AX: A MAC address consisting of the unique identifier for the current protocol Partner of this Aggregator. A value of zero indicates that there is no known Partner. If the aggregation is manually configured, this System ID value will be a value assigned by the local System."]
-},
-"partner-system-priority": {
-"id": "partner-system-priority",
-"is-read-only": false,
-"description": ["See 802.1AX: Indicates the priority associated with the Partner’s System ID. If the aggregation is manually configured, this System Priority value will be a value assigned by the local System. range of type : 2-octet"]
-},
-"csf-config": {
-"id": "csf-config",
-"is-read-only": false,
-"description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021. range of type : true, false"]
-},
-"traffic-shaping": {
-"id": "traffic-shaping",
-"is-read-only": false,
-"description": ["none"]
-},
-"traffic-conditioning": {
-"id": "traffic-conditioning",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-ctp-pac-g": {
-"id": "eth-ctp-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"ety-term": {
-"id": "ety-term",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-term": {
-"id": "eth-term",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-ctp": {
-"id": "eth-ctp",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-connection-end-point-spec-g": {
-"id": "eth-connection-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"priority-regenerate": {
-"id": "priority-regenerate",
-"is-read-only": false,
-"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_P_Regenerate information defined in G.8021."]
-},
-"ether-type": {
-"id": "ether-type",
-"is-read-only": false,
-"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_Etype information defined in G.8021."]
-},
-"filter-config-1": {
-"id": "filter-config-1",
-"is-read-only": false,
-"description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Filter_Config information defined in G.8021. It indicates the configured filter action for each of the 33 group MAC addresses for control frames. The 33 MAC addresses are: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F. The filter action is Pass or Block. If the destination address of the incoming ETH_CI_D matches one of the above addresses, the filter process shall perform the corresponding configured filter action. If none of the above addresses match, the ETH_CI_D is passed. range of type : MacAddress: 01-80-C2-00-00-10, 01-80-C2-00-00-00 to 01-80-C2-00-00-0F, and 01-80-C2-00-00-20 to 01-80-C2-00-00-2F; ActionEnum: PASS, BLOCK"]
-},
-"frametype-config": {
-"id": "frametype-config",
-"is-read-only": false,
-"description": ["This attribute models the ETHx/ETH-m_A_Sk_MI_Frametype_Config information defined in G.8021. range of type : see Enumeration"]
-},
-"port-vid": {
-"id": "port-vid",
-"is-read-only": false,
-"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PVID information defined in G.8021."]
-},
-"priority-code-point-config": {
-"id": "priority-code-point-config",
-"is-read-only": false,
-"description": ["This attribute models the ETHx/ETH-m _A_Sk_MI_PCP_Config information defined in G.8021. range of type : see Enumeration"]
-},
-"eth-termination-pac-g": {
-"id": "eth-termination-pac-g",
-"is-read-only": false,
-"description": ["This object class models the Ethernet Flow Termination function located at a layer boundary."]
-},
-"is-fts-enabled": {
-"id": "is-fts-enabled",
-"is-read-only": false,
-"description": ["This attribute indicates whether Forced Transmitter Shutdown (FTS) is enabled or not. It models the ETYn_TT_So_MI_FTSEnable information."]
-},
-"is-tx-pause-enabled": {
-"id": "is-tx-pause-enabled",
-"is-read-only": false,
-"description": ["This attribute identifies whether the Transmit Pause process is enabled or not. It models the MI_TxPauseEnable defined in G.8021."]
-},
-"phy-type": {
-"id": "phy-type",
-"is-read-only": false,
-"description": ["This attribute identifies the PHY type of the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.2."]
-},
-"phy-type-list": {
-"id": "phy-type-list",
-"is-read-only": false,
-"description": ["This attribute identifies the possible PHY types that could be supported at the ETY trail termination. See IEEE 802.3 clause 30.3.2.1.3."]
-},
-"ety-termination-pac-g": {
-"id": "ety-termination-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"prio-config-list": {
-"id": "prio-config-list",
-"is-read-only": false,
-"description": ["This attribute indicates the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."]
-},
-"cond-config-list": {
-"id": "cond-config-list",
-"is-read-only": false,
-"description": ["This attribute indicates for the conditioner process the conditioning parameters: - Queue ID: Indicates the Queue ID - Committed Information Rate (CIR): number of bits per second - Committed Burst Size (CBS): number of bytes - Excess Information Rate (EIR): number of bits per second - Excess Burst Size (EBS): number of bytes - Coupling flag (CF): 0 or 1 - Color mode (CM): color-blind and color-aware."]
-},
-"codirectional": {
-"id": "codirectional",
-"is-read-only": false,
-"description": ["This attribute indicates the direction of the conditioner. The value of true means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the sink part of the containing CTP. The value of false means that the conditioner (modeled as a TCS Sink according to G.8021) is associated with the source part of the containing CTP."]
-},
-"traffic-conditioning-pac-g": {
-"id": "traffic-conditioning-pac-g",
-"is-read-only": false,
-"description": ["This object class models the ETH traffic conditioning function as defined in G.8021. Basic attributes: codirectional, condConfigList, prioConfigList"]
-},
-"prio-config-list": {
-"id": "prio-config-list",
-"is-read-only": false,
-"description": ["This attribute configures the Priority Splitter function for the mapping of the Ethernet frame priority (ETH_CI_P) values to the output queue."]
-},
-"queue-config-list": {
-"id": "queue-config-list",
-"is-read-only": false,
-"description": ["This attribute configures the Queue depth and Dropping threshold parameters of the Queue process. The Queue depth sets the maximum size of the queue in bytes. An incoming ETH_CI traffic unit is dropped if there is insufficient space in the queue to hold the whole unit. The Dropping threshold sets the threshold of the queue. If the queue is filled beyond this threshold, incoming ETH_CI traffic units accompanied by the ETH_CI_DE signal set are dropped."]
-},
-"sched-config": {
-"id": "sched-config",
-"is-read-only": false,
-"description": ["This attribute configures the scheduler process. The value of this attribute is for further study because it is for further study in G.8021. Scheduler is a pointer to a Scheduler object, which is to be defined in the future (because in G.8021, this is FFS). Note that the only significance of the GTCS function defined in G.8021 is the use of a common scheduler for shaping. Given that, G.8052 models the common scheduler feature by having a common value for this attribute."]
-},
-"codirectional": {
-"id": "codirectional",
-"is-read-only": false,
-"description": ["This attribute indicates the direction of the shaping function. The value of true means that the shaping (modeled as a TCS Source according to G.8021) is associated with the source part of the containing CTP. The value of false means that the shaping (modeled as a TCS Source according to G.8021) is associated with the sink part of the containing CTP."]
-},
-"traffic-shaping-pac-g": {
-"id": "traffic-shaping-pac-g",
-"is-read-only": false,
-"description": ["This object class models the ETH traffic shaping function as defined in G.8021. Basic attribute: codirectional, prioConfigList, queueConfigList, schedConfig"]
-},
-"client-mel": {
-"id": "client-mel",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-meg-spec-g": {
-"id": "eth-meg-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-mep-common": {
-"id": "eth-mep-common",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-mep-source-pac": {
-"id": "eth-mep-source-pac",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-mep-sink": {
-"id": "eth-mep-sink",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-mep-spec-g": {
-"id": "eth-mep-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-mip-spec-g": {
-"id": "eth-mip-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-lb-msg": {
-"id": "eth-lb-msg",
-"is-read-only": false,
-"description": ["none"]
-},
-"number": {
-"id": "number",
-"is-read-only": false,
-"description": ["G.8052: This parameter specifies how many LB messages to be sent for the LB_Series process."]
-},
-"eth-loopback-job-g": {
-"id": "eth-loopback-job-g",
-"is-read-only": false,
-"description": ["This class represents the Loopback (LB) process (send a series of LB messages carrying a test pattern to a particular MEP). The termination occurs at specified stop time (schedule attribute of OamJob). This class models also the 'loopback discover' process, when destinationAddress is multicast. When number is greater than 1, then the process is to perform a Loopback (LB) Series process (send a series of N LB messages to a particular MEP/MIP."]
-},
-"mep-mac": {
-"id": "mep-mac",
-"is-read-only": false,
-"description": ["This attribute contains the MAC Address of the MEP."]
-},
-"is-cc-enabled": {
-"id": "is-cc-enabled",
-"is-read-only": false,
-"description": ["This attribute models the MI_CC_Enable signal defined in G.8021 and configured as specified in G8051."]
-},
-"cc-period": {
-"id": "cc-period",
-"is-read-only": false,
-"description": ["This attribute models the MI_CC_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CCM message should be sent. Default values are: 3.33 ms for PS, 100 ms for PM, 1 s for FM."]
-},
-"cc-priority": {
-"id": "cc-priority",
-"is-read-only": false,
-"description": ["This attribute models the MI_CC_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CCM message should be sent."]
-},
-"lck-period": {
-"id": "lck-period",
-"is-read-only": false,
-"description": ["This attribute models the MI_LCK_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the LCK messages should be sent. range of type : 1s, 1min"]
-},
-"lck-priority": {
-"id": "lck-priority",
-"is-read-only": false,
-"description": ["This attribute models the MI_LCK_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the LCK messages should be sent."]
-},
-"eth-mep-common-g": {
-"id": "eth-mep-common-g",
-"is-read-only": false,
-"description": ["Basic attributes: adminState, clientMel, megIdentifier, mepMac Continuity Check Process related attributes: ccPeriod, ccPriority, isCcEnabled Lock Process related attributes: lckPeriod, lckPriority This object class models the MEP functions that are common to MEP Sink and MEP Source."]
-},
-"dm-1-priority": {
-"id": "dm-1-priority",
-"is-read-only": false,
-"description": ["This attribute indicates the list of 1DM priorities for the MepSink."]
-},
-"ais-priority": {
-"id": "ais-priority",
-"is-read-only": false,
-"description": ["This attribute models the MI_AIS_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the AIS messages should be sent."]
-},
-"ais-period": {
-"id": "ais-period",
-"is-read-only": false,
-"description": ["This attribute models the MI_AIS_Period signal defined in G.8021 and configured as specified in G8051. It is the frequency at which the AIS messages should be sent. range of type : 1s, 1min"]
-},
-"is-csf-reported": {
-"id": "is-csf-reported",
-"is-read-only": false,
-"description": ["This attribute models the MI_CSF_Reported signal defined in G.8021 and configured as specified in G8051. It configures whether the secondary failure CSF should be reported or not."]
-},
-"is-csf-rdi-fdi-enabled": {
-"id": "is-csf-rdi-fdi-enabled",
-"is-read-only": false,
-"description": ["This attribute models the MI_CSFrdifdiEnable signal defined in G.8021 and configured as specified in G8051."]
-},
-"bandwidth-report": {
-"id": "bandwidth-report",
-"is-read-only": false,
-"description": ["This attribute models the content of the bandwidth report received by the MEP Sink from the peer MEP Source."]
-},
-"lm-degm": {
-"id": "lm-degm",
-"is-read-only": false,
-"description": ["This attribute defines the number of consecutive bad seconds necessary for the 'degraded' detection. See also section 'Degraded signal defect (dDEG)' in G.8021."]
-},
-"lm-deg-thr": {
-"id": "lm-deg-thr",
-"is-read-only": false,
-"description": ["This attribute defines the threshold for declaring a 'bad second'. See also section 'Degraded signal defect (dDEG)' in G.8021."]
-},
-"lm-m": {
-"id": "lm-m",
-"is-read-only": false,
-"description": ["This attribute defines the number of consecutive good seconds necessary for the clearing of 'degraded'. See also section 'Degraded signal defect (dDEG)' in G.8021."]
-},
-"lm-tf-min": {
-"id": "lm-tf-min",
-"is-read-only": false,
-"description": ["This attribute defines the necessary number of transmitted frames to enable the detection of 'bad seconds'. See also section 'Degraded signal defect (dDEG)' in G.8021."]
-},
-"eth-mep-sink-g": {
-"id": "eth-mep-sink-g",
-"is-read-only": false,
-"description": ["1DM related attribute: 1DmPriority AIS Process related attributes: aisPeriod, aisPriority Bandwidth notification Process related attribute: bandwidthReport Basic attribute: peerMepRefList CSF Process related attributes: isCsfRdiFdiEnabled, isCsfReported Defect correlation Process related attribute: currentProblemList This object class models the MEP sink function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of the dual-ended maintenance job, such as test. This object contains the configuration parameters for detecting 'degraded signal' (DEG)."]
-},
-"aps-priority": {
-"id": "aps-priority",
-"is-read-only": false,
-"description": ["This attribute specifies the priority of the APS messages. See section 8.1.5 APS insert process in G.8021."]
-},
-"csf-priority": {
-"id": "csf-priority",
-"is-read-only": false,
-"description": ["This attribute models the MI_CSF_Pri signal defined in G.8021 and configured as specified in G8051. It is the priority at which the CSF messages should be sent"]
-},
-"csf-period": {
-"id": "csf-period",
-"is-read-only": false,
-"description": ["This attribute models the MI_CSF_Period signal defined in G.8021 and configured as specified in G8051. It is the period at which the CSF messages should be sent. range of type : 1s, 1min"]
-},
-"csf-config": {
-"id": "csf-config",
-"is-read-only": false,
-"description": ["This attribute models the combination of all CSF related MI signals (MI_CSF_Enable, MI_CSFrdifdi_Enable, MI_CSFdci_Enable) as defined in G.8021."]
-},
-"eth-mep-source-g": {
-"id": "eth-mep-source-g",
-"is-read-only": false,
-"description": ["APS Process related attribute: apsPriority Basic attribute: mepIdentifier CSF Process related attributes: csfConfig, csfPeriod, csfPriority Link trace related operation: linkTrace Loopback related operations: loopbackDiscover, loopbackSeries, loopbackTest, loopbackTestTerminate On demand measurement job control related operation: establishOnDemandDualEndedMeasurementJobSource Proactive measurement job control related operation: establishProActiveDualEndedMeasurementJobSource Test related operations: testInitiatorStart, testInitiatorTerminate This object class models the MEP source function. Instance of this object class can be created and contained by ETH CTP or TTP objects. It also provides the management of single-ended maintenance jobs, such as loopback test, loopback discover, loopback series, link trace, and dual-ended maintenance job, such as test."]
-},
-"eth-lt-msg": {
-"id": "eth-lt-msg",
-"is-read-only": false,
-"description": ["none"]
-},
-"time-to-live": {
-"id": "time-to-live",
-"is-read-only": false,
-"description": ["G.8052: This parameter provides the Time To Live (TTL) parameter of the Link Track protocol. The TTL parameter allows the receiver (MIP or MEP) of the LTM frame to determine if the frame can be terminated. TTL is decremented every time the LTM frame is relayed. LTM frame with TTL<=1 is terminated and not relayed."]
-},
-"eth-link-trace-job-g": {
-"id": "eth-link-trace-job-g",
-"is-read-only": false,
-"description": ["This class represents the Link Trace (LT) process for fault localization or for discovering the intermediate MIPs along the link from the MEP Source to a target MEP or MIP. An LTM frame will be sent from the MEP source to the target MEP/MIP. The termination occurs at specified stop time (schedule attribute of OamJob)."]
-},
-"eth-test-msg": {
-"id": "eth-test-msg",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-test-job-g": {
-"id": "eth-test-job-g",
-"is-read-only": false,
-"description": ["This class represents the 1-way on-demand in-service or out-of-service diagnostic test. The diagnostic test includes verifying bandwidth throughput, frame loss, bit errors, etc. TST frames are transmitted. The termination occurs at specified stop time (schedule attribute of OamJob)."]
-},
-"responder-mep-id": {
-"id": "responder-mep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"source-address": {
-"id": "source-address",
-"is-read-only": false,
-"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."]
-},
-"priority": {
-"id": "priority",
-"is-read-only": false,
-"description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"]
-},
-"test-identifier": {
-"id": "test-identifier",
-"is-read-only": false,
-"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"]
-},
-"eth-on-demand-measurement-job-control-sink-g": {
-"id": "eth-on-demand-measurement-job-control-sink-g",
-"is-read-only": false,
-"description": ["This object class represents an on-demand measurement job controller sink for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSink() operation. It is deleted either automatically after the measurement job has completed (stop time reached) and the performance data AVC notification has been sent, or by an explicit abortOnDemandMeasurementJob() operation when the measurement job is running."]
-},
-"controller-mep-id": {
-"id": "controller-mep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-pdu-generation-type": {
-"id": "oam-pdu-generation-type",
-"is-read-only": false,
-"description": ["This attribute contains the pattern that is used for the generation of OAM PDUs."]
-},
-"destination-address": {
-"id": "destination-address",
-"is-read-only": false,
-"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."]
-},
-"priority": {
-"id": "priority",
-"is-read-only": false,
-"description": ["This attribute contains the priority of the OAM PDU frames. range of type : 0, 1, 2, 3, 4, 5, 6, 7"]
-},
-"message-period": {
-"id": "message-period",
-"is-read-only": false,
-"description": ["This attribute contains the frequency of the OAM message (PDU) generation within a series. Note that the value 0 means that only one OAM message per measurement interval is generated. range of type : See corresponding Enum."]
-},
-"repetition-period": {
-"id": "repetition-period",
-"is-read-only": false,
-"description": ["This attribute contains the time between the start of two measurement intervals. This IS applicable for the repetitive instance type and MAY be applicable for the repetitive series type. Note that a value of 0 means not applicable (NA), which is for the cases of single instance, single series, or repetitive series without extra gap in between the measurement intervals (i.e., also as known as continuous series)."]
-},
-"measurement-interval": {
-"id": "measurement-interval",
-"is-read-only": false,
-"description": ["This attribute contains the discrete non overlapping periods of time (in seconds) during which measurements are performed (i.e., OAM messages are generated) and reports are gathered at the end of the measurement intervals. Note that the value 0 means a degenerated measurement interval with a single OAM message and the report is sent as immediately as possible. range of type : Non-negative"]
-},
-"test-identifier": {
-"id": "test-identifier",
-"is-read-only": false,
-"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of LMM/LMR measurement. range of type : 0..(2^32) - 1"]
-},
-"data-tlv-length": {
-"id": "data-tlv-length",
-"is-read-only": false,
-"description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."]
-},
-"eth-on-demand-measurement-job-control-source-g": {
-"id": "eth-on-demand-measurement-job-control-source-g",
-"is-read-only": false,
-"description": ["Basic attributes: destinationAddress, priority Measurement configuration related attributes: oamPduGenerationType, startTime, stopTime, messagePeriod, repetitionPeriod, measurementInterval Optional attributes: dataTlvLength, testIdentifier This object class represents an on-demand measurement job controller source for 1-way measurements. It is created as a result of an establishOnDemandDualEndedMeasurementJobSource() operation. It is deleted either automatically after the measurement job has completed (stop time reached), or by an explicit abortOnDemandMeasurementJob() operation while the measurement job is running."]
-},
-"responder-mep-id": {
-"id": "responder-mep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"is-enabled": {
-"id": "is-enabled",
-"is-read-only": false,
-"description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."]
-},
-"source-address": {
-"id": "source-address",
-"is-read-only": false,
-"description": ["This attribute contains the MAC address of the peer MEP. See G.8013 for details."]
-},
-"test-identifier": {
-"id": "test-identifier",
-"is-read-only": false,
-"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. range of type : 0..(2^32) - 1"]
-},
-"eth-pro-active-measurement-job-control-sink-g": {
-"id": "eth-pro-active-measurement-job-control-sink-g",
-"is-read-only": false,
-"description": ["This object class allows the control of the proactive 1-way measurement. It is created as a part of an establishProActiveDualEndedMeasurementJobSink() operation. Lifecycle: A pre-condition of deleting the object is that the “Enable” attribute should have the value “FALSE”."]
-},
-"controller-mep-id": {
-"id": "controller-mep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"is-enabled": {
-"id": "is-enabled",
-"is-read-only": false,
-"description": ["This attribute identifies the state of the measurement job. If set to TRUE, the MEP performs proactive Performance Measurement."]
-},
-"destination-address": {
-"id": "destination-address",
-"is-read-only": false,
-"description": ["This attribute provides the Unicast MAC address of the intented destination."]
-},
-"priority": {
-"id": "priority",
-"is-read-only": false,
-"description": ["This attribute contains the priority value on which the MEP performs the measurement. When the measurement is enabled, the MEP should use this value to encode the priority of generated measurement frames. The EMF usese this value to assign the “P” parameter of the measurement operation."]
-},
-"period": {
-"id": "period",
-"is-read-only": false,
-"description": ["This attribute indicates the period (frequency) of the measurement frame transmission. range of type : 100ms, 1s, 10s"]
-},
-"test-identifier": {
-"id": "test-identifier",
-"is-read-only": false,
-"description": ["This attribute is used to distinguish each measurement session if multiple measurement sessions are simultaneously activated towards a peer MEP including concurrent on-demand and proactive tests. It must be unique at least within the context of any measurement type for the MEG and initiating MEP. Note: The attribute is not used in case of 2-way loss measurement. range of type : 0..(2^32) - 1"]
-},
-"data-tlv-length": {
-"id": "data-tlv-length",
-"is-read-only": false,
-"description": ["This parameter provides the size of the optional data TLV. Non-negative integer represents the number of bytes for the length of the padding TLV. Notes: When configuring this parameter one should be aware of the maximum allowed total frame size limitation. The attribute is not used in case of 2-way loss measurement. range of type : Depends on the allowed MTU size."]
-},
-"eth-pro-active-measurement-job-control-source-g": {
-"id": "eth-pro-active-measurement-job-control-source-g",
-"is-read-only": false,
-"description": ["This object class represents a proactive measurement job controller source for 1way measurements. It is created as a part of an establishProactiveDualEndedMeasurementJobSource() operation."]
-},
-"pro-active-near-end-1-dm-parameters": {
-"id": "pro-active-near-end-1-dm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the statistical near end performnace parameters."]
-},
-"eth-pro-active-1-dm-performance-data-g": {
-"id": "eth-pro-active-1-dm-performance-data-g",
-"is-read-only": false,
-"description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using 1DM)."]
-},
-"pro-active-near-end-1-lm-parameters": {
-"id": "pro-active-near-end-1-lm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the statistical near end performnace parameters."]
-},
-"eth-pro-active-1-lm-performance-data-g": {
-"id": "eth-pro-active-1-lm-performance-data-g",
-"is-read-only": false,
-"description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using 1SL)."]
-},
-"pro-active-bi-dir-dm-parameters": {
-"id": "pro-active-bi-dir-dm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the statistical bidirectional performnace parameters."]
-},
-"pro-active-far-end-dm-parameters": {
-"id": "pro-active-far-end-dm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the statistical far end performnace parameters."]
-},
-"pro-active-near-end-dm-parameters": {
-"id": "pro-active-near-end-dm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the statistical near end performnace parameters."]
-},
-"eth-pro-active-dm-performance-data-g": {
-"id": "eth-pro-active-dm-performance-data-g",
-"is-read-only": false,
-"description": ["This object class represents the PM current data collected in a pro-active delay measurement job (using DMM/DMR)."]
-},
-"pro-active-far-end-lm-parameters": {
-"id": "pro-active-far-end-lm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the statistical far end performnace parameters."]
-},
-"pro-active-near-end-lm-parameters": {
-"id": "pro-active-near-end-lm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the statistical near end performnace parameters."]
-},
-"bidirectional-uas": {
-"id": "bidirectional-uas",
-"is-read-only": false,
-"description": ["This attribute contains the bidirectional UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."]
-},
-"eth-pro-active-lm-performance-data-g": {
-"id": "eth-pro-active-lm-performance-data-g",
-"is-read-only": false,
-"description": ["This object class represents the PM current data collected in a pro-active loss measurement job (using LMM/LMR or SLM/SLR)."]
-},
-"on-demand-near-end-1-dm-parameters": {
-"id": "on-demand-near-end-1-dm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."]
-},
-"eth-on-demand-1-dm-performance-data-g": {
-"id": "eth-on-demand-1-dm-performance-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"on-demand-near-end-1-lm-parameters": {
-"id": "on-demand-near-end-1-lm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."]
-},
-"eth-on-demand-1-lm-performance-data-g": {
-"id": "eth-on-demand-1-lm-performance-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"on-demand-far-end-dm-parameters": {
-"id": "on-demand-far-end-dm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."]
-},
-"on-demand-near-end-dm-parameters": {
-"id": "on-demand-near-end-dm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the results of an on-demand frame delay measurement job in the ingress direction."]
-},
-"eth-on-demand-dm-performance-data-g": {
-"id": "eth-on-demand-dm-performance-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"on-demand-far-end-lm-parameters": {
-"id": "on-demand-far-end-lm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the egress direction."]
-},
-"on-demand-near-end-lm-parameters": {
-"id": "on-demand-near-end-lm-parameters",
-"is-read-only": false,
-"description": ["This attribute contains the results of an on-demand synthetic loss measurement job in the ingress direction."]
-},
-"eth-on-demand-lm-performance-data-g": {
-"id": "eth-on-demand-lm-performance-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pro-active-control-1way-source": {
-"id": "pro-active-control-1way-source",
-"is-read-only": false,
-"description": ["none"]
-},
-"pro-active-control-1way-sink": {
-"id": "pro-active-control-1way-sink",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-pro-active-1way-measurement-job-g": {
-"id": "eth-pro-active-1way-measurement-job-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pro-active-control-2way-source": {
-"id": "pro-active-control-2way-source",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-pro-active-2way-measurement-job-g": {
-"id": "eth-pro-active-2way-measurement-job-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"on-demand-control-2way-source": {
-"id": "on-demand-control-2way-source",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-on-demand-2way-measurement-job-g": {
-"id": "eth-on-demand-2way-measurement-job-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"on-demand-control-1way-source": {
-"id": "on-demand-control-1way-source",
-"is-read-only": false,
-"description": ["none"]
-},
-"on-demand-control-1way-sink": {
-"id": "on-demand-control-1way-sink",
-"is-read-only": false,
-"description": ["none"]
-},
-"eth-on-demand-1way-measurement-job-g": {
-"id": "eth-on-demand-1way-measurement-job-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"near-end-1-dm-cross-threshold": {
-"id": "near-end-1-dm-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the near end cross threshold values of the delay measurements."]
-},
-"near-end-1-dm-clear-threshold": {
-"id": "near-end-1-dm-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the near end clear threshold values of the delay measurements."]
-},
-"eth-1-dm-threshold-data-g": {
-"id": "eth-1-dm-threshold-data-g",
-"is-read-only": false,
-"description": ["This data type contains the threshold values for frame delay related 1-way measurements."]
-},
-"near-end-1-lm-cross-threshold": {
-"id": "near-end-1-lm-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the near end cross threshold values of the loss measurements."]
-},
-"near-end-1-lm-clear-threshold": {
-"id": "near-end-1-lm-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."]
-},
-"eth-1-lm-threshold-data-g": {
-"id": "eth-1-lm-threshold-data-g",
-"is-read-only": false,
-"description": ["This data type contains the threshold values for frame loss related 1-way measurements."]
-},
-"near-end-dm-cross-threshold": {
-"id": "near-end-dm-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the near end cross threshold values of the delay measurements."]
-},
-"near-end-dm-clear-threshold": {
-"id": "near-end-dm-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the near end clear threshold values of the delay measurements."]
-},
-"far-end-dm-cross-threshold": {
-"id": "far-end-dm-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the far end cross threshold values of the delay measurements."]
-},
-"far-end-dm-clear-threshold": {
-"id": "far-end-dm-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the far end clear threshold values of the delay measurements."]
-},
-"bi-dir-dm-cross-threshold": {
-"id": "bi-dir-dm-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the bidirectional cross threshold values of the delay measurements."]
-},
-"bi-dir-dm-clear-threshold": {
-"id": "bi-dir-dm-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the bidirectional clear threshold values of the delay measurements."]
-},
-"eth-dm-threshold-data-g": {
-"id": "eth-dm-threshold-data-g",
-"is-read-only": false,
-"description": ["This data type contains the threshold values for frame delay related 2-way measurements."]
-},
-"near-end-lm-cross-threshold": {
-"id": "near-end-lm-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the near end cross threshold values of the loss measurements."]
-},
-"near-end-lm-clear-threshold": {
-"id": "near-end-lm-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the near end clear threshold values of the loss measurements."]
-},
-"far-end-lm-cross-threshold": {
-"id": "far-end-lm-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the far end cross threshold values of the loss measurements."]
-},
-"far-end-lm-clear-threshold": {
-"id": "far-end-lm-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute is only valid for frame loss ratio parameters and counter type parameters working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the far end clear threshold values of the loss measurements."]
-},
-"bi-dir-lm-uas-cross-threshold": {
-"id": "bi-dir-lm-uas-cross-threshold",
-"is-read-only": false,
-"description": ["This attribute contains the bidirectional cross threshold value of the UAS loss measurement."]
-},
-"bi-dir-lm-uas-clear-threshold": {
-"id": "bi-dir-lm-uas-clear-threshold",
-"is-read-only": false,
-"description": ["This attribute is only valid for the UAS parameter working in the 'standing condition method' (see G.7710, section 10.1.7.2: Threshold reporting) and contains the bidirectional clear threshold value of the UAS loss measurement."]
-},
-"eth-lm-threshold-data-g": {
-"id": "eth-lm-threshold-data-g",
-"is-read-only": false,
-"description": ["This data type contains the threshold values for frame loss related 2-way measurements."]
-},
-"rec-lbr-frames": {
-"id": "rec-lbr-frames",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the total number of received LBR messages, including the out of order LBR frames."]
-},
-"out-of-order-lbr-frames": {
-"id": "out-of-order-lbr-frames",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the number of LBR traffic unites (messages) that were received out of order (OO)."]
-},
-"sent-lbm-frames": {
-"id": "sent-lbm-frames",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the total number of sent LBM frames."]
-},
-"crc-lbr-frames": {
-"id": "crc-lbr-frames",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the number of LBR frames where the CRC in the pattern failed."]
-},
-"ber-lbr-frames": {
-"id": "ber-lbr-frames",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the number of LBR frames where there was a bit error in the pattern."]
-},
-"detected-peer-mep": {
-"id": "detected-peer-mep",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the MAC addresses of the discovered peer MEPs of the subject MEP."]
-},
-"eth-loopback-result-data-g": {
-"id": "eth-loopback-result-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"result-list": {
-"id": "result-list",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the results of the LT process. It contains a list of the result received from the individual LTR frames. The result from the individual LTR frame include the Source Mac Address, the TTL, and TLV."]
-},
-"eth-link-trace-result-data-g": {
-"id": "eth-link-trace-result-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"sent-tst-frames": {
-"id": "sent-tst-frames",
-"is-read-only": false,
-"description": ["G.8052: This parameter returns the total number of sent TST frames."]
-},
-"eth-test-result-data-g": {
-"id": "eth-test-result-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"destination-address": {
-"id": "destination-address",
-"is-read-only": false,
-"description": ["G.8052: This parameter provides the destination address, i.e., the MAC Address of the target MEP or MIP."]
-},
-"priority": {
-"id": "priority",
-"is-read-only": false,
-"description": ["G.8052: This parameter provides the priority to be used in the LBM frame."]
-},
-"eth-oam-operation-common-pac-g": {
-"id": "eth-oam-operation-common-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"period": {
-"id": "period",
-"is-read-only": false,
-"description": ["G.8052: This parameter provides the periodicity of the TST OAM messages."]
-},
-"drop-eligibility": {
-"id": "drop-eligibility",
-"is-read-only": false,
-"description": ["G.8052: This parameter provides the eligibility of frames with unicast ETH-TST information to be discarded when congestion conditions are encountered."]
-},
-"data-tlv-length": {
-"id": "data-tlv-length",
-"is-read-only": false,
-"description": ["G.8052: This parameter provides the length (in number of octet) of the optional Data TLV to be included in the TST frame."]
-},
-"test-pattern": {
-"id": "test-pattern",
-"is-read-only": false,
-"description": ["G.8052: This parameter provides the test pattern to be used in the optional Data TLV. Examples of test patterns include pseudo-random bit sequence (PRBS) 2^31-1 as specified in clause 5.8 of [ITU-T O.150], all '0' pattern, etc. The following values of pattern types are defined: 0: 'Null signal without CRC-32' 1: 'Null signal with CRC-32' 2: 'PRBS 2^31-1 without CRC-32' 3: 'PRBS 2^31-1 with CRC-32'."]
-},
-"eth-oam-msg-common-pac-g": {
-"id": "eth-oam-msg-common-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE": {
-"id": "ETH_OAM_JOB_TYPE",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_1DM": {
-"id": "ETH_OAM_JOB_TYPE_ETH_1DM",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_1SLM": {
-"id": "ETH_OAM_JOB_TYPE_ETH_1SLM",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_LM_CCM": {
-"id": "ETH_OAM_JOB_TYPE_ETH_LM_CCM",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_LM_LMM": {
-"id": "ETH_OAM_JOB_TYPE_ETH_LM_LMM",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_SLM": {
-"id": "ETH_OAM_JOB_TYPE_ETH_SLM",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_DM": {
-"id": "ETH_OAM_JOB_TYPE_ETH_DM",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_LTC": {
-"id": "ETH_OAM_JOB_TYPE_ETH_LTC",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_LBK": {
-"id": "ETH_OAM_JOB_TYPE_ETH_LBK",
-"is-read-only": false,
-"description": ["none"]
-},
-"ETH_OAM_JOB_TYPE_ETH_TEST": {
-"id": "ETH_OAM_JOB_TYPE_ETH_TEST",
-"is-read-only": false,
-"description": ["none"]
-},
-"priority": {
-"id": "priority",
-"is-read-only": false,
-"description": ["none"]
-},
-"queue-id": {
-"id": "queue-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"priority-configuration-g": {
-"id": "priority-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"queue-id": {
-"id": "queue-id",
-"is-read-only": false,
-"description": ["This attribute indicates the queue id."]
-},
-"queue-depth": {
-"id": "queue-depth",
-"is-read-only": false,
-"description": ["This attribute defines the depth of the queue in bytes."]
-},
-"queue-threshold": {
-"id": "queue-threshold",
-"is-read-only": false,
-"description": ["This attribute defines the threshold of the queue in bytes."]
-},
-"queue-configuration-g": {
-"id": "queue-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"cir": {
-"id": "cir",
-"is-read-only": false,
-"description": ["This attribute indicates the Committed Information Rate in bits/s."]
-},
-"cbs": {
-"id": "cbs",
-"is-read-only": false,
-"description": ["This attribute indicates the Committed Burst Size in bytes."]
-},
-"eir": {
-"id": "eir",
-"is-read-only": false,
-"description": ["This attribute indicates the Excess Information Rate in bits/s."]
-},
-"ebs": {
-"id": "ebs",
-"is-read-only": false,
-"description": ["This attribute indicates the Excess Burst Size in bytes."]
-},
-"coupling-flag": {
-"id": "coupling-flag",
-"is-read-only": false,
-"description": ["This attribute indicates the coupling flag."]
-},
-"colour-mode": {
-"id": "colour-mode",
-"is-read-only": false,
-"description": ["This attribute indicates the colour mode."]
-},
-"queue-id": {
-"id": "queue-id",
-"is-read-only": false,
-"description": ["This attribute indicates the queue id."]
-},
-"traffic-conditioning-configuration-g": {
-"id": "traffic-conditioning-configuration-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mac-address": {
-"id": "mac-address",
-"is-read-only": false,
-"description": ["This primitive data type contains an Ethernet MAC address defined by IEEE 802a. The format of the address consists of 12 hexadecimal characters, grouped in pairs and separated by '-' (e.g., 03-27-AC-75-3E-1D)."]
-},
-"priority-0": {
-"id": "priority-0",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 0."]
-},
-"priority-1": {
-"id": "priority-1",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 1."]
-},
-"priority-2": {
-"id": "priority-2",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 2."]
-},
-"priority-3": {
-"id": "priority-3",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 3."]
-},
-"priority-4": {
-"id": "priority-4",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 4."]
-},
-"priority-5": {
-"id": "priority-5",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 5."]
-},
-"priority-6": {
-"id": "priority-6",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 6."]
-},
-"priority-7": {
-"id": "priority-7",
-"is-read-only": false,
-"description": ["This attribute defines the new priority value for the old priority value 7."]
-},
-"priority-mapping-g": {
-"id": "priority-mapping-g",
-"is-read-only": false,
-"description": ["This data type provides the priority mapping done in the 'P Regenerate' process defined in G.8021."]
-},
-"vid": {
-"id": "vid",
-"is-read-only": false,
-"description": ["This primitive type models the 12 Bit VLAN identifier of a VLAN tag."]
-},
-"modify-cross-connection-data": {
-"id": "modify-cross-connection-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"address": {
-"id": "address",
-"is-read-only": false,
-"description": ["This attribute contains the MAC address of the address tuple."]
-},
-"port-list": {
-"id": "port-list",
-"is-read-only": false,
-"description": ["This attribute contains the ports associated to the MAC address in the address tuple."]
-},
-"address-tuple-g": {
-"id": "address-tuple-g",
-"is-read-only": false,
-"description": ["This data type contains an address tuple consisting of a MAC address and a corresponding port list."]
-},
-"scheduling-configuration": {
-"id": "scheduling-configuration",
-"is-read-only": false,
-"description": ["The syntax of this dataType is pending on the specification in G.8021, which is for further study."]
-},
-"c-2-00-00-10": {
-"id": "c-2-00-00-10",
-"is-read-only": false,
-"description": ["This attribute identifies the 'All LANs Bridge Management Group Address'."]
-},
-"c-2-00-00-00": {
-"id": "c-2-00-00-00",
-"is-read-only": false,
-"description": ["This attribute identifies the STP/RSTP/MSTP protocol address."]
-},
-"c-2-00-00-01": {
-"id": "c-2-00-00-01",
-"is-read-only": false,
-"description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address (PAUSE protocol)."]
-},
-"c-2-00-00-02": {
-"id": "c-2-00-00-02",
-"is-read-only": false,
-"description": ["This attribute identifies the IEEE 802.3 Slow_Protocols_Multicast address (LACP/LAMP or Link OAM protocols)."]
-},
-"c-2-00-00-03": {
-"id": "c-2-00-00-03",
-"is-read-only": false,
-"description": ["This attribute identifies the Nearest non-TPMR Bridge group address (Port Authentication protocol)."]
-},
-"c-2-00-00-04": {
-"id": "c-2-00-00-04",
-"is-read-only": false,
-"description": ["This attribute identifies the IEEE MAC-specific Control Protocols group address."]
-},
-"c-2-00-00-05": {
-"id": "c-2-00-00-05",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-06": {
-"id": "c-2-00-00-06",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-07": {
-"id": "c-2-00-00-07",
-"is-read-only": false,
-"description": ["This attribute identifies the Metro Ethernet Forum E-LMI protocol group address."]
-},
-"c-2-00-00-08": {
-"id": "c-2-00-00-08",
-"is-read-only": false,
-"description": ["This attribute identifies the Provider Bridge Group address."]
-},
-"c-2-00-00-09": {
-"id": "c-2-00-00-09",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-0-a": {
-"id": "c-2-00-00-0-a",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-0-b": {
-"id": "c-2-00-00-0-b",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-0-c": {
-"id": "c-2-00-00-0-c",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-0-d": {
-"id": "c-2-00-00-0-d",
-"is-read-only": false,
-"description": ["This attribute identifies the Provider Bridge MVRP address."]
-},
-"c-2-00-00-0-e": {
-"id": "c-2-00-00-0-e",
-"is-read-only": false,
-"description": ["This attribute identifies the Individual LAN Scope group address, Nearest Bridge group address (LLDP protocol)."]
-},
-"c-2-00-00-0-f": {
-"id": "c-2-00-00-0-f",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-20": {
-"id": "c-2-00-00-20",
-"is-read-only": false,
-"description": ["This attribute identifies the Customer and Provider Bridge MMRP address."]
-},
-"c-2-00-00-21": {
-"id": "c-2-00-00-21",
-"is-read-only": false,
-"description": ["This attribute identifies the Customer Bridge MVRP address."]
-},
-"c-2-00-00-22": {
-"id": "c-2-00-00-22",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-23": {
-"id": "c-2-00-00-23",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-24": {
-"id": "c-2-00-00-24",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-25": {
-"id": "c-2-00-00-25",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-26": {
-"id": "c-2-00-00-26",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-27": {
-"id": "c-2-00-00-27",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-28": {
-"id": "c-2-00-00-28",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-29": {
-"id": "c-2-00-00-29",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-2-a": {
-"id": "c-2-00-00-2-a",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-2-b": {
-"id": "c-2-00-00-2-b",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-2-c": {
-"id": "c-2-00-00-2-c",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-2-d": {
-"id": "c-2-00-00-2-d",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-2-e": {
-"id": "c-2-00-00-2-e",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"c-2-00-00-2-f": {
-"id": "c-2-00-00-2-f",
-"is-read-only": false,
-"description": ["Reserved for future standardization."]
-},
-"control-frame-filter-g": {
-"id": "control-frame-filter-g",
-"is-read-only": false,
-"description": ["This data type identifies the filter action for each of the 33 group MAC addresses (control frames). Value 'false' means block: The frame is discarded by the filter process. Value 'true' means pass: The frame is passed unchanged through the filter process."]
-},
-"source-mac-address": {
-"id": "source-mac-address",
-"is-read-only": false,
-"description": ["The sourceMacAddress is the address from the far end."]
-},
-"port-id": {
-"id": "port-id",
-"is-read-only": false,
-"description": ["This attribute returns the far end port identifier."]
-},
-"nominal-bandwidth": {
-"id": "nominal-bandwidth",
-"is-read-only": false,
-"description": ["This attribute returns the configured bandwidth"]
-},
-"current-bandwidth": {
-"id": "current-bandwidth",
-"is-read-only": false,
-"description": ["This attribute returns the current bandwidth."]
-},
-"bandwidth-report-g": {
-"id": "bandwidth-report-g",
-"is-read-only": false,
-"description": ["Data type for the bandwidth report."]
-},
-"LOCK": {
-"id": "LOCK",
-"is-read-only": false,
-"description": ["none"]
-},
-"NORMAL": {
-"id": "NORMAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"admin-state": {
-"id": "admin-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"COLOUR_BLIND": {
-"id": "COLOUR_BLIND",
-"is-read-only": false,
-"description": ["none"]
-},
-"COLOUR_AWARE": {
-"id": "COLOUR_AWARE",
-"is-read-only": false,
-"description": ["none"]
-},
-"colour-mode": {
-"id": "colour-mode",
-"is-read-only": false,
-"description": ["none"]
-},
-"DISABLED": {
-"id": "DISABLED",
-"is-read-only": false,
-"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is false - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."]
-},
-"ENABLED": {
-"id": "ENABLED",
-"is-read-only": false,
-"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is false."]
-},
-"ENABLED_WITH_RDI_FDI": {
-"id": "ENABLED_WITH_RDI_FDI",
-"is-read-only": false,
-"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is false."]
-},
-"ENABLED_WITH_RDI_FDI_DCI": {
-"id": "ENABLED_WITH_RDI_FDI_DCI",
-"is-read-only": false,
-"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is true - MI_CSFdci_Enable is true."]
-},
-"ENABLED_WITH_DCI": {
-"id": "ENABLED_WITH_DCI",
-"is-read-only": false,
-"description": ["This literal covers the following states of the CSF related MI informations: - MI_CSF_Enable is true - MI_CSFrdifdi_Enable is false - MI_CSFdci_Enable is true."]
-},
-"csf-config": {
-"id": "csf-config",
-"is-read-only": false,
-"description": ["none"]
-},
-"OTHER": {
-"id": "OTHER",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNKNOWN": {
-"id": "UNKNOWN",
-"is-read-only": false,
-"description": ["none"]
-},
-"NONE": {
-"id": "NONE",
-"is-read-only": false,
-"description": ["none"]
-},
-"2BASE_TL": {
-"id": "2BASE_TL",
-"is-read-only": false,
-"description": ["none"]
-},
-"10MBIT_S": {
-"id": "10MBIT_S",
-"is-read-only": false,
-"description": ["none"]
-},
-"10PASS_TS": {
-"id": "10PASS_TS",
-"is-read-only": false,
-"description": ["none"]
-},
-"100BASE_T4": {
-"id": "100BASE_T4",
-"is-read-only": false,
-"description": ["none"]
-},
-"100BASE_X": {
-"id": "100BASE_X",
-"is-read-only": false,
-"description": ["none"]
-},
-"100BASE_T2": {
-"id": "100BASE_T2",
-"is-read-only": false,
-"description": ["none"]
-},
-"1000BASE_X": {
-"id": "1000BASE_X",
-"is-read-only": false,
-"description": ["none"]
-},
-"1000BASE_T": {
-"id": "1000BASE_T",
-"is-read-only": false,
-"description": ["none"]
-},
-"10GBASE-X": {
-"id": "10GBASE-X",
-"is-read-only": false,
-"description": ["none"]
-},
-"10GBASE_R": {
-"id": "10GBASE_R",
-"is-read-only": false,
-"description": ["none"]
-},
-"10GBASE_W": {
-"id": "10GBASE_W",
-"is-read-only": false,
-"description": ["none"]
-},
-"ety-phy-type": {
-"id": "ety-phy-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"ADMIT_ONLY_VLAN_TAGGED_FRAMES": {
-"id": "ADMIT_ONLY_VLAN_TAGGED_FRAMES",
-"is-read-only": false,
-"description": ["none"]
-},
-"ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES": {
-"id": "ADMIT_ONLY_UNTAGGED_AND_PRIORITY_TAGGED_FRAMES",
-"is-read-only": false,
-"description": ["none"]
-},
-"ADMIT_ALL_FRAMES": {
-"id": "ADMIT_ALL_FRAMES",
-"is-read-only": false,
-"description": ["none"]
-},
-"frame-type": {
-"id": "frame-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"3_33MS": {
-"id": "3_33MS",
-"is-read-only": false,
-"description": ["Default for protection."]
-},
-"10MS": {
-"id": "10MS",
-"is-read-only": false,
-"description": ["none"]
-},
-"100MS": {
-"id": "100MS",
-"is-read-only": false,
-"description": ["none"]
-},
-"1S": {
-"id": "1S",
-"is-read-only": false,
-"description": ["none"]
-},
-"10S": {
-"id": "10S",
-"is-read-only": false,
-"description": ["none"]
-},
-"1MIN": {
-"id": "1MIN",
-"is-read-only": false,
-"description": ["none"]
-},
-"10MIN": {
-"id": "10MIN",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-period": {
-"id": "oam-period",
-"is-read-only": false,
-"description": ["Provides the frequency for the OAM PDU insertion."]
-},
-"8P0D": {
-"id": "8P0D",
-"is-read-only": false,
-"description": ["none"]
-},
-"7P1D": {
-"id": "7P1D",
-"is-read-only": false,
-"description": ["none"]
-},
-"6P2D": {
-"id": "6P2D",
-"is-read-only": false,
-"description": ["none"]
-},
-"5P3D": {
-"id": "5P3D",
-"is-read-only": false,
-"description": ["none"]
-},
-"DEI": {
-"id": "DEI",
-"is-read-only": false,
-"description": ["This enumeration value means that all priorities should be drop eligible. DEI = Drop Eligibility Indicator"]
-},
-"pcp-coding": {
-"id": "pcp-coding",
-"is-read-only": false,
-"description": ["This enum models the coding of the Priority Code Point as defined in section 'Priority Code Point encoding' of IEEE 802.1Q."]
-},
-"C_Tag": {
-"id": "C_Tag",
-"is-read-only": false,
-"description": ["0x8100"]
-},
-"S_Tag": {
-"id": "S_Tag",
-"is-read-only": false,
-"description": ["0x88a8"]
-},
-"I_Tag": {
-"id": "I_Tag",
-"is-read-only": false,
-"description": ["88-e7"]
-},
-"vlan-type": {
-"id": "vlan-type",
-"is-read-only": false,
-"description": ["This enumeration contains the Ethertypes defined in IEEE 802.1Q."]
-},
-"1MIN": {
-"id": "1MIN",
-"is-read-only": false,
-"description": ["none"]
-},
-"1S": {
-"id": "1S",
-"is-read-only": false,
-"description": ["none"]
-},
-"10S": {
-"id": "10S",
-"is-read-only": false,
-"description": ["none"]
-},
-"0": {
-"id": "0",
-"is-read-only": false,
-"description": ["none"]
-},
-"repetition-period": {
-"id": "repetition-period",
-"is-read-only": false,
-"description": ["This enumeration defines the allowed values for the repetition period in on-demand measurements. Note: The value 0 means that the value is not relevant."]
-},
-"10MS": {
-"id": "10MS",
-"is-read-only": false,
-"description": ["none"]
-},
-"100MS": {
-"id": "100MS",
-"is-read-only": false,
-"description": ["none"]
-},
-"1S": {
-"id": "1S",
-"is-read-only": false,
-"description": ["none"]
-},
-"10S": {
-"id": "10S",
-"is-read-only": false,
-"description": ["none"]
-},
-"0": {
-"id": "0",
-"is-read-only": false,
-"description": ["none"]
-},
-"message-period": {
-"id": "message-period",
-"is-read-only": false,
-"description": ["This enumeration defines the allowed values for the message period in on-demand measurements. Notes: The value 10ms is only used in synthetic loss measurements. The value 0 means that the value is not relevant."]
-},
-"SINGLE_INSTANCE": {
-"id": "SINGLE_INSTANCE",
-"is-read-only": false,
-"description": ["none"]
-},
-"REPETITIVE_INSTANCE": {
-"id": "REPETITIVE_INSTANCE",
-"is-read-only": false,
-"description": ["none"]
-},
-"SINGLE_SERIES": {
-"id": "SINGLE_SERIES",
-"is-read-only": false,
-"description": ["none"]
-},
-"REPETITIVE_SERIES": {
-"id": "REPETITIVE_SERIES",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-pdu-generation-type": {
-"id": "oam-pdu-generation-type",
-"is-read-only": false,
-"description": ["This enumeration defines the generation pattern of the on-demand OAM PDUs (messages)."]
-},
-"number-of-samples": {
-"id": "number-of-samples",
-"is-read-only": false,
-"description": ["This attribute contains the number of received DM frames (successful samples) used for this frame delay measurement. range of type : non-negative"]
-},
-"frame-delay-list": {
-"id": "frame-delay-list",
-"is-read-only": false,
-"description": ["This attribute contains the frame delays measured in ns (nano second, 1x10e-9 seconds). The multiplicity is defined by the numberOfSamples attribute."]
-},
-"frame-delay-variation-list": {
-"id": "frame-delay-variation-list",
-"is-read-only": false,
-"description": ["This attribute contains the frame delay variations measured in ns (nano second). The multiplicity is defined by (numberOfSamples - 1, for numberOfSamples > 0)."]
-},
-"on-demand-dm-performance-parameters-g": {
-"id": "on-demand-dm-performance-parameters-g",
-"is-read-only": false,
-"description": ["This data type contains the results of an on-demand delay measurement job."]
-},
-"total-transmitted-frames": {
-"id": "total-transmitted-frames",
-"is-read-only": false,
-"description": ["This attribute contains the total number of frames transmitted."]
-},
-"total-lost-frames": {
-"id": "total-lost-frames",
-"is-read-only": false,
-"description": ["This attribute contains the total number of frames lost."]
-},
-"total-frame-loss-ratio": {
-"id": "total-frame-loss-ratio",
-"is-read-only": false,
-"description": ["This attribute contains the frame loss ratio (number of lost frames divided by the number of total frames (N_LF / N_TF)). The accuracy of the value is for further study."]
-},
-"on-demand-lm-performance-parameters-g": {
-"id": "on-demand-lm-performance-parameters-g",
-"is-read-only": false,
-"description": ["This data type contains the results of an on-demand loss measurement job."]
-},
-"minimum-frame-delay": {
-"id": "minimum-frame-delay",
-"is-read-only": false,
-"description": ["This attribute contains the minimum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."]
-},
-"average-frame-delay": {
-"id": "average-frame-delay",
-"is-read-only": false,
-"description": ["This attribute contains the average frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."]
-},
-"maximum-frame-delay": {
-"id": "maximum-frame-delay",
-"is-read-only": false,
-"description": ["This attribute contains the maximum frame delay observed over the monitored period. It is measured in units of ns (nano second, 1x10e-9 seconds)."]
-},
-"minimum-frame-delay-variation": {
-"id": "minimum-frame-delay-variation",
-"is-read-only": false,
-"description": ["This attribute contains the minimum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."]
-},
-"average-frame-delay-variation": {
-"id": "average-frame-delay-variation",
-"is-read-only": false,
-"description": ["This attribute contains the average frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."]
-},
-"maximum-frame-delay-variation": {
-"id": "maximum-frame-delay-variation",
-"is-read-only": false,
-"description": ["This attribute contains the maximum frame delay variation measured in units of ns (nano second, 1x10e-9 seconds)."]
-},
-"statistical-dm-performance-parameters-g": {
-"id": "statistical-dm-performance-parameters-g",
-"is-read-only": false,
-"description": ["This data type contains the statistical delay measurement performance parameters."]
-},
-"minimum-frame-loss-ratio": {
-"id": "minimum-frame-loss-ratio",
-"is-read-only": false,
-"description": ["This attribute contains the minimum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."]
-},
-"average-frame-loss-ratio": {
-"id": "average-frame-loss-ratio",
-"is-read-only": false,
-"description": ["This attribute contains the average frame loss ratio calculated over a period of time. The accuracy of the value is for further study."]
-},
-"maximum-frame-loss-ratio": {
-"id": "maximum-frame-loss-ratio",
-"is-read-only": false,
-"description": ["This attribute contains the maximum frame loss ratio calculated over a period of time. The accuracy of the value is for further study."]
-},
-"ses": {
-"id": "ses",
-"is-read-only": false,
-"description": ["This attribute contains the SES detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."]
-},
-"uas": {
-"id": "uas",
-"is-read-only": false,
-"description": ["This attribute contains UAS (unavailable seconds) detected in the monitoring interval. range of type : 0..900 for 15min interval or 0..86400 for 24 hr interval."]
-},
-"statistical-lm-performance-parameters-g": {
-"id": "statistical-lm-performance-parameters-g",
-"is-read-only": false,
-"description": ["This data type contains the statistical loss measurement performance parameters."]
-},
-"eth-oam-job-type": {
-"id": "eth-oam-job-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"source-address": {
-"id": "source-address",
-"is-read-only": false,
-"description": ["G.8052: This attribute contains the source MAC Address of an individual LTR frame result."]
-},
-"time-to-live": {
-"id": "time-to-live",
-"is-read-only": false,
-"description": ["G.8052: This attribute contains the Time To Live (TTL) value of an individual LTR frame result."]
-},
-"data-tlv-length": {
-"id": "data-tlv-length",
-"is-read-only": false,
-"description": ["G.8052: This attribute contains the length (in number of octets) of the Data TLV of an individual LTR frame result."]
-},
-"link-trace-result-g": {
-"id": "link-trace-result-g",
-"is-read-only": false,
-"description": ["G.8052: This data type contains the result from an individual LTR frame."]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json
deleted file mode 100644
index 57926bd..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-notification@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,648 +0,0 @@
-{ "schema-information": {
-
-"tapi-notification": {
-"id": "tapi-notification",
-"is-read-only": false,
-"description": ["This module contains TAPI Notification Model definitions. Source: TapiNotification.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"notification": {
-"id": "notification",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification-channel": {
-"id": "notification-channel",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-filter": {
-"id": "subscription-filter",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-state": {
-"id": "subscription-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"supported-notification-types": {
-"id": "supported-notification-types",
-"is-read-only": false,
-"description": ["none"]
-},
-"supported-object-types": {
-"id": "supported-object-types",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification-subscription-service-g": {
-"id": "notification-subscription-service-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"requested-notification-types": {
-"id": "requested-notification-types",
-"is-read-only": false,
-"description": ["none"]
-},
-"requested-object-types": {
-"id": "requested-object-types",
-"is-read-only": false,
-"description": ["none"]
-},
-"requested-layer-protocols": {
-"id": "requested-layer-protocols",
-"is-read-only": false,
-"description": ["none"]
-},
-"requested-object-identifier": {
-"id": "requested-object-identifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"include-content": {
-"id": "include-content",
-"is-read-only": false,
-"description": ["Indicates whether the published Notification includes content or just the Notification Id (which enables retrieval of the notification at the later stage)"]
-},
-"subscription-filter-g": {
-"id": "subscription-filter-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification": {
-"id": "notification",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification-type": {
-"id": "notification-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"target-object-type": {
-"id": "target-object-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"target-object-identifier": {
-"id": "target-object-identifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"target-object-name": {
-"id": "target-object-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"event-time-stamp": {
-"id": "event-time-stamp",
-"is-read-only": false,
-"description": ["none"]
-},
-"sequence-number": {
-"id": "sequence-number",
-"is-read-only": false,
-"description": ["A monotonous increasing sequence number associated with the notification. The exact semantics of how this sequence number is assigned (per channel or subscription or source or system) is left undefined."]
-},
-"source-indicator": {
-"id": "source-indicator",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"changed-attributes": {
-"id": "changed-attributes",
-"is-read-only": false,
-"description": ["none"]
-},
-"additional-info": {
-"id": "additional-info",
-"is-read-only": false,
-"description": ["none"]
-},
-"additional-text": {
-"id": "additional-text",
-"is-read-only": false,
-"description": ["none"]
-},
-"tca-info": {
-"id": "tca-info",
-"is-read-only": false,
-"description": ["none"]
-},
-"alarm-info": {
-"id": "alarm-info",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification-g": {
-"id": "notification-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"stream-address": {
-"id": "stream-address",
-"is-read-only": false,
-"description": ["The address/location/URI of the channel/stream to which the subscribed notifications are published. This specifics of this is typically dependent on the implementation protocol & mechanism and hence is typed as a string."]
-},
-"next-sequence-no": {
-"id": "next-sequence-no",
-"is-read-only": false,
-"description": ["The sequence number of the next notification that will be published on the channel"]
-},
-"notification-channel-g": {
-"id": "notification-channel-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"notif-subscription": {
-"id": "notif-subscription",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification": {
-"id": "notification",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification-context-g": {
-"id": "notification-context-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"is-transient": {
-"id": "is-transient",
-"is-read-only": false,
-"description": ["none"]
-},
-"perceived-severity": {
-"id": "perceived-severity",
-"is-read-only": false,
-"description": ["none"]
-},
-"probable-cause": {
-"id": "probable-cause",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-affecting": {
-"id": "service-affecting",
-"is-read-only": false,
-"description": ["none"]
-},
-"alarm-info-g": {
-"id": "alarm-info-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"is-transient": {
-"id": "is-transient",
-"is-read-only": false,
-"description": ["none"]
-},
-"threshold-crossing": {
-"id": "threshold-crossing",
-"is-read-only": false,
-"description": ["none"]
-},
-"threshold-parameter": {
-"id": "threshold-parameter",
-"is-read-only": false,
-"description": ["none"]
-},
-"threshold-value": {
-"id": "threshold-value",
-"is-read-only": false,
-"description": ["none"]
-},
-"perceived-severity": {
-"id": "perceived-severity",
-"is-read-only": false,
-"description": ["none"]
-},
-"measurement-interval": {
-"id": "measurement-interval",
-"is-read-only": false,
-"description": ["none"]
-},
-"suspect-interval-flag": {
-"id": "suspect-interval-flag",
-"is-read-only": false,
-"description": ["none"]
-},
-"tca-info-g": {
-"id": "tca-info-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"value-name": {
-"id": "value-name",
-"is-read-only": false,
-"description": ["The name of the value. The value need not have a name."]
-},
-"old-value": {
-"id": "old-value",
-"is-read-only": false,
-"description": ["The value"]
-},
-"new-value": {
-"id": "new-value",
-"is-read-only": false,
-"description": ["The value"]
-},
-"name-and-value-change-g": {
-"id": "name-and-value-change-g",
-"is-read-only": false,
-"description": ["A scoped name-value triple, including old value and new value"]
-},
-"OBJECT_CREATION": {
-"id": "OBJECT_CREATION",
-"is-read-only": false,
-"description": ["Not a normal state. The system is unable to determine the correct value."]
-},
-"OBJECT_DELETION": {
-"id": "OBJECT_DELETION",
-"is-read-only": false,
-"description": ["none"]
-},
-"ATTRIBUTE_VALUE_CHANGE": {
-"id": "ATTRIBUTE_VALUE_CHANGE",
-"is-read-only": false,
-"description": ["none"]
-},
-"ALARM_EVENT": {
-"id": "ALARM_EVENT",
-"is-read-only": false,
-"description": ["none"]
-},
-"THRESHOLD_CROSSING_ALERT": {
-"id": "THRESHOLD_CROSSING_ALERT",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification-type": {
-"id": "notification-type",
-"is-read-only": false,
-"description": ["List of supported Notifications types."]
-},
-"TOPOLOGY": {
-"id": "TOPOLOGY",
-"is-read-only": false,
-"description": ["none"]
-},
-"NODE": {
-"id": "NODE",
-"is-read-only": false,
-"description": ["none"]
-},
-"LINK": {
-"id": "LINK",
-"is-read-only": false,
-"description": ["none"]
-},
-"CONNECTION": {
-"id": "CONNECTION",
-"is-read-only": false,
-"description": ["none"]
-},
-"PATH": {
-"id": "PATH",
-"is-read-only": false,
-"description": ["none"]
-},
-"CONNECTIVITY_SERVICE": {
-"id": "CONNECTIVITY_SERVICE",
-"is-read-only": false,
-"description": ["none"]
-},
-"VIRTUAL_NETWORK_SERVICE": {
-"id": "VIRTUAL_NETWORK_SERVICE",
-"is-read-only": false,
-"description": ["none"]
-},
-"PATH_COMPUTATION_SERVICE": {
-"id": "PATH_COMPUTATION_SERVICE",
-"is-read-only": false,
-"description": ["none"]
-},
-"NODE_EDGE_POINT": {
-"id": "NODE_EDGE_POINT",
-"is-read-only": false,
-"description": ["none"]
-},
-"SERVICE_INTERFACE_POINT": {
-"id": "SERVICE_INTERFACE_POINT",
-"is-read-only": false,
-"description": ["none"]
-},
-"CONNECTION_END_POINT": {
-"id": "CONNECTION_END_POINT",
-"is-read-only": false,
-"description": ["none"]
-},
-"MAINTENANCE_ENTITY_GROUP": {
-"id": "MAINTENANCE_ENTITY_GROUP",
-"is-read-only": false,
-"description": ["none"]
-},
-"MAINTENANCE_ENTITY": {
-"id": "MAINTENANCE_ENTITY",
-"is-read-only": false,
-"description": ["none"]
-},
-"MEG_END_POINT": {
-"id": "MEG_END_POINT",
-"is-read-only": false,
-"description": ["none"]
-},
-"MEG_INTERMEDIATE_POINT": {
-"id": "MEG_INTERMEDIATE_POINT",
-"is-read-only": false,
-"description": ["none"]
-},
-"SWITCH_CONTROL": {
-"id": "SWITCH_CONTROL",
-"is-read-only": false,
-"description": ["none"]
-},
-"SWITCH": {
-"id": "SWITCH",
-"is-read-only": false,
-"description": ["none"]
-},
-"ROUTE": {
-"id": "ROUTE",
-"is-read-only": false,
-"description": ["none"]
-},
-"NODE_RULE_GROUP": {
-"id": "NODE_RULE_GROUP",
-"is-read-only": false,
-"description": ["none"]
-},
-"INTER_RULE_GROUP": {
-"id": "INTER_RULE_GROUP",
-"is-read-only": false,
-"description": ["none"]
-},
-"RULE": {
-"id": "RULE",
-"is-read-only": false,
-"description": ["none"]
-},
-"OAM_JOB": {
-"id": "OAM_JOB",
-"is-read-only": false,
-"description": ["none"]
-},
-"object-type": {
-"id": "object-type",
-"is-read-only": false,
-"description": ["The list of TAPI Global Object Class types on which Notifications can be raised."]
-},
-"RESOURCE_OPERATION": {
-"id": "RESOURCE_OPERATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"MANAGEMENT_OPERATION": {
-"id": "MANAGEMENT_OPERATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNKNOWN": {
-"id": "UNKNOWN",
-"is-read-only": false,
-"description": ["none"]
-},
-"source-indicator": {
-"id": "source-indicator",
-"is-read-only": false,
-"description": ["none"]
-},
-"SUSPENDED": {
-"id": "SUSPENDED",
-"is-read-only": false,
-"description": ["none"]
-},
-"ACTIVE": {
-"id": "ACTIVE",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-state": {
-"id": "subscription-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"CRITICAL": {
-"id": "CRITICAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"MAJOR": {
-"id": "MAJOR",
-"is-read-only": false,
-"description": ["none"]
-},
-"MINOR": {
-"id": "MINOR",
-"is-read-only": false,
-"description": ["none"]
-},
-"WARNING": {
-"id": "WARNING",
-"is-read-only": false,
-"description": ["none"]
-},
-"CLEARED": {
-"id": "CLEARED",
-"is-read-only": false,
-"description": ["none"]
-},
-"perceived-severity-type": {
-"id": "perceived-severity-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"THRESHOLD_ABOVE": {
-"id": "THRESHOLD_ABOVE",
-"is-read-only": false,
-"description": ["none"]
-},
-"THRESHOLD_BELOW": {
-"id": "THRESHOLD_BELOW",
-"is-read-only": false,
-"description": ["none"]
-},
-"CLEARED": {
-"id": "CLEARED",
-"is-read-only": false,
-"description": ["none"]
-},
-"threshold-crossing-type": {
-"id": "threshold-crossing-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"SERVICE_AFFECTING": {
-"id": "SERVICE_AFFECTING",
-"is-read-only": false,
-"description": ["none"]
-},
-"NOT_SERVICE_AFFECTING": {
-"id": "NOT_SERVICE_AFFECTING",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNKNOWN": {
-"id": "UNKNOWN",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-affecting": {
-"id": "service-affecting",
-"is-read-only": false,
-"description": ["none"]
-},
-"WARNING": {
-"id": "WARNING",
-"is-read-only": false,
-"description": ["none"]
-},
-"CLEAR": {
-"id": "CLEAR",
-"is-read-only": false,
-"description": ["none"]
-},
-"perceived-tca-severity": {
-"id": "perceived-tca-severity",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-supported-notification-types": {
-"id": "get-supported-notification-types",
-"is-read-only": false,
-"description": ["none"]
-},
-"supported-notification-types": {
-"id": "supported-notification-types",
-"is-read-only": false,
-"description": ["none"]
-},
-"supported-object-types": {
-"id": "supported-object-types",
-"is-read-only": false,
-"description": ["none"]
-},
-"create-notification-subscription-service": {
-"id": "create-notification-subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-filter": {
-"id": "subscription-filter",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-state": {
-"id": "subscription-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-service": {
-"id": "subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"update-notification-subscription-service": {
-"id": "update-notification-subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-id-or-name": {
-"id": "subscription-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-filter": {
-"id": "subscription-filter",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-state": {
-"id": "subscription-state",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-service": {
-"id": "subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"delete-notification-subscription-service": {
-"id": "delete-notification-subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-id-or-name": {
-"id": "subscription-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-service": {
-"id": "subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-notification-subscription-service-details": {
-"id": "get-notification-subscription-service-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-id-or-name": {
-"id": "subscription-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-service": {
-"id": "subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-notification-subscription-service-list": {
-"id": "get-notification-subscription-service-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-service": {
-"id": "subscription-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-notification-list": {
-"id": "get-notification-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"subscription-id-or-name": {
-"id": "subscription-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"time-period": {
-"id": "time-period",
-"is-read-only": false,
-"description": ["none"]
-},
-"notification": {
-"id": "notification",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json
deleted file mode 100644
index 33cd05d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-oam@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,778 +0,0 @@
-{ "schema-information": {
-
-"tapi-oam": {
-"id": "tapi-oam",
-"is-read-only": false,
-"description": ["This module contains TAPI OAM Model definitions. Source: TapiOam.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"oam-service-uuid": {
-"id": "oam-service-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-ref-g": {
-"id": "oam-service-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-end-point-local-id": {
-"id": "oam-service-end-point-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-end-point-ref-g": {
-"id": "oam-service-end-point-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg-uuid": {
-"id": "meg-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg-ref-g": {
-"id": "meg-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"maintenance-entity-local-id": {
-"id": "maintenance-entity-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"maintenance-entity-ref-g": {
-"id": "maintenance-entity-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep-local-id": {
-"id": "mep-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep-ref-g": {
-"id": "mep-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mip-local-id": {
-"id": "mip-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"mip-ref-g": {
-"id": "mip-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job-uuid": {
-"id": "oam-job-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job-ref-g": {
-"id": "oam-job-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-current-data-local-id": {
-"id": "pm-current-data-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-current-data-ref-g": {
-"id": "pm-current-data-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-history-data-local-id": {
-"id": "pm-history-data-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-history-data-ref-g": {
-"id": "pm-history-data-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile-uuid": {
-"id": "oam-profile-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile-ref-g": {
-"id": "oam-profile-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-threshold-data-local-id": {
-"id": "pm-threshold-data-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-threshold-data-ref-g": {
-"id": "pm-threshold-data-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-bin-data-local-id": {
-"id": "pm-bin-data-local-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-bin-data-ref-g": {
-"id": "pm-bin-data-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-end-point": {
-"id": "oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep-identifier": {
-"id": "mep-identifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"peer-mep-identifier": {
-"id": "peer-mep-identifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep-g": {
-"id": "mep-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-end-point": {
-"id": "oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile": {
-"id": "oam-profile",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-current-data": {
-"id": "pm-current-data",
-"is-read-only": false,
-"description": ["Granularity period of the CurrentData identifies the specific CurrentData instance in the scope of this OamJob. For example, typically at least one 15min and one 24hr; optionally one additional configurable (< 15min)"]
-},
-"oam-job-type": {
-"id": "oam-job-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"schedule": {
-"id": "schedule",
-"is-read-only": false,
-"description": ["none"]
-},
-"creation-time": {
-"id": "creation-time",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job-g": {
-"id": "oam-job-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"me": {
-"id": "me",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep": {
-"id": "mep",
-"is-read-only": false,
-"description": ["1. ME may have 0 MEPs (case of transit domains where at least 1 MIP is present) 2. ME may have 1 MEP (case of edge domaind, where the peer MEP is ouside the managed domain) 3. ME may have 2 MEPs"]
-},
-"mip": {
-"id": "mip",
-"is-read-only": false,
-"description": ["ME may 0, 1, or more MIPs"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg-level": {
-"id": "meg-level",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg-identifier": {
-"id": "meg-identifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg-g": {
-"id": "meg-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep": {
-"id": "mep",
-"is-read-only": false,
-"description": ["none"]
-},
-"mip": {
-"id": "mip",
-"is-read-only": false,
-"description": ["none"]
-},
-"connection-route": {
-"id": "connection-route",
-"is-read-only": false,
-"description": ["none"]
-},
-"maintenance-entity-g": {
-"id": "maintenance-entity-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-end-point": {
-"id": "oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"mip-g": {
-"id": "mip-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg": {
-"id": "meg",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile": {
-"id": "oam-profile",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-g": {
-"id": "oam-service-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service": {
-"id": "oam-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg": {
-"id": "meg",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job": {
-"id": "oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile": {
-"id": "oam-profile",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-context-g": {
-"id": "oam-context-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-interface-point": {
-"id": "service-interface-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"connectivity-service-end-point": {
-"id": "connectivity-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep": {
-"id": "mep",
-"is-read-only": false,
-"description": ["none"]
-},
-"mip": {
-"id": "mip",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-end-point-g": {
-"id": "oam-service-end-point-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mip": {
-"id": "mip",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep": {
-"id": "mep",
-"is-read-only": false,
-"description": ["none"]
-},
-"mep-mip-list-g": {
-"id": "mep-mip-list-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg-level": {
-"id": "meg-level",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-constraint-g": {
-"id": "oam-constraint-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-history-data": {
-"id": "pm-history-data",
-"is-read-only": false,
-"description": ["in case of 24hr Current Data, at least 1 History Data. In case of 15min Current Data, at least 16 History Data. In case of <15min, the number of History Data shall be able to cover a span of 4 hours."]
-},
-"granularity-period": {
-"id": "granularity-period",
-"is-read-only": false,
-"description": ["none"]
-},
-"timestamp": {
-"id": "timestamp",
-"is-read-only": false,
-"description": ["This attribute indicates the start of the current monitoring interval. The value is bound to the quarter of an hour in case of a 15 minute interval and bound to the hour in case of a 24 hour interval."]
-},
-"elapsed-time": {
-"id": "elapsed-time",
-"is-read-only": false,
-"description": ["none"]
-},
-"suspect-interval-flag": {
-"id": "suspect-interval-flag",
-"is-read-only": false,
-"description": ["This attribute is used to indicate that the performance data for the current period may not be reliable. Some reasons for this to occur are: – Suspect data were detected by the actual resource doing data collection. – Transition of the administrativeState attribute to/from the 'lock' state. – Transition of the operationalState to/from the 'disabled' state. – Scheduler setting that inhibits the collection function. – The performance counters were reset during the interval. – The currentData (or subclass) object instance was created during the monitoring period."]
-},
-"pm-current-data-g": {
-"id": "pm-current-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"granularity-period": {
-"id": "granularity-period",
-"is-read-only": false,
-"description": ["none"]
-},
-"period-end-time": {
-"id": "period-end-time",
-"is-read-only": false,
-"description": ["none"]
-},
-"suspect-interval-flag": {
-"id": "suspect-interval-flag",
-"is-read-only": false,
-"description": ["This attribute indicates that the performance data may not be reliable."]
-},
-"pm-history-data-g": {
-"id": "pm-history-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-threshold-data": {
-"id": "pm-threshold-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-bin-data": {
-"id": "pm-bin-data",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile-g": {
-"id": "oam-profile-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"granularity-period": {
-"id": "granularity-period",
-"is-read-only": false,
-"description": ["none"]
-},
-"is-transient": {
-"id": "is-transient",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-threshold-data-g": {
-"id": "pm-threshold-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"granularity-period": {
-"id": "granularity-period",
-"is-read-only": false,
-"description": ["none"]
-},
-"pm-bin-data-g": {
-"id": "pm-bin-data-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"OAM_JOB_TYPE": {
-"id": "OAM_JOB_TYPE",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job-type": {
-"id": "oam-job-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"create-oam-service": {
-"id": "create-oam-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-constraint": {
-"id": "oam-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"delete-oam-service": {
-"id": "delete-oam-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-oam-service": {
-"id": "get-oam-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"create-oam-job": {
-"id": "create-oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job-type": {
-"id": "oam-job-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-service-end-point": {
-"id": "oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile": {
-"id": "oam-profile",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"schedule": {
-"id": "schedule",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job": {
-"id": "oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-oam-job": {
-"id": "get-oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"job-id": {
-"id": "job-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job": {
-"id": "oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-oam-service-list": {
-"id": "get-oam-service-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-meg": {
-"id": "get-meg",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"meg": {
-"id": "meg",
-"is-read-only": false,
-"description": ["none"]
-},
-"update-oam-service": {
-"id": "update-oam-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-constraint": {
-"id": "oam-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"delete-oam-job": {
-"id": "delete-oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"job-id": {
-"id": "job-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"update-oam-job": {
-"id": "update-oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"job-id": {
-"id": "job-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-profile": {
-"id": "oam-profile",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"schedule": {
-"id": "schedule",
-"is-read-only": false,
-"description": ["none"]
-},
-"oam-job": {
-"id": "oam-job",
-"is-read-only": false,
-"description": ["none"]
-},
-"create-oam-service-end-point": {
-"id": "create-oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"sip-id": {
-"id": "sip-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"c-sep-id": {
-"id": "c-sep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer": {
-"id": "layer",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"delete-oam-service-end-point": {
-"id": "delete-oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"o-sep-id": {
-"id": "o-sep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"update-oam-service-end-point": {
-"id": "update-oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"o-sep-id": {
-"id": "o-sep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-oam-service-end-point": {
-"id": "get-oam-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id": {
-"id": "service-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"o-sep-id": {
-"id": "o-sep-id",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json
deleted file mode 100644
index c3ae65d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-odu@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,733 +0,0 @@
-{ "schema-information": {
-
-"tapi-odu": {
-"id": "tapi-odu",
-"is-read-only": false,
-"description": ["This module contains TAPI Odu Model definitions. Source: TapiOdu.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"opu-tributary-slot-size": {
-"id": "opu-tributary-slot-size",
-"is-read-only": false,
-"description": ["This attribute is applicable for ODU2 and ODU3 CTP only. It indicates the slot size of the ODU CTP."]
-},
-"auto-payload-type": {
-"id": "auto-payload-type",
-"is-read-only": false,
-"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Source at the client layer of the ODUP/ODUj-21 adaptation function. The value of true of this attribute configures that the adaptation source function shall fall back to the payload type PT=20 if the conditions specified in 14.3.10.1/G.798 are satisfied."]
-},
-"configured-client-type": {
-"id": "configured-client-type",
-"is-read-only": false,
-"description": ["This attribute configures the type of the client CTP of the server ODU TTP."]
-},
-"configured-mapping-type": {
-"id": "configured-mapping-type",
-"is-read-only": false,
-"description": ["This attributes indicates the configured mapping type."]
-},
-"accepted-payload-type": {
-"id": "accepted-payload-type",
-"is-read-only": false,
-"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU CTP Sink at the client layer of the ODUP/ODU[i]j or ODUP/ODUj-21 adaptation function. This attribute is a 2-digit Hex code that indicates the new accepted payload type. Valid values are defined in Table 15-8 of ITU-T Recommendation G.709 with one additional value UN_INTERPRETABLE."]
-},
-"odu-termination-and-client-adaptation-pac-g": {
-"id": "odu-termination-and-client-adaptation-pac-g",
-"is-read-only": false,
-"description": ["This Pac contains the attributes associated with the client adaptation function of the server layer TTP It is present only if the CEP contains a TTP"]
-},
-"odu-common": {
-"id": "odu-common",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-term-and-adapter": {
-"id": "odu-term-and-adapter",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-ctp": {
-"id": "odu-ctp",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-protection": {
-"id": "odu-protection",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-connection-end-point-spec-g": {
-"id": "odu-connection-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"client-capacity": {
-"id": "client-capacity",
-"is-read-only": false,
-"description": ["none"]
-},
-"max-client-instances": {
-"id": "max-client-instances",
-"is-read-only": false,
-"description": ["none"]
-},
-"max-client-size": {
-"id": "max-client-size",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-pool-pac-g": {
-"id": "odu-pool-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-pool": {
-"id": "odu-pool",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-node-edge-point-spec-g": {
-"id": "odu-node-edge-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"tributary-slot-list": {
-"id": "tributary-slot-list",
-"is-read-only": false,
-"description": ["This attribute contains a set of distinct (i.e. unique) integers (e.g. 2, 3, 5, 9, 15 representing the tributary slots TS2, TS3, TS5, TS9 and TS15) which represents the resources occupied by the Low Order ODU Link Connection (e.g. carrying an ODUflex with a bit rate of 6.25G). This attribute applies when the LO ODU_ ConnectionTerminationPoint connects with an HO ODU_TrailTerminationPoint object. It will not apply if this ODU_ ConnectionTerminationPoint object directly connects to an OTU_TrailTerminationPoint object (i.e. OTU has no trib slots). The upper bound of the integer allowed in this set is a function of the HO-ODU server layer to which the ODU connection has been mapped (adapted). Thus, for example, M=8/32/80 for ODU2/ODU3/ODU4 server layers (respectively). Note that the value of this attribute can be changed only in the case of ODUflex and has to be through specific operations (i.e. not be changing the attribute tributarySlotList directly)."]
-},
-"tributary-port-number": {
-"id": "tributary-port-number",
-"is-read-only": false,
-"description": ["This attribute identifies the tributary port number that is associated with the ODU CTP. range of type : The value range depends on the size of the Tributary Port Number (TPN) field used which depends on th server-layer ODU or OTU. In case of ODUk mapping into OTUk, there is no TPN field, so the tributaryPortNumber shall be zero. In case of LO ODUj mapping over ODU1, ODU2 or ODU3, the TPN is encoded in a 6-bit field so the value range is 0-63. See clause 14.4.1/G.709-2016. In case of LO ODUj mapping over ODU4, the TPN is encoded in a 7-bit field so the value range is 0-127. See clause 14.4.1.4/G.709-2016. In case of ODUk mapping over ODUCn, the TPN is encoded in a 14-bit field so the value range is 0-16383. See clause 20.4.1.1/G.709-2016."]
-},
-"accepted-msi": {
-"id": "accepted-msi",
-"is-read-only": false,
-"description": ["This attribute is applicable when the ODU CTP object instance represents a lower order ODU1 or ODU2 CTP Sink at the client layer of the ODU3P/ODU12 adaptation function or represents a lower order ODUj CTP Sink at the client layer of the ODUP/ODUj-21 adaptation function. This attribute is a 1-byte field that represents the accepted multiplex structure of the adaptation function."]
-},
-"odu-ctp-pac-g": {
-"id": "odu-ctp-pac-g",
-"is-read-only": false,
-"description": ["This Pac contains the attributes associated with the CTP It is present only if the CEP contains a CTP"]
-},
-"odu-mep": {
-"id": "odu-mep",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-ncm": {
-"id": "odu-ncm",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-tcm": {
-"id": "odu-tcm",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-defect": {
-"id": "odu-defect",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-pm": {
-"id": "odu-pm",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-mep-spec-g": {
-"id": "odu-mep-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"aps-enable": {
-"id": "aps-enable",
-"is-read-only": false,
-"description": ["This attribute is for enabling/disabling the automatic protection switching (APS) capability at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_EN signal to the transport adaptation function."]
-},
-"aps-level": {
-"id": "aps-level",
-"is-read-only": false,
-"description": ["This attribute is for configuring the automatic protection switching (APS) level that should operate at the transport adaptation function that is represented by the ODU_ConnectionTerminationPoint object class. It triggers the MI_APS_LVL signal to the transport adaptation function. The value 0 means path and the values 1 through 6 mean TCM level 1 through 6 respectively."]
-},
-"odu-protection-pac-g": {
-"id": "odu-protection-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"tcm-fields-in-use": {
-"id": "tcm-fields-in-use",
-"is-read-only": false,
-"description": ["This attribute indicates the used TCM fields of the ODU OH."]
-},
-"odu-ncm-pac-g": {
-"id": "odu-ncm-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"tcm-extension": {
-"id": "tcm-extension",
-"is-read-only": false,
-"description": ["none"]
-},
-"tcm-mode": {
-"id": "tcm-mode",
-"is-read-only": false,
-"description": ["This attribute specifies the TCM mode at the entity. Valid values are: Operational, Monitor, and Transparent."]
-},
-"codirectional": {
-"id": "codirectional",
-"is-read-only": false,
-"description": ["This attribute specifies the directionality of the ODUT MEP with respect to the associated ODU CEP. The value of TRUE means that the sink part of the ODUT MEP terminates the same signal direction as the sink part of the ODU CEP. The Source part behaves similarly. This attribute is meaningful only on objects instantiated under ODU CEP, and at least one among ODU CEP and the subordinate object is bidirectional."]
-},
-"ac-status-source": {
-"id": "ac-status-source",
-"is-read-only": false,
-"description": ["This attribute indicates the status of the accepted TCM."]
-},
-"ac-status-sink": {
-"id": "ac-status-sink",
-"is-read-only": false,
-"description": ["This attribute indicates the status of the accepted TCM."]
-},
-"admin-state-source": {
-"id": "admin-state-source",
-"is-read-only": false,
-"description": ["This attribute provides the capability to provision the LOCK signal at the source, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the source direction."]
-},
-"admin-state-sink": {
-"id": "admin-state-sink",
-"is-read-only": false,
-"description": ["This attribute provides the capability to provision the LOCK signal at the sink, which is one of the ODU maintenance signals. When a Tandem Connection endpoint is set to admin state locked, it will insert the ODU-LCK signal in the downstream direction."]
-},
-"odu-tcm-mep-pac-g": {
-"id": "odu-tcm-mep-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-mip": {
-"id": "odu-mip",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-ncm": {
-"id": "odu-ncm",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-tcm": {
-"id": "odu-tcm",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-pm": {
-"id": "odu-pm",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-defect": {
-"id": "odu-defect",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-mip-spec-g": {
-"id": "odu-mip-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"acti": {
-"id": "acti",
-"is-read-only": false,
-"description": ["The Trail Trace Identifier (TTI) information recovered (Accepted) from the TTI overhead position at the sink of a trail."]
-},
-"ex-dapi": {
-"id": "ex-dapi",
-"is-read-only": false,
-"description": ["The Expected Destination Access Point Identifier (ExDAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."]
-},
-"ex-sapi": {
-"id": "ex-sapi",
-"is-read-only": false,
-"description": ["The Expected Source Access Point Identifier (ExSAPI), provisioned by the managing system, to be compared with the TTI accepted at the overhead position of the sink for the purpose of checking the integrity of connectivity."]
-},
-"tim-act-disabled": {
-"id": "tim-act-disabled",
-"is-read-only": false,
-"description": ["This attribute provides the control capability for the managing system to enable or disable the Consequent Action function when detecting Trace Identifier Mismatch (TIM) at the trail termination sink."]
-},
-"tim-det-mode": {
-"id": "tim-det-mode",
-"is-read-only": false,
-"description": ["This attribute indicates the mode of the Trace Identifier Mismatch (TIM) Detection function allowed values: OFF, SAPIonly, DAPIonly, SAPIandDAPI"]
-},
-"deg-m": {
-"id": "deg-m",
-"is-read-only": false,
-"description": ["This attribute indicates the threshold level for declaring a Degraded Signal defect (dDEG). A dDEG shall be declared if DegM consecutive bad PM Seconds are detected."]
-},
-"deg-thr": {
-"id": "deg-thr",
-"is-read-only": false,
-"description": ["This attribute indicates the threshold level for declaring a performance monitoring (PM) Second to be bad. The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."]
-},
-"odu-mip-pac-g": {
-"id": "odu-mip-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"tcm-field": {
-"id": "tcm-field",
-"is-read-only": false,
-"description": ["This attribute indicates the tandem connection monitoring field of the ODU OH."]
-},
-"odu-tcm-mip-pac-g": {
-"id": "odu-tcm-mip-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"dm-source": {
-"id": "dm-source",
-"is-read-only": false,
-"description": ["This attribute is for configuring the delay measurement process at the trail termination function represented by the subject TTP object class. It models the MI_DM_Source MI signal. If MI_DM_Source is false, then the value of the DMp bit is determined by the RI_DM. If MI_DM_Source is true, then the value of the DMp bit is set to MI_DMValue."]
-},
-"dm-value": {
-"id": "dm-value",
-"is-read-only": false,
-"description": ["This attribute is for setting the DMp and DMti bits of the delay measurement process. The value of 'true' sets the DMp and DMti bits to 0 and the value of 'false' to 1."]
-},
-"txti": {
-"id": "txti",
-"is-read-only": false,
-"description": ["The Trail Trace Identifier (TTI) information, provisioned by the managing system at the termination source, to be placed in the TTI overhead position of the source of a trail for transmission."]
-},
-"odu-mep-pac-g": {
-"id": "odu-mep-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-type": {
-"id": "odu-type",
-"is-read-only": false,
-"description": ["This attribute specifies the type of the ODU termination point."]
-},
-"odu-rate": {
-"id": "odu-rate",
-"is-read-only": false,
-"description": ["This attribute indicates the rate of the ODU terminatino point. This attribute is Set at create; i.e., once created it cannot be changed directly. In case of resizable ODU flex, its value can be changed via HAO (not directly on the attribute)."]
-},
-"odu-rate-tolerance": {
-"id": "odu-rate-tolerance",
-"is-read-only": false,
-"description": ["This attribute indicates the rate tolerance of the ODU termination point. Valid values are real value in the unit of ppm. Standardized values are defined in Table 7-2/G.709."]
-},
-"odu-common-pac-g": {
-"id": "odu-common-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"n-bbe": {
-"id": "n-bbe",
-"is-read-only": false,
-"description": ["Near-end Background Block Error"]
-},
-"f-bbe": {
-"id": "f-bbe",
-"is-read-only": false,
-"description": ["Far-end Background Block Error"]
-},
-"n-ses": {
-"id": "n-ses",
-"is-read-only": false,
-"description": ["Near-end Severely Errored Second"]
-},
-"f-ses": {
-"id": "f-ses",
-"is-read-only": false,
-"description": ["Far-end Severely Errored Second"]
-},
-"uas": {
-"id": "uas",
-"is-read-only": false,
-"description": ["UnAvailable Second"]
-},
-"odu-pm-pac-g": {
-"id": "odu-pm-pac-g",
-"is-read-only": false,
-"description": ["Instance of this object class contains the ODUP layer-specific Current Data. This object class is a subclass of the OTN_CurrentData object class. PM data attributes: fBbe, fSes, nBbe, nSes. uas"]
-},
-"bdi": {
-"id": "bdi",
-"is-read-only": false,
-"description": ["Backward Defect Indication"]
-},
-"deg": {
-"id": "deg",
-"is-read-only": false,
-"description": ["Signal Degraded"]
-},
-"lck": {
-"id": "lck",
-"is-read-only": false,
-"description": ["Locked"]
-},
-"oci": {
-"id": "oci",
-"is-read-only": false,
-"description": ["Open Connection Indicator"]
-},
-"ssf": {
-"id": "ssf",
-"is-read-only": false,
-"description": ["Server Signal Failure"]
-},
-"tim": {
-"id": "tim",
-"is-read-only": false,
-"description": ["Trail Trace Identifier Mismatch"]
-},
-"odu-defect-pac-g": {
-"id": "odu-defect-pac-g",
-"is-read-only": false,
-"description": ["The valid list of defects raised on the entity. If the value of any attribute is true, then the corresponding defect is raised."]
-},
-"ODU_TYPE": {
-"id": "ODU_TYPE",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU0": {
-"id": "ODU_TYPE_ODU0",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU1": {
-"id": "ODU_TYPE_ODU1",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU2": {
-"id": "ODU_TYPE_ODU2",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU2E": {
-"id": "ODU_TYPE_ODU2E",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU3": {
-"id": "ODU_TYPE_ODU3",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU4": {
-"id": "ODU_TYPE_ODU4",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU_FLEX": {
-"id": "ODU_TYPE_ODU_FLEX",
-"is-read-only": false,
-"description": ["none"]
-},
-"ODU_TYPE_ODU_CN": {
-"id": "ODU_TYPE_ODU_CN",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-type": {
-"id": "odu-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"AMP": {
-"id": "AMP",
-"is-read-only": false,
-"description": ["none"]
-},
-"BMP": {
-"id": "BMP",
-"is-read-only": false,
-"description": ["none"]
-},
-"GFP-F": {
-"id": "GFP-F",
-"is-read-only": false,
-"description": ["none"]
-},
-"GMP": {
-"id": "GMP",
-"is-read-only": false,
-"description": ["none"]
-},
-"TTP_GFP_BMP": {
-"id": "TTP_GFP_BMP",
-"is-read-only": false,
-"description": ["none"]
-},
-"NULL": {
-"id": "NULL",
-"is-read-only": false,
-"description": ["none"]
-},
-"mapping-type": {
-"id": "mapping-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"DAPI": {
-"id": "DAPI",
-"is-read-only": false,
-"description": ["none"]
-},
-"SAPI": {
-"id": "SAPI",
-"is-read-only": false,
-"description": ["none"]
-},
-"BOTH": {
-"id": "BOTH",
-"is-read-only": false,
-"description": ["none"]
-},
-"OFF": {
-"id": "OFF",
-"is-read-only": false,
-"description": ["none"]
-},
-"tim-det-mo": {
-"id": "tim-det-mo",
-"is-read-only": false,
-"description": ["List of modes for trace identifier mismatch detection."]
-},
-"1G25": {
-"id": "1G25",
-"is-read-only": false,
-"description": ["none"]
-},
-"2G5": {
-"id": "2G5",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-slot-size": {
-"id": "odu-slot-size",
-"is-read-only": false,
-"description": ["none"]
-},
-"named-payload-type": {
-"id": "named-payload-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"hex-payload-type": {
-"id": "hex-payload-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-payload-type-g": {
-"id": "odu-payload-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNKNOWN": {
-"id": "UNKNOWN",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNINTERPRETABLE": {
-"id": "UNINTERPRETABLE",
-"is-read-only": false,
-"description": ["none"]
-},
-"odu-named-payload-type": {
-"id": "odu-named-payload-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"deg-thr-value": {
-"id": "deg-thr-value",
-"is-read-only": false,
-"description": ["Percentage of detected errored blocks"]
-},
-"deg-thr-type": {
-"id": "deg-thr-type",
-"is-read-only": false,
-"description": ["Number of errored blocks"]
-},
-"percentage-granularity": {
-"id": "percentage-granularity",
-"is-read-only": false,
-"description": ["none"]
-},
-"deg-thr-g": {
-"id": "deg-thr-g",
-"is-read-only": false,
-"description": ["Degraded Threshold, specify either the percentage or the number of Errored Blocks in the defined interval. degThrValue when type is PERCENTAGE: percentageGranularity is used to indicate the number of decimal points So if percentageGranularity is ones, a value of 1 in degThrValue would indicate 1%, a value of 10 = 10%, a value of 100 = 100% So if percentageGranularity is thousandths a value of 1 in degThrValue would indicate 0.001%, a value of 1000 = 1%, a value of 1000000 = 100% degThrValue when type is NUMBER_ERROR_BLOCKS: Number of Errored Blocks is captured in an integer value."]
-},
-"PERCENTAGE": {
-"id": "PERCENTAGE",
-"is-read-only": false,
-"description": ["Choice of % or Number of errored blocks"]
-},
-"NUMBER_ERRORED_BLOCKS": {
-"id": "NUMBER_ERRORED_BLOCKS",
-"is-read-only": false,
-"description": ["Number of % or blocks"]
-},
-"deg-thr-type": {
-"id": "deg-thr-type",
-"is-read-only": false,
-"description": ["The value of the threshold can be provisioned in terms of number of errored blocks or in terms of percentage of errored blocks. For percentage-based specification, in order to support provision of less than 1%, the specification consists of two fields. The first field indicates the granularity of percentage. For examples, in 1%, in 0.1%, or in 0.01%, etc. The second field indicates the multiple of the granularity. For number of errored block based, the value is a positive integer."]
-},
-"NO_SOURCE_TC": {
-"id": "NO_SOURCE_TC",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 0 0 0, No source Tandem Connection"]
-},
-"IN_USE_WITHOUT_IAE": {
-"id": "IN_USE_WITHOUT_IAE",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 0 0 1, In use without IAE (Incoming Alignment Error)"]
-},
-"IN_USE_WITH_IAE": {
-"id": "IN_USE_WITH_IAE",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 0 1 0, In use with IAE (Incoming Alignment Error)"]
-},
-"RESERVED_1": {
-"id": "RESERVED_1",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 0 1 1, Reserved for future international standardization"]
-},
-"RESERVED_2": {
-"id": "RESERVED_2",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 1 0 0, Reserved for future international standardization"]
-},
-"LCK": {
-"id": "LCK",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 1 0 1, Maintenance signal: ODU-LCK"]
-},
-"OCI": {
-"id": "OCI",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 1 1 0, Maintenance signal: ODU-OCI"]
-},
-"AIS": {
-"id": "AIS",
-"is-read-only": false,
-"description": ["TCM byte 3 (bits 6 7 8) -- 1 1 1, Maintenance signal: ODU-AIS"]
-},
-"tcm-status": {
-"id": "tcm-status",
-"is-read-only": false,
-"description": ["See Table 15-5/G.709/Y.1331"]
-},
-"OPERATIONAL": {
-"id": "OPERATIONAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"TRANSPARENT": {
-"id": "TRANSPARENT",
-"is-read-only": false,
-"description": ["none"]
-},
-"MONITOR": {
-"id": "MONITOR",
-"is-read-only": false,
-"description": ["none"]
-},
-"tcm-mode": {
-"id": "tcm-mode",
-"is-read-only": false,
-"description": ["List of value modes for the sink side of the tandem connection monitoring function."]
-},
-"INTRUSIVE": {
-"id": "INTRUSIVE",
-"is-read-only": false,
-"description": ["none"]
-},
-"NON-INTRUSIVE": {
-"id": "NON-INTRUSIVE",
-"is-read-only": false,
-"description": ["none"]
-},
-"tcm-monitoring": {
-"id": "tcm-monitoring",
-"is-read-only": false,
-"description": ["Monitoring types for the tandem connection monitoring function."]
-},
-"NORMAL": {
-"id": "NORMAL",
-"is-read-only": false,
-"description": ["none"]
-},
-"PASS-THROUGH": {
-"id": "PASS-THROUGH",
-"is-read-only": false,
-"description": ["none"]
-},
-"ERASE": {
-"id": "ERASE",
-"is-read-only": false,
-"description": ["none"]
-},
-"tcm-extension": {
-"id": "tcm-extension",
-"is-read-only": false,
-"description": ["none"]
-},
-"ONES": {
-"id": "ONES",
-"is-read-only": false,
-"description": ["none"]
-},
-"ONE_TENTHS": {
-"id": "ONE_TENTHS",
-"is-read-only": false,
-"description": ["value * (1/10)"]
-},
-"ONE_HUNDREDTHS": {
-"id": "ONE_HUNDREDTHS",
-"is-read-only": false,
-"description": ["value * (1/100)"]
-},
-"ONE_THOUSANDTHS": {
-"id": "ONE_THOUSANDTHS",
-"is-read-only": false,
-"description": ["value * (1/1000)"]
-},
-"percentage-granularity": {
-"id": "percentage-granularity",
-"is-read-only": false,
-"description": ["none"]
-},
-"bidirectional": {
-"id": "bidirectional",
-"is-read-only": false,
-"description": ["none"]
-},
-"uas": {
-"id": "uas",
-"is-read-only": false,
-"description": ["none"]
-},
-"nuas": {
-"id": "nuas",
-"is-read-only": false,
-"description": ["none"]
-},
-"fuas": {
-"id": "fuas",
-"is-read-only": false,
-"description": ["none"]
-},
-"uas-choice-g": {
-"id": "uas-choice-g",
-"is-read-only": false,
-"description": ["If bidirectional is TRUE then use the uas attribute, if bidirectional is FALSE use the nuas, and fuas attributes"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json
deleted file mode 100644
index c969c91..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-path-computation@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,403 +0,0 @@
-{ "schema-information": {
-
-"tapi-path-computation": {
-"id": "tapi-path-computation",
-"is-read-only": false,
-"description": ["This module contains TAPI Path Computation Model definitions. Source: TapiPathComputation.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"path-uuid": {
-"id": "path-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-ref-g": {
-"id": "path-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"link": {
-"id": "link",
-"is-read-only": false,
-"description": ["none"]
-},
-"routing-constraint": {
-"id": "routing-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-g": {
-"id": "path-g",
-"is-read-only": false,
-"description": ["Path is described by an ordered list of TE Links. A TE Link is defined by a pair of Node/NodeEdgePoint IDs. A Connection is realized by concatenating link resources (associated with a Link) and the lower-level connections (cross-connections) in the different nodes"]
-},
-"service-interface-point": {
-"id": "service-interface-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-qualifier": {
-"id": "layer-protocol-qualifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"capacity": {
-"id": "capacity",
-"is-read-only": false,
-"description": ["none"]
-},
-"role": {
-"id": "role",
-"is-read-only": false,
-"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["The orientation of defined flow at the EndPoint."]
-},
-"path-service-end-point-g": {
-"id": "path-service-end-point-g",
-"is-read-only": false,
-"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"]
-},
-"path": {
-"id": "path",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"routing-constraint": {
-"id": "routing-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-constraint": {
-"id": "topology-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"objective-function": {
-"id": "objective-function",
-"is-read-only": false,
-"description": ["none"]
-},
-"optimization-constraint": {
-"id": "optimization-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-computation-service-g": {
-"id": "path-computation-service-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"bandwidth-optimization": {
-"id": "bandwidth-optimization",
-"is-read-only": false,
-"description": ["none"]
-},
-"concurrent-paths": {
-"id": "concurrent-paths",
-"is-read-only": false,
-"description": ["none"]
-},
-"cost-optimization": {
-"id": "cost-optimization",
-"is-read-only": false,
-"description": ["none"]
-},
-"link-utilization": {
-"id": "link-utilization",
-"is-read-only": false,
-"description": ["none"]
-},
-"resource-sharing": {
-"id": "resource-sharing",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-objective-function-g": {
-"id": "path-objective-function-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"traffic-interruption": {
-"id": "traffic-interruption",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-optimization-constraint-g": {
-"id": "path-optimization-constraint-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"cost-characteristic": {
-"id": "cost-characteristic",
-"is-read-only": false,
-"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."]
-},
-"latency-characteristic": {
-"id": "latency-characteristic",
-"is-read-only": false,
-"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."]
-},
-"risk-diversity-characteristic": {
-"id": "risk-diversity-characteristic",
-"is-read-only": false,
-"description": ["none"]
-},
-"diversity-policy": {
-"id": "diversity-policy",
-"is-read-only": false,
-"description": ["none"]
-},
-"route-objective-function": {
-"id": "route-objective-function",
-"is-read-only": false,
-"description": ["none"]
-},
-"route-direction": {
-"id": "route-direction",
-"is-read-only": false,
-"description": ["none"]
-},
-"is-exclusive": {
-"id": "is-exclusive",
-"is-read-only": false,
-"description": ["To distinguish if the resources are to be exclusive to the service"]
-},
-"routing-constraint-g": {
-"id": "routing-constraint-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-comp-service": {
-"id": "path-comp-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"path": {
-"id": "path",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-computation-context-g": {
-"id": "path-computation-context-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"include-topology": {
-"id": "include-topology",
-"is-read-only": false,
-"description": ["none"]
-},
-"avoid-topology": {
-"id": "avoid-topology",
-"is-read-only": false,
-"description": ["none"]
-},
-"include-path": {
-"id": "include-path",
-"is-read-only": false,
-"description": ["none"]
-},
-"exclude-path": {
-"id": "exclude-path",
-"is-read-only": false,
-"description": ["none"]
-},
-"include-link": {
-"id": "include-link",
-"is-read-only": false,
-"description": ["This is a loose constraint - that is it is unordered and could be a partial list"]
-},
-"exclude-link": {
-"id": "exclude-link",
-"is-read-only": false,
-"description": ["none"]
-},
-"include-node": {
-"id": "include-node",
-"is-read-only": false,
-"description": ["This is a loose constraint - that is it is unordered and could be a partial list"]
-},
-"exclude-node": {
-"id": "exclude-node",
-"is-read-only": false,
-"description": ["none"]
-},
-"preferred-transport-layer": {
-"id": "preferred-transport-layer",
-"is-read-only": false,
-"description": ["soft constraint requested by client to indicate the layer(s) of transport connection that it prefers to carry the service. This could be same as the service layer or one of the supported server layers"]
-},
-"topology-constraint-g": {
-"id": "topology-constraint-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"MIN_WORK_ROUTE_HOP": {
-"id": "MIN_WORK_ROUTE_HOP",
-"is-read-only": false,
-"description": ["none"]
-},
-"MIN_WORK_ROUTE_COST": {
-"id": "MIN_WORK_ROUTE_COST",
-"is-read-only": false,
-"description": ["none"]
-},
-"MIN_WORK_ROUTE_LATENCY": {
-"id": "MIN_WORK_ROUTE_LATENCY",
-"is-read-only": false,
-"description": ["none"]
-},
-"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP": {
-"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_HOP",
-"is-read-only": false,
-"description": ["none"]
-},
-"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST": {
-"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_COST",
-"is-read-only": false,
-"description": ["none"]
-},
-"MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY": {
-"id": "MIN_SUM_OF_WORK_AND_PROTECTION_ROUTE_LATENCY",
-"is-read-only": false,
-"description": ["none"]
-},
-"LOAD_BALANCE_MAX_UNUSED_CAPACITY": {
-"id": "LOAD_BALANCE_MAX_UNUSED_CAPACITY",
-"is-read-only": false,
-"description": ["none"]
-},
-"route-objective-function": {
-"id": "route-objective-function",
-"is-read-only": false,
-"description": ["none"]
-},
-"SRLG": {
-"id": "SRLG",
-"is-read-only": false,
-"description": ["none"]
-},
-"SRNG": {
-"id": "SRNG",
-"is-read-only": false,
-"description": ["none"]
-},
-"SNG": {
-"id": "SNG",
-"is-read-only": false,
-"description": ["none"]
-},
-"NODE": {
-"id": "NODE",
-"is-read-only": false,
-"description": ["none"]
-},
-"LINK": {
-"id": "LINK",
-"is-read-only": false,
-"description": ["none"]
-},
-"diversity-policy": {
-"id": "diversity-policy",
-"is-read-only": false,
-"description": ["none"]
-},
-"compute-p-2-p-path": {
-"id": "compute-p-2-p-path",
-"is-read-only": false,
-"description": ["none"]
-},
-"sep": {
-"id": "sep",
-"is-read-only": false,
-"description": ["none"]
-},
-"routing-constraint": {
-"id": "routing-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-constraint": {
-"id": "topology-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"objective-function": {
-"id": "objective-function",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"optimize-p-2-p-path": {
-"id": "optimize-p-2-p-path",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-id-or-name": {
-"id": "path-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"routing-constraint": {
-"id": "routing-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"optimization-constraint": {
-"id": "optimization-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"objective-function": {
-"id": "objective-function",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"delete-p-2-p-path": {
-"id": "delete-p-2-p-path",
-"is-read-only": false,
-"description": ["none"]
-},
-"path-id-or-name": {
-"id": "path-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json
deleted file mode 100644
index b2e4b4c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-photonic-media@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,798 +0,0 @@
-{ "schema-information": {
-
-"tapi-photonic-media": {
-"id": "tapi-photonic-media",
-"is-read-only": false,
-"description": ["This module contains TAPI PhotonicMedia Model definitions. Source: TapiPhotonicMedia.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"number-of-otsi": {
-"id": "number-of-otsi",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-gserver-adaptation-pac-g": {
-"id": "otsi-gserver-adaptation-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-termination": {
-"id": "otsi-termination",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-connection-end-point-spec-g": {
-"id": "otsi-connection-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"selected-central-frequency": {
-"id": "selected-central-frequency",
-"is-read-only": false,
-"unit":"MHz",
-"description": ["none"]
-},
-"selected-application-identifier": {
-"id": "selected-application-identifier",
-"is-read-only": false,
-"description": ["This attribute indicates the selected Application Identifier that is used by the OCh trail termination function. The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."]
-},
-"selected-modulation": {
-"id": "selected-modulation",
-"is-read-only": false,
-"description": ["This parameter defines the modulation used at the source"]
-},
-"selected-spectrum": {
-"id": "selected-spectrum",
-"is-read-only": false,
-"description": ["none"]
-},
-"transmited-power": {
-"id": "transmited-power",
-"is-read-only": false,
-"description": ["Measured power at the Transmitter."]
-},
-"received-power": {
-"id": "received-power",
-"is-read-only": false,
-"description": ["none"]
-},
-"laser-properties": {
-"id": "laser-properties",
-"is-read-only": false,
-"description": ["Laser properties."]
-},
-"otsi-termination-pac-g": {
-"id": "otsi-termination-pac-g",
-"is-read-only": false,
-"description": ["Provides status information only."]
-},
-"supportable-spectrum": {
-"id": "supportable-spectrum",
-"is-read-only": false,
-"description": ["none"]
-},
-"available-spectrum": {
-"id": "available-spectrum",
-"is-read-only": false,
-"description": ["none"]
-},
-"occupied-spectrum": {
-"id": "occupied-spectrum",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-pool-capability-pac-g": {
-"id": "media-channel-pool-capability-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mc-pool": {
-"id": "mc-pool",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-node-edge-point-spec-g": {
-"id": "media-channel-node-edge-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"optical-routing-strategy": {
-"id": "optical-routing-strategy",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-routing-spec-g": {
-"id": "otsi-routing-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"occupied-spectrum": {
-"id": "occupied-spectrum",
-"is-read-only": false,
-"description": ["none"]
-},
-"measured-power-ingress": {
-"id": "measured-power-ingress",
-"is-read-only": false,
-"description": ["none"]
-},
-"measured-power-egress": {
-"id": "measured-power-egress",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-properties-pac-g": {
-"id": "media-channel-properties-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-adapter": {
-"id": "otsi-adapter",
-"is-read-only": false,
-"description": ["none"]
-},
-"fec-parameters": {
-"id": "fec-parameters",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-assembly-connection-end-point-spec-g": {
-"id": "otsi-assembly-connection-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"supportable-lower-central-frequency": {
-"id": "supportable-lower-central-frequency",
-"is-read-only": false,
-"unit":"MHz",
-"description": ["The lower frequency of the channel spectrum"]
-},
-"supportable-upper-central-frequency": {
-"id": "supportable-upper-central-frequency",
-"is-read-only": false,
-"unit":"MHz",
-"description": ["The Upper frequency of the channel spectrum"]
-},
-"supportable-application-identifier": {
-"id": "supportable-application-identifier",
-"is-read-only": false,
-"description": ["The list of supportable ApplicationIdentifiers."]
-},
-"supportable-modulation": {
-"id": "supportable-modulation",
-"is-read-only": false,
-"description": ["This parameter defines the modulation used at the source"]
-},
-"total-power-warn-threshold": {
-"id": "total-power-warn-threshold",
-"is-read-only": false,
-"unit":"dBm",
-"description": ["none"]
-},
-"otsi-capability-pac-g": {
-"id": "otsi-capability-pac-g",
-"is-read-only": false,
-"description": ["Can read the status of the warning for the upper value that the power can reach."]
-},
-"otsi-capability": {
-"id": "otsi-capability",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-service-interface-point-spec-g": {
-"id": "otsi-service-interface-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-config": {
-"id": "otsi-config",
-"is-read-only": false,
-"description": ["none"]
-},
-"nmc-config": {
-"id": "nmc-config",
-"is-read-only": false,
-"description": ["none"]
-},
-"otsi-connectivity-service-end-point-spec-g": {
-"id": "otsi-connectivity-service-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"central-frequency": {
-"id": "central-frequency",
-"is-read-only": false,
-"unit":"MHz",
-"description": ["The central frequency of the laser. It is the oscillation frequency of the corresponding electromagnetic wave"]
-},
-"application-identifier": {
-"id": "application-identifier",
-"is-read-only": false,
-"description": ["This attribute indicates the selected Application Identifier."]
-},
-"modulation": {
-"id": "modulation",
-"is-read-only": false,
-"description": ["The modulation techniqu selected at the source."]
-},
-"laser-control": {
-"id": "laser-control",
-"is-read-only": false,
-"description": ["Laser control can be FORCED-ON, FORCED-OFF or AUTOMATIC-LASER-SHUTDOWN"]
-},
-"transmit-power": {
-"id": "transmit-power",
-"is-read-only": false,
-"description": ["Transmit power as requested."]
-},
-"total-power-warn-threshold-upper": {
-"id": "total-power-warn-threshold-upper",
-"is-read-only": false,
-"unit":"dBm",
-"description": ["Configure the Max, Default and Min values for the Upper power threshold."]
-},
-"total-power-warn-threshold-lower": {
-"id": "total-power-warn-threshold-lower",
-"is-read-only": false,
-"unit":"dBm",
-"description": ["Configure Max, Default and Min values for lower power threshold."]
-},
-"otsi-termination-config-pac-g": {
-"id": "otsi-termination-config-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"pre-fec-ber": {
-"id": "pre-fec-ber",
-"is-read-only": false,
-"description": ["counter: bit error rate before correction by FEC"]
-},
-"post-fec-ber": {
-"id": "post-fec-ber",
-"is-read-only": false,
-"description": ["counter: bit error rate after correction by FEC"]
-},
-"corrected-bytes": {
-"id": "corrected-bytes",
-"is-read-only": false,
-"description": ["Bytes corrected between those that were received corrupted"]
-},
-"corrected-bits": {
-"id": "corrected-bits",
-"is-read-only": false,
-"description": ["Bits corrected between those that were received corrupted"]
-},
-"uncorrectable-bytes": {
-"id": "uncorrectable-bytes",
-"is-read-only": false,
-"description": ["Bytes that could not be corrected by FEC"]
-},
-"uncorrectable-bits": {
-"id": "uncorrectable-bits",
-"is-read-only": false,
-"description": ["Bits that could not be corrected by FEC"]
-},
-"fec-properties-pac-g": {
-"id": "fec-properties-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mc-pool": {
-"id": "mc-pool",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-service-interface-point-spec-g": {
-"id": "media-channel-service-interface-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"mc-config": {
-"id": "mc-config",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-connectivity-service-end-point-spec-g": {
-"id": "media-channel-connectivity-service-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"spectrum": {
-"id": "spectrum",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-config-pac-g": {
-"id": "media-channel-config-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel": {
-"id": "media-channel",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-connection-end-point-spec-g": {
-"id": "media-channel-connection-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"ots-media-channel": {
-"id": "ots-media-channel",
-"is-read-only": false,
-"description": ["none"]
-},
-"ots-connection-end-point-spec-g": {
-"id": "ots-connection-end-point-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"media-channel-assembly-spec-g": {
-"id": "media-channel-assembly-spec-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"laser-status": {
-"id": "laser-status",
-"is-read-only": false,
-"description": ["none"]
-},
-"laser-application-type": {
-"id": "laser-application-type",
-"is-read-only": false,
-"description": ["The type of laser, its operational wavelengths, and its applications. String size 255."]
-},
-"laser-bias-current": {
-"id": "laser-bias-current",
-"is-read-only": false,
-"description": ["The Bias current of the laser that is the medium polarization current of the laser."]
-},
-"laser-temperature": {
-"id": "laser-temperature",
-"is-read-only": false,
-"description": ["The temperature of the laser"]
-},
-"laser-properties-pac-g": {
-"id": "laser-properties-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"total-power": {
-"id": "total-power",
-"is-read-only": false,
-"description": ["The total power at any point in a channel specified in dBm. range of type : -99.000..99.000"]
-},
-"power-spectral-density": {
-"id": "power-spectral-density",
-"is-read-only": false,
-"description": ["This describes how power of a signal is distributed over frequency specified in nW/MHz range of type : -2147483648..2147483648"]
-},
-"power-properties-pac-g": {
-"id": "power-properties-pac-g",
-"is-read-only": false,
-"description": ["Indication with severity warning raised when a total power value measured is above the threshold."]
-},
-"total-power-upper-warn-threshold-default": {
-"id": "total-power-upper-warn-threshold-default",
-"is-read-only": false,
-"description": ["Can read the value of the default threshold that was set"]
-},
-"total-power-upper-warn-threshold-min": {
-"id": "total-power-upper-warn-threshold-min",
-"is-read-only": false,
-"description": ["Can read the value of the lower threshold that was set"]
-},
-"total-power-upper-warn-threshold-max": {
-"id": "total-power-upper-warn-threshold-max",
-"is-read-only": false,
-"description": ["Can read the value of the upper threshold that was set"]
-},
-"total-power-lower-warn-threshold-default": {
-"id": "total-power-lower-warn-threshold-default",
-"is-read-only": false,
-"description": ["Can read the value of the default threshold that was set"]
-},
-"total-power-lower-warn-threshold-max": {
-"id": "total-power-lower-warn-threshold-max",
-"is-read-only": false,
-"description": ["Can read the value of the upper threshold that was set"]
-},
-"total-power-lower-warn-threshold-min": {
-"id": "total-power-lower-warn-threshold-min",
-"is-read-only": false,
-"description": ["Can read the value of the lower threshold that was set"]
-},
-"total-power-threshold-pac-g": {
-"id": "total-power-threshold-pac-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE": {
-"id": "SPECTRUM_TYPE",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_OTSi": {
-"id": "SPECTRUM_TYPE_OTSi",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_OTSiA": {
-"id": "SPECTRUM_TYPE_OTSiA",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_OTSiG": {
-"id": "SPECTRUM_TYPE_OTSiG",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_NMC": {
-"id": "SPECTRUM_TYPE_NMC",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_NMCA": {
-"id": "SPECTRUM_TYPE_NMCA",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_SMC": {
-"id": "SPECTRUM_TYPE_SMC",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_SMCA": {
-"id": "SPECTRUM_TYPE_SMCA",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_OCH": {
-"id": "SPECTRUM_TYPE_OCH",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_OMS": {
-"id": "SPECTRUM_TYPE_OMS",
-"is-read-only": false,
-"description": ["none"]
-},
-"SPECTRUM_TYPE_OTS": {
-"id": "SPECTRUM_TYPE_OTS",
-"is-read-only": false,
-"description": ["none"]
-},
-"application-identifier-type": {
-"id": "application-identifier-type",
-"is-read-only": false,
-"description": ["The ITU-T recommendation which defines the application code format."]
-},
-"application-code": {
-"id": "application-code",
-"is-read-only": false,
-"description": ["none"]
-},
-"application-identifier-g": {
-"id": "application-identifier-g",
-"is-read-only": false,
-"description": ["The syntax of ApplicationIdentifier is a pair {ApplicationIdentifierType, PrintableString}. The value of ApplicationIdentifierType is either STANDARD or PROPRIETARY. The value of PrintableString represents the standard application code as defined in the ITU-T Recommendations or a vendor-specific proprietary code. If the ApplicationIdentifierType is STANDARD the value of PrintableString represents a standard application code as defined in the ITU-T Recommendations. If the ApplicationIdentifierType is PROPRIETARY, the first six characters of the PrintableString must contain the Hexadecimal representation of an OUI assigned to the vendor whose implementation generated the Application Identifier; the remaining octets of the PrintableString are unspecified. The value of this attribute of an object instance has to be one of the values identified in the attribute SupportableApplicationIdentifierList of the same object instance. The values and value ranges of the optical interface parameters of a standard application code must be consistent with those values specified in the ITU-T Recommendation for that application code."]
-},
-"grid-type": {
-"id": "grid-type",
-"is-read-only": false,
-"description": ["Specifies the frequency grid standard used to determine the nominal central frequency and frequency slot width"]
-},
-"adjustment-granularity": {
-"id": "adjustment-granularity",
-"is-read-only": false,
-"description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency (in THz)"]
-},
-"central-frequency": {
-"id": "central-frequency",
-"is-read-only": false,
-"unit":"MHz",
-"description": ["The central frequency of the laser specified in MHz. It is the oscillation frequency of the corresponding electromagnetic wave."]
-},
-"channel-number": {
-"id": "channel-number",
-"is-read-only": false,
-"description": ["As per ITU-T G.694.1, this attribute is denoted as 'n' and is used to calculate the nominal central frequency (in THz) as follows: 193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and adjustment_granularity is the nominal central frequency granularity in THz"]
-},
-"central-frequency-or-wavelength-g": {
-"id": "central-frequency-or-wavelength-g",
-"is-read-only": false,
-"description": ["This data-type holds the central frequency directly or optionally the information to determine the nominal central frequency of a FIXED grid (DWDM or CWDM) and FLEX grid type systems. As per ITU-T G.694.1, the nominal central frequency (in THz) is calculated as follows: 193.1 + <channelNumber> × <adjustmentGranularity> where channelNumber is a positive or negative integer including 0 and <adjustment_granularity> is the nominal central frequency granularity in THz For FIXED grid types, the adjustmentGranularity is one of (0.1/0.05/0.025/0.0125) THz corresponding to channel spacing of one of (100/50/25/12.5) GHz For FLEX grid type, the adjusmentGranularity is 0.00625 THz and the slot width is variable in increments of 12.5 GHz"]
-},
-"OPTIMAL_OSNR": {
-"id": "OPTIMAL_OSNR",
-"is-read-only": false,
-"description": ["none"]
-},
-"NO_RELAY": {
-"id": "NO_RELAY",
-"is-read-only": false,
-"description": ["none"]
-},
-"MIN_RELAY": {
-"id": "MIN_RELAY",
-"is-read-only": false,
-"description": ["none"]
-},
-"PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE": {
-"id": "PREFERRED_NO_CHANGE_WAVELENGTH_AS_RESTORE",
-"is-read-only": false,
-"description": ["none"]
-},
-"PREFERRED_NO_SKIPPING_WAVELENGTH": {
-"id": "PREFERRED_NO_SKIPPING_WAVELENGTH",
-"is-read-only": false,
-"description": ["none"]
-},
-"optical-routing-strategy": {
-"id": "optical-routing-strategy",
-"is-read-only": false,
-"description": ["none"]
-},
-"PROPRIETARY": {
-"id": "PROPRIETARY",
-"is-read-only": false,
-"description": ["none"]
-},
-"ITUT_G959_1": {
-"id": "ITUT_G959_1",
-"is-read-only": false,
-"description": ["none"]
-},
-"ITUT_G698_1": {
-"id": "ITUT_G698_1",
-"is-read-only": false,
-"description": ["none"]
-},
-"ITUT_G698_2": {
-"id": "ITUT_G698_2",
-"is-read-only": false,
-"description": ["none"]
-},
-"ITUT_G696_1": {
-"id": "ITUT_G696_1",
-"is-read-only": false,
-"description": ["none"]
-},
-"ITUT_G695": {
-"id": "ITUT_G695",
-"is-read-only": false,
-"description": ["none"]
-},
-"application-identifier-type": {
-"id": "application-identifier-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"DWDM": {
-"id": "DWDM",
-"is-read-only": false,
-"description": ["Fixed frequency grid in C & L bands as specified in ITU-T G.694.1"]
-},
-"CWDM": {
-"id": "CWDM",
-"is-read-only": false,
-"description": ["Fixed frequency grid as specified in ITU-T G.694.2"]
-},
-"FLEX": {
-"id": "FLEX",
-"is-read-only": false,
-"description": ["Flexible frequency grid as specified in ITU-T G.694.1. In this case, - the allowed frequency slots have a nominal central frequency (in THz) defined by: 193.1 + n × 0.00625 where n is a positive or negative integer including 0 and 0.00625 is the nominal central frequency granularity in THz - and a slot width defined by: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz. Any combination of frequency slots is allowed as long as no two frequency slots overlap."]
-},
-"GRIDLESS": {
-"id": "GRIDLESS",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNSPECIFIED": {
-"id": "UNSPECIFIED",
-"is-read-only": false,
-"description": ["Unspecified/proprietary frequency grid"]
-},
-"grid-type": {
-"id": "grid-type",
-"is-read-only": false,
-"description": ["The frequency grid standard that specify reference set of frequencies used to denote allowed nominal central frequencies that may be used for defining applications."]
-},
-"G_100GHZ": {
-"id": "G_100GHZ",
-"is-read-only": false,
-"description": ["100000 MHz"]
-},
-"G_50GHZ": {
-"id": "G_50GHZ",
-"is-read-only": false,
-"description": ["50000 MHz"]
-},
-"G_25GHZ": {
-"id": "G_25GHZ",
-"is-read-only": false,
-"description": ["25000 MHz"]
-},
-"G_12_5GHZ": {
-"id": "G_12_5GHZ",
-"is-read-only": false,
-"description": ["12500 MHz"]
-},
-"G_6_25GHZ": {
-"id": "G_6_25GHZ",
-"is-read-only": false,
-"description": ["6250 MHz"]
-},
-"G_3_125GHZ": {
-"id": "G_3_125GHZ",
-"is-read-only": false,
-"description": ["3125 MHz"]
-},
-"UNCONSTRAINED": {
-"id": "UNCONSTRAINED",
-"is-read-only": false,
-"description": ["none"]
-},
-"adjustment-granularity": {
-"id": "adjustment-granularity",
-"is-read-only": false,
-"description": ["Adjustment granularity in Gigahertz. As per ITU-T G.694.1, it is used to calculate nominal central frequency"]
-},
-"upper-frequency": {
-"id": "upper-frequency",
-"is-read-only": false,
-"unit":"MHz",
-"description": ["The upper frequency bound of the media channel spectrum specified in MHz"]
-},
-"lower-frequency": {
-"id": "lower-frequency",
-"is-read-only": false,
-"unit":"MHz",
-"description": ["The lower frequency bound of the media channel spectrum specified in MHz"]
-},
-"frequency-slot": {
-"id": "frequency-slot",
-"is-read-only": false,
-"description": ["none"]
-},
-"spectrum-g": {
-"id": "spectrum-g",
-"is-read-only": false,
-"description": ["This data-type holds the spectrum information in termsof upper/lower frequency directly or optionally the information to determin this in terms of the nominal central frequency and spectral width for a FIXED grid (DWDM or CWDM) and FLEX grid type systems."]
-},
-"RZ": {
-"id": "RZ",
-"is-read-only": false,
-"description": ["none"]
-},
-"NRZ": {
-"id": "NRZ",
-"is-read-only": false,
-"description": ["none"]
-},
-"BPSK": {
-"id": "BPSK",
-"is-read-only": false,
-"description": ["none"]
-},
-"DPSK": {
-"id": "DPSK",
-"is-read-only": false,
-"description": ["none"]
-},
-"QPSK": {
-"id": "QPSK",
-"is-read-only": false,
-"description": ["none"]
-},
-"8QAM": {
-"id": "8QAM",
-"is-read-only": false,
-"description": ["none"]
-},
-"16QAM": {
-"id": "16QAM",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNDEFINED": {
-"id": "UNDEFINED",
-"is-read-only": false,
-"description": ["none"]
-},
-"modulation-technique": {
-"id": "modulation-technique",
-"is-read-only": false,
-"description": ["none"]
-},
-"spectral-width": {
-"id": "spectral-width",
-"is-read-only": false,
-"description": ["Width of the media channel spectrum specified in MHz"]
-},
-"slot-width-number": {
-"id": "slot-width-number",
-"is-read-only": false,
-"description": ["As per ITU-T G.694.1, this attribute is denoted as 'm' and is used to calculate the slot width (in GHz) as follows: 12.5 × m where m is a positive integer and 12.5 is the slot width granularity in GHz."]
-},
-"frequency-slot-g": {
-"id": "frequency-slot-g",
-"is-read-only": false,
-"description": ["The frequency range allocated to a slot and unavailable to other slots within a flexible grid. A frequency slot is defined by its nominal central frequency. As per ITU-T G.694.1 the slot width is calculated as follows: 12.5 × <slotWidthNumber> where slotWidthNumber is a positive integer and 12.5 is the slot width granularity in GHz"]
-},
-"PUMP": {
-"id": "PUMP",
-"is-read-only": false,
-"description": ["none"]
-},
-"MODULATED": {
-"id": "MODULATED",
-"is-read-only": false,
-"description": ["none"]
-},
-"PULSE": {
-"id": "PULSE",
-"is-read-only": false,
-"description": ["none"]
-},
-"laser-type": {
-"id": "laser-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"spectrum-type": {
-"id": "spectrum-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"FORCED-ON": {
-"id": "FORCED-ON",
-"is-read-only": false,
-"description": ["none"]
-},
-"FORCED-OFF": {
-"id": "FORCED-OFF",
-"is-read-only": false,
-"description": ["none"]
-},
-"AUTOMATIC-LASER-SHUTDOWN": {
-"id": "AUTOMATIC-LASER-SHUTDOWN",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNDEFINED": {
-"id": "UNDEFINED",
-"is-read-only": false,
-"description": ["none"]
-},
-"laser-control-type": {
-"id": "laser-control-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"ON": {
-"id": "ON",
-"is-read-only": false,
-"description": ["none"]
-},
-"OFF": {
-"id": "OFF",
-"is-read-only": false,
-"description": ["none"]
-},
-"PULSING": {
-"id": "PULSING",
-"is-read-only": false,
-"description": ["none"]
-},
-"UNDEFINED": {
-"id": "UNDEFINED",
-"is-read-only": false,
-"description": ["none"]
-},
-"laser-control-status-type": {
-"id": "laser-control-status-type",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json
deleted file mode 100644
index b0c2bd8..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-topology@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,648 +0,0 @@
-{ "schema-information": {
-
-"tapi-topology": {
-"id": "tapi-topology",
-"is-read-only": false,
-"description": ["This module contains TAPI Topology Model definitions. Source: TapiTopology.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"topology-uuid": {
-"id": "topology-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-ref-g": {
-"id": "topology-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"link-uuid": {
-"id": "link-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"link-ref-g": {
-"id": "link-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-uuid": {
-"id": "node-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-ref-g": {
-"id": "node-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-edge-point-uuid": {
-"id": "node-edge-point-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-edge-point-ref-g": {
-"id": "node-edge-point-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-rule-group-uuid": {
-"id": "node-rule-group-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-rule-group-ref-g": {
-"id": "node-rule-group-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-edge-point": {
-"id": "node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["The directionality of the Link. Is applicable to simple Links where all LinkEnds are BIDIRECTIONAL (the Link will be BIDIRECTIONAL) or UNIDIRECTIONAL (the Link will be UNIDIRECTIONAL). Is not present in more complex cases."]
-},
-"resilience-type": {
-"id": "resilience-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"link-g": {
-"id": "link-g",
-"is-read-only": false,
-"description": ["The Link object class models effective adjacency between two or more ForwardingDomains (FD)."]
-},
-"owned-node-edge-point": {
-"id": "owned-node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"aggregated-node-edge-point": {
-"id": "aggregated-node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-rule-group": {
-"id": "node-rule-group",
-"is-read-only": false,
-"description": ["none"]
-},
-"encap-topology": {
-"id": "encap-topology",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-g": {
-"id": "node-g",
-"is-read-only": false,
-"description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."]
-},
-"node": {
-"id": "node",
-"is-read-only": false,
-"description": ["none"]
-},
-"link": {
-"id": "link",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-g": {
-"id": "topology-g",
-"is-read-only": false,
-"description": ["The ForwardingDomain (FD) object class models the ForwardingDomain topological component which is used to effect forwarding of transport characteristic information and offers the potential to enable forwarding. At the lowest level of recursion, an FD (within a network element (NE)) represents a switch matrix (i.e., a fabric). Note that an NE can encompass multiple switch matrices (FDs)."]
-},
-"transitioned-layer-protocol-name": {
-"id": "transitioned-layer-protocol-name",
-"is-read-only": false,
-"description": ["Provides the ordered structure of layer protocol transitions encapsulated in the TopologicalEntity. The ordering relates to the LinkPort role."]
-},
-"layer-protocol-transition-pac-g": {
-"id": "layer-protocol-transition-pac-g",
-"is-read-only": false,
-"description": ["Relevant for a Link that is formed by abstracting one or more LTPs (in a stack) to focus on the flow and deemphasize the protocol transformation. This abstraction is relevant when considering multi-layer routing. The layer protocols of the LTP and the order of their application to the signal is still relevant and need to be accounted for. This is derived from the LTP spec details. This Pac provides the relevant abstractions of the LTPs and provides the necessary association to the LTPs involved. Links that included details in this Pac are often referred to as Transitional Links."]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"supported-cep-layer-protocol-qualifier": {
-"id": "supported-cep-layer-protocol-qualifier",
-"is-read-only": false,
-"description": ["none"]
-},
-"aggregated-node-edge-point": {
-"id": "aggregated-node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"mapped-service-interface-point": {
-"id": "mapped-service-interface-point",
-"is-read-only": false,
-"description": ["NodeEdgePoint mapped to more than ServiceInterfacePoint (slicing/virtualizing) or a ServiceInterfacePoint mapped to more than one NodeEdgePoint (load balancing/Resilience) should be considered experimental"]
-},
-"link-port-direction": {
-"id": "link-port-direction",
-"is-read-only": false,
-"description": ["The orientation of defined flow at the LinkEnd."]
-},
-"link-port-role": {
-"id": "link-port-role",
-"is-read-only": false,
-"description": ["Each LinkEnd of the Link has a role (e.g., symmetric, hub, spoke, leaf, root) in the context of the Link with respect to the Link function."]
-},
-"node-edge-point-g": {
-"id": "node-edge-point-g",
-"is-read-only": false,
-"description": ["The LogicalTerminationPoint (LTP) object class encapsulates the termination and adaptation functions of one or more transport layers. The structure of LTP supports all transport protocols including circuit and packet forms."]
-},
-"risk-characteristic": {
-"id": "risk-characteristic",
-"is-read-only": false,
-"description": ["A list of risk characteristics for consideration in an analysis of shared risk. Each element of the list represents a specific risk consideration."]
-},
-"risk-parameter-pac-g": {
-"id": "risk-parameter-pac-g",
-"is-read-only": false,
-"description": ["The risk characteristics of a TopologicalEntity come directly from the underlying physical realization. The risk characteristics propagate from the physical realization to the client and from the server layer to the client layer, this propagation may be modified by protection. A TopologicalEntity may suffer degradation or failure as a result of a problem in a part of the underlying realization. The realization can be partitioned into segments which have some relevant common failure modes. There is a risk of failure/degradation of each segment of the underlying realization. Each segment is a part of a larger physical/geographical unit that behaves as one with respect to failure (i.e. a failure will have a high probability of impacting the whole unit (e.g. all cables in the same duct). Disruptions to that larger physical/geographical unit will impact (cause failure/errors to) all TopologicalEntities that use any part of that larger physical/geographical entity. Any TopologicalEntity that uses any part of that larger physical/geographical unit will suffer impact and hence each TopologicalEntity shares risk. The identifier of each physical/geographical unit that is involved in the realization of each segment of a Topological entity can be listed in the RiskParameter_Pac of that TopologicalEntity. A segment has one or more risk characteristic. Shared risk between two TopologicalEntities compromises the integrity of any solution that use one of those TopologicalEntity as a backup for the other. Where two TopologicalEntities have a common risk characteristic they have an elevated probability of failing simultaneously compared to two TopologicalEntities that do not share risk characteristics."]
-},
-"cost-characteristic": {
-"id": "cost-characteristic",
-"is-read-only": false,
-"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."]
-},
-"transfer-cost-pac-g": {
-"id": "transfer-cost-pac-g",
-"is-read-only": false,
-"description": ["The cost characteristics of a TopologicalEntity not necessarily correlated to the cost of the underlying physical realization. They may be quite specific to the individual TopologicalEntity e.g. opportunity cost. Relates to layer capacity There may be many perspectives from which cost may be considered for a particular TopologicalEntity and hence many specific costs and potentially cost algorithms. Using an entity will incur a cost."]
-},
-"error-characteristic": {
-"id": "error-characteristic",
-"is-read-only": false,
-"description": ["Describes the degree to which the signal propagated can be errored. Applies to TDM systems as the errored signal will be propagated and not packet as errored packets will be discarded."]
-},
-"loss-characteristic": {
-"id": "loss-characteristic",
-"is-read-only": false,
-"description": ["Describes the acceptable characteristic of lost packets where loss may result from discard due to errors or overflow. Applies to packet systems and not TDM (as for TDM errored signals are propagated unless grossly errored and overflow/underflow turns into timing slips)."]
-},
-"repeat-delivery-characteristic": {
-"id": "repeat-delivery-characteristic",
-"is-read-only": false,
-"description": ["Primarily applies to packet systems where a packet may be delivered more than once (in fault recovery for example). It can also apply to TDM where several frames may be received twice due to switching in a system with a large differential propagation delay."]
-},
-"delivery-order-characteristic": {
-"id": "delivery-order-characteristic",
-"is-read-only": false,
-"description": ["Describes the degree to which packets will be delivered out of sequence. Does not apply to TDM as the TDM protocols maintain strict order."]
-},
-"unavailable-time-characteristic": {
-"id": "unavailable-time-characteristic",
-"is-read-only": false,
-"description": ["Describes the duration for which there may be no valid signal propagated."]
-},
-"server-integrity-process-characteristic": {
-"id": "server-integrity-process-characteristic",
-"is-read-only": false,
-"description": ["Describes the effect of any server integrity enhancement process on the characteristics of the TopologicalEntity."]
-},
-"transfer-integrity-pac-g": {
-"id": "transfer-integrity-pac-g",
-"is-read-only": false,
-"description": ["Transfer intergrity characteristic covers expected/specified/acceptable characteristic of degradation of the transfered signal. It includes all aspects of possible degradation of signal content as well as any damage of any form to the total TopologicalEntity and to the carried signals. Note that the statement is of total impact to the TopologicalEntity so any partial usage of the TopologicalEntity (e.g. a signal that does not use full capacity) will only suffer its portion of the impact."]
-},
-"latency-characteristic": {
-"id": "latency-characteristic",
-"is-read-only": false,
-"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."]
-},
-"transfer-timing-pac-g": {
-"id": "transfer-timing-pac-g",
-"is-read-only": false,
-"description": ["A TopologicalEntity will suffer effects from the underlying physical realization related to the timing of the information passed by the TopologicalEntity."]
-},
-"validation-mechanism": {
-"id": "validation-mechanism",
-"is-read-only": false,
-"description": ["Provides details of the specific validation mechanism(s) used to confirm the presence of an intended topologicalEntity."]
-},
-"validation-pac-g": {
-"id": "validation-pac-g",
-"is-read-only": false,
-"description": ["Validation covers the various adjacenct discovery and reachability verification protocols. Also may cover Information source and degree of integrity."]
-},
-"topology": {
-"id": "topology",
-"is-read-only": false,
-"description": ["none"]
-},
-"network-topology-service-g": {
-"id": "network-topology-service-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"nw-topology-service": {
-"id": "nw-topology-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology": {
-"id": "topology",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-context-g": {
-"id": "topology-context-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"rule": {
-"id": "rule",
-"is-read-only": false,
-"description": ["none"]
-},
-"associated-node-rule-group": {
-"id": "associated-node-rule-group",
-"is-read-only": false,
-"description": ["none"]
-},
-"inter-rule-group-g": {
-"id": "inter-rule-group-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"rule": {
-"id": "rule",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-edge-point": {
-"id": "node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"composed-rule-group": {
-"id": "composed-rule-group",
-"is-read-only": false,
-"description": ["none"]
-},
-"inter-rule-group": {
-"id": "inter-rule-group",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-rule-group-g": {
-"id": "node-rule-group-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"rule-type": {
-"id": "rule-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"forwarding-rule": {
-"id": "forwarding-rule",
-"is-read-only": false,
-"description": ["none"]
-},
-"override-priority": {
-"id": "override-priority",
-"is-read-only": false,
-"description": ["none"]
-},
-"rule-g": {
-"id": "rule-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"cost-name": {
-"id": "cost-name",
-"is-read-only": false,
-"description": ["The cost characteristic will related to some aspect of the TopologicalEntity (e.g. $ cost, routing weight). This aspect will be conveyed by the costName."]
-},
-"cost-value": {
-"id": "cost-value",
-"is-read-only": false,
-"description": ["The specific cost."]
-},
-"cost-algorithm": {
-"id": "cost-algorithm",
-"is-read-only": false,
-"description": ["The cost may vary based upon some properties of the TopologicalEntity. The rules for the variation are conveyed by the costAlgorithm."]
-},
-"cost-characteristic-g": {
-"id": "cost-characteristic-g",
-"is-read-only": false,
-"description": ["The information for a particular cost characteristic."]
-},
-"traffic-property-name": {
-"id": "traffic-property-name",
-"is-read-only": false,
-"description": ["The identifier of the specific traffic property to which the queuing latency applies."]
-},
-"fixed-latency-characteristic": {
-"id": "fixed-latency-characteristic",
-"is-read-only": false,
-"description": ["A TopologicalEntity suffers delay caused by the realization of the servers (e.g. distance related; FEC encoding etc.) along with some client specific processing. This is the total average latency effect of the TopologicalEntity"]
-},
-"queing-latency-characteristic": {
-"id": "queing-latency-characteristic",
-"is-read-only": false,
-"description": ["The specific queuing latency for the traffic property."]
-},
-"jitter-characteristic": {
-"id": "jitter-characteristic",
-"is-read-only": false,
-"description": ["High frequency deviation from true periodicity of a signal and therefore a small high rate of change of transfer latency. Applies to TDM systems (and not packet)."]
-},
-"wander-characteristic": {
-"id": "wander-characteristic",
-"is-read-only": false,
-"description": ["Low frequency deviation from true periodicity of a signal and therefore a small low rate of change of transfer latency. Applies to TDM systems (and not packet)."]
-},
-"latency-characteristic-g": {
-"id": "latency-characteristic-g",
-"is-read-only": false,
-"description": ["Provides information on latency characteristic for a particular stated trafficProperty."]
-},
-"risk-characteristic-name": {
-"id": "risk-characteristic-name",
-"is-read-only": false,
-"description": ["The name of the risk characteristic. The characteristic may be related to a specific degree of closeness. For example a particular characteristic may apply to failures that are localized (e.g. to one side of a road) where as another characteristic may relate to failures that have a broader impact (e.g. both sides of a road that crosses a bridge). Depending upon the importance of the traffic being routed different risk characteristics will be evaluated."]
-},
-"risk-identifier-list": {
-"id": "risk-identifier-list",
-"is-read-only": false,
-"description": ["A list of the identifiers of each physical/geographic unit (with the specific risk characteristic) that is related to a segment of the TopologicalEntity."]
-},
-"risk-characteristic-g": {
-"id": "risk-characteristic-g",
-"is-read-only": false,
-"description": ["The information for a particular risk characteristic where there is a list of risk identifiers related to that characteristic."]
-},
-"validation-mechanism": {
-"id": "validation-mechanism",
-"is-read-only": false,
-"description": ["Name of mechanism used to validate adjacency"]
-},
-"layer-protocol-adjacency-validated": {
-"id": "layer-protocol-adjacency-validated",
-"is-read-only": false,
-"description": ["State of validatiion"]
-},
-"validation-robustness": {
-"id": "validation-robustness",
-"is-read-only": false,
-"description": ["Quality of validation (i.e. how likely is the stated validation to be invalid)"]
-},
-"validation-mechanism-g": {
-"id": "validation-mechanism-g",
-"is-read-only": false,
-"description": ["Identifies the validation mechanism and describes the characteristics of that mechanism"]
-},
-"MAY_FORWARD_ACROSS_GROUP": {
-"id": "MAY_FORWARD_ACROSS_GROUP",
-"is-read-only": false,
-"description": ["none"]
-},
-"MUST_FORWARD_ACROSS_GROUP": {
-"id": "MUST_FORWARD_ACROSS_GROUP",
-"is-read-only": false,
-"description": ["none"]
-},
-"CANNOT_FORWARD_ACROSS_GROUP": {
-"id": "CANNOT_FORWARD_ACROSS_GROUP",
-"is-read-only": false,
-"description": ["none"]
-},
-"NO_STATEMENT_ON_FORWARDING": {
-"id": "NO_STATEMENT_ON_FORWARDING",
-"is-read-only": false,
-"description": ["none"]
-},
-"forwarding-rule": {
-"id": "forwarding-rule",
-"is-read-only": false,
-"description": ["none"]
-},
-"FORWARDING": {
-"id": "FORWARDING",
-"is-read-only": false,
-"description": ["none"]
-},
-"CAPACITY": {
-"id": "CAPACITY",
-"is-read-only": false,
-"description": ["none"]
-},
-"COST": {
-"id": "COST",
-"is-read-only": false,
-"description": ["none"]
-},
-"TIMING": {
-"id": "TIMING",
-"is-read-only": false,
-"description": ["none"]
-},
-"RISK": {
-"id": "RISK",
-"is-read-only": false,
-"description": ["none"]
-},
-"GROUPING": {
-"id": "GROUPING",
-"is-read-only": false,
-"description": ["none"]
-},
-"rule-type": {
-"id": "rule-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"restoration-policy": {
-"id": "restoration-policy",
-"is-read-only": false,
-"description": ["none"]
-},
-"protection-type": {
-"id": "protection-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"resilience-type-g": {
-"id": "resilience-type-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"PER_DOMAIN_RESTORATION": {
-"id": "PER_DOMAIN_RESTORATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"END_TO_END_RESTORATION": {
-"id": "END_TO_END_RESTORATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"NA": {
-"id": "NA",
-"is-read-only": false,
-"description": ["none"]
-},
-"restoration-policy": {
-"id": "restoration-policy",
-"is-read-only": false,
-"description": ["none"]
-},
-"NO_PROTECTON": {
-"id": "NO_PROTECTON",
-"is-read-only": false,
-"description": ["none"]
-},
-"ONE_PLUS_ONE_PROTECTION": {
-"id": "ONE_PLUS_ONE_PROTECTION",
-"is-read-only": false,
-"description": ["none"]
-},
-"ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION": {
-"id": "ONE_PLUS_ONE_PROTECTION_WITH_DYNAMIC_RESTORATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"PERMANENT_ONE_PLUS_ONE_PROTECTION": {
-"id": "PERMANENT_ONE_PLUS_ONE_PROTECTION",
-"is-read-only": false,
-"description": ["none"]
-},
-"ONE_FOR_ONE_PROTECTION": {
-"id": "ONE_FOR_ONE_PROTECTION",
-"is-read-only": false,
-"description": ["none"]
-},
-"DYNAMIC_RESTORATION": {
-"id": "DYNAMIC_RESTORATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"PRE_COMPUTED_RESTORATION": {
-"id": "PRE_COMPUTED_RESTORATION",
-"is-read-only": false,
-"description": ["none"]
-},
-"protection-type": {
-"id": "protection-type",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-topology-details": {
-"id": "get-topology-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-id-or-name": {
-"id": "topology-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology": {
-"id": "topology",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-node-details": {
-"id": "get-node-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-id-or-name": {
-"id": "topology-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-id-or-name": {
-"id": "node-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"node": {
-"id": "node",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-node-edge-point-details": {
-"id": "get-node-edge-point-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-id-or-name": {
-"id": "topology-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-id-or-name": {
-"id": "node-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"ep-id-or-name": {
-"id": "ep-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"node-edge-point": {
-"id": "node-edge-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-link-details": {
-"id": "get-link-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology-id-or-name": {
-"id": "topology-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"link-id-or-name": {
-"id": "link-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"link": {
-"id": "link",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-topology-list": {
-"id": "get-topology-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology": {
-"id": "topology",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json
deleted file mode 100644
index ddeb8cb..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/modelDescription/tapi-virtual-network@2018-08-31.schema-information.json
+++ /dev/null
@@ -1,198 +0,0 @@
-{ "schema-information": {
-
-"tapi-virtual-network": {
-"id": "tapi-virtual-network",
-"is-read-only": false,
-"description": ["This module contains TAPI Virtual Network Model definitions. Source: TapiVirtualNetwork.uml Copyright (c) 2018 Open Networking Foundation (ONF). All rights reserved. License: This module is distributed under the Apache License 2.0"]
-},
-"virtual-nw-service-uuid": {
-"id": "virtual-nw-service-uuid",
-"is-read-only": false,
-"description": ["none"]
-},
-"virtual-nw-service-ref-g": {
-"id": "virtual-nw-service-ref-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"src-service-end-point": {
-"id": "src-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"sink-service-end-point": {
-"id": "sink-service-end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"diversity-exclusion": {
-"id": "diversity-exclusion",
-"is-read-only": false,
-"description": ["none"]
-},
-"requested-capacity": {
-"id": "requested-capacity",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-level": {
-"id": "service-level",
-"is-read-only": false,
-"description": ["An abstract value the meaning of which is mutually agreed – typically represents metrics such as - Class of service, priority, resiliency, availability"]
-},
-"service-layer": {
-"id": "service-layer",
-"is-read-only": false,
-"description": ["none"]
-},
-"cost-characteristic": {
-"id": "cost-characteristic",
-"is-read-only": false,
-"description": ["The list of costs where each cost relates to some aspect of the TopologicalEntity."]
-},
-"latency-characteristic": {
-"id": "latency-characteristic",
-"is-read-only": false,
-"description": ["The effect on the latency of a queuing process. This only has significant effect for packet based systems and has a complex characteristic."]
-},
-"virtual-network-constraint-g": {
-"id": "virtual-network-constraint-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"topology": {
-"id": "topology",
-"is-read-only": false,
-"description": ["none"]
-},
-"end-point": {
-"id": "end-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"vnw-constraint": {
-"id": "vnw-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"schedule": {
-"id": "schedule",
-"is-read-only": false,
-"description": ["none"]
-},
-"state": {
-"id": "state",
-"is-read-only": false,
-"description": ["none"]
-},
-"layer-protocol-name": {
-"id": "layer-protocol-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"virtual-network-service-g": {
-"id": "virtual-network-service-g",
-"is-read-only": false,
-"description": ["The ForwardingConstruct (FC) object class models enabled potential for forwarding between two or more LTPs and like the LTP supports any transport protocol including all circuit and packet forms. At the lowest level of recursion, a FC represents a cross-connection within an NE."]
-},
-"service-interface-point": {
-"id": "service-interface-point",
-"is-read-only": false,
-"description": ["none"]
-},
-"role": {
-"id": "role",
-"is-read-only": false,
-"description": ["Each EP of the FC has a role (e.g., working, protection, protected, symmetric, hub, spoke, leaf, root) in the context of the FC with respect to the FC function."]
-},
-"direction": {
-"id": "direction",
-"is-read-only": false,
-"description": ["The orientation of defined flow at the EndPoint."]
-},
-"service-layer": {
-"id": "service-layer",
-"is-read-only": false,
-"description": ["none"]
-},
-"virtual-network-service-end-point-g": {
-"id": "virtual-network-service-end-point-g",
-"is-read-only": false,
-"description": ["The association of the FC to LTPs is made via EndPoints. The EndPoint (EP) object class models the access to the FC function. The traffic forwarding between the associated EPs of the FC depends upon the type of FC and may be associated with FcSwitch object instances. In cases where there is resilience the EndPoint may convey the resilience role of the access to the FC. It can represent a protected (resilient/reliable) point or a protecting (unreliable working or protection) point. The EP replaces the Protection Unit of a traditional protection model. The ForwadingConstruct can be considered as a component and the EndPoint as a Port on that component"]
-},
-"virtual-nw-service": {
-"id": "virtual-nw-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"virtual-network-context-g": {
-"id": "virtual-network-context-g",
-"is-read-only": false,
-"description": ["none"]
-},
-"create-virtual-network-service": {
-"id": "create-virtual-network-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"sep": {
-"id": "sep",
-"is-read-only": false,
-"description": ["none"]
-},
-"vnw-constraint": {
-"id": "vnw-constraint",
-"is-read-only": false,
-"description": ["none"]
-},
-"conn-schedule": {
-"id": "conn-schedule",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"delete-virtual-network-service": {
-"id": "delete-virtual-network-service",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id-or-name": {
-"id": "service-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-virtual-network-service-details": {
-"id": "get-virtual-network-service-details",
-"is-read-only": false,
-"description": ["none"]
-},
-"service-id-or-name": {
-"id": "service-id-or-name",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-},
-"get-virtual-network-service-list": {
-"id": "get-virtual-network-service-list",
-"is-read-only": false,
-"description": ["none"]
-},
-"service": {
-"id": "service",
-"is-read-only": false,
-"description": ["none"]
-}}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnMapping.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnMapping.json
deleted file mode 100644
index 21c7efb..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnMapping.json
+++ /dev/null
@@ -1,54 +0,0 @@
-{
-    "settings": {
-       "analysis": {
-          "analyzer": {
-             "standard": {
-                 "type": "whitespace"
-             }
-          }
-       }
-    },
-    "mappings": {
-        "required-networkelement": {
-            "date_detection": false
-        },
-        "maintenancemode": {
-            "date_detection": false
-        },
-        "site": {
-            "properties": {
-                "id": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "name": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "location": {
-                    "geohash": true,
-                    "geohash_precision": 10,
-                    "type": "geo_point",
-                    "lat_lon": true,
-                    "geohash_prefix": true
-                }
-            }
-        },
-        "site-link": {
-            "properties": {
-                "id": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                 "siteZ": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "siteA": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                }
-            }
-        }
-    }
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnV1Alias.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnV1Alias.json
deleted file mode 100644
index e4aa745..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/mwtn/mwtnV1Alias.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
-    "actions":[
-            { "add": {
-                "alias": "mwtn",
-                "index": "mwtn_v1"
-            }}
-        ]
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnevents/sdneventsMapping.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnevents/sdneventsMapping.json
deleted file mode 100644
index 25cabed..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnevents/sdneventsMapping.json
+++ /dev/null
@@ -1,157 +0,0 @@
-{
-	"mappings": {
-		"faultlog": {
-			"properties": {
-				"fault": {
-					"properties": {
-						"nodeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"severity": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"timeStamp": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"problem": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"counter": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"objectId": {
-							"index": "not_analyzed",
-							"type": "string"
-						}
-					}
-				}
-			}
-		},
-		"faultcurrent": {
-			"properties": {
-				"faultCurrent": {
-					"properties": {
-						"nodeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"severity": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"timeStamp": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"problem": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"counter": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"objectId": {
-							"index": "not_analyzed",
-							"type": "string"
-						}
-					}
-				}
-			}
-		},
-		"eventlog": {
-			"properties": {
-				"event": {
-					"properties": {
-						"nodeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"timeStamp": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"newValue": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"attributeName": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"counter": {
-							"index": "not_analyzed",
-							"type": "string"
-						},
-						"objectId": {
-							"index": "not_analyzed",
-							"type": "string"
-						}
-					}
-				}
-			}
-		},
-
-		"inventorytoplevel": {
-			"properties": {
-				"uuidList": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"mountpoint": {
-					"index": "not_analyzed",
-					"type": "string"
-				}
-			}
-		},
-		"inventoryequipment": {
-			"properties": {
-				"date": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"modelIdentifier": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"partTypeId": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"serial": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"typeName": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"description": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"uuid": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"version": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"containedHolder": {
-					"index": "not_analyzed",
-					"type": "string"
-				},
-				"mountpoint": {
-					"index": "not_analyzed",
-					"type": "string"
-				}
-			}
-		}
-	}
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json
deleted file mode 100644
index 92d5ad2..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/index/sdnperformance/sdnperformanceMapping.json
+++ /dev/null
@@ -1,92 +0,0 @@
-{
-    "mappings":
-    {
-        "historicalperformance24h":
-        {
-            "properties":
-            {
-                "node-name":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "time-stamp":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "suspect-interval-flag":
-                {
-                    "type": "boolean"
-                },
-                "scanner-id":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "uuid-interface":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                 "layer-protocol-name": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "granularity-period":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "radio-signal-id": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                }
-            }
-        },
-
-        "historicalperformance15min":
-        {
-            "properties":
-            {
-                "node-name":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "time-stamp":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "suspect-interval-flag":
-                {
-                    "type": "boolean"
-                },
-                "scanner-id":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "uuid-interface":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                 "layer-protocol-name": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "granularity-period":
-                {
-                    "index": "not_analyzed",
-                    "type": "string"
-                },
-                "radio-signal-id": {
-                    "index": "not_analyzed",
-                    "type": "string"
-                }
-            }
-        }
-    }
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties
deleted file mode 100644
index 70b21dc..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/delete-by-query/plugin-descriptor.properties
+++ /dev/null
@@ -1,80 +0,0 @@
-# Elasticsearch plugin descriptor file
-# This file must exist as 'plugin-descriptor.properties' at
-# the root directory of all plugins.
-#
-# A plugin can be 'site', 'jvm', or both.
-#
-### example site plugin for "foo":
-#
-# foo.zip <-- zip file for the plugin, with this structure:
-#   _site/ <-- the contents that will be served
-#   plugin-descriptor.properties <-- example contents below:
-#
-# site=true
-# description=My cool plugin
-# version=1.0
-#
-### example jvm plugin for "foo"
-#
-# foo.zip <-- zip file for the plugin, with this structure:
-#   <arbitrary name1>.jar <-- classes, resources, dependencies
-#   <arbitrary nameN>.jar <-- any number of jars
-#   plugin-descriptor.properties <-- example contents below:
-#
-# jvm=true
-# classname=foo.bar.BazPlugin
-# description=My cool plugin
-# version=2.0.0-rc1
-# elasticsearch.version=2.0
-# java.version=1.7
-#
-### mandatory elements for all plugins:
-#
-# 'description': simple summary of the plugin
-description=The Delete By Query plugin allows to delete documents in Elasticsearch with a single query.
-#
-# 'version': plugin's version
-version=2.2.0
-#
-# 'name': the plugin name
-name=delete-by-query
-
-### mandatory elements for site plugins:
-#
-# 'site': set to true to indicate contents of the _site/
-#  directory in the root of the plugin should be served.
-site=false
-#
-### mandatory elements for jvm plugins :
-#
-# 'jvm': true if the 'classname' class should be loaded
-#  from jar files in the root directory of the plugin.
-#  Note that only jar files in the root directory are
-#  added to the classpath for the plugin! If you need
-#  other resources, package them into a resources jar.
-jvm=true
-#
-# 'classname': the name of the class to load, fully-qualified.
-classname=org.elasticsearch.plugin.deletebyquery.DeleteByQueryPlugin
-#
-# 'java.version' version of java the code is built against
-# use the system property java.specification.version
-# version string must be a sequence of nonnegative decimal integers
-# separated by "."'s and may have leading zeros
-java.version=1.7
-#
-# 'elasticsearch.version' version of elasticsearch compiled against
-# You will have to release a new version of the plugin for each new
-# elasticsearch release. This version is checked when the plugin
-# is loaded so Elasticsearch will refuse to start in the presence of
-# plugins with the incorrect elasticsearch.version.
-elasticsearch.version=2.2.0
-#
-### deprecated elements for jvm plugins :
-#
-# 'isolated': true if the plugin should have its own classloader.
-# passing false is deprecated, and only intended to support plugins 
-# that have hard dependencies against each other. If this is
-# not specified, then the plugin is isolated by default.
-isolated=true
-#
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/.jshintrc b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/.jshintrc
deleted file mode 100644
index 757f969..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/.jshintrc
+++ /dev/null
@@ -1,40 +0,0 @@
-{
-	"maxerr": 1000,
-
-	"predef": [
-		"exports",
-		"describe",
-		"expect",
-		"it",
-		"beforeEach",
-		"afterEach",
-		"jasmine",
-		"test",
-		"spyOn"
-	],
-
-	"jquery" : true,
-	"browser" : true,
-
-	"curly": true,
-	"debug": false,
-	"devel": true,
-	"eqeqeq": true,
-	"eqnull": true,
-	"expr": true,
-	"forin": false,
-	"immed": false,
-	"latedef": true,
-	"newcap": true,
-	"noarg": true,
-	"noempty": false,
-	"nonew": false,
-	"nomen": false,
-	"plusplus": false,
-	"regexp": false,
-	"undef": true,
-	"sub": true,
-	"white": false,
-	"scripturl": true,
-	"esnext": true
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/Gruntfile.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/Gruntfile.js
deleted file mode 100644
index d9607ac..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/Gruntfile.js
+++ /dev/null
@@ -1,115 +0,0 @@
-module.exports = function(grunt) {
-
-	var fileSets = require("./grunt_fileSets.js");
-
-	// Project configuration.
-	grunt.initConfig({
-		clean: {
-			_site: {
-				src: ['_site']
-			}
-		},
-		concat: {
-			vendorjs: {
-				src: fileSets.vendorJs,
-				dest: '_site/vendor.js'
-			},
-			vendorcss: {
-				src: fileSets.vendorCss,
-				dest: '_site/vendor.css'
-			},
-			appjs: {
-				src: fileSets.srcJs,
-				dest: '_site/app.js'
-			},
-			appcss: {
-				src: fileSets.srcCss,
-				dest: '_site/app.css'
-			}
-		},
-
-		copy: {
-			site_index: {
-				src: 'index.html',
-				dest: '_site/index.html',
-				options: {
-					process: function( src ) {
-						return src.replace(/_site\//g, "");
-					}
-				}
-			},
-			base: {
-				expand: true,
-				cwd: 'src/app/base/',
-				src: [ '*.gif', '*.png', '*.css' ],
-				dest: '_site/base/'
-			},
-			iconFonts: {
-				expand: true,
-				cwd: 'src/vendor/font-awesome/fonts/',
-				src: '**',
-				dest: '_site/fonts'
-			},
-			i18n: {
-				src: 'src/vendor/i18n/i18n.js',
-				dest: '_site/i18n.js'
-			},
-			lang: {
-				expand: true,
-				cwd: 'src/app/lang/',
-				src: '**',
-				dest: '_site/lang/'
-			}
-		},
-
-		jasmine: {
-			task: {
-				src: [ fileSets.vendorJs, 'src/vendor/i18n/i18n.js', 'src/app/lang/en_strings.js', fileSets.srcJs ],
-				options: {
-					specs: 'src/app/**/*Spec.js',
-					helpers: 'test/spec/*Helper.js',
-					display: "short",
-					summary: true
-				}
-			}
-		},
-
-		watch: {
-			"scripts": {
-				files: ['src/**/*', 'test/spec/*' ],
-				tasks: ['default'],
-				options: {
-					spawn: false
-				}
-			},
-			"grunt": {
-				files: [ 'Gruntfile.js' ]
-			}
-		},
-
-		connect: {
-			server: {
-				options: {
-					port: 9100,
-					base: '.',
-					keepalive: true
-				}
-			}
-		}
-
-	});
-
-	grunt.loadNpmTasks('grunt-contrib-clean');
-	grunt.loadNpmTasks('grunt-contrib-concat');
-	grunt.loadNpmTasks('grunt-contrib-watch');
-	grunt.loadNpmTasks('grunt-contrib-connect');
-	grunt.loadNpmTasks('grunt-contrib-copy');
-	grunt.loadNpmTasks('grunt-contrib-jasmine');
-
-	// Default task(s).
-	grunt.registerTask('default', ['clean', 'concat', 'copy', 'jasmine']);
-	grunt.registerTask('server', ['connect:server']);
-	grunt.registerTask('dev', [ 'default', 'watch' ]);
-
-
-};
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/LICENCE b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/LICENCE
deleted file mode 100644
index a93b4df..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/LICENCE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2010-2013 Ben Birch
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this software except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/README.textile b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/README.textile
deleted file mode 100644
index 6db8d5b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/README.textile
+++ /dev/null
@@ -1,98 +0,0 @@
-h1. elasticsearch-head
-
-h2. A web front end for an Elasticsearch cluster
-
-h3. "http://mobz.github.io/elasticsearch-head":http://mobz.github.io/elasticsearch-head
-
-h2. Installing and Running
-
-There are two main ways of running and installing elasticsearch-head
-
-h4. Running as a plugin of Elasticsearch
-
-* Install elasticsearch-head:
-  - for Elasticsearch 5.x:
-    site plugins are not supported. Run elasticsearch-head "as a standalone server":#running-with-built-in-server
-  - for Elasticsearch 2.x - 4.x:
-    @sudo elasticsearch/bin/plugin install mobz/elasticsearch-head@
-  - for Elasticsearch 1.x:
-    @sudo elasticsearch/bin/plugin -install mobz/elasticsearch-head/1.x@
-  - for Elasticsearch 0.9:
-    @sudo elasticsearch/bin/plugin -install mobz/elasticsearch-head/0.9@
-
-* @open http://localhost:9200/_plugin/head/@
-
-This will automatically download the latest version of elasticsearch-head from github and run it as a plugin within the elasticsearch cluster. In this mode;
-* elasticsearch-head automatically connects to the node that is running it
-
-Note on different Elasticsearch installation path:
-* If you've installed the .deb package, then the plugin executable will be available at @/usr/share/elasticsearch/bin/plugin@.
-* If you've installed Elasticsearch via Homebrew, plugin executable will be available at @/usr/local/Cellar/elasticsearch/(elasticsearch version)/libexec/bin/plugin@.
-
-h4. Running with built in server
-
-* enable "cors":http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-http.html by adding @http.cors.enabled: true@ in elasticsearch configuration. Don't forget to also set @http.cors.allow-origin@ because no origin allowed by default. @http.cors.allow-origin: "*"@ is valid value, however it's considered as a security risk as your cluster is open to cross origin from *anywhere*. Check Elasticsearch documentation on this parameter:  https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html#modules-http
-* @git clone git://github.com/mobz/elasticsearch-head.git@
-* @cd elasticsearch-head@
-* @npm install@
-* @grunt server@
-* @open@ "http://localhost:9100/":http://localhost:9100/
-
-This will start a local webserver running on port 9100 serving elasticsearch-head
-* Best option if you are likely to connect to several different clusters
-
-h4. Alternatives
-
-h5. Running from the filesystem
-
-elastisearch-head is a standalone webapp written in good-ol' html5. This means, you can put it up on any webserver, run it directly from the filesystem, use it on an iPad, or put it on a floppy disk and carry it with you.
-
-h4. URL Parameters
-
-Parameters may be appended to the url to set an initial state eg. @head/index.html?base_uri=http://node-01.example.com:9200@
-
-* @base_uri@ force elasticsearch-head to connect to a particular node.
-* @dashboard@ experimental feature to open elasticsearch-head in a mode suitable for dashboard / radiator. Accepts one parameter @dashboard=cluster@
-* @auth_user@ adds basic auth credentials to http requests ( requires "elasticsearch-http-basic":https://github.com/karussell/elasticsearch-http-basic plugin or a reverse proxy )
-* @auth_password@ basic auth password as above (note: without "additional security layers":http://security.stackexchange.com/questions/988/is-basic-auth-secure-if-done-over-https, passwords are sent over the network *in the clear* )
-
-h4. Contributing
-
-To contribute to elasticsearch-head you will need the following developer tools
-
-# git and a "github":https://github.com/ account
-# "node ( including npm )":http://nodejs.org/download
-# "grunt-cli":http://gruntjs.com/getting-started
-# (to run jasmine tests) "phantomjs":http://phantomjs.org
-
-Then
-
-# create a fork of elasticsearch-head on github
-# clone your fork to your machine
-# @cd elasticsearch-head@
-# @npm install@ # downloads node dev dependencies
-# @grunt dev@ # builds the distribution files, then watches the src directory for changes
-
-Changes to both _site and src directories *must* be committed, to allow people to 
-run elasticsearch-head without running dev tools and follow existing dev patterns, 
-such as indenting with tabs.
-
-h5. Contributing an Internationalisation
-
-
-* Chinese by "darkcount":https://github.com/hangxin1940
-* English (primary) by "Ben Birch":https://twitter.com/mobz
-* French by "David Pilato":https://twitter.com/dadoonet
-* Portuguese by "caiodangelo":https://github.com/caiodangelo
-* Turkish by "Cemre Mengu":https://github.com/cemremengu
-
-To contribute an internationalisation
-
-# Follow "Contributing" instructions above
-# Find your 2-character "ISO 639-1 language code":http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
-# edit _site/index.html to add your 2 letter language code to the data-langs attribute of this line @<script src="_site/i18n.js" data-baseDir="_site/lang" data-langs="en,fr,your_lang_here"></script>@
-# make a copy of @src/app/langs/en_strings.js@ prefixed with your language code
-# convert english strings and fragments to your language. "Formatting Rules":http://docs.oracle.com/javase/tutorial/i18n/format/messageintro.html
-# Submit a pull request
-
-!http://mobz.github.com/elasticsearch-head/screenshots/clusterOverview.png(ClusterOverview Screenshot)!
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.css
deleted file mode 100644
index 2fa2152..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.css
+++ /dev/null
@@ -1,704 +0,0 @@
-TABLE.table {
-	border-collapse: collapse;
-}
-
-
-TABLE.table TH {
-	font-weight: normal;
-	text-align: left;
-	vertical-align: middle;
-}
-
-TABLE.table TBODY.striped TR:nth-child(odd) {
-	background: #eee;
-}
-
-TABLE.table H3 {
-	margin: 0;
-	font-weight: bold;
-	font-size: 140%;
-}
-
-.require { color: #a00; }
-
-.uiButton {
-	padding: 0;
-	border: 0;
-	margin: 3px;
-	width: auto;
-	overflow: visible;
-	cursor: pointer;
-	background: transparent;
-}
-
-.uiButton-content {
-	height: 20px;
-	border: 1px solid #668dc6;
-	border-radius: 2px;
-	background: #96c6eb;
-	background: -moz-linear-gradient(top, #96c6eb, #5296c7);
-	background: -webkit-linear-gradient(top, #96c6eb, #5296c7);
-	color: white;
-	font-weight: bold;
-}
-
-.moz .uiButton-content { margin: 0 -2px; }
-
-.uiButton-label {
-		padding: 2px 6px;
-		white-space: nowrap;
-}
-.uiButton:hover .uiButton-content {
-	background: #2777ba;
-	background: -moz-linear-gradient(top, #6aaadf, #2777ba);
-	background: -webkit-linear-gradient(top, #6aaadf, #2777ba);
-}
-.uiButton.active .uiButton-content,
-.uiButton:active .uiButton-content {
-	background: #2575b7;
-	background: -moz-linear-gradient(top, #2576b8, #2575b7);
-	background: -webkit-linear-gradient(top, #2576b8, #2575b7);
-}
-.uiButton.disabled .uiButton-content,
-.uiButton.disabled:active .uiButton-content {
-		border-color: #c6c6c6;
-		color: #999999;
-		background: #ddd;
-		background: -moz-linear-gradient(top, #ddd, #ddd);
-		background: -webkit-linear-gradient(top, #ddd, #ddd);
-}
-
-.uiButton.disabled {
-		cursor: default;
-}
-
-.uiMenuButton {
-	display: inline-block;
-}
-
-.uiMenuButton .uiButton-label {
-	background-image: url('data:image/gif;base64,R0lGODlhDwAPAIABAP///////yH5BAEAAAEALAAAAAAPAA8AAAITjI+py+0P4wG0gmavq1HLD4ZiAQA7');
-	background-position: right 50%;
-	background-repeat: no-repeat;
-	padding-right: 17px;
-	text-align: left;
-}
-
-.uiSplitButton {
-	white-space: nowrap;
-}
-
-.uiSplitButton .uiButton:first-child {
-	margin-right: 0;
-	display: inline-block;
-}
-
-.uiSplitButton .uiButton:first-child .uiButton-content {
-	border-right-width: 1;
-	border-right-color: #5296c7;
-	border-top-right-radius: 0;
-	border-bottom-right-radius: 0;
-}
-
-.uiSplitButton .uiMenuButton {
-	margin-left: 0;
-}
-
-.uiSplitButton .uiButton:last-child .uiButton-content {
-	border-radius: 2px;
-	border-left-width: 1;
-	border-left-color: #96c6eb;
-	border-top-left-radius: 0;
-	border-bottom-left-radius: 0;
-	height: 20px;
-}
-
-.uiSplitButton .uiButton:last-child .uiButton-label {
-	padding: 2px 17px 2px 6px;
-	margin-left: -8px;
-}
-
-.uiToolbar {
-	height: 28px;
-	background: #fdfefe;
-	background: -moz-linear-gradient(top, #fdfefe, #eaedef);
-	background: -webkit-linear-gradient(top, #fdfefe, #eaedef);
-	border-bottom: 1px solid #d2d5d7;
-	padding: 3px 10px;
-}
-
-.uiToolbar H2 {
-	display: inline-block;
-	font-size: 120%;
-	margin: 0;
-	padding: 5px 20px 5px 0;
-}
-
-.uiToolbar .uiTextField {
-	display: inline-block;
-}
-
-.uiToolbar .uiTextField INPUT {
-	padding-top: 2px;
-	padding-bottom: 5px;
-}
-#uiModal {
-	background: black;
-}
-
-.uiPanel {
-	box-shadow: -1px 2.5px 4px -3px black, -1px -2.5px 4px -3px black, 3px 2.5px 4px -3px black, 3px -2.5px 4px -3px black;
-	position: absolute;
-	background: #eee;
-	border: 1px solid #666;
-}
-
-.uiPanel-titleBar {
-	text-align: center;
-	font-weight: bold;
-	padding: 2px 0;
-	background: rgba(223, 223, 223, 0.75);
-	background: -moz-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
-	background: -webkit-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
-	border-bottom: 1px solid #bbb;
-}
-
-.uiPanel-close {
-	cursor: pointer;
-	border: 1px solid #aaa;
-	background: #fff;
-	color: #fff;
-	float: left;
-	height: 10px;
-	left: 3px;
-	line-height: 9px;
-	padding: 1px 0;
-	position: relative;
-	text-shadow: 0 0 1px #000;
-	top: 0px;
-	width: 12px;
-}
-.uiPanel-close:hover {
-	background: #eee;
-}
-
-.uiPanel-body {
-	overflow: auto;
-}
-
-
-.uiInfoPanel {
-	background: rgba(0, 0, 0, 0.75);
-	color: white;
-	border-radius: 8px;
-	padding: 1px;
-}
-.uiInfoPanel .uiPanel-titleBar {
-	background: rgba(74, 74, 74, 0.75);
-	background: -moz-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
-	background: -webkit-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
-	border-radius: 8px 8px 0 0;
-	padding: 1px 0 2px 0;
-	border-bottom: 0;
-}
-.uiInfoPanel .uiPanel-close {
-	border-radius: 6px;
-	height: 13px;
-	width: 13px;
-	background: #ccc;
-	left: 3px;
-	top: 1px;
-	color: #333;
-	text-shadow: #222 0 0 1px;
-	line-height: 11px;
-	border: 0;
-	padding: 0;
-}
-.uiInfoPanel .uiPanel-close:hover {
-	background: #eee;
-}
-
-.uiInfoPanel .uiPanel-body {
-	background: transparent;
-	padding: 20px;
-	border-radius: 0 0 8px 8px;
-	border: 1px solid #222;
-}
-
-.uiMenuPanel {
-	border: 1px solid #668dc6;
-	position: absolute;
-	background: #96c6eb;
-	color: white;
-}
-
-.uiMenuPanel LI {
-	list-style: none;
-	border-bottom: 1px solid #668dc6;
-}
-
-.uiMenuPanel LI:hover {
-	background: #2575b7;
-}
-
-.uiMenuPanel LI:last-child {
-	border-bottom: 0;
-} 
-
-.uiMenuPanel-label {
-	white-space: nowrap;
-	padding: 2px 10px 2px 10px;
-	cursor: pointer;
-}
-
-.disabled .uiMenuPanel-label {
-	cursor: auto;
-	color: #888;
-}
-
-.uiSelectMenuPanel .uiMenuPanel-label {
-	margin-left: 1em;
-	padding-left: 4px;
-}
-
-.uiSelectMenuPanel .uiMenuPanel-item.selected .uiMenuPanel-label:before {
-	content: "\2713";
-	width: 12px;
-	margin-left: -12px;
-	display: inline-block;
-}
-
-.uiTable TABLE {
-	border-collapse: collapse;
-}
-
-.uiTable-body {
-	overflow-y: scroll;
-	overflow-x: auto;
-}
-
-.uiTable-headers {
-	overflow-x: hidden;
-}
-
-.uiTable-body TD {
-	white-space: nowrap;
-}
-
-.uiTable-body .uiTable-header-row TH,
-.uiTable-body .uiTable-header-row TH DIV {
-	padding-top: 0;
-	padding-bottom: 0;
-}
-
-.uiTable-body .uiTable-header-cell > DIV {
-	height: 0;
-	overflow: hidden;
-}
-
-.uiTable-headercell-menu {
-	float: right;
-}
-
-.uiTable-tools {
-	padding: 3px 4px;
-	height: 14px;
-}
-
-.uiTable-header-row {
-	background: #ddd;
-	background: -moz-linear-gradient(top, #eee, #ccc);
-	background: -webkit-linear-gradient(top, #eee, #ccc);
-}
-
-.uiTable-headercell-text {
-	margin-right: 20px;
-}
-
-.uiTable-headercell-menu {
-	display: none;
-}
-
-.uiTable-header-row TH {
-	border-right: 1px solid #bbb;
-	padding: 0;
-	text-align: left;
-}
-
-.uiTable-header-row TH > DIV {
-	padding: 3px 4px;
-	border-right: 1px solid #eee;
-}
-
-.uiTable-headerEndCap > DIV {
-	width: 19px;
-}
-
-.uiTable-header-row .uiTable-sort {
-	background: #ccc;
-	background: -moz-linear-gradient(top, #bebebe, #ccc);
-	background: -webkit-linear-gradient(top, #bebebe, #ccc);
-}
-.uiTable-header-row TH.uiTable-sort > DIV {
-	border-right: 1px solid #ccc;
-}
-
-.uiTable-sort .uiTable-headercell-menu {
-	display: block;
-}
-
-.uiTable TABLE TD {
-	border-right: 1px solid transparent;
-	padding: 3px 4px;
-}
-
-.uiTable-body TABLE TR:nth-child(even) {
-	background: #f3f3f3;
-}
-
-.uiTable-body TABLE TR.selected {
-	color: white;
-	background: #6060f1;
-}
-
-DIV.uiJsonPretty-object { font-size: 1.26em; font-family: monospace; }
-UL.uiJsonPretty-object,
-UL.uiJsonPretty-array { margin: 0; padding: 0 0 0 2em; list-style: none; }
-UL.uiJsonPretty-object LI,
-UL.uiJsonPretty-array LI { padding: 0; margin: 0; }
-.expando > SPAN.uiJsonPretty-name:before { content: "\25bc\a0"; color: #555; position: relative; top: 2px; }
-.expando.uiJsonPretty-minimised > SPAN.uiJsonPretty-name:before { content: "\25ba\a0"; top: 0; }
-.uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before,
-.expando .uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before { content: ""; }
-SPAN.uiJsonPretty-string,
-SPAN.uiJsonPretty-string A { color: green; }
-SPAN.uiJsonPretty-string A { text-decoration: underline;}
-SPAN.uiJsonPretty-number { color: blue; }
-SPAN.uiJsonPretty-null { color: red; }
-SPAN.uiJsonPretty-boolean { color: purple; }
-.expando > .uiJsonPretty-name { cursor: pointer; }
-.expando > .uiJsonPretty-name:hover { text-decoration: underline; }
-.uiJsonPretty-minimised { white-space: nowrap; overflow: hidden; }
-.uiJsonPretty-minimised > UL { opacity: 0.6; }
-.uiJsonPretty-minimised .uiJsonPretty-minimised > UL { opacity: 1; }
-.uiJsonPretty-minimised UL, .uiJsonPretty-minimised LI { display: inline; padding: 0; }
-
-
-.uiJsonPanel SPAN.uiJsonPretty-string { color: #6F6; }
-.uiJsonPanel SPAN.uiJsonPretty-number { color: #66F; }
-.uiJsonPanel SPAN.uiJsonPretty-null { color: #F66; }
-.uiJsonPanel SPAN.uiJsonPretty-boolean { color: #F6F; }
-
-.uiPanelForm-field {
-	display: block;
-	padding: 2px 0;
-	clear: both;
-}
-
-.uiPanelForm-label {
-	float: left;
-	width: 200px;
-	padding: 3px 7px;
-	text-align: right;
-}
-
-.uiSidebarSection-head {
-	background-color: #b9cfff;
-	background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAcCAMAAABifa5OAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURQUCFf///wICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///2Oyy/cAAAACdFJOU/8A5bcwSgAAADxJREFUeNq8zzkOACAMA8Hd/3+agiuRcIsrRopIjArOoLK1QAMNNBCRPkhLyzkn35Bjfd7JR1Nr09NoDACnvgDl1zlzoQAAAABJRU5ErkJggg==');
-	background-repeat: no-repeat;
-	background-position: 2px 5px;
-	margin-bottom: 1px;
-	padding: 3px 3px 3px 17px;
-	cursor: pointer;
-}
-
-.shown > .uiSidebarSection-head {
-	background-position: 2px -13px;
-}
-
-.uiSidebarSection-body {
-	margin-bottom: 3px;
-	display: none;
-}
-
-.uiSidebarSection-help {
-	text-shadow: #228 1px 1px 2px;
-	color: blue;
-	cursor: pointer;
-}
-
-.uiSidebarSection-help:hover {
-	text-decoration: underline;
-}
-
-.uiQueryFilter {
-	width: 350px;
-	padding: 5px;
-	background: #d8e7ff;
-	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
-	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
-}
-
-.uiQueryFilter DIV.uiQueryFilter-section {
-	margin-bottom: 5px;
-}
-
-.uiQueryFilter HEADER {
-	display: block;
-	font-variant: small-caps;
-	font-weight: bold;
-	margin: 5px 0;
-}
-
-.uiQueryFilter-aliases SELECT {
-	width: 100%;
-}
-
-.uiQueryFilter-booble {
-	cursor: pointer;
-	background: #e8f1ff;
-	border: 1px solid #e8f1ff;
-	border-radius: 5px;
-	padding: 1px 4px;
-	margin-bottom: 1px;
-	overflow: hidden;
-	white-space: nowrap;
-}
-
-.uiQueryFilter-booble.selected {
-	background: #dae3f0;
-	border-top: 1px solid #c8d4e6;
-	border-left: 1px solid #c8d4e6;
-	border-bottom: 1px solid #ffffff;
-	border-right: 1px solid #ffffff;
-}
-
-.uiQueryFilter-filterName {
-	background-color: #cbdfff;
-	margin-bottom: 4px;
-	padding: 3px;
-	cursor: pointer;
-}
-
-.uiQueryFilter-filters INPUT  {
-	width: 300px;
-}
-
-.uiQueryFilter-subMultiFields {
-	padding-left: 10px;
-}
-
-.uiQueryFilter-rangeHintFrom,
-.uiQueryFilter-rangeHintTo {
-	margin: 0;
-	opacity: 0.75;
-}
-.uiBrowser-filter {
-	float: left;
-}
-
-.uiBrowser-table {
-	margin-left: 365px;
-}
-
-.uiAnyRequest-request {
-	float: left;
-	width: 350px;
-	padding: 5px;
-	background: #d8e7ff;
-	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
-	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
-}
-
-.uiAnyRequest-request INPUT[type=text],
-.uiAnyRequest-request TEXTAREA {
-	width: 340px;
-}
-
-.anyRequest INPUT[name=path] {
-	width: 259px;
-}
-
-.uiAnyRequest-out {
-	margin-left: 365px;
-}
-
-.uiAnyRequest-out P {
-	margin-top: 0;
-}
-
-.uiAnyRequest-jsonErr {
-	color: red;
-}
-
-.uiAnyRequest-history {
-	margin: 0;
-	padding: 0;
-	list-style: none;
-	max-height: 100px;
-	overflow-x: hidden;
-	overflow-y: auto;
-}
-
-.uiNodesView TH,
-.uiNodesView TD {
-	vertical-align: top;
-	padding: 2px 20px;
-}
-
-.uiNodesView TH.close,
-.uiNodesView TD.close {
-	color: #888;
-	background: #f2f2f2;
-}
-
-.uiNodesView .uiMenuButton .uiButton-content {
-	padding-right: 3px;
-	border-radius: 8px;
-	height: 14px;
-}
-
-.uiNodesView .uiMenuButton.active .uiButton-content,
-.uiNodesView .uiMenuButton:active .uiButton-content {
-	border-bottom-right-radius: 0px;
-	border-bottom-left-radius: 0px;
-}
-
-.uiNodesView .uiMenuButton .uiButton-label {
-	padding: 0px 17px 0px 7px;
-}
-
-.uiNodesView-hasAlias {
-	text-align: center;
-}
-.uiNodesView-hasAlias.max {
-	border-top-right-radius: 8px;
-	border-bottom-right-radius: 8px;
-}
-.uiNodesView-hasAlias.min {
-	border-top-left-radius: 8px;
-	border-bottom-left-radius: 8px;
-}
-.uiNodesView-hasAlias-remove {
-	float: right;
-	font-weight: bold;
-	cursor: pointer;
-}
-
-.uiNodesView TD.uiNodesView-icon {
-	padding: 20px 0px 15px 20px;
-}
-
-.uiNodesView-node:nth-child(odd) {
-	background: #eee;
-}
-
-.uiNodesView-routing {
-	position: relative;
-	min-width: 90px;
-}
-
-.uiNodesView-nullReplica,
-.uiNodesView-replica {
-	box-sizing: border-box;
-	cursor: pointer;
-	float: left;
-	height: 40px;
-	width: 35px;
-	margin: 4px;
-	border: 2px solid #444;
-	padding: 2px;
-	font-size: 32px;
-	line-height: 32px;
-	text-align: center;
-	letter-spacing: -5px;
-	text-indent: -7px;
-}
-
-.uiNodesView-replica.primary {
-	border-width: 4px;
-	line-height: 29px;
-}
-
-.uiNodesView-nullReplica {
-	border-color: transparent;
-}
-
-.uiNodesView-replica.state-UNASSIGNED { background: #eeeeee; color: #999; border-color: #666; float: none; display: inline-block; }
-.uiNodesView-replica.state-INITIALIZING { background: #dddc88; }
-.uiNodesView-replica.state-STARTED { background: #99dd88; }
-.uiNodesView-replica.state-RELOCATING { background: #dc88dd; }
-
-
-.uiClusterConnect-uri {
-	width: 280px;
-}
-
-.uiStructuredQuery {
-	padding: 10px;
-}
-
-.uiStructuredQuery-out {
-	min-height: 30px;
-}
-
-.uiFilterBrowser-row * {
-	margin-right: 0.4em;
-}
-
-.uiFilterBrowser-row BUTTON {
-	height: 22px;
-	position: relative;
-	top: 1px;
-}
-
-.uiHeader {
-	padding: 3px 10px;
-}
-
-.uiHeader-name, .uiHeader-status {
-	font-size: 1.2em;
-	font-weight: bold;
-	padding: 0 10px;
-}
-
-
-.uiApp-header {
-	background: #eee;
-	position: fixed;
-	width: 100%;
-	z-index: 9;
-}
-
-.uiApp-header H1 {
-	margin: -2px 0 -4px 0;
-	float: left;
-	padding-right: 25px;
-}
-
-.uiApp-headerMenu {
-	border-bottom: 1px solid #bbb;
-	padding: 0px 3px;
-	height: 22px;
-}
-
-.uiApp-headerMenu .active {
-	background: white;
-	border-bottom-color: white;
-}
-
-.uiApp-headerMenuItem {
-	border: 1px solid #bbb;
-	padding: 4px 8px 1px ;
-	margin: 2px 1px 0;
-	height: 14px;
-	cursor: pointer;
-}
-
-.uiApp-body {
-	padding: 51px 0px 0px 0px;
-}
-
-.uiApp-headerNewMenuItem {
-	color: blue;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.js
deleted file mode 100644
index 1cdc1f5..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/app.js
+++ /dev/null
@@ -1,4389 +0,0 @@
-(function() {
-
-	var window = this,
-		$ = jQuery;
-
-	function ns( namespace ) {
-		return (namespace || "").split(".").reduce( function( space, name ) {
-			return space[ name ] || ( space[ name ] = { ns: ns } );
-		}, this );
-	}
-
-	var app = ns("app");
-
-	var acx = ns("acx");
-
-	/**
-	 * object iterator, returns an array with one element for each property of the object
-	 * @function
-	 */
-	acx.eachMap = function(obj, fn, thisp) {
-		var ret = [];
-		for(var n in obj) {
-			ret.push(fn.call(thisp, n, obj[n], obj));
-		}
-		return ret;
-	};
-
-	/**
-	 * augments the first argument with the properties of the second and subsequent arguments
-	 * like {@link $.extend} except that existing properties are not overwritten
-	 */
-	acx.augment = function() {
-		var args = Array.prototype.slice.call(arguments),
-			src = (args.length === 1) ? this : args.shift(),
-			augf = function(n, v) {
-				if(! (n in src)) {
-					src[n] = v;
-				}
-			};
-		for(var i = 0; i < args.length; i++) {
-			$.each(args[i], augf);
-		}
-		return src;
-	};
-
-	/**
-	 * tests whether the argument is an array
-	 * @function
-	 */
-	acx.isArray = $.isArray;
-
-	/**
-	 * tests whether the argument is an object
-	 * @function
-	 */
-	acx.isObject = function (value) {
-		return Object.prototype.toString.call(value) == "[object Object]";
-	};
-
-	/**
-	 * tests whether the argument is a function
-	 * @function
-	 */
-	acx.isFunction = $.isFunction;
-
-	/**
-	 * tests whether the argument is a date
-	 * @function
-	 */
-	acx.isDate = function (value) {
-		return Object.prototype.toString.call(value) == "[object Date]";
-	};
-
-	/**
-	 * tests whether the argument is a regexp
-	 * @function
-	 */
-	acx.isRegExp = function (value) {
-		return Object.prototype.toString.call(value) == "[object RegExp]";
-	};
-
-	/**
-	 * tests whether the value is blank or empty
-	 * @function
-	 */
-	acx.isEmpty = function (value, allowBlank) {
-		return value === null || value === undefined || ((acx.isArray(value) && !value.length)) || (!allowBlank ? value === '' : false);
-	};
-
-	/**
-	 * data type for performing chainable geometry calculations<br>
-	 * can be initialised x,y | {x, y} | {left, top}
-	 */
-	acx.vector = function(x, y) {
-		return new acx.vector.prototype.Init(x, y);
-	};
-
-	acx.vector.prototype = {
-		Init : function(x, y) {
-			x = x || 0;
-			this.y = isFinite(x.y) ? x.y : (isFinite(x.top) ? x.top : (isFinite(y) ? y : 0));
-			this.x = isFinite(x.x) ? x.x : (isFinite(x.left) ? x.left : (isFinite(x) ? x : 0));
-		},
-		
-		add : function(i, j) {
-			var d = acx.vector(i, j);
-			return new this.Init(this.x + d.x, this.y + d.y);
-		},
-		
-		sub : function(i, j) {
-			var d = acx.vector(i, j);
-			return new this.Init(this.x - d.x, this.y - d.y);
-		},
-		
-		addX : function(i) {
-			return new this.Init(this.x + i, this.y);
-		},
-		
-		addY : function(j) {
-			return new this.Init(this.x, this.y + j);
-		},
-
-		mod : function(fn) { // runs a function against the x and y values
-			return new this.Init({x: fn.call(this, this.x, "x"), y: fn.call(this, this.y, "y")});
-		},
-		
-		/** returns true if this is within a rectangle formed by the points p and q */
-		within : function(p, q) {
-			return ( this.x >= ((p.x < q.x) ? p.x : q.x) && this.x <= ((p.x > q.x) ? p.x : q.x) &&
-					this.y >= ((p.y < q.y) ? p.y : q.y) && this.y <= ((p.y > q.y) ? p.y : q.y) );
-		},
-		
-		asOffset : function() {
-			return { top: this.y, left: this.x };
-		},
-		
-		asSize : function() {
-			return { height: this.y, width: this.x };
-		}
-	};
-
-	acx.vector.prototype.Init.prototype = acx.vector.prototype;
-
-	/**
-	 * short cut functions for working with vectors and jquery.
-	 * Each function returns the equivalent jquery value in a two dimentional vector
-	 */
-	$.fn.vSize = function() { return acx.vector(this.width(), this.height()); };
-	$.fn.vOuterSize = function(margin) { return acx.vector(this.outerWidth(margin), this.outerHeight(margin)); };
-	$.fn.vScroll = function() { return acx.vector(this.scrollLeft(), this.scrollTop()); };
-	$.fn.vOffset = function() { return acx.vector(this.offset()); };
-	$.fn.vPosition = function() { return acx.vector(this.position()); };
-	$.Event.prototype.vMouse = function() { return acx.vector(this.pageX, this.pageY); };
-
-	/**
-	 * object extensions (ecma5 compatible)
-	 */
-	acx.augment(Object, {
-		keys: function(obj) {
-			var ret = [];
-			for(var n in obj) if(Object.prototype.hasOwnProperty.call(obj, n)) ret.push(n);
-			return ret;
-		}
-	});
-
-	/**
-	 * Array prototype extensions
-	 */
-	acx.augment(Array.prototype, {
-		'contains' : function(needle) {
-			return this.indexOf(needle) !== -1;
-		},
-
-		// returns a new array consisting of all the members that are in both arrays
-		'intersection' : function(b) {
-			var ret = [];
-			for(var i = 0; i < this.length; i++) {
-				if(b.contains(this[i])) {
-					ret.push(this[i]);
-				}
-			}
-			return ret;
-		},
-		
-		'remove' : function(value) {
-			var i = this.indexOf(value);
-			if(i !== -1) {
-				this.splice(i, 1);
-			}
-		}
-	});
-
-	/**
-	 * String prototype extensions
-	 */
-	acx.augment(String.prototype, {
-		'contains' : function(needle) {
-			return this.indexOf(needle) !== -1;
-		},
-
-		'equalsIgnoreCase' : function(match) {
-			return this.toLowerCase() === match.toLowerCase();
-		},
-
-		'escapeHtml' : function() {
-			return this.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-		},
-
-		'escapeJS' : function() {
-			var meta = {'"':'\\"', '\\':'\\\\', '/':'\\/', '\b':'\\b', '\f':'\\f', '\n':'\\n', '\r':'\\r', '\t':'\\t'},
-				xfrm = function(c) { return meta[c] || "\\u" + c.charCodeAt(0).toString(16).zeroPad(4); };
-			return this.replace(new RegExp('(["\\\\\x00-\x1f\x7f-\uffff])', 'g'), xfrm);
-		},
-
-		'escapeRegExp' : function() {
-			var ret = "", esc = "\\^$*+?.()=|{,}[]-";
-			for ( var i = 0; i < this.length; i++) {
-				ret += (esc.contains(this.charAt(i)) ? "\\" : "") + this.charAt(i);
-			}
-			return ret;
-		},
-		
-		'zeroPad' : function(len) {
-			return ("0000000000" + this).substring(this.length - len + 10);
-		}
-	});
-
-	$.fn.forEach = Array.prototype.forEach;
-
-	// joey / jquery integration
-	$.joey = function( obj ) {
-		return $( window.joey( obj ) );
-	};
-
-	window.joey.plugins.push( function( obj ) {
-		if( obj instanceof jQuery ) {
-			return obj[0];
-		}
-	});
-
-})();
-
-/**
- * base class for creating inheritable classes
- * based on resigs 'Simple Javascript Inheritance Class' (based on base2 and prototypejs)
- * modified with static super and auto config
- * @name Class
- * @constructor
- */
-(function( $, app ){
-
-	var ux = app.ns("ux");
-
-	var initializing = false, fnTest = /\b_super\b/;
-
-	ux.Class = function(){};
-
-	ux.Class.extend = function(prop) {
-		function Class() {
-			if(!initializing) {
-				var args = Array.prototype.slice.call(arguments);
-				this.config = $.extend( function(t) { // automatically construct a config object based on defaults and last item passed into the constructor
-					return $.extend(t._proto && t._proto() && arguments.callee(t._proto()) || {}, t.defaults);
-				} (this) , args.pop() );
-				this.init && this.init.apply(this, args); // automatically run the init function when class created
-			}
-		}
-
-		initializing = true;
-		var prototype = new this();
-		initializing = false;
-		
-		var _super = this.prototype;
-		prototype._proto = function() {
-			return _super;
-		};
-
-		for(var name in prop) {
-			prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ?
-				(function(name, fn){
-					return function() { this._super = _super[name]; return fn.apply(this, arguments); };
-				})(name, prop[name]) : prop[name];
-		}
-
-		Class.prototype = prototype;
-		Class.constructor = Class;
-
-		Class.extend = arguments.callee; // make class extendable
-
-		return Class;
-	};
-})( this.jQuery, this.app );
-
-(function( app ) {
-
-	var ut = app.ns("ut");
-
-	ut.option_template = function(v) { return { tag: "OPTION", value: v, text: v }; };
-
-	ut.require_template = function(f) { return f.require ? { tag: "SPAN", cls: "require", text: "*" } : null; };
-
-
-	var sib_prefix = ['B','ki','Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];
-
-	ut.byteSize_template = function(n) {
-		var i = 0;
-		while( n >= 1000 ) {
-			i++;
-			n /= 1024;
-		}
-		return (i === 0 ? n.toString() : n.toFixed( 3 - parseInt(n,10).toString().length )) + ( sib_prefix[ i ] || "..E" );
-	};
-
-	var sid_prefix = ['','k','M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
-
-	ut.count_template = function(n) {
-		var i = 0;
-		while( n >= 1000 ) {
-			i++;
-			n /= 1000;
-		}
-		return i === 0 ? n.toString() : ( n.toFixed( 3 - parseInt(n,10).toString().length ) + ( sid_prefix[ i ] || "..E" ) );
-	};
-
-})( this.app );
-
-(function( app ) {
-
-	var ux = app.ns("ux");
-
-	ux.Observable = ux.Class.extend((function() {
-		return {
-			init: function() {
-				this.observers = {};
-				for( var opt in this.config ) { // automatically install observers that are defined in the configuration
-					if( opt.indexOf( 'on' ) === 0 ) {
-						this.on( opt.substring(2) , this.config[ opt ] );
-					}
-				}
-			},
-			_getObs: function( type ) {
-				return ( this.observers[ type.toLowerCase() ] || ( this.observers[ type.toLowerCase() ] = [] ) );
-			},
-			on: function( type, fn, params, thisp ) {
-				this._getObs( type ).push( { "cb" : fn, "args" : params || [] , "cx" : thisp || this } );
-				return this;
-			},
-			fire: function( type ) {
-				var params = Array.prototype.slice.call( arguments, 1 );
-				this._getObs( type ).slice().forEach( function( ob ) {
-					ob["cb"].apply( ob["cx"], ob["args"].concat( params ) );
-				} );
-				return this;
-			},
-			removeAllObservers: function() {
-				this.observers = {};
-			},
-			removeObserver: function( type, fn ) {
-				var obs = this._getObs( type ),
-					index = obs.reduce( function(p, t, i) { return (t.cb === fn) ? i : p; }, -1 );
-				if(index !== -1) {
-					obs.splice( index, 1 );
-				}
-				return this; // make observable functions chainable
-			},
-			hasObserver: function( type ) {
-				return !! this._getObs( type ).length;
-			}
-		};
-	})());
-
-})( this.app );
-(function( app ) {
-
-	var ux = app.ns("ux");
-
-	var extend = ux.Observable.extend;
-	var instance = function() {
-		if( ! ("me" in this) ) {
-			this.me = new this();
-		}
-		return this.me;
-	};
-
-	ux.Singleton = ux.Observable.extend({});
-
-	ux.Singleton.extend = function() {
-		var Self = extend.apply( this, arguments );
-		Self.instance = instance;
-		return Self;
-	};
-
-})( this.app );
-
-(function( $, app ) {
-
-	var ux = app.ns("ux");
-
-	/**
-	 * Provides drag and drop functionality<br>
-	 * a DragDrop instance is created for each usage pattern and then used over and over again<br>
-	 * first a dragObj is defined - this is the jquery node that will be dragged around<br>
-	 * second, the event callbacks are defined - these allow you control the ui during dragging and run functions when successfully dropping<br>
-	 * thirdly drop targets are defined - this is a list of DOM nodes, the constructor works in one of two modes:
-	 * <li>without targets - objects can be picked up and dragged around, dragStart and dragStop events fire</li>
-	 * <li>with targets - as objects are dragged over targets dragOver, dragOut and DragDrop events fire
-	 * to start dragging call the DragDrop.pickup_handler() function, dragging stops when the mouse is released.
-	 * @constructor
-	 * The following options are supported
-	 * <dt>targetSelector</dt>
-	 *   <dd>an argument passed directly to jquery to create a list of targets, as such it can be a CSS style selector, or an array of DOM nodes<br>if target selector is null the DragDrop does Drag only and will not fire dragOver dragOut and dragDrop events</dd>
-	 * <dt>pickupSelector</dt>
-	 *   <dd>a jquery selector. The pickup_handler is automatically bound to matched elements (eg clicking on these elements starts the drag). if pickupSelector is null, the pickup_handler must be manually bound <code>$(el).bind("mousedown", dragdrop.pickup_handler)</code></dd>
-	 * <dt>dragObj</dt>
-	 *   <dd>the jQuery element to drag around when pickup is called. If not defined, dragObj must be set in onDragStart</dd>
-	 * <dt>draggingClass</dt>
-	 *   <dd>the class(es) added to items when they are being dragged</dd>
-	 * The following observables are supported
-	 * <dt>dragStart</dt>
-	 *   <dd>a callback when start to drag<br><code>function(jEv)</code></dd>
-	 * <dt>dragOver</dt>
-	 *   <dd>a callback when we drag into a target<br><code>function(jEl)</code></dd>
-	 * <dt>dragOut</dt>
-	 *   <dd>a callback when we drag out of a target, or when we drop over a target<br><code>function(jEl)</code></dd>
-	 * <dt>dragDrop</dt>
-	 *   <dd>a callback when we drop on a target<br><code>function(jEl)</code></dd>
-	 * <dt>dragStop</dt>
-	 *   <dd>a callback when we stop dragging<br><code>function(jEv)</code></dd>
-	 */
-	ux.DragDrop = ux.Observable.extend({
-		defaults : {
-			targetsSelector : null,
-			pickupSelector:   null,
-			dragObj :         null,
-			draggingClass :   "dragging"
-		},
-
-		init: function(options) {
-			this._super(); // call the class initialiser
-		
-			this.drag_handler = this.drag.bind(this);
-			this.drop_handler = this.drop.bind(this);
-			this.pickup_handler = this.pickup.bind(this);
-			this.targets = [];
-			this.dragObj = null;
-			this.dragObjOffset = null;
-			this.currentTarget = null;
-			if(this.config.pickupSelector) {
-				$(this.config.pickupSelector).bind("mousedown", this.pickup_handler);
-			}
-		},
-
-		drag : function(jEv) {
-			jEv.preventDefault();
-			var mloc = acx.vector( this.lockX || jEv.pageX, this.lockY || jEv.pageY );
-			this.dragObj.css(mloc.add(this.dragObjOffset).asOffset());
-			if(this.targets.length === 0) {
-				return;
-			}
-			if(this.currentTarget !== null && mloc.within(this.currentTarget[1], this.currentTarget[2])) {
-				return;
-			}
-			if(this.currentTarget !== null) {
-				this.fire('dragOut', this.currentTarget[0]);
-				this.currentTarget = null;
-			}
-			for(var i = 0; i < this.targets.length; i++) {
-				if(mloc.within(this.targets[i][1], this.targets[i][2])) {
-					this.currentTarget = this.targets[i];
-					break;
-				}
-			}
-			if(this.currentTarget !== null) {
-				this.fire('dragOver', this.currentTarget[0]);
-			}
-		},
-		
-		drop : function(jEv) {
-			$(document).unbind("mousemove", this.drag_handler);
-			$(document).unbind("mouseup", this.drop_handler);
-			this.dragObj.removeClass(this.config.draggingClass);
-			if(this.currentTarget !== null) {
-				this.fire('dragOut', this.currentTarget[0]);
-				this.fire('dragDrop', this.currentTarget[0]);
-			}
-			this.fire('dragStop', jEv);
-			this.dragObj = null;
-		},
-		
-		pickup : function(jEv, opts) {
-			$.extend(this.config, opts);
-			this.fire('dragStart', jEv);
-			this.dragObj = this.dragObj || this.config.dragObj;
-			this.dragObjOffset = this.config.dragObjOffset || acx.vector(this.dragObj.offset()).sub(jEv.pageX, jEv.pageY);
-			this.lockX = this.config.lockX ? jEv.pageX : 0;
-			this.lockY = this.config.lockY ? jEv.pageY : 0;
-			this.dragObj.addClass(this.config.draggingClass);
-			if(!this.dragObj.get(0).parentNode || this.dragObj.get(0).parentNode.nodeType === 11) { // 11 = document fragment
-				$(document.body).append(this.dragObj);
-			}
-			if(this.config.targetsSelector) {
-				this.currentTarget = null;
-				var targets = ( this.targets = [] );
-				// create an array of elements optimised for rapid collision detection calculation
-				$(this.config.targetsSelector).each(function(i, el) {
-					var jEl = $(el);
-					var tl = acx.vector(jEl.offset());
-					var br = tl.add(jEl.width(), jEl.height());
-					targets.push([jEl, tl, br]);
-				});
-			}
-			$(document).bind("mousemove", this.drag_handler);
-			$(document).bind("mouseup", this.drop_handler);
-			this.drag_handler(jEv);
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( app ) {
-
-	var ux = app.ns("ux");
-
-	ux.FieldCollection = ux.Observable.extend({
-		defaults: {
-			fields: []	// the collection of fields
-		},
-		init: function() {
-			this._super();
-			this.fields = this.config.fields;
-		},
-		validate: function() {
-			return this.fields.reduce(function(r, field) {
-				return r && field.validate();
-			}, true);
-		},
-		getData: function(type) {
-			return this.fields.reduce(function(r, field) {
-				r[field.name] = field.val(); return r;
-			}, {});
-		}
-	});
-
-})( this.app );
-
-(function( $, app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.Model = ux.Observable.extend({
-		defaults: {
-			data: null
-		},
-		init: function() {
-			this.set( this.config.data );
-		},
-		set: function( key, value ) {
-			if( arguments.length === 1 ) {
-				this._data = $.extend( {}, key );
-			} else {
-				key.split(".").reduce(function( ptr, prop, i, props) {
-					if(i === (props.length - 1) ) {
-						ptr[prop] = value;
-					} else {
-						if( !(prop in ptr) ) {
-							ptr[ prop ] = {};
-						}
-						return ptr[prop];
-					}
-				}, this._data );
-			}
-		},
-		get: function( key ) {
-			return key.split(".").reduce( function( ptr, prop ) {
-				return ( ptr && ( prop in ptr ) ) ? ptr[ prop ] : undefined;
-			}, this._data );
-		},
-	});
-})( this.jQuery, this.app );
-
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.DataSourceInterface = ux.Observable.extend({
-		/*
-		properties
-			meta = { total: 0 },
-			headers = [ { name: "" } ],
-			data = [ { column: value, column: value } ],
-			sort = { column: "name", dir: "desc" }
-		events
-			data: function( DataSourceInterface )
-		 */
-		_getSummary: function(res) {
-			this.summary = i18n.text("TableResults.Summary", res._shards.successful, res._shards.total, res.hits.total, (res.took / 1000).toFixed(3));
-		},
-		_getMeta: function(res) {
-			this.meta = { total: res.hits.total, shards: res._shards, tool: res.took };
-		}
-	});
-
-})( this.app );
-(function( app ) {
-
-	var data = app.ns("data");
-
-	data.ResultDataSourceInterface = data.DataSourceInterface.extend({
-		results: function(res) {
-			this._getSummary(res);
-			this._getMeta(res);
-			this._getData(res);
-			this.sort = {};
-			this.fire("data", this);
-		},
-		_getData: function(res) {
-			var columns = this.columns = [];
-			this.data = res.hits.hits.map(function(hit) {
-				var row = (function(path, spec, row) {
-					for(var prop in spec) {
-						if(acx.isObject(spec[prop])) {
-							arguments.callee(path.concat(prop), spec[prop], row);
-						} else if(acx.isArray(spec[prop])) {
-							if(spec[prop].length) {
-								arguments.callee(path.concat(prop), spec[prop][0], row)
-							}
-						} else {
-							var dpath = path.concat(prop).join(".");
-							if(! columns.contains(dpath)) {
-								columns.push(dpath);
-							}
-							row[dpath] = (spec[prop] || "null").toString();
-						}
-					}
-					return row;
-				})([ hit._type ], hit, {});
-				row._source = hit;
-				return row;
-			}, this);
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	/*
-	notes on elasticsearch terminology used in this project
-
-	indices[index] contains one or more
-	types[type] contains one or more
-	documents contain one or more
-	paths[path]
-	each path contains one element of data
-	each path maps to one field
-
-	eg PUT, "/twitter/tweet/1"
-	{
-		user: "mobz",
-		date: "2011-01-01",
-		message: "You know, for browsing elasticsearch",
-		name: {
-			first: "Ben",
-			last: "Birch"
-		}
-	}
-
-	creates
-		1 index: twitter
-				this is the collection of index data
-		1 type: tweet
-				this is the type of document (kind of like a table in sql)
-		1 document: /twitter/tweet/1
-				this is an actual document in the index ( kind of like a row in sql)
-		5 paths: [ ["user"], ["date"], ["message"], ["name","first"], ["name","last"] ]
-				since documents can be heirarchical this maps a path from a document root to a piece of data
-		5 fields: [ "user", "date", "message", "first", "last" ]
-				this is an indexed 'column' of data. fields are not heirarchical
-
-		the relationship between a path and a field is called a mapping. mappings also contain a wealth of information about how es indexes the field
-
-	notes
-	1) a path is stored as an array, the dpath is  <index> . <type> . path.join("."),
-			which can be considered the canonical reference for a mapping
-	2) confusingly, es uses the term index for both the collection of indexed data, and the individually indexed fields
-			so the term index_name is the same as field_name in this sense.
-
-	*/
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	var coretype_map = {
-		"string" : "string",
-		"keyword" : "string",
-		"text" : "string",
-		"byte" : "number",
-		"short" : "number",
-		"long" : "number",
-		"integer" : "number",
-		"float" : "number",
-		"double" : "number",
-		"ip" : "number",
-		"date" : "date",
-		"boolean" : "boolean",
-		"binary" : "binary",
-		"multi_field" : "multi_field"
-	};
-
-	var default_property_map = {
-		"string" : { "store" : "no", "index" : "analysed" },
-		"number" : { "store" : "no", "precision_steps" : 4 },
-		"date" : { "store" : "no", "format" : "dateOptionalTime", "index": "yes", "precision_steps": 4 },
-		"boolean" : { "store" : "no", "index": "yes" },
-		"binary" : { },
-		"multi_field" : { }
-	};
-
-	// parses metatdata from a cluster, into a bunch of useful data structures
-	data.MetaData = ux.Observable.extend({
-		defaults: {
-			state: null // (required) response from a /_cluster/state request
-		},
-		init: function() {
-			this._super();
-			this.refresh(this.config.state);
-		},
-		getIndices: function(alias) {
-			return alias ? this.aliases[alias] : this.indicesList;
-		},
-		// returns an array of strings containing all types that are in all of the indices passed in, or all types
-		getTypes: function(indices) {
-			var indices = indices || [], types = [];
-			this.typesList.forEach(function(type) {
-				for(var i = 0; i < indices.length; i++) {
-					if(! this.indices[indices[i]].types.contains(type))
-						return;
-				}
-				types.push(type);
-			}, this);
-			return types;
-		},
-		refresh: function(state) {
-			// currently metadata expects all like named fields to have the same type, even when from different types and indices
-			var aliases = this.aliases = {};
-			var indices = this.indices = {};
-			var types = this.types = {};
-			var fields = this.fields = {};
-			var paths = this.paths = {};
-
-			function createField( mapping, index, type, path, name ) {
-				var dpath = [ index, type ].concat( path ).join( "." );
-				var field_name = mapping.index_name || path.join( "." );
-				var field = paths[ dpath ] = fields[ field_name ] || $.extend({
-					field_name : field_name,
-					core_type : coretype_map[ mapping.type ],
-					dpaths : []
-				}, default_property_map[ coretype_map[ mapping.type ] ], mapping );
-
-				if (field.type === "multi_field" && typeof field.fields !== "undefined") {
-					for (var subField in field.fields) {
-						field.fields[ subField ] = createField( field.fields[ subField ], index, type, path.concat( subField ), name + "." + subField );
-					}
-				}
-				if (fields.dpaths) {
-					field.dpaths.push(dpath);
-				}
-				return field;
-			}
-			function getFields(properties, type, index, listeners) {
-				(function procPath(prop, path) {
-					for (var n in prop) {
-						if ("properties" in prop[n]) {
-							procPath( prop[ n ].properties, path.concat( n ) );
-						} else {
-							var field = createField(prop[n], index, type, path.concat(n), n);							
-							listeners.forEach( function( listener ) {
-								listener[ field.field_name ] = field;
-							} );
-						}
-					}
-				})(properties, []);
-			}
-			for (var index in state.metadata.indices) {
-				indices[index] = {
-					types : [], fields : {}, paths : {}, parents : {}
-				};
-				indices[index].aliases = state.metadata.indices[index].aliases;
-				indices[index].aliases.forEach(function(alias) {
-					(aliases[alias] || (aliases[alias] = [])).push(index);
-				});
-				var mapping = state.metadata.indices[index].mappings;
-				for (var type in mapping) {
-					indices[index].types.push(type);
-					if ( type in types) {
-						types[type].indices.push(index);
-					} else {
-						types[type] = {
-							indices : [index], fields : {}
-						};
-					}
-					getFields(mapping[type].properties, type, index, [fields, types[type].fields, indices[index].fields]);
-					if ( typeof mapping[type]._parent !== "undefined") {
-						indices[index].parents[type] = mapping[type]._parent.type;
-					}
-				}
-			}
-
-			this.aliasesList = Object.keys(aliases);
-			this.indicesList = Object.keys(indices);
-			this.typesList = Object.keys(types);
-			this.fieldsList = Object.keys(fields);
-		}
-	});
-
-})( this.app );	
-
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.MetaDataFactory = ux.Observable.extend({
-		defaults: {
-			cluster: null // (required) an app.services.Cluster
-		},
-		init: function() {
-			this._super();
-			this.config.cluster.get("_cluster/state", function(data) {
-				this.metaData = new app.data.MetaData({state: data});
-				this.fire("ready", this.metaData,  { originalData: data }); // TODO originalData needed for legacy ui.FilterBrowser
-			}.bind(this));
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.Query = ux.Observable.extend({
-		defaults: {
-			cluster: null,  // (required) instanceof app.services.Cluster
-			size: 50        // size of pages to return
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.refuid = 0;
-			this.refmap = {};
-			this.indices = [];
-			this.types = [];
-			this.search = {
-				query: { bool: { must: [], must_not: [], should: [] } },
-				from: 0,
-				size: this.config.size,
-				sort: [],
-				aggs: {},
-				version: true
-			};
-			this.defaultClause = this.addClause();
-			this.history = [ this.getState() ];
-		},
-		clone: function() {
-			var q = new data.Query({ cluster: this.cluster });
-			q.restoreState(this.getState());
-			for(var uqid in q.refmap) {
-				q.removeClause(uqid);
-			}
-			return q;
-		},
-		getState: function() {
-			return $.extend(true, {}, { search: this.search, indices: this.indices, types: this.types });
-		},
-		restoreState: function(state) {
-			state = $.extend(true, {}, state || this.history[this.history.length - 1]);
-			this.indices = state.indices;
-			this.types = state.types;
-			this.search = state.search;
-		},
-		getData: function() {
-			return JSON.stringify(this.search);
-		},
-		query: function() {
-			var state = this.getState();
-			this.cluster.post(
-					(this.indices.join(",") || "_all") + "/" + ( this.types.length ? this.types.join(",") + "/" : "") + "_search",
-					this.getData(),
-					function(results) {
-						if(results === null) {
-							alert(i18n.text("Query.FailAndUndo"));
-							this.restoreState();
-							return;
-						}
-						this.history.push(state);
-
-						this.fire("results", this, results);
-					}.bind(this));
-		},
-		loadParents: function(res,metadata){
-			//create data for mget
-			var data = { docs :[] };
-			var indexToTypeToParentIds = {};
-			res.hits.hits.forEach(function(hit) {
-			if (typeof hit.fields != "undefined"){
-				if (typeof hit.fields._parent != "undefined"){
-					var parentType = metadata.indices[hit._index].parents[hit._type];
-					if (typeof indexToTypeToParentIds[hit._index] == "undefined"){
-						indexToTypeToParentIds[hit._index] = new Object();
-					}
-					if (typeof indexToTypeToParentIds[hit._index][hit._type] == "undefined"){
-						indexToTypeToParentIds[hit._index][hit._type] = new Object();
-					}
-					if (typeof indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] == "undefined"){
-						indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] = null;
-						data.docs.push({ _index:hit._index, _type:parentType, _id:hit.fields._parent});
-					}
-				}
-			}
-		});
-
-		//load parents
-		var state = this.getState();
-			this.cluster.post("_mget",JSON.stringify(data),
-				function(results) {
-					if(results === null) {
-						alert(i18n.text("Query.FailAndUndo"));
-						this.restoreState();
-						return;
-					}
-					this.history.push(state);
-					var indexToTypeToParentIdToHit = new Object();
-					results.docs.forEach(function(doc) {
-						if (typeof indexToTypeToParentIdToHit[doc._index] == "undefined"){
-						indexToTypeToParentIdToHit[doc._index] = new Object();
-					}
-					
-					if (typeof indexToTypeToParentIdToHit[doc._index][doc._type] == "undefined"){
-						indexToTypeToParentIdToHit[doc._index][doc._type] = new Object();
-					}
-					
-					indexToTypeToParentIdToHit[doc._index][doc._type][doc._id] = doc;
-					});
-					
-					res.hits.hits.forEach(function(hit) {
-						if (typeof hit.fields != "undefined"){
-							if (typeof hit.fields._parent != "undefined"){
-								var parentType = metadata.indices[hit._index].parents[hit._type];
-								hit._parent = indexToTypeToParentIdToHit[hit._index][parentType][hit.fields._parent];
-							}
-						}
-					});
-
-					this.fire("resultsWithParents", this, res);
-				}.bind(this));
-		},
-		setPage: function(page) {
-			this.search.from = this.config.size * (page - 1);
-		},
-		setSort: function(index, desc) {
-			var sortd = {}; sortd[index] = { reverse: !!desc };
-			this.search.sort.unshift( sortd );
-			for(var i = 1; i < this.search.sort.length; i++) {
-				if(Object.keys(this.search.sort[i])[0] === index) {
-					this.search.sort.splice(i, 1);
-					break;
-				}
-			}
-		},
-		setIndex: function(index, add) {
-			if(add) {
-				if(! this.indices.contains(index)) this.indices.push(index);
-			} else {
-				this.indices.remove(index);
-			}
-			this.fire("setIndex", this, { index: index, add: !!add });
-		},
-		setType: function(type, add) {
-			if(add) {
-				if(! this.types.contains(type)) this.types.push(type);
-			} else {
-				this.types.remove(type);
-			}
-			this.fire("setType", this, { type: type, add: !!add });
-		},
-		addClause: function(value, field, op, bool) {
-			bool = bool || "should";
-			op = op || "match_all";
-			field = field || "_all";
-			var clause = this._setClause(value, field, op, bool);
-			var uqid = "q-" + this.refuid++;
-			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
-			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
-				this.removeClause(this.defaultClause);
-			}
-			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
-			return uqid; // returns reference to inner query object to allow fast updating
-		},
-		removeClause: function(uqid) {
-			var ref = this.refmap[uqid],
-				bool = this.search.query.bool[ref.bool];
-			bool.remove(ref.clause);
-			if(this.search.query.bool.must.length + this.search.query.bool.should.length === 0) {
-				this.defaultClause = this.addClause();
-			}
-		},
-		addAggs: function(aggs) {
-			var aggsId = "f-" + this.refuid++;
-			this.search.aggs[aggsId] = aggs;
-			this.refmap[aggsId] = { aggsId: aggsId, aggs: aggs };
-			return aggsId;
-		},
-		removeAggs: function(aggsId) {
-			delete this.search.aggs[aggsId];
-			delete this.refmap[aggsId];
-		},
-		_setClause: function(value, field, op, bool) {
-			var clause = {}, query = {};
-			if(op === "match_all") {
-			} else if(op === "query_string") {
-				query["default_field"] = field;
-				query["query"] = value;
-			} else if(op === "missing") {
-				op = "constant_score"
-				var missing = {}, filter = {};
-				missing["field"] = field;
-				filter["missing"] = missing
-				query["filter"] = filter;
-			} else {
-				query[field] = value;
-			}
-			clause[op] = query;
-			this.search.query.bool[bool].push(clause);
-			return clause;
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var data = app.ns("data");
-
-	data.QueryDataSourceInterface = data.DataSourceInterface.extend({
-		defaults: {
-			metadata: null, // (required) instanceof app.data.MetaData, the cluster metadata
-			query: null     // (required) instanceof app.data.Query the data source
-		},
-		init: function() {
-			this._super();
-			this.config.query.on("results", this._results_handler.bind(this) );
-			this.config.query.on("resultsWithParents", this._load_parents.bind(this) );
-		},
-		_results_handler: function(query, res) {
-			this._getSummary(res);
-			this._getMeta(res);
-			var sort = query.search.sort[0] || { "_score": { reverse: false }};
-			var sortField = Object.keys(sort)[0];
-			this.sort = { column: sortField, dir: (sort[sortField].reverse ? "asc" : "desc") };
-			this._getData(res, this.config.metadata);
-			this.fire("data", this);
-		},
-		_load_parents: function(query, res) {
-			query.loadParents(res, this.config.metadata);
-		},
-		_getData: function(res, metadata) {
-			var metaColumns = ["_index", "_type", "_id", "_score"];
-			var columns = this.columns = [].concat(metaColumns);
-
-			this.data = res.hits.hits.map(function(hit) {
-				var row = (function(path, spec, row) {
-					for(var prop in spec) {
-						if(acx.isObject(spec[prop])) {
-							arguments.callee(path.concat(prop), spec[prop], row);
-						} else if(acx.isArray(spec[prop])) {
-							if(spec[prop].length) {
-								arguments.callee(path.concat(prop), spec[prop][0], row)
-							}
-						} else {
-							var dpath = path.concat(prop).join(".");
-							if(metadata.paths[dpath]) {
-								var field_name = metadata.paths[dpath].field_name;
-								if(! columns.contains(field_name)) {
-									columns.push(field_name);
-								}
-								row[field_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
-							} else {
-								// TODO: field not in metadata index
-							}
-						}
-					}
-					return row;
-				})([ hit._index, hit._type ], hit._source, {});
-				metaColumns.forEach(function(n) { row[n] = hit[n]; });
-				row._source = hit;
-				if (typeof hit._parent!= "undefined") {
-					(function(prefix, path, spec, row) {
-					for(var prop in spec) {
-						if(acx.isObject(spec[prop])) {
-							arguments.callee(prefix, path.concat(prop), spec[prop], row);
-						} else if(acx.isArray(spec[prop])) {
-							if(spec[prop].length) {
-								arguments.callee(prefix, path.concat(prop), spec[prop][0], row)
-							}
-						} else {
-							var dpath = path.concat(prop).join(".");
-							if(metadata.paths[dpath]) {
-								var field_name = metadata.paths[dpath].field_name;
-								var column_name = prefix+"."+field_name;
-								if(! columns.contains(column_name)) {
-									columns.push(column_name);
-								}
-								row[column_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
-							} else {
-								// TODO: field not in metadata index
-							}
-						}
-					}
-					})(hit._parent._type,[hit._parent._index, hit._parent._type], hit._parent._source, row);
-				}
-				return row;
-			}, this);
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.BoolQuery = ux.Observable.extend({
-		defaults: {
-			size: 50		// size of pages to return
-		},
-		init: function() {
-			this._super();
-			this.refuid = 0;
-			this.refmap = {};
-			this.search = {
-				query: { bool: { must: [], must_not: [], should: [] } },
-				from: 0,
-				size: this.config.size,
-				sort: [],
-				aggs: {}
-			};
-			this.defaultClause = this.addClause();
-		},
-		setSize: function(size) {
-			this.search.size = parseInt( size, 10 );
-		},
-		setPage: function(page) {
-			this.search.from = this.config.size * (page - 1) + 1;
-		},
-		addClause: function(value, field, op, bool) {
-			bool = bool || "should";
-			op = op || "match_all";
-			field = field || "_all";
-			var clause = this._setClause(value, field, op, bool);
-			var uqid = "q-" + this.refuid++;
-			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
-			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
-				this.removeClause(this.defaultClause);
-			}
-			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
-			return uqid; // returns reference to inner query object to allow fast updating
-		},
-		removeClause: function(uqid) {
-			var ref = this.refmap[uqid],
-				bool = this.search.query.bool[ref.bool];
-			var clauseIdx = bool.indexOf(ref.clause);
-			// Check that this clause hasn't already been removed
-			if (clauseIdx >=0) {
-				bool.splice(clauseIdx, 1);
-			}
-		},
-		_setClause: function(value, field, op, bool) {
-			var clause = {}, query = {};
-			if(op === "match_all") {
-			} else if(op === "query_string") {
-				query["default_field"] = field;
-				query["query"] = value;
-			} else if(op === "missing") {
-				op = "constant_score"
-				var missing = {}, filter = {};
-				missing["field"] = field;
-				filter["missing"] = missing
-				query["filter"] = filter;
-			} else {
-				query[field.substring(field.indexOf(".")+1)] = value;
-			}
-			clause[op] = query;
-			this.search.query.bool[bool].push(clause);
-			return clause;
-		},
-		getData: function() {
-			return JSON.stringify(this.search);
-		}
-	});
-
-})( this.app );
-(function( app ) {
-	
-	var ux = app.ns("ux");
-	var services = app.ns("services");
-
-	services.Preferences = ux.Singleton.extend({
-		init: function() {
-			this._storage = window.localStorage;
-			this._setItem("__version", 1 );
-		},
-		get: function( key ) {
-			return this._getItem( key );
-		},
-		set: function( key, val ) {
-			return this._setItem( key, val );
-		},
-		_getItem: function( key ) {
-			try {
-				return JSON.parse( this._storage.getItem( key ) );
-			} catch(e) {
-				console.warn( e );
-				return undefined;
-			}
-		},
-		_setItem: function( key, val ) {
-			try {
-				return this._storage.setItem( key, JSON.stringify( val ) );
-			} catch(e) {
-				console.warn( e );
-				return undefined;
-			}
-		}
-	});
-
-})( this.app );
-
-(function( $, app ) {
-
-	var services = app.ns("services");
-	var ux = app.ns("ux");
-
-	function parse_version( v ) {
-		return v.match(/^(\d+)\.(\d+)\.(\d+)/).slice(1,4).map( function(d) { return parseInt(d || 0, 10); } );
-	}
-
-	services.Cluster = ux.Class.extend({
-		defaults: {
-			base_uri: null
-		},
-		init: function() {
-			this.base_uri = this.config.base_uri;
-		},
-		setVersion: function( v ) {
-			this.version = v;
-			this._version_parts = parse_version( v );
-		},
-		versionAtLeast: function( v ) {
-			var testVersion = parse_version( v );
-			for( var i = 0; i < 3; i++ ) {
-				if( testVersion[i] !== this._version_parts[i] ) {
-					return testVersion[i] < this._version_parts[i];
-				}
-			}
-			return true;
-		},
-		request: function( params ) {
-			return $.ajax( $.extend({
-				url: this.base_uri + params.path,
-				dataType: "json",
-				error: function(xhr, type, message) {
-					if("console" in window) {
-						console.log({ "XHR Error": type, "message": message });
-					}
-				}
-			},  params) );
-		},
-		"get": function(path, success) { return this.request( { type: "GET", path: path, success: success } ); },
-		"post": function(path, data, success) { return this.request( { type: "POST", path: path, data: data, success: success } ); },
-		"put": function(path, data, success) { return this.request( { type: "PUT", path: path, data: data, success: success } ); },
-		"delete": function(path, data, success) { return this.request( { type: "DELETE", path: path, data: data, success: success } ); }
-	});
-
-})( this.jQuery, this.app );
-
-	(function( app ) {
-
-	var services = app.ns("services");
-	var ux = app.ns("ux");
-
-	services.ClusterState = ux.Observable.extend({
-		defaults: {
-			cluster: null
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.clusterState = null;
-			this.status = null;
-			this.nodeStats = null;
-			this.clusterNodes = null;
-		},
-		refresh: function() {
-			var self = this, clusterState, status, nodeStats, clusterNodes, clusterHealth;
-			function updateModel() {
-				if( clusterState && status && nodeStats && clusterNodes && clusterHealth ) {
-					this.clusterState = clusterState;
-					this.status = status;
-					this.nodeStats = nodeStats;
-					this.clusterNodes = clusterNodes;
-					this.clusterHealth = clusterHealth;
-					this.fire( "data", this );
-				}
-			}
-			this.cluster.get("_cluster/state", function( data ) {
-				clusterState = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_stats", function( data ) {
-				status = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_nodes/stats", function( data ) {
-				nodeStats = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_nodes", function( data ) {
-				clusterNodes = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_cluster/health", function( data ) {
-				clusterHealth = data;
-				updateModel.call( self );
-			});
-		},
-		_clusterState_handler: function(state) {
-			this.clusterState = state;
-			this.redraw("clusterState");
-		},
-		_status_handler: function(status) {
-			this.status = status;
-			this.redraw("status");
-		},
-		_clusterNodeStats_handler: function(stats) {
-			this.nodeStats = stats;
-			this.redraw("nodeStats");
-		},
-		_clusterNodes_handler: function(nodes) {
-			this.clusterNodes = nodes;
-			this.redraw("clusterNodes");
-		},
-		_clusterHealth_handler: function(health) {
-			this.clusterHealth = health;
-			this.redraw("status");
-		}
-	});
-
-})( this.app );
-
-(function( $, joey, app ) {
-
-	var ui = app.ns("ui");
-	var ux = app.ns("ux");
-
-	ui.AbstractWidget = ux.Observable.extend({
-		defaults : {
-			id: null     // the id of the widget
-		},
-
-		el: null,       // this is the jquery wrapped dom element(s) that is the root of the widget
-
-		init: function() {
-			this._super();
-			for(var prop in this) {       // automatically bind all the event handlers
-				if(prop.contains("_handler")) {
-					this[prop] = this[prop].bind(this);
-				}
-			}
-		},
-
-		id: function(suffix) {
-			return this.config.id ? (this.config.id + (suffix ? "-" + suffix : "")) : undefined;
-		},
-
-		attach: function( parent, method ) {
-			if( parent ) {
-				this.el[ method || "appendTo"]( parent );
-			}
-			this.fire("attached", this );
-			return this;
-		},
-
-		remove: function() {
-			this.el.remove();
-			this.fire("removed", this );
-			this.removeAllObservers();
-			this.el = null;
-			return this;
-		}
-	});
-
-	joey.plugins.push( function( obj ) {
-		if( obj instanceof ui.AbstractWidget ) {
-			return obj.el[0];
-		}
-	});
-
-})( this.jQuery, this.joey, this.app );
-
-(function( $, app, joey ) {
-
-	var ui = app.ns("ui");
-
-	ui.AbstractField = ui.AbstractWidget.extend({
-
-		defaults: {
-			name : "",			// (required) - name of the field
-			require: false,	// validation requirements (false, true, regexp, function)
-			value: "",			// default value
-			label: ""				// human readable label of this field
-		},
-
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this._main_template());
-			this.field = this.el.find("[name="+this.config.name+"]");
-			this.label = this.config.label;
-			this.require = this.config.require;
-			this.name = this.config.name;
-			this.val( this.config.value );
-			this.attach( parent );
-		},
-
-		val: function( val ) {
-			if(val === undefined) {
-				return this.field.val();
-			} else {
-				this.field.val( val );
-				return this;
-			}
-		},
-
-		validate: function() {
-			var val = this.val(), req = this.require;
-			if( req === false ) {
-				return true;
-			} else if( req === true ) {
-				return val.length > 0;
-			} else if( req.test && $.isFunction(req.test) ) {
-				return req.test( val );
-			} else if( $.isFunction(req) ) {
-				return req( val, this );
-			}
-		}
-
-	});
-
-})( this.jQuery, this.app, this.joey );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.TextField = ui.AbstractField.extend({
-		init: function() {
-			this._super();
-		},
-		_keyup_handler: function() {
-			this.fire("change", this );
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiField uiTextField", children: [
-				{ tag: "INPUT",
-					type: "text",
-					name: this.config.name,
-					placeholder: this.config.placeholder,
-					onkeyup: this._keyup_handler
-				}
-			]};
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.CheckField = ui.AbstractField.extend({
-		_main_template: function() { return (
-			{ tag: "DIV", id: this.id(), cls: "uiCheckField", children: [
-				{ tag: "INPUT", type: "checkbox", name: this.config.name, checked: !!this.config.value }
-			] }
-		); },
-		validate: function() {
-			return this.val() || ( ! this.require );
-		},
-		val: function( val ) {
-			if( val === undefined ) {
-				return !!this.field.attr( "checked" );
-			} else {
-				this.field.attr( "checked", !!val );
-			}
-		}
-	});
-
-})( this.app );
-
-
-
-(function( $, joey, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Button = ui.AbstractWidget.extend({
-		defaults : {
-			label: "",                 // the label text
-			disabled: false,           // create a disabled button
-			autoDisable: false         // automatically disable the button when clicked
-		},
-
-		_baseCls: "uiButton",
-
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this.button_template())
-				.bind("click", this.click_handler);
-			this.config.disabled && this.disable();
-			this.attach( parent );
-		},
-
-		click_handler: function(jEv) {
-			if(! this.disabled) {
-				this.fire("click", jEv, this);
-				this.config.autoDisable && this.disable();
-			}
-		},
-
-		enable: function() {
-			this.el.removeClass("disabled");
-			this.disabled = false;
-			return this;
-		},
-
-		disable: function(disable) {
-			if(disable === false) {
-					return this.enable();
-			}
-			this.el.addClass("disabled");
-			this.disabled = true;
-			return this;
-		},
-
-		button_template: function() { return (
-			{ tag: 'BUTTON', type: 'button', id: this.id(), cls: this._baseCls, children: [
-				{ tag: 'DIV', cls: 'uiButton-content', children: [
-					{ tag: 'DIV', cls: 'uiButton-label', text: this.config.label }
-				] }
-			] }
-		); }
-	});
-
-})( this.jQuery, this.joey, this.app );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.MenuButton = app.ui.Button.extend({
-		defaults: {
-			menu: null
-		},
-		_baseCls: "uiButton uiMenuButton",
-		init: function(parent) {
-			this._super(parent);
-			this.menu = this.config.menu;
-			this.on("click", this.openMenu_handler);
-			this.menu.on("open", function() { this.el.addClass("active"); }.bind(this));
-			this.menu.on("close", function() { this.el.removeClass("active"); }.bind(this));
-		},
-		openMenu_handler: function(jEv) {
-			this.menu && this.menu.open(jEv);
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.SplitButton = ui.AbstractWidget.extend({
-		defaults: {
-			items: [],
-			label: ""
-		},
-		_baseCls: "uiSplitButton",
-		init: function( parent ) {
-			this._super( parent );
-			this.value = null;
-			this.button = new ui.Button({
-				label: this.config.label,
-				onclick: this._click_handler
-			});
-			this.menu = new ui.SelectMenuPanel({
-				value: this.config.value,
-				items: this._getItems(),
-				onSelect: this._select_handler
-			});
-			this.menuButton = new ui.MenuButton({
-				label: "\u00a0",
-				menu: this.menu
-			});
-			this.el = $.joey(this._main_template());
-		},
-		remove: function() {
-			this.menu.remove();
-		},
-		disable: function() {
-			this.button.disable();
-		},
-		enable: function() {
-			this.button.enable();
-		},
-		_click_handler: function() {
-			this.fire("click", this, { value: this.value } );
-		},
-		_select_handler: function( panel, event ) {
-			this.fire( "select", this, event );
-		},
-		_getItems: function() {
-			return this.config.items;
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: this._baseCls, children: [
-				this.button, this.menuButton
-			] };
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.RefreshButton = ui.SplitButton.extend({
-		defaults: {
-			timer: -1
-		},
-		init: function( parent ) {
-			this.config.label = i18n.text("General.RefreshResults");
-			this._super( parent );
-			this.set( this.config.timer );
-		},
-		set: function( value ) {
-			this.value = value;
-			window.clearInterval( this._timer );
-			if( this.value > 0 ) {
-				this._timer = window.setInterval( this._refresh_handler, this.value );
-			}
-		},
-		_click_handler: function() {
-			this._refresh_handler();
-		},
-		_select_handler: function( el, event ) {
-			this.set( event.value );
-			this.fire("change", this );
-		},
-		_refresh_handler: function() {
-			this.fire("refresh", this );
-		},
-		_getItems: function() {
-			return [
-				{ text: i18n.text("General.ManualRefresh"), value: -1 },
-				{ text: i18n.text("General.RefreshQuickly"), value: 100 },
-				{ text: i18n.text("General.Refresh5seconds"), value: 5000 },
-				{ text: i18n.text("General.Refresh1minute"), value: 60000 }
-			];
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Toolbar = ui.AbstractWidget.extend({
-		defaults: {
-			label: "",
-			left: [],
-			right: []
-		},
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this._main_template());
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiToolbar", children: [
-				{ tag: "DIV", cls: "pull-left", children: [
-					{ tag: "H2", text: this.config.label }
-				].concat(this.config.left) },
-				{ tag: "DIV", cls: "pull-right", children: this.config.right }
-			]};
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.AbstractPanel = ui.AbstractWidget.extend({
-		defaults: {
-			body: null,            // initial content of the body
-			modal: true,           // create a modal panel - creates a div that blocks interaction with page
-			height: 'auto',        // panel height
-			width: 400,            // panel width (in pixels)
-			open: false,           // show the panel when it is created
-			parent: 'BODY',        // node that panel is attached to
-			autoRemove: false      // remove the panel from the dom and destroy it when the widget is closed
-		},
-		shared: {  // shared data for all instances of ui.Panel and decendants
-			stack: [], // array of all open panels
-			modal: $( { tag: "DIV", id: "uiModal", css: { opacity: 0.2, position: "absolute", top: "0px", left: "0px" } } )
-		},
-		init: function() {
-			this._super();
-		},
-		open: function( ev ) {
-			this.el
-				.css( { visibility: "hidden" } )
-				.appendTo( this.config.parent )
-				.css( this._getPosition( ev ) )
-				.css( { zIndex: (this.shared.stack.length ? (+this.shared.stack[this.shared.stack.length - 1].el.css("zIndex") + 10) : 100) } )
-				.css( { visibility: "visible", display: "block" } );
-			this.shared.stack.remove(this);
-			this.shared.stack.push(this);
-			this._setModal();
-			$(document).bind("keyup", this._close_handler );
-			this.fire("open", { source: this, event: ev } );
-			return this;
-		},
-		close: function() {
-			var index = this.shared.stack.indexOf(this);
-			if(index !== -1) {
-				this.shared.stack.splice(index, 1);
-				this.el.css( { left: "-2999px" } ); // move the dialog to the left rather than hiding to prevent ie6 rendering artifacts
-				this._setModal();
-				this.fire("close", this );
-				if(this.config.autoRemove) {
-					this.remove();
-				}
-			}
-			return this;
-		},
-		// close the panel and remove it from the dom, destroying it (you can not reuse the panel after calling remove)
-		remove: function() {
-			this.close();
-			$(document).unbind("keyup", this._close_handler );
-			this._super();
-		},
-		// starting at the top of the stack, find the first panel that wants a modal and put it just underneath, otherwise remove the modal
-		_setModal: function() {
-			for(var stackPtr = this.shared.stack.length - 1; stackPtr >= 0; stackPtr--) {
-				if(this.shared.stack[stackPtr].config.modal) {
-					this.shared.modal
-						.appendTo( document.body )
-						.css( { zIndex: this.shared.stack[stackPtr].el.css("zIndex") - 5 } )
-						.css( $(document).vSize().asSize() );
-					return;
-				}
-			}
-			this.shared.modal.remove(); // no panels that want a modal were found
-		},
-		_getPosition: function() {
-			return $(window).vSize()                        // get the current viewport size
-				.sub(this.el.vSize())                         // subtract the size of the panel
-				.mod(function(s) { return s / 2; })           // divide by 2 (to center it)
-				.add($(document).vScroll())                   // add the current scroll offset
-				.mod(function(s) { return Math.max(5, s); })  // make sure the panel is not off the edge of the window
-				.asOffset();                                  // and return it as a {top, left} object
-		},
-		_close_handler: function( ev ) {
-			if( ev.type === "keyup" && ev.keyCode !== 27) { return; } // press esc key to close
-			$(document).unbind("keyup", this._close_handler);
-			this.close( ev );
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.DraggablePanel = ui.AbstractPanel.extend({
-		defaults: {
-	//		title: ""   // (required) text for the panel title
-		},
-
-		_baseCls: "uiPanel",
-
-		init: function() {
-			this._super();
-			this.body = $(this._body_template());
-			this.title = $(this._title_template());
-			this.el = $.joey( this._main_template() );
-			this.el.css( { width: this.config.width } );
-			this.dd = new app.ux.DragDrop({
-				pickupSelector: this.el.find(".uiPanel-titleBar"),
-				dragObj: this.el
-			});
-			// open the panel if set in configuration
-			this.config.open && this.open();
-		},
-
-		setBody: function(body) {
-				this.body.empty().append(body);
-		},
-		_body_template: function() { return { tag: "DIV", cls: "uiPanel-body", css: { height: this.config.height + (this.config.height === 'auto' ? "" : "px" ) }, children: [ this.config.body ] }; },
-		_title_template: function() { return { tag: "SPAN", cls: "uiPanel-title", text: this.config.title }; },
-		_main_template: function() { return (
-			{ tag: "DIV", id: this.id(), cls: this._baseCls, children: [
-				{ tag: "DIV", cls: "uiPanel-titleBar", children: [
-					{ tag: "DIV", cls: "uiPanel-close", onclick: this._close_handler, text: "x" },
-					this.title
-				]},
-				this.body
-			] }
-		); }
-	});
-
-})( this.jQuery, this.app );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.InfoPanel = ui.DraggablePanel.extend({
-		_baseCls: "uiPanel uiInfoPanel"
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.DialogPanel = ui.DraggablePanel.extend({
-		_commit_handler: function(jEv) {
-			this.fire("commit", this, { jEv: jEv });
-		},
-		_main_template: function() {
-			var t = this._super();
-			t.children.push(this._actionsBar_template());
-			return t;
-		},
-		_actionsBar_template: function() {
-			return { tag: "DIV", cls: "pull-right", children: [
-				new app.ui.Button({ label: "Cancel", onclick: this._close_handler }),
-				new app.ui.Button({ label: "OK", onclick: this._commit_handler })
-			]};
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.MenuPanel = ui.AbstractPanel.extend({
-		defaults: {
-			items: [],		// (required) an array of menu items
-			modal: false
-		},
-		_baseCls: "uiMenuPanel",
-		init: function() {
-			this._super();
-			this.el = $(this._main_template());
-		},
-		open: function(jEv) {
-			this._super(jEv);
-			var cx = this; setTimeout(function() { $(document).bind("click", cx._close_handler); }, 50);
-		},
-		_getItems: function() {
-			return this.config.items;
-		},
-		_close_handler: function(jEv) {
-			this._super(jEv);
-			$(document).unbind("click", this._close_handler);
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: this._baseCls, children: this._getItems().map(this._menuItem_template, this) };
-		},
-		_menuItem_template: function(item) {
-			var dx = item.disabled ? { onclick: function() {} } : {};
-			return { tag: "LI", cls: "uiMenuPanel-item" + (item.disabled ? " disabled" : "") + (item.selected ? " selected" : ""), children: [ $.extend({ tag: "DIV", cls: "uiMenuPanel-label" }, item, dx ) ] };
-		},
-		_getPosition: function(jEv) {
-			var right = !! $(jEv.target).parents(".pull-right").length;
-			var parent = $(jEv.target).closest("BUTTON");
-			return parent.vOffset()
-				.addY(parent.vSize().y)
-				.addX( right ? parent.vSize().x - this.el.vOuterSize().x : 0 )
-				.asOffset();
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.SelectMenuPanel = ui.MenuPanel.extend({
-		defaults: {
-			items: [],		// (required) an array of menu items
-			value: null
-		},
-		_baseCls: "uiSelectMenuPanel uiMenuPanel",
-		init: function() {
-			this.value = this.config.value;
-			this._super();
-		},
-		_getItems: function() {
-			return this.config.items.map( function( item ) {
-				return {
-					text: item.text,
-					selected: this.value === item.value,
-					onclick: function( jEv ) {
-						var el = $( jEv.target ).closest("LI");
-						el.parent().children().removeClass("selected");
-						el.addClass("selected");
-						this.fire( "select", this, { value: item.value } );
-						this.value = item.value;
-					}.bind(this)
-				};
-			}, this );
-
-		}
-	});
-
-})( this.app );
-
-( function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Table = ui.AbstractWidget.extend({
-		defaults: {
-			store: null, // (required) implements interface app.data.DataSourceInterface
-			height: 0,
-			width: 0
-		},
-		_baseCls: "uiTable",
-		init: function(parent) {
-			this._super();
-			this.initElements(parent);
-			this.config.store.on("data", this._data_handler);
-		},
-		attach: function(parent) {
-			if(parent) {
-				this._super(parent);
-				this._reflow();
-			}
-		},
-		initElements: function(parent) {
-			this.el = $.joey(this._main_template());
-			this.body = this.el.find(".uiTable-body");
-			this.headers = this.el.find(".uiTable-headers");
-			this.tools = this.el.find(".uiTable-tools");
-			this.attach( parent );
-		},
-		_data_handler: function(store) {
-			this.tools.text(store.summary);
-			this.headers.empty().append(this._header_template(store.columns));
-			this.body.empty().append(this._body_template(store.data, store.columns));
-			this._reflow();
-		},
-		_reflow: function() {
-			var firstCol = this.body.find("TR:first TH.uiTable-header-cell > DIV"),
-					headers = this.headers.find("TR:first TH.uiTable-header-cell > DIV");
-			for(var i = 0; i < headers.length; i++) {
-				$(headers[i]).width( $(firstCol[i]).width() );
-			}
-			this._scroll_handler();
-		},
-		_scroll_handler: function(ev) {
-			this.el.find(".uiTable-headers").scrollLeft(this.body.scrollLeft());
-		},
-		_dataClick_handler: function(ev) {
-			var row = $(ev.target).closest("TR");
-			if(row.length) {
-				this.fire("rowClick", this, { row: row } );
-			}
-		},
-		_headerClick_handler: function(ev) {
-			var header = $(ev.target).closest("TH.uiTable-header-cell");
-			if(header.length) {
-				this.fire("headerClick", this, { header: header, column: header.data("column"), dir: header.data("dir") });
-			}
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), css: { width: this.config.width + "px" }, cls: this._baseCls, children: [
-				{ tag: "DIV", cls: "uiTable-tools" },
-				{ tag: "DIV", cls: "uiTable-headers", onclick: this._headerClick_handler },
-				{ tag: "DIV", cls: "uiTable-body",
-					onclick: this._dataClick_handler,
-					onscroll: this._scroll_handler,
-					css: { height: this.config.height + "px", width: this.config.width + "px" }
-				}
-			] };
-		},
-		_header_template: function(columns) {
-			var ret = { tag: "TABLE", children: [ this._headerRow_template(columns) ] };
-			ret.children[0].children.push(this._headerEndCap_template());
-			return ret;
-		},
-		_headerRow_template: function(columns) {
-			return { tag: "TR", cls: "uiTable-header-row", children: columns.map(function(column) {
-				var dir = ((this.config.store.sort.column === column) && this.config.store.sort.dir) || "none";
-				return { tag: "TH", data: { column: column, dir: dir }, cls: "uiTable-header-cell" + ((dir !== "none") ? " uiTable-sort" : ""), children: [
-					{ tag: "DIV", children: [
-						{ tag: "DIV", cls: "uiTable-headercell-menu", text: dir === "asc" ? "\u25b2" : "\u25bc" },
-						{ tag: "DIV", cls: "uiTable-headercell-text", text: column }
-					]}
-				]};
-			}, this)};
-		},
-		_headerEndCap_template: function() {
-			return { tag: "TH", cls: "uiTable-headerEndCap", children: [ { tag: "DIV" } ] };
-		},
-		_body_template: function(data, columns) {
-			return { tag: "TABLE", children: []
-				.concat(this._headerRow_template(columns))
-				.concat(data.map(function(row) {
-					return { tag: "TR", data: { row: row }, cls: "uiTable-row", children: columns.map(function(column){
-						return { tag: "TD", cls: "uiTable-cell", children: [ { tag: "DIV", text: (row[column] || "").toString() } ] };
-					})};
-				}))
-			};
-		}
-
-	});
-
-})( this.jQuery, this.app );
-
-( function( $, app, joey ) {
-
-	var ui = app.ns("ui");
-
-	var CELL_SEPARATOR = ",";
-	var CELL_QUOTE = '"';
-	var LINE_SEPARATOR = "\r\n";
-
-	ui.CSVTable = ui.AbstractWidget.extend({
-		defaults: {
-			results: null
-		},
-		_baseCls: "uiCSVTable",
-		init: function( parent ) {
-			this._super();
-			var results = this.config.results.hits.hits;
-			var columns = this._parseResults( results );
-			this._downloadButton = new ui.Button({
-				label: "Generate Download Link",
-				onclick: this._downloadLinkGenerator_handler
-			});
-			this._downloadLink = $.joey( { tag: "A", text: "download", });
-			this._downloadLink.hide();
-			this._csvText = this._csv_template( columns, results );
-			this.el = $.joey( this._main_template() );
-			this.attach( parent );
-		},
-		_downloadLinkGenerator_handler: function() {
-			var csvData = new Blob( [ this._csvText ], { type: 'text/csv' });
-			var csvURL = URL.createObjectURL( csvData );
-			this._downloadLink.attr( "href", csvURL );
-			this._downloadLink.show();
-		},
-		_parseResults: function( results ) {
-			var columnPaths = {};
-			(function parse( path, obj ) {
-				if( obj instanceof Array ) {
-					for( var i = 0; i < obj.length; i++ ) {
-						parse( path, obj[i] );
-					}
-				} else if( typeof obj === "object" ) {
-					for( var prop in obj ) {
-						parse( path + "." + prop, obj[ prop ] );
-					}
-				} else {
-					columnPaths[ path ] = true;
-				}
-			})( "root", results );
-			var columns = [];
-			for( var column in columnPaths ) {
-				columns.push( column.split(".").slice(1) );
-			}
-			return columns;
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: this._baseCls, id: this.id(), children: [
-				this._downloadButton,
-				this._downloadLink,
-				{ tag: "PRE", text: this._csvText }
-			] }
-		); },
-		_csv_template: function( columns, results ) {
-			return this._header_template( columns ) + LINE_SEPARATOR + this._results_template( columns, results );
-		},
-		_header_template: function( columns ) {
-			return columns.map( function( column ) {
-				return column.join(".");
-			}).join( CELL_SEPARATOR );
-		},
-		_results_template: function( columns, results ) {
-			return results.map( function( result ) {
-				return columns.map( function( column ) {
-					var l = 0,
-						ptr = result;
-					while( l !== column.length && ptr != null ) {
-						ptr = ptr[ column[ l++ ] ];
-					}
-					return ( ptr == null ) ? "" : ( CELL_QUOTE + ptr.toString().replace(/"/g, '""') + CELL_QUOTE );
-				}).join( CELL_SEPARATOR );
-			}).join( LINE_SEPARATOR );
-		}
-	});
-
-})( this.jQuery, this.app, this.joey );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.JsonPretty = ui.AbstractWidget.extend({
-		defaults: {
-			obj: null
-		},
-		init: function(parent) {
-			this._super();
-			this.el = $(this._main_template());
-			this.attach(parent);
-			this.el.click(this._click_handler);
-		},
-		
-		_click_handler: function(jEv) {
-			var t = $(jEv.target).closest(".uiJsonPretty-name").closest("LI");
-			if(t.length === 0 || t.parents(".uiJsonPretty-minimised").length > 0) { return; }
-			t.toggleClass("uiJsonPretty-minimised");
-			jEv.stopPropagation();
-		},
-		
-		_main_template: function() {
-			try {
-					return { tag: "DIV", cls: "uiJsonPretty", children: this.pretty.parse(this.config.obj) };
-			}	catch (error) {
-					throw "JsonPretty error: " + error.message;
-			}
-		},
-		
-		pretty: { // from https://github.com/RyanAmos/Pretty-JSON/blob/master/pretty_json.js
-			"expando" : function(value) {
-				return (value && (/array|object/i).test(value.constructor.name)) ? "expando" : "";
-			},
-			"parse": function (member) {
-				return this[(member == null) ? 'null' : member.constructor.name.toLowerCase()](member);
-			},
-			"null": function (value) {
-				return this['value']('null', 'null');
-			},
-			"array": function (value) {
-				var results = [];
-				var lastItem = value.length - 1;
-				value.forEach(function( v, i ) {
-					results.push({ tag: "LI", cls: this.expando(v), children: [ this['parse'](v) ] });
-					if( i !== lastItem ) {
-						results.push(",");
-					}
-				}, this);
-				return [ "[ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-array", children: results } : null), "]" ];
-			},
-			"object": function (value) {
-				var results = [];
-				var keys = Object.keys( value );
-				var lastItem = keys.length - 1;
-				keys.forEach( function( key, i ) {
-					var children = [ this['value']( 'name', '"' + key + '"' ), ": ", this['parse']( value[ key ]) ];
-					if( i !== lastItem ) {
-						children.push(",");
-					}
-					results.push( { tag: "LI", cls: this.expando( value[ key ] ), children: children } );
-				}, this);
-				return [ "{ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-object", children: results } : null ),  "}" ];
-			},
-			"number": function (value) {
-				return this['value']('number', value.toString());
-			},
-			"string": function (value) {
-				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
-					return this['link']( value );
-				} else {
-					return this['value']('string', '"' + value.toString() + '"');
-				}
-			},
-			"boolean": function (value) {
-				return this['value']('boolean', value.toString());
-			},
-			"link": function( value ) {
-					return this['value']("string", { tag: "A", href: value, target: "_blank", text: '"' + value + '"' } );
-			},
-			"value": function (type, value) {
-				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
-				}
-				return { tag: "SPAN", cls: "uiJsonPretty-" + type, text: value };
-			}
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.PanelForm = ui.AbstractWidget.extend({
-		defaults: {
-			fields: null	// (required) instanceof app.ux.FieldCollection
-		},
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this._main_template());
-			this.attach( parent );
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiPanelForm", children: this.config.fields.fields.map(this._field_template, this) };
-		},
-		_field_template: function(field) {
-			return { tag: "LABEL", cls: "uiPanelForm-field", children: [
-				{ tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] },
-				field
-			]};
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( app ){
-
-	var ui = app.ns("ui");
-
-	ui.HelpPanel = ui.InfoPanel.extend({
-		defaults: {
-			ref: "",
-			open: true,
-			autoRemove: true,
-			modal: false,
-			width: 500,
-			height: 450,
-			title: i18n.text("General.Help")
-		},
-		init: function() {
-			this._super();
-			this.body.append(i18n.text(this.config.ref));
-		}
-	});
-
-})( this.app );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.JsonPanel = ui.InfoPanel.extend({
-		defaults: {
-			json: null, // (required)
-			modal: false,
-			open: true,
-			autoRemove: true,
-			height: 500,
-			width: 600
-		},
-
-		_baseCls: "uiPanel uiInfoPanel uiJsonPanel",
-
-		_body_template: function() {
-			var body = this._super();
-			body.children = [ new ui.JsonPretty({ obj: this.config.json }) ];
-			return body;
-		}
-	});
-
-})( this.app );
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.SidebarSection = ui.AbstractWidget.extend({
-		defaults: {
-			title: "",
-			help: null,
-			body: null,
-			open: false
-		},
-		init: function() {
-			this._super();
-			this.el = $.joey( this._main_template() );
-			this.body = this.el.children(".uiSidebarSection-body");
-			this.config.open && ( this.el.addClass("shown") && this.body.css("display", "block") );
-		},
-		_showSection_handler: function( ev ) {
-			var shown = $( ev.target ).closest(".uiSidebarSection")
-				.toggleClass("shown")
-					.children(".uiSidebarSection-body").slideToggle(200, function() { this.fire("animComplete", this); }.bind(this))
-				.end()
-				.hasClass("shown");
-			this.fire(shown ? "show" : "hide", this);
-		},
-		_showHelp_handler: function( ev ) {
-			new ui.HelpPanel({ref: this.config.help});
-			ev.stopPropagation();
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: "uiSidebarSection", children: [
-				(this.config.title && { tag: "DIV", cls: "uiSidebarSection-head", onclick: this._showSection_handler, children: [
-					this.config.title,
-					( this.config.help && { tag: "SPAN", cls: "uiSidebarSection-help pull-right", onclick: this._showHelp_handler, text: i18n.text("General.HelpGlyph") } )
-				] }),
-				{ tag: "DIV", cls: "uiSidebarSection-body", children: [ this.config.body ] }
-			] }
-		); }
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.ResultTable = ui.Table.extend({
-		defaults: {
-			width: 500,
-			height: 400
-		},
-
-		init: function() {
-			this._super();
-			this.on("rowClick", this._showPreview_handler);
-			this.selectedRow = null;
-			$(document).bind("keydown", this._nav_handler);
-		},
-		remove: function() {
-			$(document).unbind("keydown", this._nav_handler);
-			this._super();
-		},
-		attach: function(parent) {
-			if(parent) {
-				var height = parent.height() || ( $(document).height() - parent.offset().top - 41 ); // 41 = height in px of .uiTable-tools + uiTable-header
-				var width = parent.width();
-				this.el.width( width );
-				this.body.width( width ).height( height );
-			}
-			this._super(parent);
-		},
-		showPreview: function(row) {
-			row.addClass("selected");
-			this.preview = new app.ui.JsonPanel({
-				title: i18n.text("Browser.ResultSourcePanelTitle"),
-				json: row.data("row")._source,
-				onClose: function() { row.removeClass("selected"); }
-			});
-		},
-		_nav_handler: function(jEv) {
-			if(jEv.keyCode !== 40 && jEv.keyCode !== 38) {
-				return;
-			}
-			this.selectedRow && this.preview && this.preview.remove();
-			if(jEv.keyCode === 40) { // up arrow
-				this.selectedRow = this.selectedRow ? this.selectedRow.next("TR") : this.body.find("TR:first");
-			} else if(jEv.keyCode === 38) { // down arrow
-				this.selectedRow = this.selectedRow ? this.selectedRow.prev("TR") : this.body.find("TR:last");
-			}
-			this.selectedRow && this.showPreview(this.selectedRow);
-		},
-		_showPreview_handler: function(obj, data) {
-			this.showPreview(this.selectedRow = data.row);
-		}
-	});
-
-})( this.jQuery, this.app );
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.QueryFilter = ui.AbstractWidget.extend({
-		defaults: {
-			metadata: null,   // (required) instanceof app.data.MetaData
-			query: null       // (required) instanceof app.data.Query that the filters will act apon
-		},
-		init: function() {
-			this._super();
-			this.metadata = this.config.metadata;
-			this.query = this.config.query;
-			this.el = $(this._main_template());
-		},
-		helpTypeMap: {
-			"date" : "QueryFilter.DateRangeHelp"
-		},
-		requestUpdate: function(jEv) {
-			if(jEv && jEv.originalEvent) { // we only want to update on real user interaction not generated events
-				this.query.setPage(1);
-				this.query.query();
-			}
-		},
-		getSpec: function(fieldName) {
-			return this.metadata.fields[fieldName];
-		},
-		_selectAlias_handler: function(jEv) {
-			var indices = (jEv.target.selectedIndex === 0) ? [] : this.metadata.getIndices($(jEv.target).val());
-			$(".uiQueryFilter-index").each(function(i, el) {
-				var jEl = $(el);
-				if(indices.contains(jEl.text()) !== jEl.hasClass("selected")) {
-					jEl.click();
-				}
-			});
-			this.requestUpdate(jEv);
-		},
-		_selectIndex_handler: function(jEv) {
-			var jEl = $(jEv.target).closest(".uiQueryFilter-index");
-			jEl.toggleClass("selected");
-			var selected = jEl.hasClass("selected");
-			this.query.setIndex(jEl.text(), selected);
-			if(selected) {
-				var types = this.metadata.getTypes(this.query.indices);
-				this.el.find("DIV.uiQueryFilter-type.selected").each(function(n, el) {
-					if(! types.contains($(el).text())) {
-						$(el).click();
-					}
-				});
-			}
-			this.requestUpdate(jEv);
-		},
-		_selectType_handler: function(jEv) {
-			var jEl = $(jEv.target).closest(".uiQueryFilter-type");
-			jEl.toggleClass("selected");
-			var type = jEl.text(), selected = jEl.hasClass("selected");
-			this.query.setType(type, selected);
-			if(selected) {
-				var indices = this.metadata.types[type].indices;
-				// es throws a 500 if searching an index for a type it does not contain - so we prevent that
-				this.el.find("DIV.uiQueryFilter-index.selected").each(function(n, el) {
-					if(! indices.contains($(el).text())) {
-						$(el).click();
-					}
-				});
-				// es throws a 500 if you specify types from different indices with _all
-				jEl.siblings(".uiQueryFilter-type.selected").forEach(function(el) {
-					if(this.metadata.types[$(el).text()].indices.intersection(indices).length === 0) {
-						$(el).click();
-					}
-				}, this);
-			}
-			this.requestUpdate(jEv);
-		},
-		_openFilter_handler: function(section) {
-			var field_name = section.config.title;
-			if(! section.loaded) {
-				var spec = this.getSpec(field_name);
-				if(spec.core_type === "string") {
-					section.body.append(this._textFilter_template(spec));
-				} else if(spec.core_type === "date") {
-					section.body.append(this._dateFilter_template(spec));
-					section.body.append(new ui.DateHistogram({ printEl: section.body.find("INPUT"), cluster: this.cluster, query: this.query, spec: spec }));
-				} else if(spec.core_type === "number") {
-					section.body.append(this._numericFilter_template(spec));
-				} else if(spec.core_type === 'boolean') {
-					section.body.append(this._booleanFilter_template(spec));
-				} else if (spec.core_type === 'multi_field') {
-					section.body.append(this._multiFieldFilter_template(section, spec));
-				} 
-				section.loaded = true;
-			}
-			section.on("animComplete", function(section) { section.body.find("INPUT").focus(); });
-		},
-		_textFilterChange_handler: function(jEv) {
-			var jEl = $(jEv.target).closest("INPUT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqids = jEl.data("uqids") || [];
-			uqids.forEach(function(uqid) {
-				uqid && this.query.removeClause(uqid);
-			}, this);
-			if(val.length) {
-				if(jEl[0] === document.activeElement && jEl[0].selectionStart === jEl[0].selectionEnd) {
-					val = val.replace(new RegExp("(.{"+jEl[0].selectionStart+"})"), "$&*");
-				}
-				uqids = val.split(/\s+/).map(function(term) {
-					// Figure out the actual field name - needed for multi_field, because
-					// querying for "field.field" will not work. Simply "field" must be used
-					// if nothing is aliased.
-					var fieldNameParts = spec.field_name.split('.');
-					var part = fieldNameParts.length - 1;
-					var name = fieldNameParts[part];
-					while (part >= 1) {
-						if (fieldNameParts[part] !== fieldNameParts[part - 1]) {
-							name = fieldNameParts[part - 1] + "." + name;
-						}
-						part--;
-					}
-					return term && this.query.addClause(term, name, "wildcard", "must");
-				}, this);
-			}
-			jEl.data("uqids", uqids);
-			this.requestUpdate(jEv);
-		},
-		_dateFilterChange_handler: function(jEv) {
-			var jEl = $(jEv.target).closest("INPUT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqid = jEl.data("uqid") || null;
-			var range = window.dateRangeParser.parse(val);
-			var lastRange = jEl.data("lastRange");
-			if(!range || (lastRange && lastRange.start === range.start && lastRange.end === range.end)) {
-				return;
-			}
-			uqid && this.query.removeClause(uqid);
-			if((range.start && range.end) === null) {
-				uqid = null;
-			} else {
-				var value = {};
-				if( range.start ) {
-					value["gte"] = range.start;
-				}
-				if( range.end ) {
-					value["lte"] = range.end;
-				}
-				uqid = this.query.addClause( value, spec.field_name, "range", "must");
-			}
-			jEl.data("lastRange", range);
-			jEl.siblings(".uiQueryFilter-rangeHintFrom")
-				.text(i18n.text("QueryFilter.DateRangeHint.from", range.start && new Date(range.start).toUTCString()));
-			jEl.siblings(".uiQueryFilter-rangeHintTo")
-				.text(i18n.text("QueryFilter.DateRangeHint.to", range.end && new Date(range.end).toUTCString()));
-			jEl.data("uqid", uqid);
-			this.requestUpdate(jEv);
-		},
-		_numericFilterChange_handler: function(jEv) {
-			var jEl = $(jEv.target).closest("INPUT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqid = jEl.data("uqid") || null;
-			var lastRange = jEl.data("lastRange");
-			var range = (function(val) {
-				var ops = val.split(/->|<>|</).map( function(v) { return parseInt(v.trim(), 10); });
-				if(/<>/.test(val)) {
-					return { gte: (ops[0] - ops[1]), lte: (ops[0] + ops[1]) };
-				} else if(/->|</.test(val)) {
-					return { gte: ops[0], lte: ops[1] };
-				} else {
-					return { gte: ops[0], lte: ops[0] };
-				}
-			})(val || "");
-			if(!range || (lastRange && lastRange.lte === range.lte && lastRange.gte === range.gte)) {
-				return;
-			}
-			jEl.data("lastRange", range);
-			uqid && this.query.removeClause(uqid);
-			uqid = this.query.addClause( range, spec.field_name, "range", "must");
-			jEl.data("uqid", uqid);
-			this.requestUpdate(jEv);
-		},
-		_booleanFilterChange_handler: function( jEv ) {
-			var jEl = $(jEv.target).closest("SELECT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqid = jEl.data("uqid") || null;
-			uqid && this.query.removeClause(uqid);
-			if(val === "true" || val === "false") {
-				jEl.data("uqid", this.query.addClause(val, spec.field_name, "term", "must") );
-			}
-			this.requestUpdate(jEv);
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiQueryFilter", children: [
-				this._aliasSelector_template(),
-				this._indexSelector_template(),
-				this._typesSelector_template(),
-				this._filters_template()
-			] };
-		},
-		_aliasSelector_template: function() {
-			var aliases = Object.keys(this.metadata.aliases).sort();
-			aliases.unshift( i18n.text("QueryFilter.AllIndices") );
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-aliases", children: [
-				{ tag: "SELECT", onChange: this._selectAlias_handler, children: aliases.map(ut.option_template) }
-			] };
-		},
-		_indexSelector_template: function() {
-			var indices = Object.keys( this.metadata.indices ).sort();
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-indices", children: [
-				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Indices") },
-				{ tag: "DIV", onClick: this._selectIndex_handler, children: indices.map( function( name ) {
-					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-index", text: name };
-				})}
-			] };
-		},
-		_typesSelector_template: function() {
-			var types = Object.keys( this.metadata.types ).sort();
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-types", children: [
-				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Types") },
-				{ tag: "DIV", onClick: this._selectType_handler, children: types.map( function( name ) {
-					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-type", text: name };
-				})}
-			] };
-		},
-		_filters_template: function() {
-			var _metadataFields = this.metadata.fields;
-			var fields = Object.keys( _metadataFields ).sort()
-				.filter(function(d) { return (_metadataFields[d].core_type !== undefined); });
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-filters", children: [
-				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Fields") },
-				{ tag: "DIV", children: fields.map( function(name ) {
-					return new app.ui.SidebarSection({
-						title: name,
-						help: this.helpTypeMap[this.metadata.fields[ name ].type],
-						onShow: this._openFilter_handler
-					});
-				}, this ) }
-			] };
-		},
-		_textFilter_template: function(spec) {
-			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._textFilterChange_handler };
-		},
-		_dateFilter_template: function(spec) {
-			return { tag: "DIV", children: [
-				{ tag: "INPUT", data: { spec: spec }, onKeyup: this._dateFilterChange_handler },
-				{ tag: "PRE", cls: "uiQueryFilter-rangeHintFrom", text: i18n.text("QueryFilter.DateRangeHint.from", "")},
-				{ tag: "PRE", cls: "uiQueryFilter-rangeHintTo", text: i18n.text("QueryFilter.DateRangeHint.to", "") }
-			]};
-		},
-		_numericFilter_template: function(spec) {
-			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._numericFilterChange_handler };
-		},
-		_booleanFilter_template: function(spec) {
-			return { tag: "SELECT", data: { spec: spec }, onChange: this._booleanFilterChange_handler,
-				children: [ i18n.text("QueryFilter.AnyValue"), "true", "false" ].map( function( val ) {
-					return { tag: "OPTION", value: val, text: val };
-				})
-			};
-		},
-		_multiFieldFilter_template: function(section, spec) {
-			return {
-				tag : "DIV", cls : "uiQueryFilter-subMultiFields", children : acx.eachMap(spec.fields, function(name, data) {
-					if (name === spec.field_name) {
-						section.config.title = spec.field_name + "." + name;
-						return this._openFilter_handler(section);
-					}
-					return new app.ui.SidebarSection({
-						title : data.field_name, help : this.helpTypeMap[data.type], onShow : this._openFilter_handler
-					});
-				}, this)
-			};
-		}	
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Page = ui.AbstractWidget.extend({
-		show: function() {
-			this.el.show();
-		},
-		hide: function() {
-			this.el.hide();
-		}
-	});
-
-})( this.app );
-(function( $, app, i18n ){
-
-	var ui = app.ns("ui");
-	var data = app.ns("data");
-
-	ui.Browser = ui.Page.extend({
-		defaults: {
-			cluster: null  // (required) instanceof app.services.Cluster
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.query = new app.data.Query( { cluster: this.cluster } );
-			this._refreshButton = new ui.Button({
-				label: i18n.text("General.RefreshResults"),
-				onclick: function( btn ) {
-					this.query.query();
-				}.bind(this)
-			});
-			this.el = $(this._main_template());
-			new data.MetaDataFactory({
-				cluster: this.cluster,
-				onReady: function(metadata) {
-					this.metadata = metadata;
-					this.store = new data.QueryDataSourceInterface( { metadata: metadata, query: this.query } );
-					this.queryFilter = new ui.QueryFilter({ metadata: metadata, query: this.query });
-					this.queryFilter.attach(this.el.find("> .uiBrowser-filter") );
-					this.resultTable = new ui.ResultTable( {
-						onHeaderClick: this._changeSort_handler,
-						store: this.store
-					} );
-					this.resultTable.attach( this.el.find("> .uiBrowser-table") );
-					this.updateResults();
-				}.bind(this)
-			});
-		},
-		updateResults: function() {
-			this.query.query();
-		},
-		_changeSort_handler: function(table, wEv) {
-			this.query.setSort(wEv.column, wEv.dir === "desc");
-			this.query.setPage(1);
-			this.query.query();
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiBrowser", children: [
-				new ui.Toolbar({
-					label: i18n.text("Browser.Title"),
-					left: [ ],
-					right: [ this._refreshButton ]
-				}),
-				{ tag: "DIV", cls: "uiBrowser-filter" },
-				{ tag: "DIV", cls: "uiBrowser-table" }
-			] };
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( $, app, i18n, raphael ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-	var services = app.ns("services");
-
-	ui.AnyRequest = ui.Page.extend({
-		defaults: {
-			cluster: null,       // (required) instanceof app.services.Cluster
-			path: "_search",     // default uri to send a request to
-			query: { query: { match_all: { }}},
-			transform: "  return root;" // default transformer function (does nothing)
-		},
-		init: function(parent) {
-			this._super();
-			this.prefs = services.Preferences.instance();
-			this.history = this.prefs.get("anyRequest-history") || [ { type: "POST", path: this.config.path, query : JSON.stringify(this.config.query), transform: this.config.transform } ];
-			this.el = $.joey(this._main_template());
-			this.base_uriEl = this.el.find("INPUT[name=base_uri]");
-			this.pathEl = this.el.find("INPUT[name=path]");
-			this.typeEl = this.el.find("SELECT[name=method]");
-			this.dataEl = this.el.find("TEXTAREA[name=body]");
-			this.prettyEl = this.el.find("INPUT[name=pretty]");
-			this.transformEl = this.el.find("TEXTAREA[name=transform]");
-			this.asGraphEl = this.el.find("INPUT[name=asGraph]");
-			this.asTableEl = this.el.find("INPUT[name=asTable]");
-			this.asJsonEl = this.el.find("INPUT[name=asJson]");
-			this.cronEl = this.el.find("SELECT[name=cron]");
-			this.outEl = this.el.find("DIV.uiAnyRequest-out");
-			this.errEl = this.el.find("DIV.uiAnyRequest-jsonErr");
-			this.typeEl.val("GET");
-			this.attach(parent);
-			this.setHistoryItem(this.history[this.history.length - 1]);
-		},
-		setHistoryItem: function(item) {
-			this.pathEl.val(item.path);
-			this.typeEl.val(item.type);
-			this.dataEl.val(item.query);
-			this.transformEl.val(item.transform);
-		},
-		_request_handler: function( ev ) {
-			if(! this._validateJson_handler()) {
-				return;
-			}
-			var path = this.pathEl.val(),
-					type = this.typeEl.val(),
-					query = JSON.stringify(JSON.parse(this.dataEl.val())),
-					transform = this.transformEl.val(),
-					base_uri = this.base_uriEl.val();
-			if( ev ) { // if the user click request
-				if(this.timer) {
-					window.clearTimeout(this.timer); // stop any cron jobs
-				}
-				delete this.prevData; // remove data from previous cron runs
-				this.outEl.text(i18n.text("AnyRequest.Requesting"));
-				if( ! /\/$/.test( base_uri )) {
-					base_uri += "/";
-					this.base_uriEl.val( base_uri );
-				}
-				for(var i = 0; i < this.history.length; i++) {
-					if(this.history[i].path === path &&
-						this.history[i].type === type &&
-						this.history[i].query === query &&
-						this.history[i].transform === transform) {
-						this.history.splice(i, 1);
-					}
-				}
-				this.history.push({
-					path: path,
-					type: type,
-					query: query,
-					transform: transform
-				});
-				this.history.slice(250); // make sure history does not get too large
-				this.prefs.set( "anyRequest-history", this.history );
-				this.el.find("UL.uiAnyRequest-history")
-					.empty()
-					.append($( { tag: "UL", children: this.history.map(this._historyItem_template, this) }).children())
-					.children().find(":last-child").each(function(i, j) { j.scrollIntoView(false); }).end()
-					.scrollLeft(0);
-			}
-			this.config.cluster.request({
-				url: base_uri + path,
-				type: type,
-				data: query,
-				success: this._responseWriter_handler,
-				error: this._responseError_handler
-			});
-		},
-		_responseError_handler: function (response) {
-			var obj;
-			try {
-				obj = JSON.parse(response.responseText);
-				if (obj) {
-					this._responseWriter_handler(obj);
-				}
-			} catch (err) {
-			}
-		},
-		_responseWriter_handler: function(data) {
-			this.outEl.empty();
-			try {
-				data = (new Function("root", "prev", this.transformEl.val()))(data, this.prevData)
-			} catch(e) {
-				this.errEl.text(e.message);
-				return;
-			}
-			if(this.asGraphEl.attr("checked")) {
-				var w = this.outEl.width();
-				raphael(this.outEl[0], w - 10, 300)
-					.g.barchart(10, 10, w - 20, 280, [data]);
-			}
-			if(this.asTableEl.attr("checked")) {
-				try {
-					var store = new app.data.ResultDataSourceInterface();
-					this.outEl.append(new app.ui.ResultTable({
-						width: this.outEl.width() - 23,
-						store: store
-					} ) );
-					store.results(data);
-				} catch(e) {
-					this.errEl.text("Results Table Failed: " + e.message);
-				}
-			}
-			if(this.asJsonEl.attr("checked")) {
-				this.outEl.append(new ui.JsonPretty({ obj: data }));
-			}
-			if(this.cronEl.val() > 0) {
-				this.timer = window.setTimeout(function(){
-					this._request_handler();
-				}.bind(this), this.cronEl.val());
-			}
-			this.prevData = data;
-		},
-		_validateJson_handler: function( ev ) {
-			/* if the textarea is empty, we replace its value by an empty JSON object : "{}" and the request goes on as usual */
-			var jsonData = this.dataEl.val().trim();
-			var j;
-			if(jsonData === "") {
-				jsonData = "{}";
-				this.dataEl.val( jsonData );
-			}
-			try {
-				j = JSON.parse(jsonData);
-			} catch(e) {
-				this.errEl.text(e.message);
-				return false;
-			}
-			this.errEl.text("");
-			if(this.prettyEl.attr("checked")) {
-				this.dataEl.val(JSON.stringify(j, null, "  "));
-			}
-			return true;
-		},
-		_historyClick_handler: function( ev ) {
-			var item = $( ev.target ).closest( "LI" ).data( "item" );
-			this.setHistoryItem( item );
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: "anyRequest", children: [
-				{ tag: "DIV", cls: "uiAnyRequest-request", children: [
-					new app.ui.SidebarSection({
-						open: false,
-						title: i18n.text("AnyRequest.History"),
-						body: { tag: "UL", onclick: this._historyClick_handler, cls: "uiAnyRequest-history", children: this.history.map(this._historyItem_template, this)	}
-					}),
-					new app.ui.SidebarSection({
-						open: true,
-						title: i18n.text("AnyRequest.Query"),
-						body: { tag: "DIV", children: [
-							{ tag: "INPUT", type: "text", name: "base_uri", value: this.config.cluster.config.base_uri },
-							{ tag: "BR" },
-							{ tag: "INPUT", type: "text", name: "path", value: this.config.path },
-							{ tag: "SELECT", name: "method", children: ["POST", "GET", "PUT", "HEAD", "DELETE"].map(ut.option_template) },
-							{ tag: "TEXTAREA", name: "body", rows: 20, text: JSON.stringify(this.config.query) },
-							{ tag: "BUTTON", css: { cssFloat: "right" }, type: "button", children: [ { tag: "B", text: i18n.text("AnyRequest.Request") } ], onclick: this._request_handler },
-							{ tag: "BUTTON", type: "button", text: i18n.text("AnyRequest.ValidateJSON"), onclick: this._validateJson_handler },
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "pretty" }, i18n.text("AnyRequest.Pretty") ] },
-							{ tag: "DIV", cls: "uiAnyRequest-jsonErr" }
-						]}
-					}),
-					new app.ui.SidebarSection({
-						title: i18n.text("AnyRequest.Transformer"),
-						help: "AnyRequest.TransformerHelp",
-						body: { tag: "DIV", children: [
-							{ tag: "CODE", text: "function(root, prev) {" },
-							{ tag: "BR" },
-							{ tag: "TEXTAREA", name: "transform", rows: 5, text: this.config.transform },
-							{ tag: "BR" },
-							{ tag: "CODE", text: "}" }
-						] }
-					}),
-					new app.ui.SidebarSection({
-						title: i18n.text("AnyRequest.RepeatRequest"),
-						body: { tag: "DIV", children: [
-							i18n.text("AnyRequest.RepeatRequestSelect"), " ",
-							{ tag: "SELECT", name: "cron", children: [
-								{ value: 0, text: "do not repeat" },
-								{ value: 1000, text: "second" },
-								{ value: 1000 * 2, text: "2 seconds" },
-								{ value: 1000 * 5, text: "5 seconds" },
-								{ value: 1000 * 20, text: "20 seconds" },
-								{ value: 1000 * 60, text: "minute" },
-								{ value: 1000 * 60 * 10, text: "10 minutes" },
-								{ value: 1000 * 60 * 60, text: "hour" }
-							].map(function(op) { return $.extend({ tag: "OPTION"}, op); }) }
-						] }
-					}),
-					new app.ui.SidebarSection({
-						title: i18n.text("AnyRequest.DisplayOptions"),
-						help: "AnyRequest.DisplayOptionsHelp",
-						body: { tag: "DIV", children: [
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", checked: true, name: "asJson" }, i18n.text("AnyRequest.AsJson") ] },
-							{ tag: "BR" },
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asGraph" }, i18n.text("AnyRequest.AsGraph") ] },
-							{ tag: "BR" },
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asTable" }, i18n.text("AnyRequest.AsTable") ] }
-						] }
-					})
-				] },
-				{ tag: "DIV", cls: "uiAnyRequest-out" }
-			] };
-		},
-		_historyItem_template: function(item) {
-			return { tag: "LI", cls: "booble", data: { item: item }, children: [
-				{ tag: "SPAN", text: item.path },
-				" ",
-				{ tag: "EM", text: item.query },
-				" ",
-				{ tag: "SPAN", text: item.transform }
-			] };
-		}
-	});
-	
-})( this.jQuery, this.app, this.i18n, this.Raphael );
-
-(function( app, i18n, joey ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.NodesView = ui.AbstractWidget.extend({
-		defaults: {
-			interactive: true,
-			aliasRenderer: "list",
-			scaleReplicas: 1,
-			cluster: null,
-			data: null
-		},
-		init: function() {
-			this._super();
-			this.interactive = this.config.interactive;
-			this.cluster = this.config.cluster;
-			this._aliasRenderFunction = {
-				"none": this._aliasRender_template_none,
-				"list": this._aliasRender_template_list,
-				"full": this._aliasRender_template_full
-			}[ this.config.aliasRenderer ];
-			this._styleSheetEl = joey({ tag: "STYLE", text: ".uiNodesView-nullReplica, .uiNodesView-replica { zoom: " + this.config.scaleReplicas + " }" });
-			this.el = $( this._main_template( this.config.data.cluster, this.config.data.indices ) );
-		},
-
-		_newAliasAction_handler: function( index ) {
-			var fields = new app.ux.FieldCollection({
-				fields: [
-					new ui.TextField({ label: i18n.text("AliasForm.AliasName"), name: "alias", require: true })
-				]
-			});
-			var dialog = new ui.DialogPanel({
-				title: i18n.text("AliasForm.NewAliasForIndexName", index.name),
-				body: new ui.PanelForm({ fields: fields }),
-				onCommit: function(panel, args) {
-					if(fields.validate()) {
-						var data = fields.getData();
-						var command = {
-							"actions" : [
-								{ "add" : { "index" : index.name, "alias" : data["alias"] } }
-							]
-						};
-						this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
-							dialog.close();
-							alert(JSON.stringify(d));
-							this.fire("redraw");
-						}.bind(this) );
-					}
-				}.bind(this)
-			}).open();
-		},
-		_postIndexAction_handler: function(action, index, redraw) {
-			this.cluster.post(encodeURIComponent( index.name ) + "/" + encodeURIComponent( action ), null, function(r) {
-				alert(JSON.stringify(r));
-				redraw && this.fire("redraw");
-			}.bind(this));
-		},
-		_optimizeIndex_handler: function(index) {
-			var fields = new app.ux.FieldCollection({
-				fields: [
-					new ui.TextField({ label: i18n.text("OptimizeForm.MaxSegments"), name: "max_num_segments", value: "1", require: true }),
-					new ui.CheckField({ label: i18n.text("OptimizeForm.ExpungeDeletes"), name: "only_expunge_deletes", value: false }),
-					new ui.CheckField({ label: i18n.text("OptimizeForm.FlushAfter"), name: "flush", value: true }),
-					new ui.CheckField({ label: i18n.text("OptimizeForm.WaitForMerge"), name: "wait_for_merge", value: false })
-				]
-			});
-			var dialog = new ui.DialogPanel({
-				title: i18n.text("OptimizeForm.OptimizeIndex", index.name),
-				body: new ui.PanelForm({ fields: fields }),
-				onCommit: function( panel, args ) {
-					if(fields.validate()) {
-						this.cluster.post(encodeURIComponent( index.name ) + "/_optimize", fields.getData(), function(r) {
-							alert(JSON.stringify(r));
-						});
-						dialog.close();
-					}
-				}.bind(this)
-			}).open();
-		},
-		_testAnalyser_handler: function(index) {
-			this.cluster.get(encodeURIComponent( index.name ) + "/_analyze?text=" + encodeURIComponent( prompt( i18n.text("IndexCommand.TextToAnalyze") ) ), function(r) {
-				alert(JSON.stringify(r, true, "  "));
-			});
-		},
-		_deleteIndexAction_handler: function(index) {
-			if( prompt( i18n.text("AliasForm.DeleteAliasMessage", i18n.text("Command.DELETE"), index.name ) ) === i18n.text("Command.DELETE") ) {
-				this.cluster["delete"](encodeURIComponent( index.name ), null, function(r) {
-					alert(JSON.stringify(r));
-					this.fire("redraw");
-				}.bind(this) );
-			}
-		},
-		_shutdownNode_handler: function(node) {
-			if(prompt( i18n.text("IndexCommand.ShutdownMessage", i18n.text("Command.SHUTDOWN"), node.cluster.name ) ) === i18n.text("Command.SHUTDOWN") ) {
-				this.cluster.post( "_cluster/nodes/" + encodeURIComponent( node.name ) + "/_shutdown", null, function(r) {
-					alert(JSON.stringify(r));
-					this.fire("redraw");
-				}.bind(this));
-			}
-		},
-		_deleteAliasAction_handler: function( index, alias ) {
-			if( confirm( i18n.text("Command.DeleteAliasMessage" ) ) ) {
-				var command = {
-					"actions" : [
-						{ "remove" : { "index" : index.name, "alias" : alias.name } }
-					]
-				};
-				this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
-					alert(JSON.stringify(d));
-					this.fire("redraw");
-				}.bind(this) );
-			}
-		},
-
-		_replica_template: function(replica) {
-			var r = replica.replica;
-			return { tag: "DIV",
-				cls: "uiNodesView-replica" + (r.primary ? " primary" : "") + ( " state-" + r.state ),
-				text: r.shard.toString(),
-				onclick: function() { new ui.JsonPanel({
-					json: replica.status || r,
-					title: r.index + "/" + r.node + " [" + r.shard + "]" });
-				}
-			};
-		},
-		_routing_template: function(routing) {
-			var cell = { tag: "TD", cls: "uiNodesView-routing" + (routing.open ? "" : " close"), children: [] };
-			for(var i = 0; i < routing.replicas.length; i++) {
-				if(i % routing.max_number_of_shards === 0 && i > 0) {
-					cell.children.push({ tag: "BR" });
-				}
-				if( routing.replicas[i] ) {
-					cell.children.push(this._replica_template(routing.replicas[i]));
-				} else {
-					cell.children.push( { tag: "DIV", cls: "uiNodesView-nullReplica" } );
-				}
-			}
-			return cell;
-		},
-		_nodeControls_template: function( node ) { return (
-			{ tag: "DIV", cls: "uiNodesView-controls", children: [
-				new ui.MenuButton({
-					label: i18n.text("NodeInfoMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("NodeInfoMenu.ClusterNodeInfo"), onclick: function() { new ui.JsonPanel({ json: node.cluster, title: node.name });} },
-							{ text: i18n.text("NodeInfoMenu.NodeStats"), onclick: function() { new ui.JsonPanel({ json: node.stats, title: node.name });} }
-						]
-					})
-				}),
-				new ui.MenuButton({
-					label: i18n.text("NodeActionsMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("NodeActionsMenu.Shutdown"), onclick: function() { this._shutdownNode_handler(node); }.bind(this) }
-						]
-					})
-				})
-			] }
-		); },
-		_nodeIcon_template: function( node ) {
-			var icon, alt;
-			if( node.name === "Unassigned" ) {
-				icon = "fa-exclamation-triangle";
-				alt = i18n.text( "NodeType.Unassigned" );
-			} else if( node.cluster.settings && "tribe" in node.cluster.settings) {
-				icon = "fa-sitemap";
-				alt = i18n.text("NodeType.Tribe" );
-			} else {
-				icon = "fa-" + (node.master_node ? "star" : "circle") + (node.data_node ? "" : "-o" );
-				alt = i18n.text( node.master_node ? ( node.data_node ? "NodeType.Master" : "NodeType.Coord" ) : ( node.data_node ? "NodeType.Worker" : "NodeType.Client" ) );
-			}
-			return { tag: "TD", title: alt, cls: "uiNodesView-icon", children: [
-				{ tag: "SPAN", cls: "fa fa-2x " + icon }
-			] };
-		},
-		_node_template: function(node) {
-			return { tag: "TR", cls: "uiNodesView-node" + (node.master_node ? " master": ""), children: [
-				this._nodeIcon_template( node ),
-				{ tag: "TH", children: node.name === "Unassigned" ? [
-					{ tag: "H3", text: node.name }
-				] : [
-					{ tag: "H3", text: node.cluster.name },
-					{ tag: "DIV", text: node.cluster.hostname },
-					this.interactive ? this._nodeControls_template( node ) : null
-				] }
-			].concat(node.routings.map(this._routing_template, this))};
-		},
-		_indexHeaderControls_template: function( index ) { return (
-			{ tag: "DIV", cls: "uiNodesView-controls", children: [
-				new ui.MenuButton({
-					label: i18n.text("IndexInfoMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("IndexInfoMenu.Status"), onclick: function() { new ui.JsonPanel({ json: index.status, title: index.name }); } },
-							{ text: i18n.text("IndexInfoMenu.Metadata"), onclick: function() { new ui.JsonPanel({ json: index.metadata, title: index.name }); } }
-						]
-					})
-				}),
-				new ui.MenuButton({
-					label: i18n.text("IndexActionsMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("IndexActionsMenu.NewAlias"), onclick: function() { this._newAliasAction_handler(index); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Refresh"), onclick: function() { this._postIndexAction_handler("_refresh", index, false); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Flush"), onclick: function() { this._postIndexAction_handler("_flush", index, false); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Optimize"), onclick: function () { this._optimizeIndex_handler(index); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Snapshot"), disabled: closed, onclick: function() { this._postIndexAction_handler("_gateway/snapshot", index, false); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Analyser"), onclick: function() { this._testAnalyser_handler(index); }.bind(this) },
-							{ text: (index.state === "close") ? i18n.text("IndexActionsMenu.Open") : i18n.text("IndexActionsMenu.Close"), onclick: function() { this._postIndexAction_handler((index.state === "close") ? "_open" : "_close", index, true); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Delete"), onclick: function() { this._deleteIndexAction_handler(index); }.bind(this) }
-						]
-					})
-				})
-			] }
-		); },
-		_indexHeader_template: function( index ) {
-			var closed = index.state === "close";
-			var line1 = closed ? "index: close" : ( "size: " + (index.status && index.status.primaries && index.status.total ? ut.byteSize_template( index.status.primaries.store.size_in_bytes ) + " (" + ut.byteSize_template( index.status.total.store.size_in_bytes ) + ")" : "unknown" ) );
-			var line2 = closed ? "\u00A0" : ( "docs: " + (index.status && index.status.primaries && index.status.primaries.docs && index.status.total && index.status.total.docs ? index.status.primaries.docs.count.toLocaleString() + " (" + (index.status.total.docs.count + index.status.total.docs.deleted).toLocaleString() + ")" : "unknown" ) );
-			return index.name ? { tag: "TH", cls: (closed ? "close" : ""), children: [
-				{ tag: "H3", text: index.name },
-				{ tag: "DIV", text: line1 },
-				{ tag: "DIV", text: line2 },
-				this.interactive ? this._indexHeaderControls_template( index ) : null
-			] } : [ { tag: "TD" }, { tag: "TH" } ];
-		},
-		_aliasRender_template_none: function( cluster, indices ) {
-			return null;
-		},
-		_aliasRender_template_list: function( cluster, indices ) {
-			return cluster.aliases.length && { tag: "TBODY", children: [
-				{ tag: "TR", children: [
-					{ tag: "TD" }
-				].concat( indices.map( function( index ) {
-					return { tag: "TD", children: index.metadata && index.metadata.aliases.map( function( alias ) {
-						return { tag: "LI", text: alias };
-					} ) };
-				})) }
-			] };
-		},
-		_aliasRender_template_full: function( cluster, indices ) {
-			return cluster.aliases.length && { tag: "TBODY", children: cluster.aliases.map( function(alias, row) {
-				return { tag: "TR", children: [ { tag: "TD" },{ tag: "TD" } ].concat(alias.indices.map(function(index, i) {
-					if (index) {
-						return {
-							tag: "TD",
-							css: { background: "#" + "9ce9c7fc9".substr((row+6)%7,3) },
-							cls: "uiNodesView-hasAlias" + ( alias.min === i ? " min" : "" ) + ( alias.max === i ? " max" : "" ),
-							text: alias.name,
-							children: this.interactive ? [
-								{	tag: 'SPAN',
-									text: i18n.text("General.CloseGlyph"),
-									cls: 'uiNodesView-hasAlias-remove',
-									onclick: this._deleteAliasAction_handler.bind( this, index, alias )
-								}
-							]: null
-						};
-					}	else {
-						return { tag: "TD" };
-					}
-				}, this ) ) };
-			}, this )	};
-		},
-		_main_template: function(cluster, indices) {
-			return { tag: "TABLE", cls: "table uiNodesView", children: [
-				this._styleSheetEl,
-				{ tag: "THEAD", children: [ { tag: "TR", children: indices.map(this._indexHeader_template, this) } ] },
-				this._aliasRenderFunction( cluster, indices ),
-				{ tag: "TBODY", children: cluster.nodes.map(this._node_template, this) }
-			] };
-		}
-
-	});
-
-})( this.app, this.i18n, this.joey );
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var services = app.ns("services");
-
-	// ( master ) master = true, data = true 
-	// ( coordinator ) master = true, data = false
-	// ( worker ) master = false, data = true;
-	// ( client ) master = false, data = false;
-	// http enabled ?
-
-	function nodeSort_name(a, b) {
-		if (!(a.cluster && b.cluster)) {
-			return 0;
-		}
-		return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
-	}
-
-	function nodeSort_addr( a, b ) {
-		if (!(a.cluster && b.cluster)) {
-			return 0;
-		}
-		return a.cluster.transport_address.toString().localeCompare( b.cluster.transport_address.toString() );
-	}
-
-	function nodeSort_type( a, b ) {
-		if (!(a.cluster && b.cluster)) {
-			return 0;
-		}
-		if( a.master_node ) {
-			return -1;
-		} else if( b.master_node ) {
-			return 1;
-		} else if( a.data_node && !b.data_node ) {
-			return -1;
-		} else if( b.data_node && !a.data_node ) {
-			return 1;
-		} else {
-			return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
-		}
-	}
-
-	var NODE_SORT_TYPES = {
-		"Sort.ByName": nodeSort_name,
-		"Sort.ByAddress": nodeSort_addr,
-		"Sort.ByType": nodeSort_type
-	};
-
-	function nodeFilter_none( a ) {
-		return true;
-	}
-
-	function nodeFilter_clients( a ) {
-		return (a.master_node || a.data_node );
-	}
-
-
-	ui.ClusterOverview = ui.Page.extend({
-		defaults: {
-			cluster: null // (reqired) an instanceof app.services.Cluster
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.prefs = services.Preferences.instance();
-			this._clusterState = this.config.clusterState;
-			this._clusterState.on("data", this.draw_handler );
-			this._refreshButton = new ui.RefreshButton({
-				onRefresh: this.refresh.bind(this),
-				onChange: function( btn ) {
-					if( btn.value === -1 ) {
-						this.draw_handler();
-					}
-				}.bind( this )
-			});
-			var nodeSortPref = this.prefs.get("clusterOverview-nodeSort") || Object.keys(NODE_SORT_TYPES)[0];
-			this._nodeSort = NODE_SORT_TYPES[ nodeSortPref ];
-			this._nodeSortMenu = new ui.MenuButton({
-				label: i18n.text( "Preference.SortCluster" ),
-				menu: new ui.SelectMenuPanel({
-					value: nodeSortPref,
-					items: Object.keys( NODE_SORT_TYPES ).map( function( k ) {
-						return { text: i18n.text( k ), value: k };
-					}),
-					onSelect: function( panel, event ) {
-						this._nodeSort = NODE_SORT_TYPES[ event.value ];
-						this.prefs.set("clusterOverview-nodeSort", event.value );
-						this.draw_handler();
-					}.bind(this)
-				})
-			});
-			this._indicesSort = this.prefs.get( "clusterOverview-indicesSort") || "desc";
-			this._indicesSortMenu = new ui.MenuButton({
-				label: i18n.text( "Preference.SortIndices" ),
-				menu: new ui.SelectMenuPanel({
-					value: this._indicesSort,
-					items: [
-						{ value: "desc", text: i18n.text( "SortIndices.Descending" ) },
-						{ value: "asc", text: i18n.text( "SortIndices.Ascending" ) } ],
-					onSelect: function( panel, event ) {
-						this._indicesSort = event.value;
-						this.prefs.set( "clusterOverview-indicesSort", this._indicesSort );
-						this.draw_handler();
-					}.bind(this)
-				})
-			});
-			this._aliasRenderer = this.prefs.get( "clusterOverview-aliasRender" ) || "full";
-			this._aliasMenu = new ui.MenuButton({
-				label: i18n.text( "Preference.ViewAliases" ),
-				menu: new ui.SelectMenuPanel({
-					value: this._aliasRenderer,
-					items: [
-						{ value: "full", text: i18n.text( "ViewAliases.Grouped" ) },
-						{ value: "list", text: i18n.text( "ViewAliases.List" ) },
-						{ value: "none", text: i18n.text( "ViewAliases.None" ) } ],
-					onSelect: function( panel, event ) {
-						this._aliasRenderer = event.value;
-						this.prefs.set( "clusterOverview-aliasRender", this._aliasRenderer );
-						this.draw_handler();
-					}.bind(this)
-				})
-			});
-			this._indexFilter = new ui.TextField({
-				value: this.prefs.get("clusterOverview-indexFilter"),
-				placeholder: i18n.text( "Overview.IndexFilter" ),
-				onchange: function( indexFilter ) {
-					this.prefs.set("clusterOverview-indexFilter", indexFilter.val() );
-					this.draw_handler();
-				}.bind(this)
-			});
-			this.el = $(this._main_template());
-			this.tablEl = this.el.find(".uiClusterOverview-table");
-			this.refresh();
-		},
-		remove: function() {
-			this._clusterState.removeObserver( "data", this.draw_handler );
-		},
-		refresh: function() {
-			this._refreshButton.disable();
-			this._clusterState.refresh();
-		},
-		draw_handler: function() {
-			var data = this._clusterState;
-			var indexFilter;
-			try {
-				var indexFilterRe = new RegExp( this._indexFilter.val() );
-				indexFilter = function(s) { return indexFilterRe.test(s); };
-			} catch(e) {
-				indexFilter = function() { return true; };
-			}
-			var clusterState = data.clusterState;
-			var status = data.status;
-			var nodeStats = data.nodeStats;
-			var clusterNodes = data.clusterNodes;
-			var nodes = [];
-			var indices = [];
-			var cluster = {};
-			var nodeIndices = {};
-			var indexIndices = {}, indexIndicesIndex = 0;
-			function newNode(n) {
-				return {
-					name: n,
-					routings: [],
-					master_node: clusterState.master_node === n
-				};
-			}
-			function newIndex(i) {
-				return {
-					name: i,
-					replicas: []
-				};
-			}
-			function getIndexForNode(n) {
-				return nodeIndices[n] = (n in nodeIndices) ? nodeIndices[n] : nodes.push(newNode(n)) - 1;
-			}
-			function getIndexForIndex(routings, i) {
-				var index = indexIndices[i] = (i in indexIndices) ?
-						(routings[indexIndices[i]] = routings[indexIndices[i]] || newIndex(i)) && indexIndices[i]
-						: ( ( routings[indexIndicesIndex] = newIndex(i) )  && indexIndicesIndex++ );
-				indices[index] = i;
-				return index;
-			}
-			$.each(clusterNodes.nodes, function(name, node) {
-				getIndexForNode(name);
-			});
-
-			var indexNames = [];
-			$.each(clusterState.routing_table.indices, function(name, index){
-				indexNames.push(name);
-			});
-			indexNames.sort();
-			if (this._indicesSort === "desc") indexNames.reverse();
-			indexNames.filter( indexFilter ).forEach(function(name) {
-				var indexObject = clusterState.routing_table.indices[name];
-				$.each(indexObject.shards, function(name, shard) {
-					shard.forEach(function(replica){
-						var node = replica.node;
-						if(node === null) { node = "Unassigned"; }
-						var index = replica.index;
-						var shard = replica.shard;
-						var routings = nodes[getIndexForNode(node)].routings;
-						var indexIndex = getIndexForIndex(routings, index);
-						var replicas = routings[indexIndex].replicas;
-						if(node === "Unassigned" || !indexObject.shards[shard]) {
-							replicas.push({ replica: replica });
-						} else {
-							replicas[shard] = {
-								replica: replica,
-								status: indexObject.shards[shard].filter(function(replica) {
-									return replica.node === node;
-								})[0]
-							};
-						}
-					});
-				});
-			});
-			indices = indices.map(function(index){
-				return {
-					name: index,
-					state: "open",
-					metadata: clusterState.metadata.indices[index],
-					status: status.indices[index]
-				};
-			}, this);
-			$.each(clusterState.metadata.indices, function(name, index) {
-				if(index.state === "close" && indexFilter( name )) {
-					indices.push({
-						name: name,
-						state: "close",
-						metadata: index,
-						status: null
-					});
-				}
-			});
-			nodes.forEach(function(node) {
-				node.stats = nodeStats.nodes[node.name];
-				var cluster = clusterNodes.nodes[node.name];
-				node.cluster = cluster || { name: "<unknown>" };
-				node.data_node = !( cluster && cluster.attributes && cluster.attributes.data === "false" );
-				for(var i = 0; i < indices.length; i++) {
-					node.routings[i] = node.routings[i] || { name: indices[i].name, replicas: [] };
-					node.routings[i].max_number_of_shards = indices[i].metadata.settings["index.number_of_shards"];
-					node.routings[i].open = indices[i].state === "open";
-				}
-			});
-			var aliasesIndex = {};
-			var aliases = [];
-			var indexClone = indices.map(function() { return false; });
-			$.each(clusterState.metadata.indices, function(name, index) {
-				index.aliases.forEach(function(alias) {
-					var aliasIndex = aliasesIndex[alias] = (alias in aliasesIndex) ? aliasesIndex[alias] : aliases.push( { name: alias, max: -1, min: 999, indices: [].concat(indexClone) }) - 1;
-					var indexIndex = indexIndices[name];
-					var aliasRow = aliases[aliasIndex];
-					aliasRow.min = Math.min(aliasRow.min, indexIndex);
-					aliasRow.max = Math.max(aliasRow.max, indexIndex);
-					aliasRow.indices[indexIndex] = indices[indexIndex];
-				});
-			});
-			cluster.aliases = aliases;
-			cluster.nodes = nodes
-				.filter( nodeFilter_none )
-				.sort( this._nodeSort );
-			indices.unshift({ name: null });
-			this._drawNodesView( cluster, indices );
-			this._refreshButton.enable();
-		},
-		_drawNodesView: function( cluster, indices ) {
-			this._nodesView && this._nodesView.remove();
-			this._nodesView = new ui.NodesView({
-				onRedraw: function() {
-					this.refresh();
-				}.bind(this),
-				interactive: ( this._refreshButton.value === -1 ),
-				aliasRenderer: this._aliasRenderer,
-				cluster: this.cluster,
-				data: {
-					cluster: cluster,
-					indices: indices
-				}
-			});
-			this._nodesView.attach( this.tablEl );
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiClusterOverview", children: [
-				new ui.Toolbar({
-					label: i18n.text("Overview.PageTitle"),
-					left: [
-						this._nodeSortMenu,
-						this._indicesSortMenu,
-						this._aliasMenu,
-						this._indexFilter
-					],
-					right: [
-						this._refreshButton
-					]
-				}),
-				{ tag: "DIV", cls: "uiClusterOverview-table" }
-			] };
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( app, i18n, raphael ) {
-
-	var ui = app.ns("ui");
-
-	ui.DateHistogram = ui.AbstractWidget.extend({
-		defaults: {
-			printEl: null, // (optional) if supplied, clicking on elements in the histogram changes the query
-			cluster: null, // (required)
-			query: null,   // (required) the current query
-			spec: null     // (required) // date field spec
-		},
-		init: function() {
-			this._super();
-			this.el = $(this._main_template());
-			this.query = this.config.query.clone();
-			// check if the index/types have changed and rebuild the histogram
-			this.config.query.on("results", function(query) {
-				if(this.queryChanged) {
-					this.buildHistogram(query);
-					this.queryChanged = false;
-				}
-			}.bind(this));
-			this.config.query.on("setIndex", function(query, params) {
-				this.query.setIndex(params.index, params.add);
-				this.queryChanged = true;
-			}.bind(this));
-			this.config.query.on("setType", function(query, params) {
-				this.query.setType(params.type, params.add);
-				this.queryChanged = true;
-			}.bind(this));
-			this.query.search.size = 0;
-			this.query.on("results", this._stat_handler);
-			this.query.on("results", this._aggs_handler);
-			this.buildHistogram();
-		},
-		buildHistogram: function(query) {
-			this.statAggs = this.query.addAggs({
-				stats: { field: this.config.spec.field_name }
-			});
-			this.query.query();
-			this.query.removeAggs(this.statAggs);
-		},
-		_stat_handler: function(query, results) {
-			if(! results.aggregations[this.statAggs]) { return; }
-			this.stats = results.aggregations[this.statAggs];
-			// here we are calculating the approximate range  that will give us less than 121 columns
-			var rangeNames = [ "year", "year", "month", "day", "hour", "minute" ];
-			var rangeFactors = [100000, 12, 30, 24, 60, 60000 ];
-			this.intervalRange = 1;
-			var range = this.stats.max - this.stats.min;
-			do {
-				this.intervalName = rangeNames.pop();
-				var factor = rangeFactors.pop();
-				this.intervalRange *= factor;
-				range = range / factor;
-			} while(range > 70);
-			this.dateAggs = this.query.addAggs({
-				date_histogram : {
-					field: this.config.spec.field_name,
-					interval: this.intervalName
-				}
-			});
-			this.query.query();
-			this.query.removeAggs(this.dateAggs);
-		},
-		_aggs_handler: function(query, results) {
-			if(! results.aggregations[this.dateAggs]) { return; }
-			var buckets = [], range = this.intervalRange;
-			var min = Math.floor(this.stats.min / range) * range;
-			var prec = [ "year", "month", "day", "hour", "minute", "second" ].indexOf(this.intervalName);
-			results.aggregations[this.dateAggs].buckets.forEach(function(entry) {
-				buckets[parseInt((entry.key - min) / range , 10)] = entry.doc_count;
-			}, this);
-			for(var i = 0; i < buckets.length; i++) {
-				buckets[i] = buckets[i] || 0;
-			}
-			this.el.removeClass("loading");
-			var el = this.el.empty();
-			var w = el.width(), h = el.height();
-			var r = raphael(el[0], w, h );
-			var printEl = this.config.printEl;
-			query = this.config.query;
-			r.g.barchart(0, 0, w, h, [buckets], { gutter: "0", vgutter: 0 }).hover(
-				function() {
-					this.flag = r.g.popup(this.bar.x, h - 5, this.value || "0").insertBefore(this);
-				}, function() {
-					this.flag.animate({opacity: 0}, 200, ">", function () {this.remove();});
-				}
-			).click(function() {
-				if(printEl) {
-					printEl.val(window.dateRangeParser.print(min + this.bar.index * range, prec));
-					printEl.trigger("keyup");
-					query.query();
-				}
-			});
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: "uiDateHistogram loading", css: { height: "50px" }, children: [
-				i18n.text("General.LoadingAggs")
-			] }
-		); }
-	});
-
-})( this.app, this.i18n, this.Raphael );
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var services = app.ns("services");
-
-	ui.ClusterConnect = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null
-		},
-		init: function() {
-			this._super();
-			this.prefs = services.Preferences.instance();
-			this.cluster = this.config.cluster;
-			this.el = $.joey(this._main_template());
-			this.cluster.get( "", this._node_handler );
-		},
-		
-		_node_handler: function(data) {
-			if(data) {
-				this.prefs.set("app-base_uri", this.cluster.base_uri);
-			}
-		},
-		
-		_reconnect_handler: function() {
-			var base_uri = this.el.find(".uiClusterConnect-uri").val();
-			$("body").empty().append(new app.App("body", { id: "es", base_uri: base_uri }));
-		},
-		
-		_main_template: function() {
-			return { tag: "SPAN", cls: "uiClusterConnect", children: [
-				{ tag: "INPUT", type: "text", cls: "uiClusterConnect-uri", onkeyup: function( ev ) {
-					if(ev.which === 13) {
-						ev.preventDefault();
-						this._reconnect_handler();
-					}
-				}.bind(this), id: this.id("baseUri"), value: this.cluster.base_uri },
-				{ tag: "BUTTON", type: "button", text: i18n.text("Header.Connect"), onclick: this._reconnect_handler }
-			]};
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var data = app.ns("data");
-
-	var StructuredQuery = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null  // (required) instanceof app.services.Cluster
-		},
-		_baseCls: "uiStructuredQuery",
-		init: function(parent) {
-			this._super();
-			this.selector = new ui.IndexSelector({
-				onIndexChanged: this._indexChanged_handler,
-				cluster: this.config.cluster
-			});
-			this.el = $(this._main_template());
-			this.out = this.el.find("DIV.uiStructuredQuery-out");
-			this.attach( parent );
-		},
-		
-		_indexChanged_handler: function( index ) {
-			this.filter && this.filter.remove();
-			this.filter = new ui.FilterBrowser({
-				cluster: this.config.cluster,
-				index: index,
-				onStartingSearch: function() { this.el.find("DIV.uiStructuredQuery-out").text( i18n.text("General.Searching") ); this.el.find("DIV.uiStructuredQuery-src").hide(); }.bind(this),
-				onSearchSource: this._searchSource_handler,
-				onResults: this._results_handler
-			});
-			this.el.find(".uiStructuredQuery-body").append(this.filter);
-		},
-		
-		_results_handler: function( filter, event ) {
-			var typeMap = {
-				"json": this._jsonResults_handler,
-				"table": this._tableResults_handler,
-				"csv": this._csvResults_handler
-			};
-			typeMap[ event.type ].call( this, event.data, event.metadata );
-		},
-		_jsonResults_handler: function( results ) {
-			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.JsonPretty({ obj: results }));
-		},
-		_csvResults_handler: function( results ) {
-			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.CSVTable({ results: results }));
-		},
-		_tableResults_handler: function( results, metadata ) {
-			// hack up a QueryDataSourceInterface so that StructuredQuery keeps working without using a Query object
-			var qdi = new data.QueryDataSourceInterface({ metadata: metadata, query: new data.Query() });
-			var tab = new ui.Table( {
-				store: qdi,
-				height: 400,
-				width: this.out.innerWidth()
-			} ).attach(this.out.empty());
-			qdi._results_handler(qdi.config.query, results);
-		},
-		
-		_showRawJSON : function() {
-			if($("#rawJsonText").length === 0) {
-				var hiddenButton = $("#showRawJSON");
-				var jsonText = $({tag: "P", type: "p", id: "rawJsonText"});
-				jsonText.text(hiddenButton[0].value);
-				hiddenButton.parent().append(jsonText);
-			}
-		},
-		
-		_searchSource_handler: function(src) {
-			var searchSourceDiv = this.el.find("DIV.uiStructuredQuery-src");
-			searchSourceDiv.empty().append(new app.ui.JsonPretty({ obj: src }));
-			if(typeof JSON !== "undefined") {
-				var showRawJSON = $({ tag: "BUTTON", type: "button", text: i18n.text("StructuredQuery.ShowRawJson"), id: "showRawJSON", value: JSON.stringify(src), onclick: this._showRawJSON });
-				searchSourceDiv.append(showRawJSON);
-			}
-			searchSourceDiv.show();
-		},
-		
-		_main_template: function() {
-			return { tag: "DIV", cls: this._baseCls, children: [
-				this.selector,
-				{ tag: "DIV", cls: "uiStructuredQuery-body" },
-				{ tag: "DIV", cls: "uiStructuredQuery-src", css: { display: "none" } },
-				{ tag: "DIV", cls: "uiStructuredQuery-out" }
-			]};
-		}
-	});
-
-	ui.StructuredQuery = ui.Page.extend({
-		init: function() {
-			this.q = new StructuredQuery( this.config );
-			this.el = this.q.el;
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var data = app.ns("data");
-	var ut = app.ns("ut");
-
-	ui.FilterBrowser = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null,  // (required) instanceof app.services.Cluster
-			index: "" // (required) name of the index to query
-		},
-
-		init: function(parent) {
-			this._super();
-			this._cluster = this.config.cluster;
-			this.el = $(this._main_template());
-			this.filtersEl = this.el.find(".uiFilterBrowser-filters");
-			this.attach( parent );
-			new data.MetaDataFactory({ cluster: this._cluster, onReady: function(metadata, eventData) {
-				this.metadata = metadata;
-				this._createFilters_handler(eventData.originalData.metadata.indices);
-			}.bind(this) });
-		},
-
-		_createFilters_handler: function(data) {
-			var filters = [];
-			function scan_properties(path, obj) {
-				if (obj.properties) {
-					for (var prop in obj.properties) {
-						scan_properties(path.concat(prop), obj.properties[prop]);
-					}
-				} else {
-					// handle multi_field 
-					if (obj.fields) {
-						for (var subField in obj.fields) {
-							filters.push({ path: (path[path.length - 1] !== subField) ? path.concat(subField) : path, type: obj.fields[subField].type, meta: obj.fields[subField] });
-						}
-					} else {
-						filters.push({ path: path, type: obj.type, meta: obj });
-					}
-				}
-			}
-			for(var type in data[this.config.index].mappings) {
-				scan_properties([type], data[this.config.index].mappings[type]);
-			}
-
-			filters.sort( function(a, b) {
-				var x = a.path.join(".");
-				var y = b.path.join(".");
-				return (x < y) ? -1 : (x > y) ? 1 : 0;
-			});
-
-			this.filters = [
-				{ path: ["match_all"], type: "match_all", meta: {} },
-				{ path: ["_all"], type: "_all", meta: {}}
-			].concat(filters);
-
-			this._addFilterRow_handler();
-		},
-		
-		_addFilterRow_handler: function() {
-			this.filtersEl.append(this._filter_template());
-		},
-		
-		_removeFilterRow_handler: function(jEv) {
-			$(jEv.target).closest("DIV.uiFilterBrowser-row").remove();
-			if(this.filtersEl.children().length === 0) {
-				this._addFilterRow_handler();
-			}
-		},
-		
-		_search_handler: function() {
-			var search = new data.BoolQuery();
-			search.setSize( this.el.find(".uiFilterBrowser-outputSize").val() )
-			this.fire("startingSearch");
-			this.filtersEl.find(".uiFilterBrowser-row").each(function(i, row) {
-				row = $(row);
-				var bool = row.find(".bool").val();
-				var field = row.find(".field").val();
-				var op = row.find(".op").val();
-				var value = {};
-				if(field === "match_all") {
-					op = "match_all";
-				} else if(op === "range") {
-					var lowqual = row.find(".lowqual").val(),
-						highqual = row.find(".highqual").val();
-					if(lowqual.length) {
-						value[row.find(".lowop").val()] = lowqual;
-					}
-					if(highqual.length) {
-						value[row.find(".highop").val()] = highqual;
-					}
-				} else if(op === "fuzzy") {
-					var qual = row.find(".qual").val(),
-						fuzzyqual = row.find(".fuzzyqual").val();
-					if(qual.length) {
-						value["value"] = qual;
-					}
-					if(fuzzyqual.length) {
-						value[row.find(".fuzzyop").val()] = fuzzyqual;
-					}
-				} else {
-					value = row.find(".qual").val();
-				}
-				search.addClause(value, field, op, bool);
-			});
-			if(this.el.find(".uiFilterBrowser-showSrc").attr("checked")) {
-				this.fire("searchSource", search.search);
-			}
-			this._cluster.post( this.config.index + "/_search", search.getData(), this._results_handler );
-		},
-		
-		_results_handler: function( data ) {
-			var type = this.el.find(".uiFilterBrowser-outputFormat").val();
-			this.fire("results", this, { type: type, data: data, metadata: this.metadata });
-		},
-		
-		_changeQueryField_handler: function(jEv) {
-			var select = $(jEv.target);
-			var spec = select.children(":selected").data("spec");
-			select.siblings().remove(".op,.qual,.range,.fuzzy");
-			var ops = [];
-			if(spec.type === 'match_all') {
-			} else if(spec.type === '_all') {
-				ops = ["query_string"];
-			} else if(spec.type === 'string' || spec.type === 'text' || spec.type === 'keyword') {
-				ops = ["term", "wildcard", "prefix", "fuzzy", "range", "query_string", "text", "missing"];
-			} else if(spec.type === 'long' || spec.type === 'integer' || spec.type === 'float' ||
-					spec.type === 'byte' || spec.type === 'short' || spec.type === 'double') {
-				ops = ["term", "range", "fuzzy", "query_string", "missing"];
-			} else if(spec.type === 'date') {
-				ops = ["term", "range", "fuzzy", "query_string", "missing"];
-			} else if(spec.type === 'geo_point') {
-				ops = ["missing"];
-			} else if(spec.type === 'ip') {
-				ops = ["term", "range", "fuzzy", "query_string", "missing"];
-			} else if(spec.type === 'boolean') {
-				ops = ["term"]
-			}
-			select.after({ tag: "SELECT", cls: "op", onchange: this._changeQueryOp_handler, children: ops.map(ut.option_template) });
-			select.next().change();
-		},
-		
-		_changeQueryOp_handler: function(jEv) {
-			var op = $(jEv.target), opv = op.val();
-			op.siblings().remove(".qual,.range,.fuzzy");
-			if(opv === 'term' || opv === 'wildcard' || opv === 'prefix' || opv === "query_string" || opv === 'text') {
-				op.after({ tag: "INPUT", cls: "qual", type: "text" });
-			} else if(opv === 'range') {
-				op.after(this._range_template());
-			} else if(opv === 'fuzzy') {
-				op.after(this._fuzzy_template());
-			}
-		},
-		
-		_main_template: function() {
-			return { tag: "DIV", children: [
-				{ tag: "DIV", cls: "uiFilterBrowser-filters" },
-				{ tag: "BUTTON", type: "button", text: i18n.text("General.Search"), onclick: this._search_handler },
-				{ tag: "LABEL", children:
-					i18n.complex("FilterBrowser.OutputType", { tag: "SELECT", cls: "uiFilterBrowser-outputFormat", children: [
-						{ text: i18n.text("Output.Table"), value: "table" },
-						{ text: i18n.text("Output.JSON"), value: "json" },
-						{ text: i18n.text("Output.CSV"), value: "csv" }
-					].map(function( o ) { return $.extend({ tag: "OPTION" }, o ); } ) } )
-				},
-				{ tag: "LABEL", children:
-					i18n.complex("FilterBrowser.OutputSize", { tag: "SELECT", cls: "uiFilterBrowser-outputSize",
-						children: [ "10", "50", "250", "1000", "5000", "25000" ].map( ut.option_template )
-					} )
-				},
-				{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", cls: "uiFilterBrowser-showSrc" }, i18n.text("Output.ShowSource") ] }
-			]};
-		},
-		
-		_filter_template: function() {
-			return { tag: "DIV", cls: "uiFilterBrowser-row", children: [
-				{ tag: "SELECT", cls: "bool", children: ["must", "must_not", "should"].map(ut.option_template) },
-				{ tag: "SELECT", cls: "field", onchange: this._changeQueryField_handler, children: this.filters.map(function(f) {
-					return { tag: "OPTION", data: { spec: f }, value: f.path.join("."), text: f.path.join(".") };
-				})},
-				{ tag: "BUTTON", type: "button", text: "+", onclick: this._addFilterRow_handler },
-				{ tag: "BUTTON", type: "button", text: "-", onclick: this._removeFilterRow_handler }
-			]};
-		},
-		
-		_range_template: function() {
-			return { tag: "SPAN", cls: "range", children: [
-				{ tag: "SELECT", cls: "lowop", children: ["gt", "gte"].map(ut.option_template) },
-				{ tag: "INPUT", type: "text", cls: "lowqual" },
-				{ tag: "SELECT", cls: "highop", children: ["lt", "lte"].map(ut.option_template) },
-				{ tag: "INPUT", type: "text", cls: "highqual" }
-			]};
-		},
-
-		_fuzzy_template: function() {
-			return { tag: "SPAN", cls: "fuzzy", children: [
-				{ tag: "INPUT", cls: "qual", type: "text" },
-				{ tag: "SELECT", cls: "fuzzyop", children: ["max_expansions", "min_similarity"].map(ut.option_template) },
-				{ tag: "INPUT", cls: "fuzzyqual", type: "text" }
-			]};
-		}
-	});
-	
-})( this.jQuery, this.app, this.i18n );
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.IndexSelector = ui.AbstractWidget.extend({
-		init: function(parent) {
-			this._super();
-			this.el = $(this._main_template());
-			this.attach( parent );
-			this.cluster = this.config.cluster;
-			this.update();
-		},
-		update: function() {
-			this.cluster.get( "_stats", this._update_handler );
-		},
-		
-		_update_handler: function(data) {
-			var options = [];
-			var index_names = Object.keys(data.indices).sort();
-			for(var i=0; i < index_names.length; i++) { 
-				name = index_names[i];
-				options.push(this._option_template(name, data.indices[name])); 
-			}
-			this.el.find(".uiIndexSelector-select").empty().append(this._select_template(options));
-			this._indexChanged_handler();
-		},
-		
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiIndexSelector", children: i18n.complex( "IndexSelector.SearchIndexForDocs", { tag: "SPAN", cls: "uiIndexSelector-select" } ) };
-		},
-
-		_indexChanged_handler: function() {
-			this.fire("indexChanged", this.el.find("SELECT").val());
-		},
-
-		_select_template: function(options) {
-			return { tag: "SELECT", children: options, onChange: this._indexChanged_handler };
-		},
-		
-		_option_template: function(name, index) {
-			return  { tag: "OPTION", value: name, text: i18n.text("IndexSelector.NameWithDocs", name, index.primaries.docs.count ) };
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.Header = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null,
-			clusterState: null
-		},
-		_baseCls: "uiHeader",
-		init: function() {
-			this._clusterConnect = new ui.ClusterConnect({
-				cluster: this.config.cluster
-			});
-			var quicks = [
-				{ text: i18n.text("Nav.Info"), path: "" },
-				{ text: i18n.text("Nav.Status"), path: "_stats" },
-				{ text: i18n.text("Nav.NodeStats"), path: "_nodes/stats" },
-				{ text: i18n.text("Nav.ClusterNodes"), path: "_nodes" },
-				{ text: i18n.text("Nav.Plugins"), path: "_nodes/plugins" },
-				{ text: i18n.text("Nav.ClusterState"), path: "_cluster/state" },
-				{ text: i18n.text("Nav.ClusterHealth"), path: "_cluster/health" },
-				{ text: i18n.text("Nav.Templates"), path: "_template" }
-			];
-			var cluster = this.config.cluster;
-			var quickPanels = {};
-			var menuItems = quicks.map( function( item ) {
-				return { text: item.text, onclick: function() {
-					cluster.get( item.path, function( data ) {
-						quickPanels[ item.path ] && quickPanels[ item.path ].el && quickPanels[ item.path ].remove();
-						quickPanels[ item.path ] = new ui.JsonPanel({
-							title: item.text,
-							json: data
-						});
-					} );
-				} };
-			}, this );
-			this._quickMenu = new ui.MenuButton({
-				label: i18n.text("NodeInfoMenu.Title"),
-				menu: new ui.MenuPanel({
-					items: menuItems
-				})
-			});
-			this.el = $.joey( this._main_template() );
-			this.nameEl = this.el.find(".uiHeader-name");
-			this.statEl = this.el.find(".uiHeader-status");
-			this._clusterState = this.config.clusterState;
-			this._clusterState.on("data", function( state ) {
-				var shards = state.status._shards;
-				var colour = state.clusterHealth.status;
-				var name = state.clusterState.cluster_name;
-				this.nameEl.text( name );
-				this.statEl
-					.text( i18n.text("Header.ClusterHealth", colour, shards.successful, shards.total ) )
-					.css( "background", colour );
-			}.bind(this));
-			this.statEl.text( i18n.text("Header.ClusterNotConnected") ).css("background", "grey");
-			this._clusterState.refresh();
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: this._baseCls, children: [
-				this._clusterConnect,
-				{ tag: "SPAN", cls: "uiHeader-name" },
-				{ tag: "SPAN", cls: "uiHeader-status" },
-				{ tag: "H1", text: i18n.text("General.Elasticsearch") },
-				{ tag: "SPAN", cls: "pull-right", children: [
-					this._quickMenu
-				] }
-			] }
-		); }
-	} );
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( $, app, i18n ) {
-	
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.IndexOverview = ui.Page.extend({
-		defaults: {
-			cluster: null
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this._clusterState = this.config.clusterState;
-			this._clusterState.on("data", this._refresh_handler );
-			this.el = $(this._main_template());
-			this._refresh_handler();
-		},
-		remove: function() {
-			this._clusterState.removeObserver( "data", this._refresh_handler );
-		},
-		_refresh_handler: function() {
-			var state = this._clusterState;
-			var view = {
-				indices: acx.eachMap( state.status.indices, function( name, index ) {
-					return {
-						name: name,
-						state: index
-					};
-				}).sort( function( a, b ) {
-					return a.name < b.name ? -1 : 1;
-				})
-			};
-			this._indexViewEl && this._indexViewEl.remove();
-			this._indexViewEl = $( this._indexTable_template( view ) );
-			this.el.find(".uiIndexOverview-table").append( this._indexViewEl );
-		},
-		_newIndex_handler: function() {
-			var fields = new app.ux.FieldCollection({
-				fields: [
-					new ui.TextField({ label: i18n.text("ClusterOverView.IndexName"), name: "_name", require: true }),
-					new ui.TextField({
-						label: i18n.text("ClusterOverview.NumShards"),
-						name: "number_of_shards",
-						value: "5",
-						require: function( val ) { return parseInt( val, 10 ) >= 1; }
-					}),
-					new ui.TextField({
-						label: i18n.text("ClusterOverview.NumReplicas"),
-						name: "number_of_replicas",
-						value: "1",
-						require: function( val ) { return parseInt( val, 10 ) >= 0; }
-					})
-				]
-			});
-			var dialog = new ui.DialogPanel({
-				title: i18n.text("ClusterOverview.NewIndex"),
-				body: new ui.PanelForm({ fields: fields }),
-				onCommit: function(panel, args) {
-					if(fields.validate()) {
-						var data = fields.getData();
-						var name = data["_name"];
-						delete data["_name"];
-						this.config.cluster.put( encodeURIComponent( name ), JSON.stringify({ settings: { index: data } }), function(d) {
-							dialog.close();
-							alert(JSON.stringify(d));
-							this._clusterState.refresh();
-						}.bind(this) );
-					}
-				}.bind(this)
-			}).open();
-		},
-		_indexTable_template: function( view ) { return (
-			{ tag: "TABLE", cls: "table", children: [
-				{ tag: "THEAD", children: [
-					{ tag: "TR", children: [
-						{ tag: "TH" },
-						{ tag: "TH", children: [
-							{ tag: "H3", text: "Size" }
-						] },
-						{ tag: "TH", children: [
-							{ tag: "H3", text: "Docs" }
-						] }
-					] }
-				] },
-				{ tag: "TBODY", cls: "striped", children: view.indices.map( this._index_template, this ) }
-			] }
-		); },
-
-		_index_template: function( index ) { return (
-			{ tag: "TR", children: [
-				{ tag: "TD", children: [
-					{ tag: "H3", text: index.name }
-				] },
-				{ tag: "TD", text: ut.byteSize_template( index.state.primaries.store.size_in_bytes ) + "/" + ut.byteSize_template( index.state.total.store.size_in_bytes ) },
-				{ tag: "TD", text: ut.count_template( index.state.primaries.docs.count ) }
-			] }
-		); },
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiIndexOverview", children: [
-				new ui.Toolbar({
-					label: i18n.text("IndexOverview.PageTitle"),
-					left: [
-						new ui.Button({
-							label: i18n.text("ClusterOverview.NewIndex"),
-							onclick: this._newIndex_handler
-						}),
-					]
-				}),
-				{ tag: "DIV", cls: "uiIndexOverview-table", children: this._indexViewEl }
-			] };
-		}
-
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
-(function( app, i18n ) {
-
-	var ui = app.ns("ui");
-	var services = app.ns("services");
-
-	app.App = ui.AbstractWidget.extend({
-		defaults: {
-			base_uri: null
-		},
-		init: function(parent) {
-			this._super();
-			this.prefs = services.Preferences.instance();
-			this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
-			if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {
-				// XHR request fails if the URL is not ending with a "/"
-				this.base_uri += "/";
-			}
-			if( this.config.auth_user ) {
-				var credentials = window.btoa( this.config.auth_user + ":" + this.config.auth_password );
-				$.ajaxSetup({
-					headers: {
-						"Authorization": "Basic " + credentials
-					}
-				});
-			}
-			this.cluster = new services.Cluster({ base_uri: this.base_uri });
-			this._clusterState = new services.ClusterState({
-				cluster: this.cluster
-			});
-
-			this._header = new ui.Header({ cluster: this.cluster, clusterState: this._clusterState });
-			this.$body = $.joey( this._body_template() );
-			this.el = $.joey(this._main_template());
-			this.attach( parent );
-			this.instances = {};
-			this.el.find(".uiApp-headerMenuItem:first").click();
-			if( this.config.dashboard ) {
-				if( this.config.dashboard === "cluster" ) {
-					var page = this.instances["ClusterOverview"];
-					page._refreshButton.set( 5000 );
-				}
-			}
-		},
-
-		navigateTo: function( type, config, ev ) {
-			if( ev.target.classList.contains( "uiApp-headerNewMenuItem" ) ) {
-				this.showNew( type, config, ev );
-			} else {
-				var ref = type + "0";
-				if(! this.instances[ ref ]) {
-					this.createPage( type, 0, config );
-				}
-				this.show( ref, ev );
-			}
-		},
-
-		createPage: function( type, id, config ) {
-			var page = this.instances[ type + id ] = new ui[ type ]( config );
-			this.$body.append( page );
-			return page;
-		},
-
-		show: function( ref, ev ) {
-			$( ev.target ).closest("DIV.uiApp-headerMenuItem").addClass("active").siblings().removeClass("active");
-			for(var p in this.instances) {
-				this.instances[p][ p === ref ? "show" : "hide" ]();
-			}
-		},
-
-		showNew: function( type, config, jEv ) {
-			var ref, page, $tab,
-				type_index = 0;
-
-			while ( ! page ) {
-				ref = type + ( ++type_index );
-				if (! ( ref in this.instances ) ) {
-					page = this.createPage( type, type_index, config );
-				}
-			}
-
-			// Add the tab and its click handlers
-			$tab = $.joey({
-				tag: "DIV",
-				cls: "uiApp-headerMenuItem pull-left",
-				text: i18n.text("Nav." + type ) + " " + type_index,
-				onclick: function( ev ) { this.show( ref, ev ); }.bind(this),
-				children: [
-					{ tag: "A", text: " [-]", onclick: function (ev) {
-						$tab.remove();
-						page.remove();
-						delete this.instances[ ref ];
-					}.bind(this) }
-				]
-			});
-
-			$('.uiApp-headerMenu').append( $tab );
-			$tab.trigger("click");
-		},
-
-		_openAnyRequest_handler: function(ev) { this.navigateTo("AnyRequest", { cluster: this.cluster }, ev ); },
-		_openStructuredQuery_handler: function(ev) { this.navigateTo("StructuredQuery", { cluster: this.cluster }, ev ); },
-		_openBrowser_handler: function(ev) { this.navigateTo("Browser", { cluster: this.cluster }, ev );  },
-		_openClusterOverview_handler: function(ev) { this.navigateTo("ClusterOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
-		_openIndexOverview_handler: function(ev) { this.navigateTo("IndexOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
-
-		_body_template: function() { return (
-			{ tag: "DIV", id: this.id("body"), cls: "uiApp-body" }
-		); },
-
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiApp", children: [
-				{ tag: "DIV", id: this.id("header"), cls: "uiApp-header", children: [
-					this._header,
-					{ tag: "DIV", cls: "uiApp-headerMenu", children: [
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Overview"), onclick: this._openClusterOverview_handler },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Indices"), onclick: this._openIndexOverview_handler },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Browser"), onclick: this._openBrowser_handler },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.StructuredQuery"), onclick: this._openStructuredQuery_handler, children: [
-							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
-						] },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.AnyRequest"), onclick: this._openAnyRequest_handler, children: [
-							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
-						] },
-					]}
-				]},
-				this.$body
-			]};
-		}
-		
-	});
-
-})( this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/favicon.png b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/favicon.png
deleted file mode 100644
index f433ec6..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/favicon.png
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/loading.gif b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/loading.gif
deleted file mode 100644
index f001e23..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/loading.gif
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/reset.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/reset.css
deleted file mode 100644
index 29a5f1b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/base/reset.css
+++ /dev/null
@@ -1,44 +0,0 @@
-BODY {
-	font-family: Verdana, sans-serif;
-	font-size: 73%;
-	padding: 0;
-	margin: 0;
-}
-
-INPUT, SELECT, TEXTAREA {
-	border: 1px solid #cecece;
-	padding: 1px 3px;
-	background: white;
-}
-
-SELECT {
-	padding: 0;
-}
-
-.saf SELECT {
-	margin-top: 0;
-	margin-bottom: 0;
-}
-
-TEXTAREA, CODE {
-	font-family: monospace;
-	font-size: 13px;
-}
-
-BUTTON::-moz-focus-inner {
-	border: none;
-}
-
-.pull-left {
-	float: left;
-}
-
-.pull-right {
-	float: right;
-}
-
-.loading  {
-	background-image: url(loading.gif);
-	background-repeat: no-repeat;
-	text-indent: 20px;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf
deleted file mode 100644
index 8b0f54e..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/FontAwesome.otf
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot
deleted file mode 100644
index 7c79c6a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg
deleted file mode 100644
index 45fdf33..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,414 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="fontawesomeregular" horiz-adv-x="1536" >
-<font-face units-per-em="1792" ascent="1536" descent="-256" />
-<missing-glyph horiz-adv-x="448" />
-<glyph unicode=" "  horiz-adv-x="448" />
-<glyph unicode="&#x09;" horiz-adv-x="448" />
-<glyph unicode="&#xa0;" horiz-adv-x="448" />
-<glyph unicode="&#xa8;" horiz-adv-x="1792" />
-<glyph unicode="&#xa9;" horiz-adv-x="1792" />
-<glyph unicode="&#xae;" horiz-adv-x="1792" />
-<glyph unicode="&#xb4;" horiz-adv-x="1792" />
-<glyph unicode="&#xc6;" horiz-adv-x="1792" />
-<glyph unicode="&#x2000;" horiz-adv-x="768" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="768" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="512" />
-<glyph unicode="&#x2005;" horiz-adv-x="384" />
-<glyph unicode="&#x2006;" horiz-adv-x="256" />
-<glyph unicode="&#x2007;" horiz-adv-x="256" />
-<glyph unicode="&#x2008;" horiz-adv-x="192" />
-<glyph unicode="&#x2009;" horiz-adv-x="307" />
-<glyph unicode="&#x200a;" horiz-adv-x="85" />
-<glyph unicode="&#x202f;" horiz-adv-x="307" />
-<glyph unicode="&#x205f;" horiz-adv-x="384" />
-<glyph unicode="&#x2122;" horiz-adv-x="1792" />
-<glyph unicode="&#x221e;" horiz-adv-x="1792" />
-<glyph unicode="&#x2260;" horiz-adv-x="1792" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
-<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
-<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
-<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
-<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
-<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
-<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
-<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
-<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
-<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
-<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
-<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
-<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
-<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
-<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
-<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
-<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
-<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
-<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
-<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
-<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
-<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
-<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
-<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
-<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
-<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
-<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
-<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
-<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
-<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
-<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
-<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
-<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
-<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
-<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
-<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
-<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
-<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
-<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
-<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
-<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
-<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
-<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
-<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
-<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
-<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
-<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
-<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
-<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
-<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
-<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
-<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
-<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
-<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
-<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
-<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
-<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
-<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
-<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
-<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
-<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
-<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
-<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
-<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
-<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
-<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
-<glyph unicode="&#xf116;" horiz-adv-x="1792" />
-<glyph unicode="&#xf117;" horiz-adv-x="1792" />
-<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
-<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
-<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
-<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
-<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
-<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
-<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
-<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
-<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
-<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
-<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
-<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
-<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
-<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
-<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
-<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
-<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
-<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
-<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
-<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
-<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
-<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
-<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
-<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
-<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
-<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
-<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
-<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
-<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
-<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
-<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
-<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
-<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
-<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
-<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
-<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
-<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
-<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
-<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
-<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
-<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
-<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
-<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
-<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
-<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
-<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
-<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
-<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
-<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
-<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
-<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
-<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
-<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
-<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
-<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
-<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
-<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
-<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
-<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
-<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
-<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
-<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
-<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
-<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
-<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
-<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf197;" horiz-adv-x="1792" />
-<glyph unicode="&#xf198;" horiz-adv-x="1792" />
-<glyph unicode="&#xf199;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19a;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19b;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19c;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19d;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19e;" horiz-adv-x="1792" />
-<glyph unicode="&#xf500;" horiz-adv-x="1792" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf
deleted file mode 100644
index e89738d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff
deleted file mode 100644
index 8c1748a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/fonts/fontawesome-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/i18n.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/i18n.js
deleted file mode 100644
index de0fc51..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/i18n.js
+++ /dev/null
@@ -1,93 +0,0 @@
-(function() {
-	/**
-	 * provides text formatting and i18n key storage features<br>
-	 * implements most of the Sun Java MessageFormat functionality.
-	 * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html" target="sun">Sun's Documentation</a>
-	 */
-
-	var keys = {};
-
-	var format = function(message, args) {
-		var substitute = function() {
-			var format = arguments[1].split(',');
-			var substr = escape(args[format.shift()]);
-			if(format.length === 0) {
-				return substr; // simple substitution eg {0}
-			}
-			switch(format.shift()) {
-				case "number" : return (new Number(substr)).toLocaleString();
-				case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch
-				case "time" : return (new Date(+substr)).toLocaleTimeString(); //  eg i18n.text("Key", +(new Date())); for current time
-			}
-			var styles = format.join("").split("|").map(function(style) {
-				return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/);
-			});
-			var match = styles[0][3];
-			for(var i=0; i<styles.length; i++) {
-				if((styles[i][2] === "#" && (+styles[i][1]) === (+substr)) ||
-						(styles[i][2] === "<" && ((+styles[i][1]) < (+substr)))) {
-					match = styles[i][3];
-				}
-			}
-			return match;
-		};
-
-		return message && message.replace(/'(')|'([^']+)'|([^{']+)|([^']+)/g, function(x, sq, qs, ss, sub) {
-			do {} while(sub && (sub !== (sub = (sub.replace(/\{([^{}]+)\}/, substitute)))));
-			return sq || qs || ss || unescape(sub);
-		});
-	};
-
-	this.i18n = {
-
-		setKeys: function(strings) {
-			for(var key in strings) {
-				keys[key] = strings[key];
-			}
-		},
-
-		text: function() {
-			var args = Array.prototype.slice.call(arguments),
-				key = keys[args.shift()];
-			if(args.length === 0) {
-				return key;
-			}
-			return format(key, args);
-		},
-
-		complex: function() {
-			var args = Array.prototype.slice.call(arguments),
-				key = keys[args.shift()],
-				ret = [],
-				replacer = function(x, pt, sub) { ret.push(pt || args[+sub]); return ""; };
-			do {} while(key && key !== (key = key.replace(/([^{]+)|\{(\d+)\}/, replacer )));
-			return ret;
-		}
-
-	};
-
-})();
-
-(function() {
-	var nav = window.navigator;
-	var userLang = ( nav.languages && nav.languages[0] ) || nav.language || nav.userLanguage;
-	var scripts = document.getElementsByTagName('script');
-	var data = scripts[ scripts.length - 1].dataset;
-	if( ! data["langs"] ) {
-		return;
-	}
-	var langs = data["langs"].split(/\s*,\s*/);
-	var script0 = scripts[0];
-	function install( lang ) {
-		var s = document.createElement("script");
-		s.src = data["basedir"] + "/" + lang + '_strings.js';
-		s.async = false;
-		script0.parentNode.appendChild(s);
-		script0 = s;
-	}
-
-	install( langs.shift() ); // always install primary language
-	userLang && langs
-		.filter( function( lang ) { return userLang.indexOf( lang ) === 0; } )
-		.forEach( install );
-}());
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/index.html b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/index.html
deleted file mode 100644
index 4e07bab..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/index.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-	<head>
-		<meta charset="UTF-8">
-		<title>elasticsearch-head</title>
-		<link rel="stylesheet" href="base/reset.css">
-		<link rel="stylesheet" href="vendor.css">
-		<link rel="stylesheet" href="app.css">
-		<script src="i18n.js" data-baseDir="lang" data-langs="en,fr,pt,zh,tr"></script>
-		<script src="vendor.js"></script>
-		<script src="app.js"></script>
-		<script>
-			window.onload = function() {
-				if(location.href.contains("/_plugin/")) {
-					var base_uri = location.href.replace(/_plugin\/.*/, '');
-				}
-				var args = location.search.substring(1).split("&").reduce(function(r, p) {
-					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
-				}, {});
-				new app.App("body", {
-					id: "es",
-					base_uri: args["base_uri"] || base_uri,
-					auth_user : args["auth_user"] || "",
-					auth_password : args["auth_password"],
-					dashboard: args["dashboard"]
-				});
-			};
-		</script>
-		<link rel="icon" href="base/favicon.png" type="image/png">
-	</head>
-	<body></body>
-</html>
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/en_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/en_strings.js
deleted file mode 100644
index 3679dfb..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/en_strings.js
+++ /dev/null
@@ -1,177 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "Loading Aggregations...",
-	"General.Searching": "Searching...",
-	"General.Search": "Search",
-	"General.Help": "Help",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Refresh",
-	"General.ManualRefresh": "Manual Refresh",
-	"General.RefreshQuickly": "Refresh quickly",
-	"General.Refresh5seconds": "Refresh every 5 seconds",
-	"General.Refresh1minute": "Refresh every minute",
-	"AliasForm.AliasName": "Alias Name",
-	"AliasForm.NewAliasForIndex": "New Alias for {0}",
-	"AliasForm.DeleteAliasMessage": "type ''{0}'' to delete {1}. There is no undo",
-	"AnyRequest.DisplayOptions" : "Display Options",
-	"AnyRequest.AsGraph" : "Graph Results",
-	"AnyRequest.AsJson" : "Show Raw JSON",
-	"AnyRequest.AsTable" : "Show Search Results Table",
-	"AnyRequest.History" : "History",
-	"AnyRequest.RepeatRequest" : "Repeat Request",
-	"AnyRequest.RepeatRequestSelect" : "Repeat request every ",
-	"AnyRequest.Transformer" : "Result Transformer",
-	"AnyRequest.Pretty": "Pretty",
-	"AnyRequest.Query" : "Query",
-	"AnyRequest.Request": "Request",
-	"AnyRequest.Requesting": "Requesting...",
-	"AnyRequest.ValidateJSON": "Validate JSON",
-	"Browser.Title": "Browser",
-	"Browser.ResultSourcePanelTitle": "Result Source",
-	"Command.DELETE": "DELETE",
-	"Command.SHUTDOWN": "SHUTDOWN",
-	"Command.DeleteAliasMessage": "Delete Alias?",
-	"ClusterOverView.IndexName": "Index Name",
-	"ClusterOverview.NumShards": "Number of Shards",
-	"ClusterOverview.NumReplicas": "Number of Replicas",
-	"ClusterOverview.NewIndex": "New Index",
-	"IndexActionsMenu.Title": "Actions",
-	"IndexActionsMenu.NewAlias": "New Alias...",
-	"IndexActionsMenu.Refresh": "Refresh",
-	"IndexActionsMenu.Flush": "Flush",
-	"IndexActionsMenu.Optimize": "Optimize...",
-	"IndexActionsMenu.Snapshot": "Gateway Snapshot",
-	"IndexActionsMenu.Analyser": "Test Analyser",
-	"IndexActionsMenu.Open": "Open",
-	"IndexActionsMenu.Close": "Close",
-	"IndexActionsMenu.Delete": "Delete...",
-	"IndexInfoMenu.Title": "Info",
-	"IndexInfoMenu.Status": "Index Status",
-	"IndexInfoMenu.Metadata": "Index Metadata",
-	"IndexCommand.TextToAnalyze": "Text to Analyse",
-	"IndexCommand.ShutdownMessage": "type ''{0}'' to shutdown {1}. Node can NOT be restarted from this interface",
-	"IndexOverview.PageTitle": "Indices Overview",
-	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
-	"IndexSelector.SearchIndexForDocs": "Search {0} for documents where:",
-	"FilterBrowser.OutputType": "Output Results: {0}",
-	"FilterBrowser.OutputSize": "Number of Results: {0}",
-	"Header.ClusterHealth": "cluster health: {0} ({1} of {2})",
-	"Header.ClusterNotConnected": "cluster health: not connected",
-	"Header.Connect": "Connect",
-	"Nav.AnyRequest": "Any Request",
-	"Nav.Browser": "Browser",
-	"Nav.ClusterHealth": "Cluster Health",
-	"Nav.ClusterState": "Cluster State",
-	"Nav.ClusterNodes": "Nodes Info",
-	"Nav.Info": "Info",
-	"Nav.NodeStats": "Nodes Stats",
-	"Nav.Overview": "Overview",
-	"Nav.Indices": "Indices",
-	"Nav.Plugins": "Plugins",
-	"Nav.Status": "Indices Stats",
-	"Nav.Templates": "Templates",
-	"Nav.StructuredQuery": "Structured Query",
-	"NodeActionsMenu.Title": "Actions",
-	"NodeActionsMenu.Shutdown": "Shutdown...",
-	"NodeInfoMenu.Title": "Info",
-	"NodeInfoMenu.ClusterNodeInfo": "Cluster Node Info",
-	"NodeInfoMenu.NodeStats": "Node Stats",
-	"NodeType.Client": "Client Node",
-	"NodeType.Coord": "Coordinator",
-	"NodeType.Master": "Master Node",
-	"NodeType.Tribe": "Tribe Node",
-	"NodeType.Worker": "Worker Node",
-	"NodeType.Unassigned": "Unassigned",
-	"OptimizeForm.OptimizeIndex": "Optimize {0}",
-	"OptimizeForm.MaxSegments": "Maximum # Of Segments",
-	"OptimizeForm.ExpungeDeletes": "Only Expunge Deletes",
-	"OptimizeForm.FlushAfter": "Flush After Optimize",
-	"OptimizeForm.WaitForMerge": "Wait For Merge",
-	"Overview.PageTitle" : "Cluster Overview",
-	"Output.JSON": "JSON",
-	"Output.Table": "Table",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "Show query source",
-	"Preference.SortCluster": "Sort Cluster",
-	"Sort.ByName": "By Name",
-	"Sort.ByAddress": "By Address",
-	"Sort.ByType": "By Type",
-	"Preference.SortIndices": "Sort Indices",
-	"SortIndices.Descending": "Descending",
-	"SortIndices.Ascending": "Ascending",
-	"Preference.ViewAliases": "View Aliases",
-	"ViewAliases.Grouped": "Grouped",
-	"ViewAliases.List": "List",
-	"ViewAliases.None": "None",
-	"Overview.IndexFilter": "Index Filter",
-	"TableResults.Summary": "Searched {0} of {1} shards. {2} hits. {3} seconds",
-	"QueryFilter.AllIndices": "All Indices",
-	"QueryFilter.AnyValue": "any",
-	"QueryFilter-Header-Indices": "Indices",
-	"QueryFilter-Header-Types": "Types",
-	"QueryFilter-Header-Fields": "Fields",
-	"QueryFilter.DateRangeHint.from": "From : {0}",
-	"QueryFilter.DateRangeHint.to": "  To : {0}",
-	"Query.FailAndUndo": "Query Failed. Undoing last changes",
-	"StructuredQuery.ShowRawJson": "Show Raw JSON"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>The Result Transformer can be used to post process the raw json results from a request into a more useful format.</p>\
-		<p>The transformer should contain the body of a javascript function. The return value from the function becomes the new value passed to the json printer</p>\
-		<p>Example:<br>\
-		  <code>return root.hits.hits[0];</code> would traverse a result set to show just the first match<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> would return the total memory used across an entire cluster<br></p>\
-		<p>The following functions are available and can be useful processing arrays and objects<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>When Repeat Request is running, an extra parameter called prev is passed to the transformation function. This allows comparisons, and cumulative graphing</p>\
-		<p>Example:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> would return the load average on the first cluster node over the last minute\
-		This could be fed into the Graph to produce a load graph for the node\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>Raw Json: shows complete results of the query and transformation in raw JSON format </p>\
-		<p>Graph Results: To produce a graph of your results, use the result transformer to produce an array of values</p>\
-		<p>Search Results Table: If your query is a search, you can display the results of the search in a table.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Date fields accept a natural language query to produce a From and To date that form a range that the results are queried over.</p>\
-		<p>The following formats are supported:</p>\
-		<ul>\
-			<li><b>Keywords / Key Phrases</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				searches for dates matching the keyword. <code>last year</code> would search all of last year.</li>\
-			<li><b>Ranges</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (spaces optional, many synonyms for range qualifiers)<br>\
-				Create a search range centered on <code>now</code> extending into the past and future by the amount specified.</li>\
-			<li><b>DateTime and Partial DateTime</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				these formats specify a specific date range. <code>2011</code> would search the whole of 2011, while <code>2011-01-18 12:32:45</code> would only search for results in that 1 second range</li>\
-			<li><b>Time and Time Partials</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				these formats search for a particular time during the current day. <code>12:32</code> would search that minute during today</li>\
-			<li><b>Date Ranges</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				A Date Range is created by specifying two dates in any format (Keyword / DateTime / Time) separated by &lt; or -&gt; (both do the same thing). If either end of the date range is missing, it is the same as having no constraint in that direction.</li>\
-			<li><b>Date Range using Offset</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Searches the specified date including the range in the direction specified.</li>\
-			<li><b>Anchored Ranges</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Similar to above except the range is extend in both directions from the anchor date</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js
deleted file mode 100644
index 2cc9bbb..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/fr_strings.js
+++ /dev/null
@@ -1,164 +0,0 @@
-i18n.setKeys({
-//	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs" : "Chargement des facettes...",
-	"General.Searching": "Recherche en cours...",
-	"General.Search": "Recherche",
-	"General.Help": "Aide",
-//	"General.HelpGlyph": "?",
-//	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Rafraîchir",
-	"General.ManualRefresh": "Rafraîchissement manuel",
-	"General.RefreshQuickly": "Rafraîchissement rapide",
-	"General.Refresh5seconds": "Rafraîchissement toutes les 5 secondes",
-	"General.Refresh1minute": "Rafraîchissement toutes les minutes",
-	"AliasForm.AliasName": "Alias",
-	"AliasForm.NewAliasForIndex": "Nouvel Alias pour {0}",
-	"AliasForm.DeleteAliasMessage": "Entrez ''{0}'' pour effacer {1}. Attention, action irréversible.",
-	"AnyRequest.DisplayOptions" : "Options d'affichage",
-	"AnyRequest.AsGraph" : "En graphe",
-	"AnyRequest.AsJson" : "En JSON brut",
-	"AnyRequest.AsTable" : "En tableau",
-	"AnyRequest.History" : "Historique",
-	"AnyRequest.RepeatRequest" : "Répétition automatique de la requête",
-	"AnyRequest.RepeatRequestSelect" : "Répéter la requête toutes les ",
-	"AnyRequest.Transformer" : "Transformation des résultats",
-//	"AnyRequest.Pretty": "Pretty",
-	"AnyRequest.Query" : "Recherche",
-	"AnyRequest.Request": "Requête",
-	"AnyRequest.Requesting": "Requête en cours...",
-	"AnyRequest.ValidateJSON": "Valider le JSON",
-	"Browser.Title": "Navigateur",
-	"Browser.ResultSourcePanelTitle": "Résultat au format JSON",
-	"Command.DELETE": "SUPPRIMER",
-	"Command.SHUTDOWN": "ETEINDRE",
-	"Command.DeleteAliasMessage": "Supprimer l'Alias?",
-	"ClusterOverView.IndexName": "Index",
-	"ClusterOverview.NumShards": "Nombre de shards",
-	"ClusterOverview.NumReplicas": "Nombre de replica",
-	"ClusterOverview.NewIndex": "Nouvel Index",
-//	"IndexActionsMenu.Title": "Actions",
-	"IndexActionsMenu.NewAlias": "Nouvel Alias...",
-	"IndexActionsMenu.Refresh": "Rafraîchir",
-	"IndexActionsMenu.Flush": "Flusher",
-	"IndexActionsMenu.Optimize": "Optimiser...",
-	"IndexActionsMenu.Snapshot": "Dupliquer l'index (Snapshot)",
-	"IndexActionsMenu.Analyser": "Tester un analyseur",
-	"IndexActionsMenu.Open": "Ouvrir",
-	"IndexActionsMenu.Close": "Fermer",
-	"IndexActionsMenu.Delete": "Effacer...",
-//	"IndexInfoMenu.Title": "Info",
-	"IndexInfoMenu.Status": "Etat de l'Index",
-	"IndexInfoMenu.Metadata": "Métadonnées de l'Index",
-	"IndexCommand.TextToAnalyze": "Texte à analyser",
-	"IndexCommand.ShutdownMessage": "Entrez ''{0}'' pour éteindre {1}. Le noeud NE PEUT PAS être redémarré depuis cette interface.",
-//	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
-	"IndexSelector.SearchIndexForDocs": "Chercher dans {0} les documents correspondant à",
-	"FilterBrowser.OutputType": "Format d'affichage des résultats {0}",
-	"FilterBrowser.OutputSize": "Nombre de Résultats: {0}",
-	"Header.ClusterHealth": "Santé du cluster: {0} ({1} {2})",
-	"Header.ClusterNotConnected": "Santé du cluster: non connecté",
-	"Header.Connect": "Se connecter",
-	"Nav.AnyRequest": "Autres requêtes",
-	"Nav.StructuredQuery": "Requêtes structurées",
-	"Nav.Browser": "Navigateur",
-	"Nav.ClusterHealth": "Santé du cluster",
-	"Nav.ClusterState": "Etat du cluster",
-	"Nav.ClusterNodes": "Noeuds du cluster",
-//	"Nav.Info": "Info",
-	"Nav.NodeStats": "Statistiques sur les noeuds",
-	"Nav.Overview": "Aperçu",
-	"Nav.Indices": "Index",
-	"Nav.Plugins": "Plugins",
-	"Nav.Status": "Etat",
-	"Nav.Templates": "Templates",
-	"Nav.StructuredQuery": "Recherche Structurée",
-//	"NodeActionsMenu.Title": "Actions",
-	"NodeActionsMenu.Shutdown": "Eteindre...",
-//	"NodeInfoMenu.Title": "Info",
-	"NodeInfoMenu.ClusterNodeInfo": "Infos sur le noeud du cluster",
-	"NodeInfoMenu.NodeStats": "Statistiques du noeud",
-	"NodeType.Client": "Noeud Client",
-	"NodeType.Coord": "Coordinateur",
-	"NodeType.Master": "Noeud Master",
-	"NodeType.Tribe": "Noeud Tribe",
-	"NodeType.Worker": "Noeud Worker",
-	"NodeType.Unassigned": "Non assigné",
-	"OptimizeForm.OptimizeIndex": "Optimiser {0}",
-	"OptimizeForm.MaxSegments": "Nombre maximum de segments",
-	"OptimizeForm.ExpungeDeletes": "Seulement purger les suppressions",
-	"OptimizeForm.FlushAfter": "Flusher après l'optimisation",
-	"OptimizeForm.WaitForMerge": "Attendre la fin de la fusion",
-	"Overview.PageTitle" : "Aperçu du cluster",
-//	"Output.JSON": "JSON",
-	"Output.Table": "Tableau",
-	"Output.ShowSource": "Voir la requête source",
-    "TableResults.Summary": "Recherche sur {0} des {1} shards. {2} résultats. {3} secondes",
-	"QueryFilter.AllIndices": "Tous les index",
-	"QueryFilter.AnyValue": "Tout",
-	"QueryFilter-Header-Indices": "Index",
-//	"QueryFilter-Header-Types": "Types",
-	"QueryFilter-Header-Fields": "Champs",
-	"QueryFilter.DateRangeHint.from": "De : {0}",
-	"QueryFilter.DateRangeHint.to": "  A : {0}",
-	"Query.FailAndUndo": "Requête en échec. Annulation des dernières modifications.",
-	"StructuredQuery.ShowRawJson": "Voir le JSON brut"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>Le transformateur de résultats peut être utilisé pour modifier a posteriori les résultats JSON bruts dans un format plus utile.</p>\
-		<p>Le transformateur devrait contenir le corps d'une fonction javascript. La valeur de retour de la fonction devient la nouvelle valeur qui sera passée à l'afficheur des documents JSON.</p>\
-		<p>Exemple:<br>\
-		  <code>return root.hits.hits[0];</code> ne renverra que le premier élément de l'ensemble des résultats.<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> retournera la mémoire totale utilisée dans l'ensemble du cluster.<br></p>\
-		<p>Les fonctions suivantes sont disponibles et peuvent vous être utiles pour travailler sur les tableaux et les objets:<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>Lorsque vous activez la répétition automatique de la requête, un paramètre supplémentaire nommé prev est passé à la fonction de transformation. Cela permet les comparaisons et les graphes cumulatifs.</p>\
-		<p>Exemple:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> retournera la charge moyenne du premier noeud du cluster pour la dernière minute écoulée.\
-		Cela peut alimenter ensuite le graphe pour produire un graphe de charge du noeud.\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>En JSON brut: affiche les résultats complets de la recherche éventuellement transformée au format JSON brut.</p>\
-		<p>En graphe: pour fabriquer un graphe de vos résultats, utilsez la transformation de résultats pour générer un tableau de valeurs.</p>\
-		<p>En tableau: si votre requête est une recherche, vous pouvez alors afficher les résultats dans un tableau.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Les champs Date acceptent une requête en langage naturel pour produire un écart de date (from/to) correspondant.</p>\
-		<p>Les formats suivants sont acceptés :</p>\
-		<ul>\
-			<li><b>Mots clés</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				Cherchera pour des dates correspondant au mot clé. <code>last year</code> cherchera sur toute l'année précédente.</li>\
-			<li><b>Ecarts</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (les espaces sont optionnels et il existe beaucoup de synonymes pour qualifier les écarts)<br>\
-				Créé un écart de date basé sur l'heure courante (maintenant) avec plus ou moins l'écart indiqué.</li>\
-			<li><b>Dates et Dates partielles</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				Ces formats indiquent un écart de date spécifique. <code>2011</code> cherchera sur toute l'année 2011, alors que <code>2011-01-18 12:32:45</code> ne cherchera que pour la date précise à la seconde près.</li>\
-			<li><b>Heures et heures partielles</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				Ces formats indiquent un espace de temps pour la date du jour. <code>12:32</code> cherchera les éléments d'aujourd'hui à cette minute précise.</li>\
-			<li><b>Ecart de Date</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				Un écart de date est créé en spécifiant deux dates dans n'importe lequel des formats précédents (Mot clé / Dates / Heures) séparées par &lt; ou -&gt; (les deux produisent le même effet). Si la date de fin n'est pas indiquée, alors il n'y aura aucune contrainte de fin.</li>\
-			<li><b>Ecart de date avec décalage</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Cherche en incluant un décalage de la date dans la direction indiquée.</li>\
-			<li><b>Ecart de date avec bornes</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Similaire à ci-dessus excepté que le décalage est appliqué dans les deux sens à partir de la date indiquée.</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js
deleted file mode 100644
index d4b6abf..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/pt_strings.js
+++ /dev/null
@@ -1,174 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "Carregando Facetas...",
-	"General.Searching": "Buscando...",
-	"General.Search": "Busca",
-	"General.Help": "Ajuda",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Atualizar",
-	"General.ManualRefresh": "Atualização Manual",
-	"General.RefreshQuickly": "Atualização rápida",
-	"General.Refresh5seconds": "Atualização a cada 5 segundos",
-	"General.Refresh1minute": "Atualização a cada minuto",
-	"AliasForm.AliasName": "Apelido",
-	"AliasForm.NewAliasForIndex": "Novo apelido para {0}",
-	"AliasForm.DeleteAliasMessage": "digite ''{0}'' para deletar {1}. Não há como voltar atrás",
-	"AnyRequest.DisplayOptions" : "Mostrar Opções",
-	"AnyRequest.AsGraph" : "Mostrar como gráfico",
-	"AnyRequest.AsJson" : "Mostrar JSON bruto",
-	"AnyRequest.AsTable" : "Mostrar tabela de resultados da consulta",
-	"AnyRequest.History" : "Histórico",
-	"AnyRequest.RepeatRequest" : "Refazer requisição",
-	"AnyRequest.RepeatRequestSelect" : "Repetir requisição a cada ",
-	"AnyRequest.Transformer" : "Transformador de resultado",
-	"AnyRequest.Pretty": "Amigável",
-	"AnyRequest.Query" : "Consulta",
-	"AnyRequest.Request": "Requisição",
-	"AnyRequest.Requesting": "Realizando requisição...",
-	"AnyRequest.ValidateJSON": "Validar JSON",
-	"Browser.Title": "Navegador",
-	"Browser.ResultSourcePanelTitle": "Resultado",
-	"Command.DELETE": "DELETAR",
-	"Command.SHUTDOWN": "DESLIGAR",
-	"Command.DeleteAliasMessage": "Remover apelido?",
-	"ClusterOverView.IndexName": "Nome do índice",
-	"ClusterOverview.NumShards": "Número de Shards",
-	"ClusterOverview.NumReplicas": "Número de Réplicas",
-	"ClusterOverview.NewIndex": "Novo índice",
-	"IndexActionsMenu.Title": "Ações",
-	"IndexActionsMenu.NewAlias": "Novo apelido...",
-	"IndexActionsMenu.Refresh": "Atualizar",
-	"IndexActionsMenu.Flush": "Flush",
-	"IndexActionsMenu.Optimize": "Otimizar...",
-	"IndexActionsMenu.Snapshot": "Snapshot do Gateway",
-	"IndexActionsMenu.Analyser": "Analizador de teste",
-	"IndexActionsMenu.Open": "Abrir",
-	"IndexActionsMenu.Close": "Fechar",
-	"IndexActionsMenu.Delete": "Deletar...",
-	"IndexInfoMenu.Title": "Info",
-	"IndexInfoMenu.Status": "Status do índice",
-	"IndexInfoMenu.Metadata": "Metadados do índice",
-	"IndexCommand.TextToAnalyze": "Texto para analizar",
-	"IndexCommand.ShutdownMessage": "digite ''{0}'' para desligar {1}. Nó NÃO PODE ser reiniciado à partir dessa interface",
-	"IndexOverview.PageTitle": "Visão geral dos índices",
-	"IndexSelector.NameWithDocs": "{0} ({1} documentoss)",
-	"IndexSelector.SearchIndexForDocs": "Busca {0} por documentos onde:",
-	"FilterBrowser.OutputType": "Resultados: {0}",
-	"FilterBrowser.OutputSize": "Número de Resultados: {0}",
-	"Header.ClusterHealth": "saúde do cluster: {0} ({1} {2})",
-	"Header.ClusterNotConnected": "saúde do cluster: não conectado",
-	"Header.Connect": "Conectar",
-	"Nav.AnyRequest": "Qualquer requisição",
-	"Nav.Browser": "Navegador",
-	"Nav.ClusterHealth": "Saúde do Cluster",
-	"Nav.ClusterState": "Estado do Cluster",
-	"Nav.ClusterNodes": "Nós do Cluster",
-	"Nav.Info": "Informações",
-	"Nav.NodeStats": "Estatísticas do nó",
-	"Nav.Overview": "Visão Geral",
-	"Nav.Indices": "Índices",
-	"Nav.Plugins": "Plugins",
-	"Nav.Status": "Status",
-	"Nav.Templates": "Modelos",
-	"Nav.StructuredQuery": "Consulta Estruturada",
-	"NodeActionsMenu.Title": "Ações",
-	"NodeActionsMenu.Shutdown": "Desligar...",
-	"NodeInfoMenu.Title": "Informações",
-	"NodeInfoMenu.ClusterNodeInfo": "Informações do Nó do Cluster",
-	"NodeInfoMenu.NodeStats": "Estatísticas do Nó",
-	"NodeType.Client": "Nó cliente",
-	"NodeType.Coord": "Coordenador",
-	"NodeType.Master": "Nó mestre",
-	"NodeType.Tribe": "Nó tribo",
-	"NodeType.Worker": "Nó trabalhador",
-	"NodeType.Unassigned": "Não atribuido",
-	"OptimizeForm.OptimizeIndex": "Otimizar {0}",
-	"OptimizeForm.MaxSegments": "# Máximo De Segmentos",
-	"OptimizeForm.ExpungeDeletes": "Apenas Expurgar Exclusões",
-	"OptimizeForm.FlushAfter": "Flush após Otimizar",
-	"OptimizeForm.WaitForMerge": "Esperar Por Merge",
-	"Overview.PageTitle": "Visão geral do Cluster",
-	"Output.JSON": "JSON",
-	"Output.Table": "Tabela",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "Mostrar consulta original",
-	"Preference.SortCluster": "Ordenar Cluster",
-	"Sort.ByName": "Por nome",
-	"Sort.ByAddress": "Por endereço",
-	"Sort.ByType": "Por tipo",
-	"Preference.ViewAliases": "Ver Alias",
-	"ViewAliases.Grouped": "Agrupado",
-	"ViewAliases.List": "Lista",
-	"ViewAliases.None": "Nenhum",
-	"Overview.IndexFilter": "Filtar Índice",
-	"TableResults.Summary": "Buscado {0} de {1} shards. {2} resultados. {3} segundos",
-	"QueryFilter.AllIndices": "Todos os Índices",
-	"QueryFilter.AnyValue": "qualquer",
-	"QueryFilter-Header-Indices": "Índices",
-	"QueryFilter-Header-Types": "Tipos",
-	"QueryFilter-Header-Fields": "Campos",
-	"QueryFilter.DateRangeHint.from": "De : {0}",
-	"QueryFilter.DateRangeHint.to": "  A : {0}",
-	"Query.FailAndUndo": "Consulta falhou. Desfazendo últimas alterações",
-	"StructuredQuery.ShowRawJson": "Mostrar JSON bruto"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>O Transformador de Resultados pode ser usado para transformar os resultados de uma consulta de json bruto para um formato mais útil.</p>\
-		<p>O transformador deve possuir o corpo de uma função javascript. O retorno da função se torna o novo valor passado para o json printer</p>\
-		<p>Exemplo:<br>\
-		  <code>return root.hits.hits[0];</code> irá alterar a resposta para mostrar apenas o primeiro resultado<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> irá retornar o total de memória utilizada pelo cluster<br></p>\
-		<p>As seguintes funções estão disponíveis e podem ser úteis no processamento de vetores e objetos<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>Durante a execução da opção Refazer Requisição, um parâmetro extra chamado prev é passado para a função de transformação. Isso permite fazer comparações e marcações cumulativas</p>\
-		<p>Exemplo:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> irá retornar a carga média no primeiro nó do cluster no último minuto\
-		Essa informação pode ser inserida no Gráfico para fazer um gráfico de carga do nó\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>Json Bruto: Exibe o resultado completo da consulta e da transformação no formato de JSON bruto</p>\
-		<p>Gráfico de Resultados: Para gerar um gráfico com seus resultados, utilize o tranformador de resultados para produzir um vetor de valores</p>\
-		<p>Tabela de Resultados da Consulta: Se sua consulta for uma busca, você pode exibir seus resultados no formato de uma tabela.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Campos do tipo Data aceitam consultas em linguagem natural (em inglês) para produzir um <i>From</i> e um <i>To</i> de modo a formar um intervalo dentro do qual os resultados são filtrados.</p>\
-		<p>Os seguintes formatos são suportados:</p>\
-		<ul>\
-			<li><b>Palavras-chave</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				buscam por datas de acordo com a palavra-chave. <code>last year</code> irá buscar tudo do último ano.</li>\
-			<li><b>Intervalos</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (espaços são opcionais, diversos sinônimos para qualificadores de intervalo)<br>\
-				Cria um intervalo de busca a partir de agora (<code>now</code>), extendendo este intervalo no passado e no futuro de acordo com intervalo especificado.</li>\
-			<li><b>Data/Hora (<i>DateTime</i>) e Data/Hora parcial</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				esses formatos especificam um intervalo especifico. <code>2011</code> irá buscar todo o ano de 2011, enquanto <code>2011-01-18 12:32:45</code> irá buscar apenas por resultados dentro deste intervalo de 1 segundo</li>\
-			<li><b>Tempo (<i>Time</i>) e Tempo parcial</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				esses formatos buscam por um horário específico no dia atual. <code>12:32</code> irá buscar este minuto específico do dia</li>\
-			<li><b>Intervalos de Data</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				Um intervalo de data é criado especificando-se duas datas em qualquer formato (Palavras-chave, Data/Hora ou Tempo) separados por &lt; ou -&gt; (ambos fazem a mesma coisa). Se a data de início ou fim do intervalo não for especificada é a mesma coisa que não impor limites na busca nesta direção.</li>\
-			<li><b>Intervalo de Data com Deslocamento</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Busca a data especificada incluindo o intervalo na direção determinada pelo deslocamento</li>\
-			<li><b>Intervalos Bidirecionais</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Idêntico ao exemplo anterior porém o intervalo é extendido em ambas as direções a partir da data especificada</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js
deleted file mode 100644
index f611956..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/tr_strings.js
+++ /dev/null
@@ -1,177 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "Gruplar Yükleniyor...",
-	"General.Searching": "Aranıyor...",
-	"General.Search": "Ara",
-	"General.Help": "Yardım",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Yenile",
-	"General.ManualRefresh": "Manuel Yenileme",
-	"General.RefreshQuickly": "Hızlı yenile",
-	"General.Refresh5seconds": "5 saniyede bir yenile",
-	"General.Refresh1minute": "Her dakika yenile",
-	"AliasForm.AliasName": "Alternatif İsim",
-	"AliasForm.NewAliasForIndex": "{0} için yeni alternatif isim",
-	"AliasForm.DeleteAliasMessage": "{1} silmek için ''{0}'' . Geriye dönüş yoktur.",
-	"AnyRequest.DisplayOptions" : "Seçenekleri Göster",
-	"AnyRequest.AsGraph" : "Sonuçları Çizdir",
-	"AnyRequest.AsJson" : "JSON formatında göster",
-	"AnyRequest.AsTable" : "Arama sonuçlarını tablo halinde göster",
-	"AnyRequest.History" : "Geçmiş",
-	"AnyRequest.RepeatRequest" : "İsteği Tekrarla",
-	"AnyRequest.RepeatRequestSelect" : "İsteği sürekli tekrarla ",
-	"AnyRequest.Transformer" : "Sonuç Dönüştürücü",
-	"AnyRequest.Pretty": "Düzenli",
-	"AnyRequest.Query" : "Sorgu",
-	"AnyRequest.Request": "Gönder",
-	"AnyRequest.Requesting": "İsteniyor...",
-	"AnyRequest.ValidateJSON": "JSON Doğrula",
-	"Browser.Title": "Browser",
-	"Browser.ResultSourcePanelTitle": "Sonuç Kaynağı",
-	"Command.DELETE": "SİL",
-	"Command.SHUTDOWN": "KAPA",
-	"Command.DeleteAliasMessage": "Alternatif ismi sil?",
-	"ClusterOverView.IndexName": "Indeks İsmi",
-	"ClusterOverview.NumShards": "Sektör Sayısı",
-	"ClusterOverview.NumReplicas": "Yedek Sayısı",
-	"ClusterOverview.NewIndex": "Yeni Indeks",
-	"IndexActionsMenu.Title": "İşlemler",
-	"IndexActionsMenu.NewAlias": "Yeni Alternatif İsim...",
-	"IndexActionsMenu.Refresh": "Yenile",
-	"IndexActionsMenu.Flush": "Boşalt",
-	"IndexActionsMenu.Optimize": "Optimize et...",
-	"IndexActionsMenu.Snapshot": "Gateway Snapshot (Kopya Al)",
-	"IndexActionsMenu.Analyser": "Analizi test et",
-	"IndexActionsMenu.Open": "Aç",
-	"IndexActionsMenu.Close": "Kapa",
-	"IndexActionsMenu.Delete": "Sil...",
-	"IndexInfoMenu.Title": "Bilgi",
-	"IndexInfoMenu.Status": "Indeks Durumu",
-	"IndexInfoMenu.Metadata": "Indeks Metaveri",
-	"IndexCommand.TextToAnalyze": "Analiz edilecek metin",
-	"IndexCommand.ShutdownMessage": "{1} kapatmak için ''{0}'' yazın . Nod bu arayüzden tekrar BAŞLATILAMAZ",
-	"IndexOverview.PageTitle": "Indeksler Genel Bakış",
-	"IndexSelector.NameWithDocs": "{0} ({1} döküman)",
-	"IndexSelector.SearchIndexForDocs": "{0} indeksinde ara:",
-	"FilterBrowser.OutputType": "Sonuç Formatı: {0}",
-	"FilterBrowser.OutputSize": "Sonuç Sayısı: {0}",
-	"Header.ClusterHealth": "Küme Durumu: {0} ({1} de {2})",
-	"Header.ClusterNotConnected": "Küme Durumu: Bağlı Değil",
-	"Header.Connect": "Bağlan",
-	"Nav.AnyRequest": "Özel Sorgu",
-	"Nav.Browser": "Görüntüle",
-	"Nav.ClusterHealth": "Küme Durumu",
-	"Nav.ClusterState": "Küme Statüsü",
-	"Nav.ClusterNodes": "Nod Bilgileri",
-	"Nav.Info": "Bilgi",
-	"Nav.NodeStats": "Nod İstatistikleri",
-	"Nav.Overview": "Genel Bakış",
-	"Nav.Indices": "Indeksler",
-	"Nav.Plugins": "Eklentiler",
-	"Nav.Status": "Indeks İstatistikleri",
-	"Nav.Templates": "Şablonlar",
-	"Nav.StructuredQuery": "Yapılandırılmış Sorgu",
-	"NodeActionsMenu.Title": "İşlemler",
-	"NodeActionsMenu.Shutdown": "Kapat...",
-	"NodeInfoMenu.Title": "Bilgi",
-	"NodeInfoMenu.ClusterNodeInfo": "Küme Nod Bilgileri",
-	"NodeInfoMenu.NodeStats": "Nod İstatistikleri",
-	"NodeType.Client": "Client Nod",
-	"NodeType.Coord": "Coordinator",
-	"NodeType.Master": "Master Nod",
-	"NodeType.Tribe": "Tribe Nod",
-	"NodeType.Worker": "Worker Nod",
-	"NodeType.Unassigned": "Sahipsiz",
-	"OptimizeForm.OptimizeIndex": "{0} Optimize Et",
-	"OptimizeForm.MaxSegments": "Maksimum Segment Sayısı",
-	"OptimizeForm.ExpungeDeletes": "Silme İşlemi Artıklarını Temizle",
-	"OptimizeForm.FlushAfter": "Optimize Ettikten Sonra Boşalt",
-	"OptimizeForm.WaitForMerge": "Birleştirme İçin Bekle",
-	"Overview.PageTitle" : "Kümeler Genelbakış",
-	"Output.JSON": "JSON",
-	"Output.Table": "Tablo",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "Sorgu kaynağını göster",
-	"Preference.SortCluster": "Kümeyi Sırala",
-	"Sort.ByName": "İsme göre",
-	"Sort.ByAddress": "Adrese göre",
-	"Sort.ByType": "Tipe göre",
-	"Preference.SortIndices": "Indeksleri sırala",
-	"SortIndices.Descending": "Azalan",
-	"SortIndices.Ascending": "Artan",
-	"Preference.ViewAliases": "Alternatif isimleri görüntüle",
-	"ViewAliases.Grouped": "Gruplanmış",
-	"ViewAliases.List": "Liste",
-	"ViewAliases.None": "Karışık",
-	"Overview.IndexFilter": "Indeks Filtresi",
-	"TableResults.Summary": "{0} parçanın {1} tanesi arandı. {2} sonuç. {3} saniye",
-	"QueryFilter.AllIndices": "Tüm Indeksler",
-	"QueryFilter.AnyValue": "herhangi",
-	"QueryFilter-Header-Indices": "Indeksler",
-	"QueryFilter-Header-Types": "Tipler",
-	"QueryFilter-Header-Fields": "Alanlar",
-	"QueryFilter.DateRangeHint.from": "{0}'dan",
-	"QueryFilter.DateRangeHint.to": "  {0}'a",
-	"Query.FailAndUndo": "Sorgu Başarısız. Son değişiklikler geri alınıyor.",
-	"StructuredQuery.ShowRawJson": "Formatsız JSON göster"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>Sonuç Dönüştürücü sorgudan dönen JSON sonuçlarını işleyip daha kullanışlı bir formata dönüştürmek için kullanılabilir.</p>\
-		<p>Dönüştürücü içierisinde javascript fonksiyonu tanımlanmalıdır. Bu fonksiyondan dönen yeni sonuç çıktı kısmına yazdırılır.</p>\
-		<p>Örnek:<br>\
-		  <code>return root.hits.hits[0];</code> sonucu dolaşarak ilk eşleşmeyi göster<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> tüm kümede kullanılan toplam belleği gösterir<br></p>\
-		<p>Aşağıdaki fonksiyonlar dizi ve objelerin işlenmesinde yardımcı olması için kullanılabilir<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>Sorgu tekrarlama çalışırken, prev isimli ekstra bir parametre dönüştürücü fonksiyonuna verilir. Bu sayede karşılaştırmalar ve toplu grafik gösterimleri yapılabilir.</p>\
-		<p>Örnek:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> önceki dakika boyunca kümede bulunan ilk nod üzerindeki averaj yükü verir.\
-		Bu sonuç nod için yük grafiği yaratılmasında kullanılabilir.\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>Sade Json: Sorgunun tüm sonuçlarını ve (yapıldıysa) dönüştürüldükten sonraki halini sade JSON formatında gösterir </p>\
-		<p>Sonuçları Çizdir: Sonuçları grafiksel olarak görüntülemek için sonuç dörücüyü kullanarak değerleri dizi haline getirin.</p>\
-		<p>Arama Sonuçları Tablosu: Eğer sorgunuz bir arama ise, sonuçları bir tabloda görüntüleyebilirsiniz.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Tarih alanları ana dile yakın kelimeler kullanarak iki tarih aralığında sorgu yapılabilmesini sağlar.</p>\
-		<p>Aşağıdaki tanımlar kullanılabilir:</p>\
-		<ul>\
-			<li><b>Anahtar Kelimeler</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				kelimeleri eşleşen tarihleri verir. Örneğin <code>last year</code> geçen yıl tarihli bütün verileri döndürür.</li>\
-			<li><b>Aralıklar</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (boşluklar isteğe bağlıdır, ayni kelime için farklı yazım şekilleri kullanılabilir)<br>\
-				Şu anki tarihi (<code>now</code>) baz alarak geçmiş veya ileriki bir tarih aralığındaki kayıtları verir.</li>\
-			<li><b>Tarih ve Kısmi Tarihler</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				bu formatlar spesifik bir tarihi tanımlarlar. <code>2011</code> tüm 2011 yılını ararken, <code>2011-01-18 12:32:45</code> şeklinde bir sorgu sadece o saniyedeki sonuçları verir.</li>\
-			<li><b>Zaman ve Kısmi Zamanlar</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				bu formatlar gün içerisinde spesifik bir zamanı tanımlarlar. Örneğin <code>12:32</code> sadece bu saat ve dakikadaki kayıtları verir.</li>\
-			<li><b>Tarih Aralıkları</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				Tarih aralıkları yukarda belirtilen herhangi bir formatı &lt; or -&gt;  ile ayırarak yapılabilir. Eğer aralığın bir tarafı eksikse, sorgu ucu açıkmış gibi davranır.</li>\
-			<li><b>Ofsetli Tarih Aralığı</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Verilen yöndeki tarih aralığına bakar.</li>\
-			<li><b>Çakılı Aralıklar</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Yukarıdakiyle ayni fakat belirtilen tarihten her iki yöne de bakılır.</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js
deleted file mode 100644
index 0038de1..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/lang/zh_strings.js
+++ /dev/null
@@ -1,172 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "加载聚合查询...",
-	"General.Searching": "搜索中...",
-	"General.Search": "搜索",
-	"General.Help": "帮助",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "刷新",
-	"General.ManualRefresh": "手动刷新",
-	"General.RefreshQuickly": "快速刷新",
-	"General.Refresh5seconds": "每5秒刷新",
-	"General.Refresh1minute": "每1分钟刷新",
-	"AliasForm.AliasName": "别名",
-	"AliasForm.NewAliasForIndex": "为 {0} 创建新别名",
-	"AliasForm.DeleteAliasMessage": "输入 ''{0}''  删除 {1}. 此操作无法恢复",
-	"AnyRequest.DisplayOptions" : "显示选项",
-	"AnyRequest.AsGraph" : "图形视图",
-	"AnyRequest.AsJson" : "原始 JSON",
-	"AnyRequest.AsTable" : "表格视图",
-	"AnyRequest.History" : "历史记录",
-	"AnyRequest.RepeatRequest" : "重复请求",
-	"AnyRequest.RepeatRequestSelect" : "重复周期 ",
-	"AnyRequest.Transformer" : "结果转换器",
-	"AnyRequest.Pretty": "易读",
-	"AnyRequest.Query" : "查询",
-	"AnyRequest.Request": "提交请求",
-	"AnyRequest.Requesting": "请求中...",
-	"AnyRequest.ValidateJSON": "验证 JSON",
-	"Browser.Title": "数据浏览",
-	"Browser.ResultSourcePanelTitle": "原始数据",
-	"Command.DELETE": "删除",
-	"Command.SHUTDOWN": "关闭",
-	"Command.DeleteAliasMessage": "删除别名?",
-	"ClusterOverView.IndexName": "索引名称",
-	"ClusterOverview.NumShards": "分片数",
-	"ClusterOverview.NumReplicas": "副本数",
-	"ClusterOverview.NewIndex": "新建索引",
-	"IndexActionsMenu.Title": "动作",
-	"IndexActionsMenu.NewAlias": "新建别名...",
-	"IndexActionsMenu.Refresh": "刷新",
-	"IndexActionsMenu.Flush": "Flush刷新",
-	"IndexActionsMenu.Optimize": "优化...",
-	"IndexActionsMenu.Snapshot": "网关快照",
-	"IndexActionsMenu.Analyser": "测试分析器",
-	"IndexActionsMenu.Open": "开启",
-	"IndexActionsMenu.Close": "关闭",
-	"IndexActionsMenu.Delete": "删除...",
-	"IndexInfoMenu.Title": "信息",
-	"IndexInfoMenu.Status": "索引状态",
-	"IndexInfoMenu.Metadata": "索引信息",
-	"IndexCommand.TextToAnalyze": "文本分析",
-	"IndexCommand.ShutdownMessage": "输入 ''{0}'' 以关闭 {1} 节点. 关闭的节点无法从此界面重新启动",
-	"IndexOverview.PageTitle": "索引概览",
-	"IndexSelector.NameWithDocs": "{0} ({1} 个文档)",
-	"IndexSelector.SearchIndexForDocs": "搜索 {0} 的文档， 查询条件:",
-	"FilterBrowser.OutputType": "返回格式: {0}",
-	"FilterBrowser.OutputSize": "显示数量: {0}",
-	"Header.ClusterHealth": "集群健康值: {0} ({1} of {2})",
-	"Header.ClusterNotConnected": "集群健康值: 未连接",
-	"Header.Connect": "连接",
-	"Nav.AnyRequest": "复合查询",
-	"Nav.Browser": "数据浏览",
-	"Nav.ClusterHealth": "集群健康值",
-	"Nav.ClusterState": "群集状态",
-	"Nav.ClusterNodes": "集群节点",
-	"Nav.Info": "信息",
-	"Nav.NodeStats": "节点状态",
-	"Nav.Overview": "概览",
-	"Nav.Indices": "索引",
-	"Nav.Plugins": "插件",
-	"Nav.Status": "状态",
-	"Nav.Templates": "模板",
-	"Nav.StructuredQuery": "基本查询",
-	"NodeActionsMenu.Title": "动作",
-	"NodeActionsMenu.Shutdown": "关停...",
-	"NodeInfoMenu.Title": "信息",
-	"NodeInfoMenu.ClusterNodeInfo": "集群节点信息",
-	"NodeInfoMenu.NodeStats": "节点状态",
-	"NodeType.Client": "节点客户端",
-	"NodeType.Coord": "协调器",
-	"NodeType.Master": "主节点",
-	"NodeType.Tribe": "分支结点",
-	"NodeType.Worker": "工作节点",
-	"NodeType.Unassigned": "未分配",
-	"OptimizeForm.OptimizeIndex": "优化 {0}",
-	"OptimizeForm.MaxSegments": "最大索引段数",
-	"OptimizeForm.ExpungeDeletes": "只删除被标记为删除的",
-	"OptimizeForm.FlushAfter": "优化后刷新",
-	"OptimizeForm.WaitForMerge": "等待合并",
-	"Overview.PageTitle" : "集群概览",
-	"Output.JSON": "JSON",
-	"Output.Table": "Table",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "显示查询语句",
-	"Preference.SortCluster": "集群排序",
-	"Sort.ByName": "按名称",
-	"Sort.ByAddress": "按地址",
-	"Sort.ByType": "按类型",
-	"TableResults.Summary": "查询 {1} 个分片中用的 {0} 个. {2} 命中. 耗时 {3} 秒",
-	"QueryFilter.AllIndices": "所有索引",
-	"QueryFilter.AnyValue": "任意",
-	"QueryFilter-Header-Indices": "索引",
-	"QueryFilter-Header-Types": "类型",
-	"QueryFilter-Header-Fields": "字段",
-	"QueryFilter.DateRangeHint.from": "从 : {0}",
-	"QueryFilter.DateRangeHint.to": "  到 : {0}",
-	"Query.FailAndUndo": "查询失败. 撤消最近的更改",
-	"StructuredQuery.ShowRawJson": "显示原始 JSON"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>结果转换器用于返回结果原始JSON的后续处理, 将结果转换为更有用的格式.</p>\
-		<p>转换器应当包含javascript函数体. 函数的返回值将传递给json分析器</p>\
-		<p>Example:<br>\
-		  <code>return root.hits.hits[0];</code><br>\
-		  遍历结果并只显示第一个元素<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code><br>\
-		  将返回整个集群使用的总内存<br></p>\
-		<p>以下函数可以方便的处理数组与对象<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>当启用重复请求时, prev 参数将会传递给转换器函数. 这将用于比较并累加图形</p>\
-		<p>Example:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code><br>\
-		将返回第一个集群节点最近一分钟内的平均负载\
-		将会把结果送人图表以产生一个负载曲线图\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>原始 Json: 将完整的查询结果转换为原始JSON格式 </p>\
-		<p>图形视图: 将查询结果图形化, 将查询结果转换为数组值的形式</p>\
-		<p>表格视图: 如果查询是一个搜索, 可以将搜索结果以表格形式显示.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Date 字段接受日期范围的形式查询.</p>\
-		<p>一下格式被支持:</p>\
-		<ul>\
-			<li><b>关键词 / 关键短语</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				搜索关键字匹配的日期. <code>last year</code> 将搜索过去全年.</li>\
-			<li><b>范围</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (空格可选, 同等于多个范围修饰词)<br>\
-				创建一个指定时间范围的搜索, 将围绕<code>现在</code> 并延伸至过去与未来时间段.</li>\
-			<li><b>DateTime 与 DateTime局部</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				指定一个特定的日期范围. <code>2011</code>会搜索整个 2011年, 而 <code>2011-01-18 12:32:45</code> 将只搜索1秒范围内</li>\
-			<li><b>Time 与 Time局部</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				这些格式只搜索当天的特定时间. <code>12:32</code> 将搜索当天的那一分钟</li>\
-			<li><b>日期范围</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				日期范围是将两个日期格式串 (日期关键字 / DateTime / Time) 用  &lt; 或 -&gt; (效果相同) 分隔. 如果缺少任意一端，那么在这个方向上时间将没有限制.</li>\
-			<li><b>偏移日期范围</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				搜索包括指定方向上偏移的日期.</li>\
-			<li><b>锚定范围</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				类似于上面的便宜日期，在两个方向上将锚定的日期延长</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.css
deleted file mode 100644
index be7e15c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.css
+++ /dev/null
@@ -1,1338 +0,0 @@
-/*!
- *  Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('fonts/fontawesome-webfont.eot?v=4.0.3');
-  src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-.fa {
-  display: inline-block;
-  font-family: FontAwesome;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
-  font-size: 1.3333333333333333em;
-  line-height: 0.75em;
-  vertical-align: -15%;
-}
-.fa-2x {
-  font-size: 2em;
-}
-.fa-3x {
-  font-size: 3em;
-}
-.fa-4x {
-  font-size: 4em;
-}
-.fa-5x {
-  font-size: 5em;
-}
-.fa-fw {
-  width: 1.2857142857142858em;
-  text-align: center;
-}
-.fa-ul {
-  padding-left: 0;
-  margin-left: 2.142857142857143em;
-  list-style-type: none;
-}
-.fa-ul > li {
-  position: relative;
-}
-.fa-li {
-  position: absolute;
-  left: -2.142857142857143em;
-  width: 2.142857142857143em;
-  top: 0.14285714285714285em;
-  text-align: center;
-}
-.fa-li.fa-lg {
-  left: -1.8571428571428572em;
-}
-.fa-border {
-  padding: .2em .25em .15em;
-  border: solid 0.08em #eeeeee;
-  border-radius: .1em;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-.fa.pull-left {
-  margin-right: .3em;
-}
-.fa.pull-right {
-  margin-left: .3em;
-}
-.fa-spin {
-  -webkit-animation: spin 2s infinite linear;
-  -moz-animation: spin 2s infinite linear;
-  -o-animation: spin 2s infinite linear;
-  animation: spin 2s infinite linear;
-}
-@-moz-keyframes spin {
-  0% {
-    -moz-transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(359deg);
-  }
-}
-@-webkit-keyframes spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-  }
-}
-@-o-keyframes spin {
-  0% {
-    -o-transform: rotate(0deg);
-  }
-  100% {
-    -o-transform: rotate(359deg);
-  }
-}
-@-ms-keyframes spin {
-  0% {
-    -ms-transform: rotate(0deg);
-  }
-  100% {
-    -ms-transform: rotate(359deg);
-  }
-}
-@keyframes spin {
-  0% {
-    transform: rotate(0deg);
-  }
-  100% {
-    transform: rotate(359deg);
-  }
-}
-.fa-rotate-90 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-  -webkit-transform: rotate(90deg);
-  -moz-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -o-transform: rotate(90deg);
-  transform: rotate(90deg);
-}
-.fa-rotate-180 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-  -webkit-transform: rotate(180deg);
-  -moz-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  -o-transform: rotate(180deg);
-  transform: rotate(180deg);
-}
-.fa-rotate-270 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-  -webkit-transform: rotate(270deg);
-  -moz-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  -o-transform: rotate(270deg);
-  transform: rotate(270deg);
-}
-.fa-flip-horizontal {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
-  -webkit-transform: scale(-1, 1);
-  -moz-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.fa-flip-vertical {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
-  -webkit-transform: scale(1, -1);
-  -moz-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  -o-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-.fa-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.fa-stack-1x,
-.fa-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.fa-stack-1x {
-  line-height: inherit;
-}
-.fa-stack-2x {
-  font-size: 2em;
-}
-.fa-inverse {
-  color: #ffffff;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.fa-glass:before {
-  content: "\f000";
-}
-.fa-music:before {
-  content: "\f001";
-}
-.fa-search:before {
-  content: "\f002";
-}
-.fa-envelope-o:before {
-  content: "\f003";
-}
-.fa-heart:before {
-  content: "\f004";
-}
-.fa-star:before {
-  content: "\f005";
-}
-.fa-star-o:before {
-  content: "\f006";
-}
-.fa-user:before {
-  content: "\f007";
-}
-.fa-film:before {
-  content: "\f008";
-}
-.fa-th-large:before {
-  content: "\f009";
-}
-.fa-th:before {
-  content: "\f00a";
-}
-.fa-th-list:before {
-  content: "\f00b";
-}
-.fa-check:before {
-  content: "\f00c";
-}
-.fa-times:before {
-  content: "\f00d";
-}
-.fa-search-plus:before {
-  content: "\f00e";
-}
-.fa-search-minus:before {
-  content: "\f010";
-}
-.fa-power-off:before {
-  content: "\f011";
-}
-.fa-signal:before {
-  content: "\f012";
-}
-.fa-gear:before,
-.fa-cog:before {
-  content: "\f013";
-}
-.fa-trash-o:before {
-  content: "\f014";
-}
-.fa-home:before {
-  content: "\f015";
-}
-.fa-file-o:before {
-  content: "\f016";
-}
-.fa-clock-o:before {
-  content: "\f017";
-}
-.fa-road:before {
-  content: "\f018";
-}
-.fa-download:before {
-  content: "\f019";
-}
-.fa-arrow-circle-o-down:before {
-  content: "\f01a";
-}
-.fa-arrow-circle-o-up:before {
-  content: "\f01b";
-}
-.fa-inbox:before {
-  content: "\f01c";
-}
-.fa-play-circle-o:before {
-  content: "\f01d";
-}
-.fa-rotate-right:before,
-.fa-repeat:before {
-  content: "\f01e";
-}
-.fa-refresh:before {
-  content: "\f021";
-}
-.fa-list-alt:before {
-  content: "\f022";
-}
-.fa-lock:before {
-  content: "\f023";
-}
-.fa-flag:before {
-  content: "\f024";
-}
-.fa-headphones:before {
-  content: "\f025";
-}
-.fa-volume-off:before {
-  content: "\f026";
-}
-.fa-volume-down:before {
-  content: "\f027";
-}
-.fa-volume-up:before {
-  content: "\f028";
-}
-.fa-qrcode:before {
-  content: "\f029";
-}
-.fa-barcode:before {
-  content: "\f02a";
-}
-.fa-tag:before {
-  content: "\f02b";
-}
-.fa-tags:before {
-  content: "\f02c";
-}
-.fa-book:before {
-  content: "\f02d";
-}
-.fa-bookmark:before {
-  content: "\f02e";
-}
-.fa-print:before {
-  content: "\f02f";
-}
-.fa-camera:before {
-  content: "\f030";
-}
-.fa-font:before {
-  content: "\f031";
-}
-.fa-bold:before {
-  content: "\f032";
-}
-.fa-italic:before {
-  content: "\f033";
-}
-.fa-text-height:before {
-  content: "\f034";
-}
-.fa-text-width:before {
-  content: "\f035";
-}
-.fa-align-left:before {
-  content: "\f036";
-}
-.fa-align-center:before {
-  content: "\f037";
-}
-.fa-align-right:before {
-  content: "\f038";
-}
-.fa-align-justify:before {
-  content: "\f039";
-}
-.fa-list:before {
-  content: "\f03a";
-}
-.fa-dedent:before,
-.fa-outdent:before {
-  content: "\f03b";
-}
-.fa-indent:before {
-  content: "\f03c";
-}
-.fa-video-camera:before {
-  content: "\f03d";
-}
-.fa-picture-o:before {
-  content: "\f03e";
-}
-.fa-pencil:before {
-  content: "\f040";
-}
-.fa-map-marker:before {
-  content: "\f041";
-}
-.fa-adjust:before {
-  content: "\f042";
-}
-.fa-tint:before {
-  content: "\f043";
-}
-.fa-edit:before,
-.fa-pencil-square-o:before {
-  content: "\f044";
-}
-.fa-share-square-o:before {
-  content: "\f045";
-}
-.fa-check-square-o:before {
-  content: "\f046";
-}
-.fa-arrows:before {
-  content: "\f047";
-}
-.fa-step-backward:before {
-  content: "\f048";
-}
-.fa-fast-backward:before {
-  content: "\f049";
-}
-.fa-backward:before {
-  content: "\f04a";
-}
-.fa-play:before {
-  content: "\f04b";
-}
-.fa-pause:before {
-  content: "\f04c";
-}
-.fa-stop:before {
-  content: "\f04d";
-}
-.fa-forward:before {
-  content: "\f04e";
-}
-.fa-fast-forward:before {
-  content: "\f050";
-}
-.fa-step-forward:before {
-  content: "\f051";
-}
-.fa-eject:before {
-  content: "\f052";
-}
-.fa-chevron-left:before {
-  content: "\f053";
-}
-.fa-chevron-right:before {
-  content: "\f054";
-}
-.fa-plus-circle:before {
-  content: "\f055";
-}
-.fa-minus-circle:before {
-  content: "\f056";
-}
-.fa-times-circle:before {
-  content: "\f057";
-}
-.fa-check-circle:before {
-  content: "\f058";
-}
-.fa-question-circle:before {
-  content: "\f059";
-}
-.fa-info-circle:before {
-  content: "\f05a";
-}
-.fa-crosshairs:before {
-  content: "\f05b";
-}
-.fa-times-circle-o:before {
-  content: "\f05c";
-}
-.fa-check-circle-o:before {
-  content: "\f05d";
-}
-.fa-ban:before {
-  content: "\f05e";
-}
-.fa-arrow-left:before {
-  content: "\f060";
-}
-.fa-arrow-right:before {
-  content: "\f061";
-}
-.fa-arrow-up:before {
-  content: "\f062";
-}
-.fa-arrow-down:before {
-  content: "\f063";
-}
-.fa-mail-forward:before,
-.fa-share:before {
-  content: "\f064";
-}
-.fa-expand:before {
-  content: "\f065";
-}
-.fa-compress:before {
-  content: "\f066";
-}
-.fa-plus:before {
-  content: "\f067";
-}
-.fa-minus:before {
-  content: "\f068";
-}
-.fa-asterisk:before {
-  content: "\f069";
-}
-.fa-exclamation-circle:before {
-  content: "\f06a";
-}
-.fa-gift:before {
-  content: "\f06b";
-}
-.fa-leaf:before {
-  content: "\f06c";
-}
-.fa-fire:before {
-  content: "\f06d";
-}
-.fa-eye:before {
-  content: "\f06e";
-}
-.fa-eye-slash:before {
-  content: "\f070";
-}
-.fa-warning:before,
-.fa-exclamation-triangle:before {
-  content: "\f071";
-}
-.fa-plane:before {
-  content: "\f072";
-}
-.fa-calendar:before {
-  content: "\f073";
-}
-.fa-random:before {
-  content: "\f074";
-}
-.fa-comment:before {
-  content: "\f075";
-}
-.fa-magnet:before {
-  content: "\f076";
-}
-.fa-chevron-up:before {
-  content: "\f077";
-}
-.fa-chevron-down:before {
-  content: "\f078";
-}
-.fa-retweet:before {
-  content: "\f079";
-}
-.fa-shopping-cart:before {
-  content: "\f07a";
-}
-.fa-folder:before {
-  content: "\f07b";
-}
-.fa-folder-open:before {
-  content: "\f07c";
-}
-.fa-arrows-v:before {
-  content: "\f07d";
-}
-.fa-arrows-h:before {
-  content: "\f07e";
-}
-.fa-bar-chart-o:before {
-  content: "\f080";
-}
-.fa-twitter-square:before {
-  content: "\f081";
-}
-.fa-facebook-square:before {
-  content: "\f082";
-}
-.fa-camera-retro:before {
-  content: "\f083";
-}
-.fa-key:before {
-  content: "\f084";
-}
-.fa-gears:before,
-.fa-cogs:before {
-  content: "\f085";
-}
-.fa-comments:before {
-  content: "\f086";
-}
-.fa-thumbs-o-up:before {
-  content: "\f087";
-}
-.fa-thumbs-o-down:before {
-  content: "\f088";
-}
-.fa-star-half:before {
-  content: "\f089";
-}
-.fa-heart-o:before {
-  content: "\f08a";
-}
-.fa-sign-out:before {
-  content: "\f08b";
-}
-.fa-linkedin-square:before {
-  content: "\f08c";
-}
-.fa-thumb-tack:before {
-  content: "\f08d";
-}
-.fa-external-link:before {
-  content: "\f08e";
-}
-.fa-sign-in:before {
-  content: "\f090";
-}
-.fa-trophy:before {
-  content: "\f091";
-}
-.fa-github-square:before {
-  content: "\f092";
-}
-.fa-upload:before {
-  content: "\f093";
-}
-.fa-lemon-o:before {
-  content: "\f094";
-}
-.fa-phone:before {
-  content: "\f095";
-}
-.fa-square-o:before {
-  content: "\f096";
-}
-.fa-bookmark-o:before {
-  content: "\f097";
-}
-.fa-phone-square:before {
-  content: "\f098";
-}
-.fa-twitter:before {
-  content: "\f099";
-}
-.fa-facebook:before {
-  content: "\f09a";
-}
-.fa-github:before {
-  content: "\f09b";
-}
-.fa-unlock:before {
-  content: "\f09c";
-}
-.fa-credit-card:before {
-  content: "\f09d";
-}
-.fa-rss:before {
-  content: "\f09e";
-}
-.fa-hdd-o:before {
-  content: "\f0a0";
-}
-.fa-bullhorn:before {
-  content: "\f0a1";
-}
-.fa-bell:before {
-  content: "\f0f3";
-}
-.fa-certificate:before {
-  content: "\f0a3";
-}
-.fa-hand-o-right:before {
-  content: "\f0a4";
-}
-.fa-hand-o-left:before {
-  content: "\f0a5";
-}
-.fa-hand-o-up:before {
-  content: "\f0a6";
-}
-.fa-hand-o-down:before {
-  content: "\f0a7";
-}
-.fa-arrow-circle-left:before {
-  content: "\f0a8";
-}
-.fa-arrow-circle-right:before {
-  content: "\f0a9";
-}
-.fa-arrow-circle-up:before {
-  content: "\f0aa";
-}
-.fa-arrow-circle-down:before {
-  content: "\f0ab";
-}
-.fa-globe:before {
-  content: "\f0ac";
-}
-.fa-wrench:before {
-  content: "\f0ad";
-}
-.fa-tasks:before {
-  content: "\f0ae";
-}
-.fa-filter:before {
-  content: "\f0b0";
-}
-.fa-briefcase:before {
-  content: "\f0b1";
-}
-.fa-arrows-alt:before {
-  content: "\f0b2";
-}
-.fa-group:before,
-.fa-users:before {
-  content: "\f0c0";
-}
-.fa-chain:before,
-.fa-link:before {
-  content: "\f0c1";
-}
-.fa-cloud:before {
-  content: "\f0c2";
-}
-.fa-flask:before {
-  content: "\f0c3";
-}
-.fa-cut:before,
-.fa-scissors:before {
-  content: "\f0c4";
-}
-.fa-copy:before,
-.fa-files-o:before {
-  content: "\f0c5";
-}
-.fa-paperclip:before {
-  content: "\f0c6";
-}
-.fa-save:before,
-.fa-floppy-o:before {
-  content: "\f0c7";
-}
-.fa-square:before {
-  content: "\f0c8";
-}
-.fa-bars:before {
-  content: "\f0c9";
-}
-.fa-list-ul:before {
-  content: "\f0ca";
-}
-.fa-list-ol:before {
-  content: "\f0cb";
-}
-.fa-strikethrough:before {
-  content: "\f0cc";
-}
-.fa-underline:before {
-  content: "\f0cd";
-}
-.fa-table:before {
-  content: "\f0ce";
-}
-.fa-magic:before {
-  content: "\f0d0";
-}
-.fa-truck:before {
-  content: "\f0d1";
-}
-.fa-pinterest:before {
-  content: "\f0d2";
-}
-.fa-pinterest-square:before {
-  content: "\f0d3";
-}
-.fa-google-plus-square:before {
-  content: "\f0d4";
-}
-.fa-google-plus:before {
-  content: "\f0d5";
-}
-.fa-money:before {
-  content: "\f0d6";
-}
-.fa-caret-down:before {
-  content: "\f0d7";
-}
-.fa-caret-up:before {
-  content: "\f0d8";
-}
-.fa-caret-left:before {
-  content: "\f0d9";
-}
-.fa-caret-right:before {
-  content: "\f0da";
-}
-.fa-columns:before {
-  content: "\f0db";
-}
-.fa-unsorted:before,
-.fa-sort:before {
-  content: "\f0dc";
-}
-.fa-sort-down:before,
-.fa-sort-asc:before {
-  content: "\f0dd";
-}
-.fa-sort-up:before,
-.fa-sort-desc:before {
-  content: "\f0de";
-}
-.fa-envelope:before {
-  content: "\f0e0";
-}
-.fa-linkedin:before {
-  content: "\f0e1";
-}
-.fa-rotate-left:before,
-.fa-undo:before {
-  content: "\f0e2";
-}
-.fa-legal:before,
-.fa-gavel:before {
-  content: "\f0e3";
-}
-.fa-dashboard:before,
-.fa-tachometer:before {
-  content: "\f0e4";
-}
-.fa-comment-o:before {
-  content: "\f0e5";
-}
-.fa-comments-o:before {
-  content: "\f0e6";
-}
-.fa-flash:before,
-.fa-bolt:before {
-  content: "\f0e7";
-}
-.fa-sitemap:before {
-  content: "\f0e8";
-}
-.fa-umbrella:before {
-  content: "\f0e9";
-}
-.fa-paste:before,
-.fa-clipboard:before {
-  content: "\f0ea";
-}
-.fa-lightbulb-o:before {
-  content: "\f0eb";
-}
-.fa-exchange:before {
-  content: "\f0ec";
-}
-.fa-cloud-download:before {
-  content: "\f0ed";
-}
-.fa-cloud-upload:before {
-  content: "\f0ee";
-}
-.fa-user-md:before {
-  content: "\f0f0";
-}
-.fa-stethoscope:before {
-  content: "\f0f1";
-}
-.fa-suitcase:before {
-  content: "\f0f2";
-}
-.fa-bell-o:before {
-  content: "\f0a2";
-}
-.fa-coffee:before {
-  content: "\f0f4";
-}
-.fa-cutlery:before {
-  content: "\f0f5";
-}
-.fa-file-text-o:before {
-  content: "\f0f6";
-}
-.fa-building-o:before {
-  content: "\f0f7";
-}
-.fa-hospital-o:before {
-  content: "\f0f8";
-}
-.fa-ambulance:before {
-  content: "\f0f9";
-}
-.fa-medkit:before {
-  content: "\f0fa";
-}
-.fa-fighter-jet:before {
-  content: "\f0fb";
-}
-.fa-beer:before {
-  content: "\f0fc";
-}
-.fa-h-square:before {
-  content: "\f0fd";
-}
-.fa-plus-square:before {
-  content: "\f0fe";
-}
-.fa-angle-double-left:before {
-  content: "\f100";
-}
-.fa-angle-double-right:before {
-  content: "\f101";
-}
-.fa-angle-double-up:before {
-  content: "\f102";
-}
-.fa-angle-double-down:before {
-  content: "\f103";
-}
-.fa-angle-left:before {
-  content: "\f104";
-}
-.fa-angle-right:before {
-  content: "\f105";
-}
-.fa-angle-up:before {
-  content: "\f106";
-}
-.fa-angle-down:before {
-  content: "\f107";
-}
-.fa-desktop:before {
-  content: "\f108";
-}
-.fa-laptop:before {
-  content: "\f109";
-}
-.fa-tablet:before {
-  content: "\f10a";
-}
-.fa-mobile-phone:before,
-.fa-mobile:before {
-  content: "\f10b";
-}
-.fa-circle-o:before {
-  content: "\f10c";
-}
-.fa-quote-left:before {
-  content: "\f10d";
-}
-.fa-quote-right:before {
-  content: "\f10e";
-}
-.fa-spinner:before {
-  content: "\f110";
-}
-.fa-circle:before {
-  content: "\f111";
-}
-.fa-mail-reply:before,
-.fa-reply:before {
-  content: "\f112";
-}
-.fa-github-alt:before {
-  content: "\f113";
-}
-.fa-folder-o:before {
-  content: "\f114";
-}
-.fa-folder-open-o:before {
-  content: "\f115";
-}
-.fa-smile-o:before {
-  content: "\f118";
-}
-.fa-frown-o:before {
-  content: "\f119";
-}
-.fa-meh-o:before {
-  content: "\f11a";
-}
-.fa-gamepad:before {
-  content: "\f11b";
-}
-.fa-keyboard-o:before {
-  content: "\f11c";
-}
-.fa-flag-o:before {
-  content: "\f11d";
-}
-.fa-flag-checkered:before {
-  content: "\f11e";
-}
-.fa-terminal:before {
-  content: "\f120";
-}
-.fa-code:before {
-  content: "\f121";
-}
-.fa-reply-all:before {
-  content: "\f122";
-}
-.fa-mail-reply-all:before {
-  content: "\f122";
-}
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
-  content: "\f123";
-}
-.fa-location-arrow:before {
-  content: "\f124";
-}
-.fa-crop:before {
-  content: "\f125";
-}
-.fa-code-fork:before {
-  content: "\f126";
-}
-.fa-unlink:before,
-.fa-chain-broken:before {
-  content: "\f127";
-}
-.fa-question:before {
-  content: "\f128";
-}
-.fa-info:before {
-  content: "\f129";
-}
-.fa-exclamation:before {
-  content: "\f12a";
-}
-.fa-superscript:before {
-  content: "\f12b";
-}
-.fa-subscript:before {
-  content: "\f12c";
-}
-.fa-eraser:before {
-  content: "\f12d";
-}
-.fa-puzzle-piece:before {
-  content: "\f12e";
-}
-.fa-microphone:before {
-  content: "\f130";
-}
-.fa-microphone-slash:before {
-  content: "\f131";
-}
-.fa-shield:before {
-  content: "\f132";
-}
-.fa-calendar-o:before {
-  content: "\f133";
-}
-.fa-fire-extinguisher:before {
-  content: "\f134";
-}
-.fa-rocket:before {
-  content: "\f135";
-}
-.fa-maxcdn:before {
-  content: "\f136";
-}
-.fa-chevron-circle-left:before {
-  content: "\f137";
-}
-.fa-chevron-circle-right:before {
-  content: "\f138";
-}
-.fa-chevron-circle-up:before {
-  content: "\f139";
-}
-.fa-chevron-circle-down:before {
-  content: "\f13a";
-}
-.fa-html5:before {
-  content: "\f13b";
-}
-.fa-css3:before {
-  content: "\f13c";
-}
-.fa-anchor:before {
-  content: "\f13d";
-}
-.fa-unlock-alt:before {
-  content: "\f13e";
-}
-.fa-bullseye:before {
-  content: "\f140";
-}
-.fa-ellipsis-h:before {
-  content: "\f141";
-}
-.fa-ellipsis-v:before {
-  content: "\f142";
-}
-.fa-rss-square:before {
-  content: "\f143";
-}
-.fa-play-circle:before {
-  content: "\f144";
-}
-.fa-ticket:before {
-  content: "\f145";
-}
-.fa-minus-square:before {
-  content: "\f146";
-}
-.fa-minus-square-o:before {
-  content: "\f147";
-}
-.fa-level-up:before {
-  content: "\f148";
-}
-.fa-level-down:before {
-  content: "\f149";
-}
-.fa-check-square:before {
-  content: "\f14a";
-}
-.fa-pencil-square:before {
-  content: "\f14b";
-}
-.fa-external-link-square:before {
-  content: "\f14c";
-}
-.fa-share-square:before {
-  content: "\f14d";
-}
-.fa-compass:before {
-  content: "\f14e";
-}
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
-  content: "\f150";
-}
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
-  content: "\f151";
-}
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
-  content: "\f152";
-}
-.fa-euro:before,
-.fa-eur:before {
-  content: "\f153";
-}
-.fa-gbp:before {
-  content: "\f154";
-}
-.fa-dollar:before,
-.fa-usd:before {
-  content: "\f155";
-}
-.fa-rupee:before,
-.fa-inr:before {
-  content: "\f156";
-}
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
-  content: "\f157";
-}
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
-  content: "\f158";
-}
-.fa-won:before,
-.fa-krw:before {
-  content: "\f159";
-}
-.fa-bitcoin:before,
-.fa-btc:before {
-  content: "\f15a";
-}
-.fa-file:before {
-  content: "\f15b";
-}
-.fa-file-text:before {
-  content: "\f15c";
-}
-.fa-sort-alpha-asc:before {
-  content: "\f15d";
-}
-.fa-sort-alpha-desc:before {
-  content: "\f15e";
-}
-.fa-sort-amount-asc:before {
-  content: "\f160";
-}
-.fa-sort-amount-desc:before {
-  content: "\f161";
-}
-.fa-sort-numeric-asc:before {
-  content: "\f162";
-}
-.fa-sort-numeric-desc:before {
-  content: "\f163";
-}
-.fa-thumbs-up:before {
-  content: "\f164";
-}
-.fa-thumbs-down:before {
-  content: "\f165";
-}
-.fa-youtube-square:before {
-  content: "\f166";
-}
-.fa-youtube:before {
-  content: "\f167";
-}
-.fa-xing:before {
-  content: "\f168";
-}
-.fa-xing-square:before {
-  content: "\f169";
-}
-.fa-youtube-play:before {
-  content: "\f16a";
-}
-.fa-dropbox:before {
-  content: "\f16b";
-}
-.fa-stack-overflow:before {
-  content: "\f16c";
-}
-.fa-instagram:before {
-  content: "\f16d";
-}
-.fa-flickr:before {
-  content: "\f16e";
-}
-.fa-adn:before {
-  content: "\f170";
-}
-.fa-bitbucket:before {
-  content: "\f171";
-}
-.fa-bitbucket-square:before {
-  content: "\f172";
-}
-.fa-tumblr:before {
-  content: "\f173";
-}
-.fa-tumblr-square:before {
-  content: "\f174";
-}
-.fa-long-arrow-down:before {
-  content: "\f175";
-}
-.fa-long-arrow-up:before {
-  content: "\f176";
-}
-.fa-long-arrow-left:before {
-  content: "\f177";
-}
-.fa-long-arrow-right:before {
-  content: "\f178";
-}
-.fa-apple:before {
-  content: "\f179";
-}
-.fa-windows:before {
-  content: "\f17a";
-}
-.fa-android:before {
-  content: "\f17b";
-}
-.fa-linux:before {
-  content: "\f17c";
-}
-.fa-dribbble:before {
-  content: "\f17d";
-}
-.fa-skype:before {
-  content: "\f17e";
-}
-.fa-foursquare:before {
-  content: "\f180";
-}
-.fa-trello:before {
-  content: "\f181";
-}
-.fa-female:before {
-  content: "\f182";
-}
-.fa-male:before {
-  content: "\f183";
-}
-.fa-gittip:before {
-  content: "\f184";
-}
-.fa-sun-o:before {
-  content: "\f185";
-}
-.fa-moon-o:before {
-  content: "\f186";
-}
-.fa-archive:before {
-  content: "\f187";
-}
-.fa-bug:before {
-  content: "\f188";
-}
-.fa-vk:before {
-  content: "\f189";
-}
-.fa-weibo:before {
-  content: "\f18a";
-}
-.fa-renren:before {
-  content: "\f18b";
-}
-.fa-pagelines:before {
-  content: "\f18c";
-}
-.fa-stack-exchange:before {
-  content: "\f18d";
-}
-.fa-arrow-circle-o-right:before {
-  content: "\f18e";
-}
-.fa-arrow-circle-o-left:before {
-  content: "\f190";
-}
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
-  content: "\f191";
-}
-.fa-dot-circle-o:before {
-  content: "\f192";
-}
-.fa-wheelchair:before {
-  content: "\f193";
-}
-.fa-vimeo-square:before {
-  content: "\f194";
-}
-.fa-turkish-lira:before,
-.fa-try:before {
-  content: "\f195";
-}
-.fa-plus-square-o:before {
-  content: "\f196";
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.js
deleted file mode 100644
index bf75939..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/_site/vendor.js
+++ /dev/null
@@ -1,14500 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu May 12 15:04:36 2011 -0400
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-	navigator = window.navigator,
-	location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context, rootjQuery );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// A simple way to check for HTML strings or ID strings
-	// (both of which we optimize for)
-	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	trimLeft = /^\s+/,
-	trimRight = /\s+$/,
-
-	// Check for digits
-	rdigit = /\d/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// JSON RegExp
-	rvalidchars = /^[\],:{}\s]*$/,
-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-	// Useragent RegExp
-	rwebkit = /(webkit)[ \/]([\w.]+)/,
-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-	rmsie = /(msie) ([\w.]+)/,
-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	trim = String.prototype.trim,
-	indexOf = Array.prototype.indexOf,
-
-	// [[Class]] -> type pairs
-	class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		var match, elem, ret, doc;
-
-		// Handle $(""), $(null), or $(undefined)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle $(DOMElement)
-		if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = quickExpr.exec( selector );
-			}
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					doc = (context ? context.ownerDocument || context : document);
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
-
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
-
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
-
-					} else {
-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
-					}
-
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return (context || rootjQuery).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if (selector.selector !== undefined) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The current version of jQuery being used
-	jquery: "1.6.1",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	// The number of elements contained in the matched element set
-	size: function() {
-		return this.length;
-	},
-
-	toArray: function() {
-		return slice.call( this, 0 );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this[ this.length + num ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems, name, selector ) {
-		// Build a new jQuery matched element set
-		var ret = this.constructor();
-
-		if ( jQuery.isArray( elems ) ) {
-			push.apply( ret, elems );
-
-		} else {
-			jQuery.merge( ret, elems );
-		}
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		ret.context = this.context;
-
-		if ( name === "find" ) {
-			ret.selector = this.selector + (this.selector ? " " : "") + selector;
-		} else if ( name ) {
-			ret.selector = this.selector + "." + name + "(" + selector + ")";
-		}
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-
-	ready: function( fn ) {
-		// Attach the listeners
-		jQuery.bindReady();
-
-		// Add the callback
-		readyList.done( fn );
-
-		return this;
-	},
-
-	eq: function( i ) {
-		return i === -1 ?
-			this.slice( i ) :
-			this.slice( i, +i + 1 );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ),
-			"slice", slice.call(arguments).join(",") );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function( deep ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-		// Either a released hold or an DOMready/load event and not yet ready
-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 1 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If a normal DOM Ready event fired, decrement, and wait if need be
-			if ( wait !== true && --jQuery.readyWait > 0 ) {
-				return;
-			}
-
-			// If there are functions bound, to execute
-			readyList.resolveWith( document, [ jQuery ] );
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.trigger ) {
-				jQuery( document ).trigger( "ready" ).unbind( "ready" );
-			}
-		}
-	},
-
-	bindReady: function() {
-		if ( readyList ) {
-			return;
-		}
-
-		readyList = jQuery._Deferred();
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			return setTimeout( jQuery.ready, 1 );
-		}
-
-		// Mozilla, Opera and webkit nightlies currently support this event
-		if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", jQuery.ready, false );
-
-		// If IE event model is used
-		} else if ( document.attachEvent ) {
-			// ensure firing before onload,
-			// maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", jQuery.ready );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var toplevel = false;
-
-			try {
-				toplevel = window.frameElement == null;
-			} catch(e) {}
-
-			if ( document.documentElement.doScroll && toplevel ) {
-				doScrollCheck();
-			}
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	// A crude way of determining if an object is a window
-	isWindow: function( obj ) {
-		return obj && typeof obj === "object" && "setInterval" in obj;
-	},
-
-	isNaN: function( obj ) {
-		return obj == null || !rdigit.test( obj ) || isNaN( obj );
-	},
-
-	type: function( obj ) {
-		return obj == null ?
-			String( obj ) :
-			class2type[ toString.call(obj) ] || "object";
-	},
-
-	isPlainObject: function( obj ) {
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		// Not own constructor property must be Object
-		if ( obj.constructor &&
-			!hasOwn.call(obj, "constructor") &&
-			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-			return false;
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-
-		var key;
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	isEmptyObject: function( obj ) {
-		for ( var name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	error: function( msg ) {
-		throw msg;
-	},
-
-	parseJSON: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-
-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
-		data = jQuery.trim( data );
-
-		// Attempt to parse using the native JSON parser first
-		if ( window.JSON && window.JSON.parse ) {
-			return window.JSON.parse( data );
-		}
-
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-			.replace( rvalidtokens, "]" )
-			.replace( rvalidbraces, "")) ) {
-
-			return (new Function( "return " + data ))();
-
-		}
-		jQuery.error( "Invalid JSON: " + data );
-	},
-
-	// Cross-browser xml parsing
-	// (xml & tmp used internally)
-	parseXML: function( data , xml , tmp ) {
-
-		if ( window.DOMParser ) { // Standard
-			tmp = new DOMParser();
-			xml = tmp.parseFromString( data , "text/xml" );
-		} else { // IE
-			xml = new ActiveXObject( "Microsoft.XMLDOM" );
-			xml.async = "false";
-			xml.loadXML( data );
-		}
-
-		tmp = xml.documentElement;
-
-		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && rnotwhite.test( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-	},
-
-	// args is for internal usage only
-	each: function( object, callback, args ) {
-		var name, i = 0,
-			length = object.length,
-			isObj = length === undefined || jQuery.isFunction( object );
-
-		if ( args ) {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.apply( object[ name ], args ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.apply( object[ i++ ], args ) === false ) {
-						break;
-					}
-				}
-			}
-
-		// A special, fast, case for the most common use of each
-		} else {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return object;
-	},
-
-	// Use native String.trim function wherever possible
-	trim: trim ?
-		function( text ) {
-			return text == null ?
-				"" :
-				trim.call( text );
-		} :
-
-		// Otherwise use our own trimming functionality
-		function( text ) {
-			return text == null ?
-				"" :
-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-		},
-
-	// results is for internal usage only
-	makeArray: function( array, results ) {
-		var ret = results || [];
-
-		if ( array != null ) {
-			// The window, strings (and functions) also have 'length'
-			// The extra typeof function check is to prevent crashes
-			// in Safari 2 (See: #3039)
-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-			var type = jQuery.type( array );
-
-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-				push.call( ret, array );
-			} else {
-				jQuery.merge( ret, array );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, array ) {
-
-		if ( indexOf ) {
-			return indexOf.call( array, elem );
-		}
-
-		for ( var i = 0, length = array.length; i < length; i++ ) {
-			if ( array[ i ] === elem ) {
-				return i;
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var i = first.length,
-			j = 0;
-
-		if ( typeof second.length === "number" ) {
-			for ( var l = second.length; j < l; j++ ) {
-				first[ i++ ] = second[ j ];
-			}
-
-		} else {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, inv ) {
-		var ret = [], retVal;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, length = elems.length; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value, key, ret = [],
-			i = 0,
-			length = elems.length,
-			// jquery objects are treated as arrays
-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( key in elems ) {
-				value = callback( elems[ key ], key, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return ret.concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		if ( typeof context === "string" ) {
-			var tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		var args = slice.call( arguments, 2 ),
-			proxy = function() {
-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
-			};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Mutifunctional method to get and set values to a collection
-	// The value/s can be optionally by executed if its a function
-	access: function( elems, key, value, exec, fn, pass ) {
-		var length = elems.length;
-
-		// Setting many attributes
-		if ( typeof key === "object" ) {
-			for ( var k in key ) {
-				jQuery.access( elems, k, key[k], exec, fn, value );
-			}
-			return elems;
-		}
-
-		// Setting one attribute
-		if ( value !== undefined ) {
-			// Optionally, function values get executed if exec is true
-			exec = !pass && exec && jQuery.isFunction(value);
-
-			for ( var i = 0; i < length; i++ ) {
-				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-			}
-
-			return elems;
-		}
-
-		// Getting an attribute
-		return length ? fn( elems[0], key ) : undefined;
-	},
-
-	now: function() {
-		return (new Date()).getTime();
-	},
-
-	// Use of jQuery.browser is frowned upon.
-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
-	uaMatch: function( ua ) {
-		ua = ua.toLowerCase();
-
-		var match = rwebkit.exec( ua ) ||
-			ropera.exec( ua ) ||
-			rmsie.exec( ua ) ||
-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-			[];
-
-		return { browser: match[1] || "", version: match[2] || "0" };
-	},
-
-	sub: function() {
-		function jQuerySub( selector, context ) {
-			return new jQuerySub.fn.init( selector, context );
-		}
-		jQuery.extend( true, jQuerySub, this );
-		jQuerySub.superclass = this;
-		jQuerySub.fn = jQuerySub.prototype = this();
-		jQuerySub.fn.constructor = jQuerySub;
-		jQuerySub.sub = this.sub;
-		jQuerySub.fn.init = function init( selector, context ) {
-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-				context = jQuerySub( context );
-			}
-
-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-		};
-		jQuerySub.fn.init.prototype = jQuerySub.fn;
-		var rootjQuerySub = jQuerySub(document);
-		return jQuerySub;
-	},
-
-	browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-	jQuery.browser[ browserMatch.browser ] = true;
-	jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-	jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-	trimLeft = /^[\s\xA0]+/;
-	trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-	DOMContentLoaded = function() {
-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-		jQuery.ready();
-	};
-
-} else if ( document.attachEvent ) {
-	DOMContentLoaded = function() {
-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-		if ( document.readyState === "complete" ) {
-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
-			jQuery.ready();
-		}
-	};
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-	if ( jQuery.isReady ) {
-		return;
-	}
-
-	try {
-		// If IE is used, use the trick by Diego Perini
-		// http://javascript.nwbox.com/IEContentLoaded/
-		document.documentElement.doScroll("left");
-	} catch(e) {
-		setTimeout( doScrollCheck, 1 );
-		return;
-	}
-
-	// and execute any waiting functions
-	jQuery.ready();
-}
-
-// Expose jQuery to the global object
-return jQuery;
-
-})();
-
-
-var // Promise methods
-	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
-	// Static reference to slice
-	sliceDeferred = [].slice;
-
-jQuery.extend({
-	// Create a simple deferred (one callbacks list)
-	_Deferred: function() {
-		var // callbacks list
-			callbacks = [],
-			// stored [ context , args ]
-			fired,
-			// to avoid firing when already doing so
-			firing,
-			// flag to know if the deferred has been cancelled
-			cancelled,
-			// the deferred itself
-			deferred  = {
-
-				// done( f1, f2, ...)
-				done: function() {
-					if ( !cancelled ) {
-						var args = arguments,
-							i,
-							length,
-							elem,
-							type,
-							_fired;
-						if ( fired ) {
-							_fired = fired;
-							fired = 0;
-						}
-						for ( i = 0, length = args.length; i < length; i++ ) {
-							elem = args[ i ];
-							type = jQuery.type( elem );
-							if ( type === "array" ) {
-								deferred.done.apply( deferred, elem );
-							} else if ( type === "function" ) {
-								callbacks.push( elem );
-							}
-						}
-						if ( _fired ) {
-							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
-						}
-					}
-					return this;
-				},
-
-				// resolve with given context and args
-				resolveWith: function( context, args ) {
-					if ( !cancelled && !fired && !firing ) {
-						// make sure args are available (#8421)
-						args = args || [];
-						firing = 1;
-						try {
-							while( callbacks[ 0 ] ) {
-								callbacks.shift().apply( context, args );
-							}
-						}
-						finally {
-							fired = [ context, args ];
-							firing = 0;
-						}
-					}
-					return this;
-				},
-
-				// resolve with this as context and given arguments
-				resolve: function() {
-					deferred.resolveWith( this, arguments );
-					return this;
-				},
-
-				// Has this deferred been resolved?
-				isResolved: function() {
-					return !!( firing || fired );
-				},
-
-				// Cancel
-				cancel: function() {
-					cancelled = 1;
-					callbacks = [];
-					return this;
-				}
-			};
-
-		return deferred;
-	},
-
-	// Full fledged deferred (two callbacks list)
-	Deferred: function( func ) {
-		var deferred = jQuery._Deferred(),
-			failDeferred = jQuery._Deferred(),
-			promise;
-		// Add errorDeferred methods, then and promise
-		jQuery.extend( deferred, {
-			then: function( doneCallbacks, failCallbacks ) {
-				deferred.done( doneCallbacks ).fail( failCallbacks );
-				return this;
-			},
-			always: function() {
-				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
-			},
-			fail: failDeferred.done,
-			rejectWith: failDeferred.resolveWith,
-			reject: failDeferred.resolve,
-			isRejected: failDeferred.isResolved,
-			pipe: function( fnDone, fnFail ) {
-				return jQuery.Deferred(function( newDefer ) {
-					jQuery.each( {
-						done: [ fnDone, "resolve" ],
-						fail: [ fnFail, "reject" ]
-					}, function( handler, data ) {
-						var fn = data[ 0 ],
-							action = data[ 1 ],
-							returned;
-						if ( jQuery.isFunction( fn ) ) {
-							deferred[ handler ](function() {
-								returned = fn.apply( this, arguments );
-								if ( returned && jQuery.isFunction( returned.promise ) ) {
-									returned.promise().then( newDefer.resolve, newDefer.reject );
-								} else {
-									newDefer[ action ]( returned );
-								}
-							});
-						} else {
-							deferred[ handler ]( newDefer[ action ] );
-						}
-					});
-				}).promise();
-			},
-			// Get a promise for this deferred
-			// If obj is provided, the promise aspect is added to the object
-			promise: function( obj ) {
-				if ( obj == null ) {
-					if ( promise ) {
-						return promise;
-					}
-					promise = obj = {};
-				}
-				var i = promiseMethods.length;
-				while( i-- ) {
-					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
-				}
-				return obj;
-			}
-		});
-		// Make sure only one callback list will be used
-		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
-		// Unexpose cancel
-		delete deferred.cancel;
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( firstParam ) {
-		var args = arguments,
-			i = 0,
-			length = args.length,
-			count = length,
-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-				firstParam :
-				jQuery.Deferred();
-		function resolveFunc( i ) {
-			return function( value ) {
-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				if ( !( --count ) ) {
-					// Strange bug in FF4:
-					// Values changed onto the arguments object sometimes end up as undefined values
-					// outside the $.when method. Cloning the object into a fresh array solves the issue
-					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
-				}
-			};
-		}
-		if ( length > 1 ) {
-			for( ; i < length; i++ ) {
-				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
-					args[ i ].promise().then( resolveFunc(i), deferred.reject );
-				} else {
-					--count;
-				}
-			}
-			if ( !count ) {
-				deferred.resolveWith( deferred, args );
-			}
-		} else if ( deferred !== firstParam ) {
-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-		}
-		return deferred.promise();
-	}
-});
-
-
-
-jQuery.support = (function() {
-
-	var div = document.createElement( "div" ),
-		documentElement = document.documentElement,
-		all,
-		a,
-		select,
-		opt,
-		input,
-		marginDiv,
-		support,
-		fragment,
-		body,
-		bodyStyle,
-		tds,
-		events,
-		eventName,
-		i,
-		isSupported;
-
-	// Preliminary tests
-	div.setAttribute("className", "t");
-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-	all = div.getElementsByTagName( "*" );
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Can't get basic test support
-	if ( !all || !all.length || !a ) {
-		return {};
-	}
-
-	// First batch of supports tests
-	select = document.createElement( "select" );
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName( "input" )[ 0 ];
-
-	support = {
-		// IE strips leading whitespace when .innerHTML is used
-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-		// Make sure that tbody elements aren't automatically inserted
-		// IE will insert them into empty tables
-		tbody: !div.getElementsByTagName( "tbody" ).length,
-
-		// Make sure that link elements get serialized correctly by innerHTML
-		// This requires a wrapper element in IE
-		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
-
-		// Get the style information from getAttribute
-		// (IE uses .cssText instead)
-		style: /top/.test( a.getAttribute("style") ),
-
-		// Make sure that URLs aren't manipulated
-		// (IE normalizes it by default)
-		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
-
-		// Make sure that element opacity exists
-		// (IE uses filter instead)
-		// Use a regex to work around a WebKit issue. See #5145
-		opacity: /^0.55$/.test( a.style.opacity ),
-
-		// Verify style float existence
-		// (IE uses styleFloat instead of cssFloat)
-		cssFloat: !!a.style.cssFloat,
-
-		// Make sure that if no value is specified for a checkbox
-		// that it defaults to "on".
-		// (WebKit defaults to "" instead)
-		checkOn: ( input.value === "on" ),
-
-		// Make sure that a selected-by-default option has a working selected property.
-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-		optSelected: opt.selected,
-
-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-		getSetAttribute: div.className !== "t",
-
-		// Will be defined later
-		submitBubbles: true,
-		changeBubbles: true,
-		focusinBubbles: false,
-		deleteExpando: true,
-		noCloneEvent: true,
-		inlineBlockNeedsLayout: false,
-		shrinkWrapBlocks: false,
-		reliableMarginRight: true
-	};
-
-	// Make sure checked status is properly cloned
-	input.checked = true;
-	support.noCloneChecked = input.cloneNode( true ).checked;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Test to see if it's possible to delete an expando from an element
-	// Fails in Internet Explorer
-	try {
-		delete div.test;
-	} catch( e ) {
-		support.deleteExpando = false;
-	}
-
-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-		div.attachEvent( "onclick", function click() {
-			// Cloning a node shouldn't copy over any
-			// bound event handlers (IE does this)
-			support.noCloneEvent = false;
-			div.detachEvent( "onclick", click );
-		});
-		div.cloneNode( true ).fireEvent( "onclick" );
-	}
-
-	// Check if a radio maintains it's value
-	// after being appended to the DOM
-	input = document.createElement("input");
-	input.value = "t";
-	input.setAttribute("type", "radio");
-	support.radioValue = input.value === "t";
-
-	input.setAttribute("checked", "checked");
-	div.appendChild( input );
-	fragment = document.createDocumentFragment();
-	fragment.appendChild( div.firstChild );
-
-	// WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	div.innerHTML = "";
-
-	// Figure out if the W3C box model works as expected
-	div.style.width = div.style.paddingLeft = "1px";
-
-	// We use our own, invisible, body
-	body = document.createElement( "body" );
-	bodyStyle = {
-		visibility: "hidden",
-		width: 0,
-		height: 0,
-		border: 0,
-		margin: 0,
-		// Set background to avoid IE crashes when removing (#9028)
-		background: "none"
-	};
-	for ( i in bodyStyle ) {
-		body.style[ i ] = bodyStyle[ i ];
-	}
-	body.appendChild( div );
-	documentElement.insertBefore( body, documentElement.firstChild );
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	support.appendChecked = input.checked;
-
-	support.boxModel = div.offsetWidth === 2;
-
-	if ( "zoom" in div.style ) {
-		// Check if natively block-level elements act like inline-block
-		// elements when setting their display to 'inline' and giving
-		// them layout
-		// (IE < 8 does this)
-		div.style.display = "inline";
-		div.style.zoom = 1;
-		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
-		// Check if elements with layout shrink-wrap their children
-		// (IE 6 does this)
-		div.style.display = "";
-		div.innerHTML = "<div style='width:4px;'></div>";
-		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
-	}
-
-	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
-	tds = div.getElementsByTagName( "td" );
-
-	// Check if table cells still have offsetWidth/Height when they are set
-	// to display:none and there are still other visible table cells in a
-	// table row; if so, offsetWidth/Height are not reliable for use when
-	// determining if an element has been hidden directly using
-	// display:none (it is still safe to use offsets if a parent element is
-	// hidden; don safety goggles and see bug #4512 for more information).
-	// (only IE 8 fails this test)
-	isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-	tds[ 0 ].style.display = "";
-	tds[ 1 ].style.display = "none";
-
-	// Check if empty table cells still have offsetWidth/Height
-	// (IE < 8 fail this test)
-	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-	div.innerHTML = "";
-
-	// Check if div with explicit width and no margin-right incorrectly
-	// gets computed margin-right based on width of container. For more
-	// info see bug #3333
-	// Fails in WebKit before Feb 2011 nightlies
-	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-	if ( document.defaultView && document.defaultView.getComputedStyle ) {
-		marginDiv = document.createElement( "div" );
-		marginDiv.style.width = "0";
-		marginDiv.style.marginRight = "0";
-		div.appendChild( marginDiv );
-		support.reliableMarginRight =
-			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-	}
-
-	// Remove the body element we added
-	body.innerHTML = "";
-	documentElement.removeChild( body );
-
-	// Technique from Juriy Zaytsev
-	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
-	// We only care about the case where non-standard event systems
-	// are used, namely in IE. Short-circuiting here helps us to
-	// avoid an eval call (in setAttribute) which can cause CSP
-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-	if ( div.attachEvent ) {
-		for( i in {
-			submit: 1,
-			change: 1,
-			focusin: 1
-		} ) {
-			eventName = "on" + i;
-			isSupported = ( eventName in div );
-			if ( !isSupported ) {
-				div.setAttribute( eventName, "return;" );
-				isSupported = ( typeof div[ eventName ] === "function" );
-			}
-			support[ i + "Bubbles" ] = isSupported;
-		}
-	}
-
-	return support;
-})();
-
-// Keep track of boxModel
-jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-	rmultiDash = /([a-z])([A-Z])/g;
-
-jQuery.extend({
-	cache: {},
-
-	// Please use with caution
-	uuid: 0,
-
-	// Unique for each copy of jQuery on the page
-	// Non-digits removed to match rinlinejQuery
-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-	// The following elements throw uncatchable exceptions if you
-	// attempt to add expando properties to them.
-	noData: {
-		"embed": true,
-		// Ban all objects except for Flash (which handle expandos)
-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-		"applet": true
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
-
-			// We have to handle DOM nodes and JS objects differently because IE6-7
-			// can't GC object references properly across the DOM-JS boundary
-			isNode = elem.nodeType,
-
-			// Only DOM nodes need the global jQuery cache; JS object data is
-			// attached directly to the object so GC can occur automatically
-			cache = isNode ? jQuery.cache : elem,
-
-			// Only defining an ID for JS objects if its cache already exists allows
-			// the code to shortcut on the same path as a DOM node with no cache
-			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
-
-		// Avoid doing any more work than we need to when trying to get data on an
-		// object that has no data at all
-		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
-			return;
-		}
-
-		if ( !id ) {
-			// Only DOM nodes need a new unique ID for each element since their data
-			// ends up in the global cache
-			if ( isNode ) {
-				elem[ jQuery.expando ] = id = ++jQuery.uuid;
-			} else {
-				id = jQuery.expando;
-			}
-		}
-
-		if ( !cache[ id ] ) {
-			cache[ id ] = {};
-
-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
-			// metadata on plain JS objects when the object is serialized using
-			// JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-		}
-
-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
-		// shallow copied over onto the existing cache
-		if ( typeof name === "object" || typeof name === "function" ) {
-			if ( pvt ) {
-				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
-			} else {
-				cache[ id ] = jQuery.extend(cache[ id ], name);
-			}
-		}
-
-		thisCache = cache[ id ];
-
-		// Internal jQuery data is stored in a separate object inside the object's data
-		// cache in order to avoid key collisions between internal data and user-defined
-		// data
-		if ( pvt ) {
-			if ( !thisCache[ internalKey ] ) {
-				thisCache[ internalKey ] = {};
-			}
-
-			thisCache = thisCache[ internalKey ];
-		}
-
-		if ( data !== undefined ) {
-			thisCache[ jQuery.camelCase( name ) ] = data;
-		}
-
-		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
-		// not attempt to inspect the internal events object using jQuery.data, as this
-		// internal data object is undocumented and subject to change.
-		if ( name === "events" && !thisCache[name] ) {
-			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
-		}
-
-		return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache;
-	},
-
-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var internalKey = jQuery.expando, isNode = elem.nodeType,
-
-			// See jQuery.data for more information
-			cache = isNode ? jQuery.cache : elem,
-
-			// See jQuery.data for more information
-			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-		// If there is already no cache entry for this object, there is no
-		// purpose in continuing
-		if ( !cache[ id ] ) {
-			return;
-		}
-
-		if ( name ) {
-			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
-
-			if ( thisCache ) {
-				delete thisCache[ name ];
-
-				// If there is no data left in the cache, we want to continue
-				// and let the cache object itself get destroyed
-				if ( !isEmptyDataObject(thisCache) ) {
-					return;
-				}
-			}
-		}
-
-		// See jQuery.data for more information
-		if ( pvt ) {
-			delete cache[ id ][ internalKey ];
-
-			// Don't destroy the parent cache unless the internal data object
-			// had been the only thing left in it
-			if ( !isEmptyDataObject(cache[ id ]) ) {
-				return;
-			}
-		}
-
-		var internalCache = cache[ id ][ internalKey ];
-
-		// Browsers that fail expando deletion also refuse to delete expandos on
-		// the window, but it will allow it on all other JS objects; other browsers
-		// don't care
-		if ( jQuery.support.deleteExpando || cache != window ) {
-			delete cache[ id ];
-		} else {
-			cache[ id ] = null;
-		}
-
-		// We destroyed the entire user cache at once because it's faster than
-		// iterating through each key, but we need to continue to persist internal
-		// data if it existed
-		if ( internalCache ) {
-			cache[ id ] = {};
-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
-			// metadata on plain JS objects when the object is serialized using
-			// JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-
-			cache[ id ][ internalKey ] = internalCache;
-
-		// Otherwise, we need to eliminate the expando on the node to avoid
-		// false lookups in the cache for entries that no longer exist
-		} else if ( isNode ) {
-			// IE does not allow us to delete expando properties from nodes,
-			// nor does it have a removeAttribute function on Document nodes;
-			// we must handle all of these cases
-			if ( jQuery.support.deleteExpando ) {
-				delete elem[ jQuery.expando ];
-			} else if ( elem.removeAttribute ) {
-				elem.removeAttribute( jQuery.expando );
-			} else {
-				elem[ jQuery.expando ] = null;
-			}
-		}
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return jQuery.data( elem, name, data, true );
-	},
-
-	// A method for determining if a DOM node can handle the data expando
-	acceptData: function( elem ) {
-		if ( elem.nodeName ) {
-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-			if ( match ) {
-				return !(match === true || elem.getAttribute("classid") !== match);
-			}
-		}
-
-		return true;
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var data = null;
-
-		if ( typeof key === "undefined" ) {
-			if ( this.length ) {
-				data = jQuery.data( this[0] );
-
-				if ( this[0].nodeType === 1 ) {
-			    var attr = this[0].attributes, name;
-					for ( var i = 0, l = attr.length; i < l; i++ ) {
-						name = attr[i].name;
-
-						if ( name.indexOf( "data-" ) === 0 ) {
-							name = jQuery.camelCase( name.substring(5) );
-
-							dataAttr( this[0], name, data[ name ] );
-						}
-					}
-				}
-			}
-
-			return data;
-
-		} else if ( typeof key === "object" ) {
-			return this.each(function() {
-				jQuery.data( this, key );
-			});
-		}
-
-		var parts = key.split(".");
-		parts[1] = parts[1] ? "." + parts[1] : "";
-
-		if ( value === undefined ) {
-			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
-			// Try to fetch any internally stored data first
-			if ( data === undefined && this.length ) {
-				data = jQuery.data( this[0], key );
-				data = dataAttr( this[0], key, data );
-			}
-
-			return data === undefined && parts[1] ?
-				this.data( parts[0] ) :
-				data;
-
-		} else {
-			return this.each(function() {
-				var $this = jQuery( this ),
-					args = [ parts[0], value ];
-
-				$this.triggerHandler( "setData" + parts[1] + "!", args );
-				jQuery.data( this, key, value );
-				$this.triggerHandler( "changeData" + parts[1] + "!", args );
-			});
-		}
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-				data === "false" ? false :
-				data === "null" ? null :
-				!jQuery.isNaN( data ) ? parseFloat( data ) :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
-// property to be considered empty objects; this property always exists in
-// order to make sure JSON.stringify does not expose internal metadata
-function isEmptyDataObject( obj ) {
-	for ( var name in obj ) {
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-	var deferDataKey = type + "defer",
-		queueDataKey = type + "queue",
-		markDataKey = type + "mark",
-		defer = jQuery.data( elem, deferDataKey, undefined, true );
-	if ( defer &&
-		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
-		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
-		// Give room for hard-coded callbacks to fire first
-		// and eventually mark/queue something else on the element
-		setTimeout( function() {
-			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
-				!jQuery.data( elem, markDataKey, undefined, true ) ) {
-				jQuery.removeData( elem, deferDataKey, true );
-				defer.resolve();
-			}
-		}, 0 );
-	}
-}
-
-jQuery.extend({
-
-	_mark: function( elem, type ) {
-		if ( elem ) {
-			type = (type || "fx") + "mark";
-			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
-		}
-	},
-
-	_unmark: function( force, elem, type ) {
-		if ( force !== true ) {
-			type = elem;
-			elem = force;
-			force = false;
-		}
-		if ( elem ) {
-			type = type || "fx";
-			var key = type + "mark",
-				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
-			if ( count ) {
-				jQuery.data( elem, key, count, true );
-			} else {
-				jQuery.removeData( elem, key, true );
-				handleQueueMarkDefer( elem, type, "mark" );
-			}
-		}
-	},
-
-	queue: function( elem, type, data ) {
-		if ( elem ) {
-			type = (type || "fx") + "queue";
-			var q = jQuery.data( elem, type, undefined, true );
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !q || jQuery.isArray(data) ) {
-					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
-				} else {
-					q.push( data );
-				}
-			}
-			return q || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			fn = queue.shift(),
-			defer;
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-		}
-
-		if ( fn ) {
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift("inprogress");
-			}
-
-			fn.call(elem, function() {
-				jQuery.dequeue(elem, type);
-			});
-		}
-
-		if ( !queue.length ) {
-			jQuery.removeData( elem, type + "queue", true );
-			handleQueueMarkDefer( elem, type, "queue" );
-		}
-	}
-});
-
-jQuery.fn.extend({
-	queue: function( type, data ) {
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-		}
-
-		if ( data === undefined ) {
-			return jQuery.queue( this[0], type );
-		}
-		return this.each(function() {
-			var queue = jQuery.queue( this, type, data );
-
-			if ( type === "fx" && queue[0] !== "inprogress" ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	},
-	dequeue: function( type ) {
-		return this.each(function() {
-			jQuery.dequeue( this, type );
-		});
-	},
-	// Based off of the plugin by Clint Helfers, with permission.
-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
-	delay: function( time, type ) {
-		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
-		type = type || "fx";
-
-		return this.queue( type, function() {
-			var elem = this;
-			setTimeout(function() {
-				jQuery.dequeue( elem, type );
-			}, time );
-		});
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, object ) {
-		if ( typeof type !== "string" ) {
-			object = type;
-			type = undefined;
-		}
-		type = type || "fx";
-		var defer = jQuery.Deferred(),
-			elements = this,
-			i = elements.length,
-			count = 1,
-			deferDataKey = type + "defer",
-			queueDataKey = type + "queue",
-			markDataKey = type + "mark",
-			tmp;
-		function resolve() {
-			if ( !( --count ) ) {
-				defer.resolveWith( elements, [ elements ] );
-			}
-		}
-		while( i-- ) {
-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
-				count++;
-				tmp.done( resolve );
-			}
-		}
-		resolve();
-		return defer.promise();
-	}
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-	rspace = /\s+/,
-	rreturn = /\r/g,
-	rtype = /^(?:button|input)$/i,
-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
-	rclickable = /^a(?:rea)?$/i,
-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-	rinvalidChar = /\:/,
-	formHook, boolHook;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.attr );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	},
-	
-	prop: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.prop );
-	},
-	
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	},
-
-	addClass: function( value ) {
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				self.addClass( value.call(this, i, self.attr("class") || "") );
-			});
-		}
-
-		if ( value && typeof value === "string" ) {
-			var classNames = (value || "").split( rspace );
-
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				var elem = this[i];
-
-				if ( elem.nodeType === 1 ) {
-					if ( !elem.className ) {
-						elem.className = value;
-
-					} else {
-						var className = " " + elem.className + " ",
-							setClass = elem.className;
-
-						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
-							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
-								setClass += " " + classNames[c];
-							}
-						}
-						elem.className = jQuery.trim( setClass );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				self.removeClass( value.call(this, i, self.attr("class")) );
-			});
-		}
-
-		if ( (value && typeof value === "string") || value === undefined ) {
-			var classNames = (value || "").split( rspace );
-
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				var elem = this[i];
-
-				if ( elem.nodeType === 1 && elem.className ) {
-					if ( value ) {
-						var className = (" " + elem.className + " ").replace(rclass, " ");
-						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
-							className = className.replace(" " + classNames[c] + " ", " ");
-						}
-						elem.className = jQuery.trim( className );
-
-					} else {
-						elem.className = "";
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value,
-			isBool = typeof stateVal === "boolean";
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
-			});
-		}
-
-		return this.each(function() {
-			if ( type === "string" ) {
-				// toggle individual class names
-				var className,
-					i = 0,
-					self = jQuery( this ),
-					state = stateVal,
-					classNames = value.split( rspace );
-
-				while ( (className = classNames[ i++ ]) ) {
-					// check each className given, space seperated list
-					state = isBool ? state : !self.hasClass( className );
-					self[ state ? "addClass" : "removeClass" ]( className );
-				}
-
-			} else if ( type === "undefined" || type === "boolean" ) {
-				if ( this.className ) {
-					// store className if set
-					jQuery._data( this, "__className__", this.className );
-				}
-
-				// toggle whole className
-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-			}
-		});
-	},
-
-	hasClass: function( selector ) {
-		var className = " " + selector + " ";
-		for ( var i = 0, l = this.length; i < l; i++ ) {
-			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-				return true;
-			}
-		}
-
-		return false;
-	},
-
-	val: function( value ) {
-		var hooks, ret,
-			elem = this[0];
-		
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				return (elem.value || "").replace(rreturn, "");
-			}
-
-			return undefined;
-		}
-
-		var isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var self = jQuery(this), val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, self.val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map(val, function ( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				// attributes.value is undefined in Blackberry 4.7 but
-				// uses .value. See #6932
-				var val = elem.attributes.value;
-				return !val || val.specified ? elem.value : elem.text;
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value,
-					index = elem.selectedIndex,
-					values = [],
-					options = elem.options,
-					one = elem.type === "select-one";
-
-				// Nothing was selected
-				if ( index < 0 ) {
-					return null;
-				}
-
-				// Loop through all the selected options
-				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
-					var option = options[ i ];
-
-					// Don't return options that are disabled or in a disabled optgroup
-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-				if ( one && !values.length && options.length ) {
-					return jQuery( options[ index ] ).val();
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var values = jQuery.makeArray( value );
-
-				jQuery(elem).find("option").each(function() {
-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-				});
-
-				if ( !values.length ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	},
-
-	attrFn: {
-		val: true,
-		css: true,
-		html: true,
-		text: true,
-		data: true,
-		width: true,
-		height: true,
-		offset: true
-	},
-	
-	attrFix: {
-		// Always normalize to ensure hook usage
-		tabindex: "tabIndex"
-	},
-	
-	attr: function( elem, name, value, pass ) {
-		var nType = elem.nodeType;
-		
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return undefined;
-		}
-
-		if ( pass && name in jQuery.attrFn ) {
-			return jQuery( elem )[ name ]( value );
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( !("getAttribute" in elem) ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		var ret, hooks,
-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// Normalize the name if needed
-		name = notxml && jQuery.attrFix[ name ] || name;
-
-		hooks = jQuery.attrHooks[ name ];
-
-		if ( !hooks ) {
-			// Use boolHook for boolean attributes
-			if ( rboolean.test( name ) &&
-				(typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) {
-
-				hooks = boolHook;
-
-			// Use formHook for forms and if the name contains certain characters
-			} else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
-				hooks = formHook;
-			}
-		}
-
-		if ( value !== undefined ) {
-
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return undefined;
-
-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				elem.setAttribute( name, "" + value );
-				return value;
-			}
-
-		} else if ( hooks && "get" in hooks && notxml ) {
-			return hooks.get( elem, name );
-
-		} else {
-
-			ret = elem.getAttribute( name );
-
-			// Non-existent attributes return null, we normalize to undefined
-			return ret === null ?
-				undefined :
-				ret;
-		}
-	},
-
-	removeAttr: function( elem, name ) {
-		var propName;
-		if ( elem.nodeType === 1 ) {
-			name = jQuery.attrFix[ name ] || name;
-		
-			if ( jQuery.support.getSetAttribute ) {
-				// Use removeAttribute in browsers that support it
-				elem.removeAttribute( name );
-			} else {
-				jQuery.attr( elem, name, "" );
-				elem.removeAttributeNode( elem.getAttributeNode( name ) );
-			}
-
-			// Set corresponding property to false for boolean attributes
-			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
-				elem[ propName ] = false;
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				// We can't allow the type property to be changed (since it causes problems in IE)
-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-					jQuery.error( "type property can't be changed" );
-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to it's default in case type is set after value
-					// This is for element creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		},
-		tabIndex: {
-			get: function( elem ) {
-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				var attributeNode = elem.getAttributeNode("tabIndex");
-
-				return attributeNode && attributeNode.specified ?
-					parseInt( attributeNode.value, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						undefined;
-			}
-		}
-	},
-
-	propFix: {
-		tabindex: "tabIndex",
-		readonly: "readOnly",
-		"for": "htmlFor",
-		"class": "className",
-		maxlength: "maxLength",
-		cellspacing: "cellSpacing",
-		cellpadding: "cellPadding",
-		rowspan: "rowSpan",
-		colspan: "colSpan",
-		usemap: "useMap",
-		frameborder: "frameBorder",
-		contenteditable: "contentEditable"
-	},
-	
-	prop: function( elem, name, value ) {
-		var nType = elem.nodeType;
-
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return undefined;
-		}
-
-		var ret, hooks,
-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// Try to normalize/fix the name
-		name = notxml && jQuery.propFix[ name ] || name;
-		
-		hooks = jQuery.propHooks[ name ];
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return (elem[ name ] = value);
-			}
-
-		} else {
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return elem[ name ];
-			}
-		}
-	},
-	
-	propHooks: {}
-});
-
-// Hook for boolean attributes
-boolHook = {
-	get: function( elem, name ) {
-		// Align boolean attributes with corresponding properties
-		return elem[ jQuery.propFix[ name ] || name ] ?
-			name.toLowerCase() :
-			undefined;
-	},
-	set: function( elem, value, name ) {
-		var propName;
-		if ( value === false ) {
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else {
-			// value is true since we know at this point it's type boolean and not false
-			// Set boolean attributes to the same name and set the DOM property
-			propName = jQuery.propFix[ name ] || name;
-			if ( propName in elem ) {
-				// Only set the IDL specifically if it already exists on the element
-				elem[ propName ] = value;
-			}
-
-			elem.setAttribute( name, name.toLowerCase() );
-		}
-		return name;
-	}
-};
-
-// Use the value property for back compat
-// Use the formHook for button elements in IE6/7 (#1954)
-jQuery.attrHooks.value = {
-	get: function( elem, name ) {
-		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
-			return formHook.get( elem, name );
-		}
-		return elem.value;
-	},
-	set: function( elem, value, name ) {
-		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
-			return formHook.set( elem, value, name );
-		}
-		// Does not return so that setAttribute is also used
-		elem.value = value;
-	}
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !jQuery.support.getSetAttribute ) {
-
-	// propFix is more comprehensive and contains all fixes
-	jQuery.attrFix = jQuery.propFix;
-	
-	// Use this for any attribute on a form in IE6/7
-	formHook = jQuery.attrHooks.name = jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret;
-			ret = elem.getAttributeNode( name );
-			// Return undefined if nodeValue is empty string
-			return ret && ret.nodeValue !== "" ?
-				ret.nodeValue :
-				undefined;
-		},
-		set: function( elem, value, name ) {
-			// Check form objects in IE (multiple bugs related)
-			// Only use nodeValue if the attribute node exists on the form
-			var ret = elem.getAttributeNode( name );
-			if ( ret ) {
-				ret.nodeValue = value;
-				return value;
-			}
-		}
-	};
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		});
-	});
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			get: function( elem ) {
-				var ret = elem.getAttribute( name, 2 );
-				return ret === null ? undefined : ret;
-			}
-		});
-	});
-}
-
-if ( !jQuery.support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Normalize to lowercase since IE uppercases css property names
-			return elem.style.cssText.toLowerCase() || undefined;
-		},
-		set: function( elem, value ) {
-			return (elem.style.cssText = "" + value);
-		}
-	};
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-		}
-	});
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-	jQuery.each([ "radio", "checkbox" ], function() {
-		jQuery.valHooks[ this ] = {
-			get: function( elem ) {
-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-				return elem.getAttribute("value") === null ? "on" : elem.value;
-			}
-		};
-	});
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
-			}
-		}
-	});
-});
-
-
-
-
-var hasOwn = Object.prototype.hasOwnProperty,
-	rnamespaces = /\.(.*)$/,
-	rformElems = /^(?:textarea|input|select)$/i,
-	rperiod = /\./g,
-	rspaces = / /g,
-	rescape = /[^\w\s.|`]/g,
-	fcleanup = function( nm ) {
-		return nm.replace(rescape, "\\$&");
-	};
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
-	// Bind an event to an element
-	// Original by Dean Edwards
-	add: function( elem, types, handler, data ) {
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		if ( handler === false ) {
-			handler = returnFalse;
-		} else if ( !handler ) {
-			// Fixes bug #7229. Fix recommended by jdalton
-			return;
-		}
-
-		var handleObjIn, handleObj;
-
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-		}
-
-		// Make sure that the function being executed has a unique ID
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure
-		var elemData = jQuery._data( elem );
-
-		// If no elemData is found then we must be trying to bind to one of the
-		// banned noData elements
-		if ( !elemData ) {
-			return;
-		}
-
-		var events = elemData.events,
-			eventHandle = elemData.handle;
-
-		if ( !events ) {
-			elemData.events = events = {};
-		}
-
-		if ( !eventHandle ) {
-			elemData.handle = eventHandle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-		}
-
-		// Add elem as a property of the handle function
-		// This is to prevent a memory leak with non-native events in IE.
-		eventHandle.elem = elem;
-
-		// Handle multiple events separated by a space
-		// jQuery(...).bind("mouseover mouseout", fn);
-		types = types.split(" ");
-
-		var type, i = 0, namespaces;
-
-		while ( (type = types[ i++ ]) ) {
-			handleObj = handleObjIn ?
-				jQuery.extend({}, handleObjIn) :
-				{ handler: handler, data: data };
-
-			// Namespaced event handlers
-			if ( type.indexOf(".") > -1 ) {
-				namespaces = type.split(".");
-				type = namespaces.shift();
-				handleObj.namespace = namespaces.slice(0).sort().join(".");
-
-			} else {
-				namespaces = [];
-				handleObj.namespace = "";
-			}
-
-			handleObj.type = type;
-			if ( !handleObj.guid ) {
-				handleObj.guid = handler.guid;
-			}
-
-			// Get the current list of functions bound to this event
-			var handlers = events[ type ],
-				special = jQuery.event.special[ type ] || {};
-
-			// Init the event handler queue
-			if ( !handlers ) {
-				handlers = events[ type ] = [];
-
-				// Check for a special event handler
-				// Only use addEventListener/attachEvent if the special
-				// events handler returns false
-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add the function to the element's handler list
-			handlers.push( handleObj );
-
-			// Keep track of which events have been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	global: {},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, pos ) {
-		// don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		if ( handler === false ) {
-			handler = returnFalse;
-		}
-
-		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
-			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-			events = elemData && elemData.events;
-
-		if ( !elemData || !events ) {
-			return;
-		}
-
-		// types is actually an event object here
-		if ( types && types.type ) {
-			handler = types.handler;
-			types = types.type;
-		}
-
-		// Unbind all events for the element
-		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
-			types = types || "";
-
-			for ( type in events ) {
-				jQuery.event.remove( elem, type + types );
-			}
-
-			return;
-		}
-
-		// Handle multiple events separated by a space
-		// jQuery(...).unbind("mouseover mouseout", fn);
-		types = types.split(" ");
-
-		while ( (type = types[ i++ ]) ) {
-			origType = type;
-			handleObj = null;
-			all = type.indexOf(".") < 0;
-			namespaces = [];
-
-			if ( !all ) {
-				// Namespaced event handlers
-				namespaces = type.split(".");
-				type = namespaces.shift();
-
-				namespace = new RegExp("(^|\\.)" +
-					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
-			}
-
-			eventType = events[ type ];
-
-			if ( !eventType ) {
-				continue;
-			}
-
-			if ( !handler ) {
-				for ( j = 0; j < eventType.length; j++ ) {
-					handleObj = eventType[ j ];
-
-					if ( all || namespace.test( handleObj.namespace ) ) {
-						jQuery.event.remove( elem, origType, handleObj.handler, j );
-						eventType.splice( j--, 1 );
-					}
-				}
-
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-
-			for ( j = pos || 0; j < eventType.length; j++ ) {
-				handleObj = eventType[ j ];
-
-				if ( handler.guid === handleObj.guid ) {
-					// remove the given handler for the given type
-					if ( all || namespace.test( handleObj.namespace ) ) {
-						if ( pos == null ) {
-							eventType.splice( j--, 1 );
-						}
-
-						if ( special.remove ) {
-							special.remove.call( elem, handleObj );
-						}
-					}
-
-					if ( pos != null ) {
-						break;
-					}
-				}
-			}
-
-			// remove generic event handler if no more handlers exist
-			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				ret = null;
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			var handle = elemData.handle;
-			if ( handle ) {
-				handle.elem = null;
-			}
-
-			delete elemData.events;
-			delete elemData.handle;
-
-			if ( jQuery.isEmptyObject( elemData ) ) {
-				jQuery.removeData( elem, undefined, true );
-			}
-		}
-	},
-	
-	// Events that are safe to short-circuit if no handlers are attached.
-	// Native DOM events should not be added, they may have inline handlers.
-	customEvent: {
-		"getData": true,
-		"setData": true,
-		"changeData": true
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		// Event object or event type
-		var type = event.type || event,
-			namespaces = [],
-			exclusive;
-
-		if ( type.indexOf("!") >= 0 ) {
-			// Exclusive events trigger only for the exact event (no namespaces)
-			type = type.slice(0, -1);
-			exclusive = true;
-		}
-
-		if ( type.indexOf(".") >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-
-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-			// No jQuery handlers for this event type, and it can't have inline handlers
-			return;
-		}
-
-		// Caller can pass in an Event, Object, or just an event type string
-		event = typeof event === "object" ?
-			// jQuery.Event object
-			event[ jQuery.expando ] ? event :
-			// Object literal
-			new jQuery.Event( type, event ) :
-			// Just the event type (string)
-			new jQuery.Event( type );
-
-		event.type = type;
-		event.exclusive = exclusive;
-		event.namespace = namespaces.join(".");
-		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
-		
-		// triggerHandler() and global events don't bubble or run the default action
-		if ( onlyHandlers || !elem ) {
-			event.preventDefault();
-			event.stopPropagation();
-		}
-
-		// Handle a global trigger
-		if ( !elem ) {
-			// TODO: Stop taunting the data cache; remove global events and always attach to document
-			jQuery.each( jQuery.cache, function() {
-				// internalKey variable is just used to make it easier to find
-				// and potentially change this stuff later; currently it just
-				// points to jQuery.expando
-				var internalKey = jQuery.expando,
-					internalCache = this[ internalKey ];
-				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
-					jQuery.event.trigger( event, data, internalCache.handle.elem );
-				}
-			});
-			return;
-		}
-
-		// Don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		event.target = elem;
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data ? jQuery.makeArray( data ) : [];
-		data.unshift( event );
-
-		var cur = elem,
-			// IE doesn't like method names with a colon (#3533, #8272)
-			ontype = type.indexOf(":") < 0 ? "on" + type : "";
-
-		// Fire event on the current element, then bubble up the DOM tree
-		do {
-			var handle = jQuery._data( cur, "handle" );
-
-			event.currentTarget = cur;
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-
-			// Trigger an inline bound script
-			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
-				event.result = false;
-				event.preventDefault();
-			}
-
-			// Bubble up to document, then to window
-			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
-		} while ( cur && !event.isPropagationStopped() );
-
-		// If nobody prevented the default action, do it now
-		if ( !event.isDefaultPrevented() ) {
-			var old,
-				special = jQuery.event.special[ type ] || {};
-
-			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction)() check here because IE6/7 fails that test.
-				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
-				try {
-					if ( ontype && elem[ type ] ) {
-						// Don't re-trigger an onFOO event when we call its FOO() method
-						old = elem[ ontype ];
-
-						if ( old ) {
-							elem[ ontype ] = null;
-						}
-
-						jQuery.event.triggered = type;
-						elem[ type ]();
-					}
-				} catch ( ieError ) {}
-
-				if ( old ) {
-					elem[ ontype ] = old;
-				}
-
-				jQuery.event.triggered = undefined;
-			}
-		}
-		
-		return event.result;
-	},
-
-	handle: function( event ) {
-		event = jQuery.event.fix( event || window.event );
-		// Snapshot the handlers list since a called handler may add/remove events.
-		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
-			run_all = !event.exclusive && !event.namespace,
-			args = Array.prototype.slice.call( arguments, 0 );
-
-		// Use the fix-ed Event rather than the (read-only) native event
-		args[0] = event;
-		event.currentTarget = this;
-
-		for ( var j = 0, l = handlers.length; j < l; j++ ) {
-			var handleObj = handlers[ j ];
-
-			// Triggered event must 1) be non-exclusive and have no namespace, or
-			// 2) have namespace(s) a subset or equal to those in the bound event.
-			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
-				// Pass in a reference to the handler function itself
-				// So that we can later remove it
-				event.handler = handleObj.handler;
-				event.data = handleObj.data;
-				event.handleObj = handleObj;
-
-				var ret = handleObj.handler.apply( this, args );
-
-				if ( ret !== undefined ) {
-					event.result = ret;
-					if ( ret === false ) {
-						event.preventDefault();
-						event.stopPropagation();
-					}
-				}
-
-				if ( event.isImmediatePropagationStopped() ) {
-					break;
-				}
-			}
-		}
-		return event.result;
-	},
-
-	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// store a copy of the original event object
-		// and "clone" to set read-only properties
-		var originalEvent = event;
-		event = jQuery.Event( originalEvent );
-
-		for ( var i = this.props.length, prop; i; ) {
-			prop = this.props[ --i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Fix target property, if necessary
-		if ( !event.target ) {
-			// Fixes #1925 where srcElement might not be defined either
-			event.target = event.srcElement || document;
-		}
-
-		// check if target is a textnode (safari)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// Add relatedTarget, if necessary
-		if ( !event.relatedTarget && event.fromElement ) {
-			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
-		}
-
-		// Calculate pageX/Y if missing and clientX/Y available
-		if ( event.pageX == null && event.clientX != null ) {
-			var eventDocument = event.target.ownerDocument || document,
-				doc = eventDocument.documentElement,
-				body = eventDocument.body;
-
-			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
-			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
-		}
-
-		// Add which for key events
-		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
-			event.which = event.charCode != null ? event.charCode : event.keyCode;
-		}
-
-		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
-		if ( !event.metaKey && event.ctrlKey ) {
-			event.metaKey = event.ctrlKey;
-		}
-
-		// Add which for click: 1 === left; 2 === middle; 3 === right
-		// Note: button is not normalized, so don't use it
-		if ( !event.which && event.button !== undefined ) {
-			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
-		}
-
-		return event;
-	},
-
-	// Deprecated, use jQuery.guid instead
-	guid: 1E8,
-
-	// Deprecated, use jQuery.proxy instead
-	proxy: jQuery.proxy,
-
-	special: {
-		ready: {
-			// Make sure the ready event is setup
-			setup: jQuery.bindReady,
-			teardown: jQuery.noop
-		},
-
-		live: {
-			add: function( handleObj ) {
-				jQuery.event.add( this,
-					liveConvert( handleObj.origType, handleObj.selector ),
-					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
-			},
-
-			remove: function( handleObj ) {
-				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
-			}
-		},
-
-		beforeunload: {
-			setup: function( data, namespaces, eventHandle ) {
-				// We only want to do this special case on windows
-				if ( jQuery.isWindow( this ) ) {
-					this.onbeforeunload = eventHandle;
-				}
-			},
-
-			teardown: function( namespaces, eventHandle ) {
-				if ( this.onbeforeunload === eventHandle ) {
-					this.onbeforeunload = null;
-				}
-			}
-		}
-	}
-};
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		if ( elem.detachEvent ) {
-			elem.detachEvent( "on" + type, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !this.preventDefault ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
-			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// timeStamp is buggy for some events on Firefox(#3843)
-	// So we won't rely on the native value
-	this.timeStamp = jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
-	return false;
-}
-function returnTrue() {
-	return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	preventDefault: function() {
-		this.isDefaultPrevented = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-
-		// if preventDefault exists run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// otherwise set the returnValue property of the original event to false (IE)
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		this.isPropagationStopped = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-		// if stopPropagation exists run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-		// otherwise set the cancelBubble property of the original event to true (IE)
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		this.isImmediatePropagationStopped = returnTrue;
-		this.stopPropagation();
-	},
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
-	// Check if mouse(over|out) are still within the same parent element
-	var parent = event.relatedTarget;
-
-	// set the correct event type
-	event.type = event.data;
-
-	// Firefox sometimes assigns relatedTarget a XUL element
-	// which we cannot access the parentNode property of
-	try {
-
-		// Chrome does something similar, the parentNode property
-		// can be accessed but is null.
-		if ( parent && parent !== document && !parent.parentNode ) {
-			return;
-		}
-
-		// Traverse up the tree
-		while ( parent && parent !== this ) {
-			parent = parent.parentNode;
-		}
-
-		if ( parent !== this ) {
-			// handle event if we actually just moused on to a non sub-element
-			jQuery.event.handle.apply( this, arguments );
-		}
-
-	// assuming we've left the element since we most likely mousedover a xul element
-	} catch(e) { }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
-	event.type = event.data;
-	jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		setup: function( data ) {
-			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
-		},
-		teardown: function( data ) {
-			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
-		}
-	};
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-	jQuery.event.special.submit = {
-		setup: function( data, namespaces ) {
-			if ( !jQuery.nodeName( this, "form" ) ) {
-				jQuery.event.add(this, "click.specialSubmit", function( e ) {
-					var elem = e.target,
-						type = elem.type;
-
-					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
-						trigger( "submit", this, arguments );
-					}
-				});
-
-				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
-					var elem = e.target,
-						type = elem.type;
-
-					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
-						trigger( "submit", this, arguments );
-					}
-				});
-
-			} else {
-				return false;
-			}
-		},
-
-		teardown: function( namespaces ) {
-			jQuery.event.remove( this, ".specialSubmit" );
-		}
-	};
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
-	var changeFilters,
-
-	getVal = function( elem ) {
-		var type = elem.type, val = elem.value;
-
-		if ( type === "radio" || type === "checkbox" ) {
-			val = elem.checked;
-
-		} else if ( type === "select-multiple" ) {
-			val = elem.selectedIndex > -1 ?
-				jQuery.map( elem.options, function( elem ) {
-					return elem.selected;
-				}).join("-") :
-				"";
-
-		} else if ( jQuery.nodeName( elem, "select" ) ) {
-			val = elem.selectedIndex;
-		}
-
-		return val;
-	},
-
-	testChange = function testChange( e ) {
-		var elem = e.target, data, val;
-
-		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
-			return;
-		}
-
-		data = jQuery._data( elem, "_change_data" );
-		val = getVal(elem);
-
-		// the current data will be also retrieved by beforeactivate
-		if ( e.type !== "focusout" || elem.type !== "radio" ) {
-			jQuery._data( elem, "_change_data", val );
-		}
-
-		if ( data === undefined || val === data ) {
-			return;
-		}
-
-		if ( data != null || val ) {
-			e.type = "change";
-			e.liveFired = undefined;
-			jQuery.event.trigger( e, arguments[1], elem );
-		}
-	};
-
-	jQuery.event.special.change = {
-		filters: {
-			focusout: testChange,
-
-			beforedeactivate: testChange,
-
-			click: function( e ) {
-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
-				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
-					testChange.call( this, e );
-				}
-			},
-
-			// Change has to be called before submit
-			// Keydown will be called before keypress, which is used in submit-event delegation
-			keydown: function( e ) {
-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
-				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
-					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
-					type === "select-multiple" ) {
-					testChange.call( this, e );
-				}
-			},
-
-			// Beforeactivate happens also before the previous element is blurred
-			// with this event you can't trigger a change event, but you can store
-			// information
-			beforeactivate: function( e ) {
-				var elem = e.target;
-				jQuery._data( elem, "_change_data", getVal(elem) );
-			}
-		},
-
-		setup: function( data, namespaces ) {
-			if ( this.type === "file" ) {
-				return false;
-			}
-
-			for ( var type in changeFilters ) {
-				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
-			}
-
-			return rformElems.test( this.nodeName );
-		},
-
-		teardown: function( namespaces ) {
-			jQuery.event.remove( this, ".specialChange" );
-
-			return rformElems.test( this.nodeName );
-		}
-	};
-
-	changeFilters = jQuery.event.special.change.filters;
-
-	// Handle when the input is .focus()'d
-	changeFilters.focus = changeFilters.beforeactivate;
-}
-
-function trigger( type, elem, args ) {
-	// Piggyback on a donor event to simulate a different one.
-	// Fake originalEvent to avoid donor's stopPropagation, but if the
-	// simulated event prevents default then we do the same on the donor.
-	// Don't pass args or remember liveFired; they apply to the donor event.
-	var event = jQuery.extend( {}, args[ 0 ] );
-	event.type = type;
-	event.originalEvent = {};
-	event.liveFired = undefined;
-	jQuery.event.handle.call( elem, event );
-	if ( event.isDefaultPrevented() ) {
-		args[ 0 ].preventDefault();
-	}
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler while someone wants focusin/focusout
-		var attaches = 0;
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				if ( attaches++ === 0 ) {
-					document.addEventListener( orig, handler, true );
-				}
-			},
-			teardown: function() {
-				if ( --attaches === 0 ) {
-					document.removeEventListener( orig, handler, true );
-				}
-			}
-		};
-
-		function handler( donor ) {
-			// Donor event is always a native one; fix it and switch its type.
-			// Let focusin/out handler cancel the donor focus/blur event.
-			var e = jQuery.event.fix( donor );
-			e.type = fix;
-			e.originalEvent = {};
-			jQuery.event.trigger( e, null, e.target );
-			if ( e.isDefaultPrevented() ) {
-				donor.preventDefault();
-			}
-		}
-	});
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
-	jQuery.fn[ name ] = function( type, data, fn ) {
-		var handler;
-
-		// Handle object literals
-		if ( typeof type === "object" ) {
-			for ( var key in type ) {
-				this[ name ](key, data, type[key], fn);
-			}
-			return this;
-		}
-
-		if ( arguments.length === 2 || data === false ) {
-			fn = data;
-			data = undefined;
-		}
-
-		if ( name === "one" ) {
-			handler = function( event ) {
-				jQuery( this ).unbind( event, handler );
-				return fn.apply( this, arguments );
-			};
-			handler.guid = fn.guid || jQuery.guid++;
-		} else {
-			handler = fn;
-		}
-
-		if ( type === "unload" && name !== "one" ) {
-			this.one( type, data, fn );
-
-		} else {
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				jQuery.event.add( this[i], type, handler, data );
-			}
-		}
-
-		return this;
-	};
-});
-
-jQuery.fn.extend({
-	unbind: function( type, fn ) {
-		// Handle object literals
-		if ( typeof type === "object" && !type.preventDefault ) {
-			for ( var key in type ) {
-				this.unbind(key, type[key]);
-			}
-
-		} else {
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				jQuery.event.remove( this[i], type, fn );
-			}
-		}
-
-		return this;
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.live( types, data, fn, selector );
-	},
-
-	undelegate: function( selector, types, fn ) {
-		if ( arguments.length === 0 ) {
-			return this.unbind( "live" );
-
-		} else {
-			return this.die( types, null, fn, selector );
-		}
-	},
-
-	trigger: function( type, data ) {
-		return this.each(function() {
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-
-	triggerHandler: function( type, data ) {
-		if ( this[0] ) {
-			return jQuery.event.trigger( type, data, this[0], true );
-		}
-	},
-
-	toggle: function( fn ) {
-		// Save reference to arguments for access in closure
-		var args = arguments,
-			guid = fn.guid || jQuery.guid++,
-			i = 0,
-			toggler = function( event ) {
-				// Figure out which function to execute
-				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-				// Make sure that clicks stop
-				event.preventDefault();
-
-				// and execute the function
-				return args[ lastToggle ].apply( this, arguments ) || false;
-			};
-
-		// link all the functions, so any of them can unbind this click handler
-		toggler.guid = guid;
-		while ( i < args.length ) {
-			args[ i++ ].guid = guid;
-		}
-
-		return this.click( toggler );
-	},
-
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-});
-
-var liveMap = {
-	focus: "focusin",
-	blur: "focusout",
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
-	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
-		var type, i = 0, match, namespaces, preType,
-			selector = origSelector || this.selector,
-			context = origSelector ? this : jQuery( this.context );
-
-		if ( typeof types === "object" && !types.preventDefault ) {
-			for ( var key in types ) {
-				context[ name ]( key, data, types[key], selector );
-			}
-
-			return this;
-		}
-
-		if ( name === "die" && !types &&
-					origSelector && origSelector.charAt(0) === "." ) {
-
-			context.unbind( origSelector );
-
-			return this;
-		}
-
-		if ( data === false || jQuery.isFunction( data ) ) {
-			fn = data || returnFalse;
-			data = undefined;
-		}
-
-		types = (types || "").split(" ");
-
-		while ( (type = types[ i++ ]) != null ) {
-			match = rnamespaces.exec( type );
-			namespaces = "";
-
-			if ( match )  {
-				namespaces = match[0];
-				type = type.replace( rnamespaces, "" );
-			}
-
-			if ( type === "hover" ) {
-				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
-				continue;
-			}
-
-			preType = type;
-
-			if ( liveMap[ type ] ) {
-				types.push( liveMap[ type ] + namespaces );
-				type = type + namespaces;
-
-			} else {
-				type = (liveMap[ type ] || type) + namespaces;
-			}
-
-			if ( name === "live" ) {
-				// bind live handler
-				for ( var j = 0, l = context.length; j < l; j++ ) {
-					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
-						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
-				}
-
-			} else {
-				// unbind live handler
-				context.unbind( "live." + liveConvert( type, selector ), fn );
-			}
-		}
-
-		return this;
-	};
-});
-
-function liveHandler( event ) {
-	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
-		elems = [],
-		selectors = [],
-		events = jQuery._data( this, "events" );
-
-	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
-	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
-		return;
-	}
-
-	if ( event.namespace ) {
-		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
-	}
-
-	event.liveFired = this;
-
-	var live = events.live.slice(0);
-
-	for ( j = 0; j < live.length; j++ ) {
-		handleObj = live[j];
-
-		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
-			selectors.push( handleObj.selector );
-
-		} else {
-			live.splice( j--, 1 );
-		}
-	}
-
-	match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
-	for ( i = 0, l = match.length; i < l; i++ ) {
-		close = match[i];
-
-		for ( j = 0; j < live.length; j++ ) {
-			handleObj = live[j];
-
-			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
-				elem = close.elem;
-				related = null;
-
-				// Those two events require additional checking
-				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
-					event.type = handleObj.preType;
-					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
-
-					// Make sure not to accidentally match a child element with the same selector
-					if ( related && jQuery.contains( elem, related ) ) {
-						related = elem;
-					}
-				}
-
-				if ( !related || related !== elem ) {
-					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
-				}
-			}
-		}
-	}
-
-	for ( i = 0, l = elems.length; i < l; i++ ) {
-		match = elems[i];
-
-		if ( maxLevel && match.level > maxLevel ) {
-			break;
-		}
-
-		event.currentTarget = match.elem;
-		event.data = match.handleObj.data;
-		event.handleObj = match.handleObj;
-
-		ret = match.handleObj.origHandler.apply( match.elem, arguments );
-
-		if ( ret === false || event.isPropagationStopped() ) {
-			maxLevel = match.level;
-
-			if ( ret === false ) {
-				stop = false;
-			}
-			if ( event.isImmediatePropagationStopped() ) {
-				break;
-			}
-		}
-	}
-
-	return stop;
-}
-
-function liveConvert( type, selector ) {
-	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		if ( fn == null ) {
-			fn = data;
-			data = null;
-		}
-
-		return arguments.length > 0 ?
-			this.bind( name, data, fn ) :
-			this.trigger( name );
-	};
-
-	if ( jQuery.attrFn ) {
-		jQuery.attrFn[ name ] = true;
-	}
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-	done = 0,
-	toString = Object.prototype.toString,
-	hasDuplicate = false,
-	baseHasDuplicate = true,
-	rBackslash = /\\/g,
-	rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-	baseHasDuplicate = false;
-	return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-	results = results || [];
-	context = context || document;
-
-	var origContext = context;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-		return [];
-	}
-	
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var m, set, checkSet, extra, ret, cur, pop, i,
-		prune = true,
-		contextXML = Sizzle.isXML( context ),
-		parts = [],
-		soFar = selector;
-	
-	// Reset the position of the chunker regexp (start from head)
-	do {
-		chunker.exec( "" );
-		m = chunker.exec( soFar );
-
-		if ( m ) {
-			soFar = m[3];
-		
-			parts.push( m[1] );
-		
-			if ( m[2] ) {
-				extra = m[3];
-				break;
-			}
-		}
-	} while ( m );
-
-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-			set = posProcess( parts[0] + parts[1], context );
-
-		} else {
-			set = Expr.relative[ parts[0] ] ?
-				[ context ] :
-				Sizzle( parts.shift(), context );
-
-			while ( parts.length ) {
-				selector = parts.shift();
-
-				if ( Expr.relative[ selector ] ) {
-					selector += parts.shift();
-				}
-				
-				set = posProcess( selector, set );
-			}
-		}
-
-	} else {
-		// Take a shortcut and set the context if the root selector is an ID
-		// (but not if it'll be faster if the inner selector is an ID)
-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-			ret = Sizzle.find( parts.shift(), context, contextXML );
-			context = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set )[0] :
-				ret.set[0];
-		}
-
-		if ( context ) {
-			ret = seed ?
-				{ expr: parts.pop(), set: makeArray(seed) } :
-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-			set = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set ) :
-				ret.set;
-
-			if ( parts.length > 0 ) {
-				checkSet = makeArray( set );
-
-			} else {
-				prune = false;
-			}
-
-			while ( parts.length ) {
-				cur = parts.pop();
-				pop = cur;
-
-				if ( !Expr.relative[ cur ] ) {
-					cur = "";
-				} else {
-					pop = parts.pop();
-				}
-
-				if ( pop == null ) {
-					pop = context;
-				}
-
-				Expr.relative[ cur ]( checkSet, pop, contextXML );
-			}
-
-		} else {
-			checkSet = parts = [];
-		}
-	}
-
-	if ( !checkSet ) {
-		checkSet = set;
-	}
-
-	if ( !checkSet ) {
-		Sizzle.error( cur || selector );
-	}
-
-	if ( toString.call(checkSet) === "[object Array]" ) {
-		if ( !prune ) {
-			results.push.apply( results, checkSet );
-
-		} else if ( context && context.nodeType === 1 ) {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-
-		} else {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-					results.push( set[i] );
-				}
-			}
-		}
-
-	} else {
-		makeArray( checkSet, results );
-	}
-
-	if ( extra ) {
-		Sizzle( extra, origContext, results, seed );
-		Sizzle.uniqueSort( results );
-	}
-
-	return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
-	if ( sortOrder ) {
-		hasDuplicate = baseHasDuplicate;
-		results.sort( sortOrder );
-
-		if ( hasDuplicate ) {
-			for ( var i = 1; i < results.length; i++ ) {
-				if ( results[i] === results[ i - 1 ] ) {
-					results.splice( i--, 1 );
-				}
-			}
-		}
-	}
-
-	return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-	return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-	return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-	var set;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
-		var match,
-			type = Expr.order[i];
-		
-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-			var left = match[1];
-			match.splice( 1, 1 );
-
-			if ( left.substr( left.length - 1 ) !== "\\" ) {
-				match[1] = (match[1] || "").replace( rBackslash, "" );
-				set = Expr.find[ type ]( match, context, isXML );
-
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( "*" ) :
-			[];
-	}
-
-	return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-	var match, anyFound,
-		old = expr,
-		result = [],
-		curLoop = set,
-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-	while ( expr && set.length ) {
-		for ( var type in Expr.filter ) {
-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-				var found, item,
-					filter = Expr.filter[ type ],
-					left = match[1];
-
-				anyFound = false;
-
-				match.splice(1,1);
-
-				if ( left.substr( left.length - 1 ) === "\\" ) {
-					continue;
-				}
-
-				if ( curLoop === result ) {
-					result = [];
-				}
-
-				if ( Expr.preFilter[ type ] ) {
-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-					if ( !match ) {
-						anyFound = found = true;
-
-					} else if ( match === true ) {
-						continue;
-					}
-				}
-
-				if ( match ) {
-					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
-						if ( item ) {
-							found = filter( item, match, i, curLoop );
-							var pass = not ^ !!found;
-
-							if ( inplace && found != null ) {
-								if ( pass ) {
-									anyFound = true;
-
-								} else {
-									curLoop[i] = false;
-								}
-
-							} else if ( pass ) {
-								result.push( item );
-								anyFound = true;
-							}
-						}
-					}
-				}
-
-				if ( found !== undefined ) {
-					if ( !inplace ) {
-						curLoop = result;
-					}
-
-					expr = expr.replace( Expr.match[ type ], "" );
-
-					if ( !anyFound ) {
-						return [];
-					}
-
-					break;
-				}
-			}
-		}
-
-		// Improper expression
-		if ( expr === old ) {
-			if ( anyFound == null ) {
-				Sizzle.error( expr );
-
-			} else {
-				break;
-			}
-		}
-
-		old = expr;
-	}
-
-	return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-	throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
-	order: [ "ID", "NAME", "TAG" ],
-
-	match: {
-		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-	},
-
-	leftMatch: {},
-
-	attrMap: {
-		"class": "className",
-		"for": "htmlFor"
-	},
-
-	attrHandle: {
-		href: function( elem ) {
-			return elem.getAttribute( "href" );
-		},
-		type: function( elem ) {
-			return elem.getAttribute( "type" );
-		}
-	},
-
-	relative: {
-		"+": function(checkSet, part){
-			var isPartStr = typeof part === "string",
-				isTag = isPartStr && !rNonWord.test( part ),
-				isPartStrNotTag = isPartStr && !isTag;
-
-			if ( isTag ) {
-				part = part.toLowerCase();
-			}
-
-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-				if ( (elem = checkSet[i]) ) {
-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-						elem || false :
-						elem === part;
-				}
-			}
-
-			if ( isPartStrNotTag ) {
-				Sizzle.filter( part, checkSet, true );
-			}
-		},
-
-		">": function( checkSet, part ) {
-			var elem,
-				isPartStr = typeof part === "string",
-				i = 0,
-				l = checkSet.length;
-
-			if ( isPartStr && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-					}
-				}
-
-			} else {
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						checkSet[i] = isPartStr ?
-							elem.parentNode :
-							elem.parentNode === part;
-					}
-				}
-
-				if ( isPartStr ) {
-					Sizzle.filter( part, checkSet, true );
-				}
-			}
-		},
-
-		"": function(checkSet, part, isXML){
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-		},
-
-		"~": function( checkSet, part, isXML ) {
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-		}
-	},
-
-	find: {
-		ID: function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [m] : [];
-			}
-		},
-
-		NAME: function( match, context ) {
-			if ( typeof context.getElementsByName !== "undefined" ) {
-				var ret = [],
-					results = context.getElementsByName( match[1] );
-
-				for ( var i = 0, l = results.length; i < l; i++ ) {
-					if ( results[i].getAttribute("name") === match[1] ) {
-						ret.push( results[i] );
-					}
-				}
-
-				return ret.length === 0 ? null : ret;
-			}
-		},
-
-		TAG: function( match, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( match[1] );
-			}
-		}
-	},
-	preFilter: {
-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-			match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-			if ( isXML ) {
-				return match;
-			}
-
-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-				if ( elem ) {
-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-						if ( !inplace ) {
-							result.push( elem );
-						}
-
-					} else if ( inplace ) {
-						curLoop[i] = false;
-					}
-				}
-			}
-
-			return false;
-		},
-
-		ID: function( match ) {
-			return match[1].replace( rBackslash, "" );
-		},
-
-		TAG: function( match, curLoop ) {
-			return match[1].replace( rBackslash, "" ).toLowerCase();
-		},
-
-		CHILD: function( match ) {
-			if ( match[1] === "nth" ) {
-				if ( !match[2] ) {
-					Sizzle.error( match[0] );
-				}
-
-				match[2] = match[2].replace(/^\+|\s*/g, '');
-
-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-				// calculate the numbers (first)n+(last) including if they are negative
-				match[2] = (test[1] + (test[2] || 1)) - 0;
-				match[3] = test[3] - 0;
-			}
-			else if ( match[2] ) {
-				Sizzle.error( match[0] );
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = done++;
-
-			return match;
-		},
-
-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-			var name = match[1] = match[1].replace( rBackslash, "" );
-			
-			if ( !isXML && Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			// Handle if an un-quoted value was used
-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-			if ( match[2] === "~=" ) {
-				match[4] = " " + match[4] + " ";
-			}
-
-			return match;
-		},
-
-		PSEUDO: function( match, curLoop, inplace, result, not ) {
-			if ( match[1] === "not" ) {
-				// If we're dealing with a complex expression, or a simple one
-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-					match[3] = Sizzle(match[3], null, null, curLoop);
-
-				} else {
-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-					if ( !inplace ) {
-						result.push.apply( result, ret );
-					}
-
-					return false;
-				}
-
-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-				return true;
-			}
-			
-			return match;
-		},
-
-		POS: function( match ) {
-			match.unshift( true );
-
-			return match;
-		}
-	},
-	
-	filters: {
-		enabled: function( elem ) {
-			return elem.disabled === false && elem.type !== "hidden";
-		},
-
-		disabled: function( elem ) {
-			return elem.disabled === true;
-		},
-
-		checked: function( elem ) {
-			return elem.checked === true;
-		},
-		
-		selected: function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-			
-			return elem.selected === true;
-		},
-
-		parent: function( elem ) {
-			return !!elem.firstChild;
-		},
-
-		empty: function( elem ) {
-			return !elem.firstChild;
-		},
-
-		has: function( elem, i, match ) {
-			return !!Sizzle( match[3], elem ).length;
-		},
-
-		header: function( elem ) {
-			return (/h\d/i).test( elem.nodeName );
-		},
-
-		text: function( elem ) {
-			var attr = elem.getAttribute( "type" ), type = elem.type;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-		},
-
-		radio: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-		},
-
-		checkbox: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-		},
-
-		file: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-		},
-
-		password: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-		},
-
-		submit: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "submit" === elem.type;
-		},
-
-		image: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-		},
-
-		reset: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "reset" === elem.type;
-		},
-
-		button: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && "button" === elem.type || name === "button";
-		},
-
-		input: function( elem ) {
-			return (/input|select|textarea|button/i).test( elem.nodeName );
-		},
-
-		focus: function( elem ) {
-			return elem === elem.ownerDocument.activeElement;
-		}
-	},
-	setFilters: {
-		first: function( elem, i ) {
-			return i === 0;
-		},
-
-		last: function( elem, i, match, array ) {
-			return i === array.length - 1;
-		},
-
-		even: function( elem, i ) {
-			return i % 2 === 0;
-		},
-
-		odd: function( elem, i ) {
-			return i % 2 === 1;
-		},
-
-		lt: function( elem, i, match ) {
-			return i < match[3] - 0;
-		},
-
-		gt: function( elem, i, match ) {
-			return i > match[3] - 0;
-		},
-
-		nth: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		},
-
-		eq: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		}
-	},
-	filter: {
-		PSEUDO: function( elem, match, i, array ) {
-			var name = match[1],
-				filter = Expr.filters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-
-			} else if ( name === "contains" ) {
-				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var j = 0, l = not.length; j < l; j++ ) {
-					if ( not[j] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-
-			} else {
-				Sizzle.error( name );
-			}
-		},
-
-		CHILD: function( elem, match ) {
-			var type = match[1],
-				node = elem;
-
-			switch ( type ) {
-				case "only":
-				case "first":
-					while ( (node = node.previousSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					if ( type === "first" ) { 
-						return true; 
-					}
-
-					node = elem;
-
-				case "last":
-					while ( (node = node.nextSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					return true;
-
-				case "nth":
-					var first = match[2],
-						last = match[3];
-
-					if ( first === 1 && last === 0 ) {
-						return true;
-					}
-					
-					var doneName = match[0],
-						parent = elem.parentNode;
-	
-					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
-						var count = 0;
-						
-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
-							if ( node.nodeType === 1 ) {
-								node.nodeIndex = ++count;
-							}
-						} 
-
-						parent.sizcache = doneName;
-					}
-					
-					var diff = elem.nodeIndex - last;
-
-					if ( first === 0 ) {
-						return diff === 0;
-
-					} else {
-						return ( diff % first === 0 && diff / first >= 0 );
-					}
-			}
-		},
-
-		ID: function( elem, match ) {
-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
-		},
-
-		TAG: function( elem, match ) {
-			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
-		},
-		
-		CLASS: function( elem, match ) {
-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
-				.indexOf( match ) > -1;
-		},
-
-		ATTR: function( elem, match ) {
-			var name = match[1],
-				result = Expr.attrHandle[ name ] ?
-					Expr.attrHandle[ name ]( elem ) :
-					elem[ name ] != null ?
-						elem[ name ] :
-						elem.getAttribute( name ),
-				value = result + "",
-				type = match[2],
-				check = match[4];
-
-			return result == null ?
-				type === "!=" :
-				type === "=" ?
-				value === check :
-				type === "*=" ?
-				value.indexOf(check) >= 0 :
-				type === "~=" ?
-				(" " + value + " ").indexOf(check) >= 0 :
-				!check ?
-				value && result !== false :
-				type === "!=" ?
-				value !== check :
-				type === "^=" ?
-				value.indexOf(check) === 0 :
-				type === "$=" ?
-				value.substr(value.length - check.length) === check :
-				type === "|=" ?
-				value === check || value.substr(0, check.length + 1) === check + "-" :
-				false;
-		},
-
-		POS: function( elem, match, i, array ) {
-			var name = match[2],
-				filter = Expr.setFilters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			}
-		}
-	}
-};
-
-var origPOS = Expr.match.POS,
-	fescape = function(all, num){
-		return "\\" + (num - 0 + 1);
-	};
-
-for ( var type in Expr.match ) {
-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
-	array = Array.prototype.slice.call( array, 0 );
-
-	if ( results ) {
-		results.push.apply( results, array );
-		return results;
-	}
-	
-	return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-	makeArray = function( array, results ) {
-		var i = 0,
-			ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-
-			} else {
-				for ( ; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-			return a.compareDocumentPosition ? -1 : 1;
-		}
-
-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-	};
-
-} else {
-	sortOrder = function( a, b ) {
-		// The nodes are identical, we can exit early
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
-		} else if ( a.sourceIndex && b.sourceIndex ) {
-			return a.sourceIndex - b.sourceIndex;
-		}
-
-		var al, bl,
-			ap = [],
-			bp = [],
-			aup = a.parentNode,
-			bup = b.parentNode,
-			cur = aup;
-
-		// If the nodes are siblings (or identical) we can do a quick check
-		if ( aup === bup ) {
-			return siblingCheck( a, b );
-
-		// If no parents were found then the nodes are disconnected
-		} else if ( !aup ) {
-			return -1;
-
-		} else if ( !bup ) {
-			return 1;
-		}
-
-		// Otherwise they're somewhere else in the tree so we need
-		// to build up a full list of the parentNodes for comparison
-		while ( cur ) {
-			ap.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		cur = bup;
-
-		while ( cur ) {
-			bp.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		al = ap.length;
-		bl = bp.length;
-
-		// Start walking down the tree looking for a discrepancy
-		for ( var i = 0; i < al && i < bl; i++ ) {
-			if ( ap[i] !== bp[i] ) {
-				return siblingCheck( ap[i], bp[i] );
-			}
-		}
-
-		// We ended someplace up the tree so do a sibling check
-		return i === al ?
-			siblingCheck( a, bp[i], -1 ) :
-			siblingCheck( ap[i], b, 1 );
-	};
-
-	siblingCheck = function( a, b, ret ) {
-		if ( a === b ) {
-			return ret;
-		}
-
-		var cur = a.nextSibling;
-
-		while ( cur ) {
-			if ( cur === b ) {
-				return -1;
-			}
-
-			cur = cur.nextSibling;
-		}
-
-		return 1;
-	};
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-Sizzle.getText = function( elems ) {
-	var ret = "", elem;
-
-	for ( var i = 0; elems[i]; i++ ) {
-		elem = elems[i];
-
-		// Get the text from text nodes and CDATA nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
-			ret += elem.nodeValue;
-
-		// Traverse everything else, except comment nodes
-		} else if ( elem.nodeType !== 8 ) {
-			ret += Sizzle.getText( elem.childNodes );
-		}
-	}
-
-	return ret;
-};
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-	// We're going to inject a fake input element with a specified name
-	var form = document.createElement("div"),
-		id = "script" + (new Date()).getTime(),
-		root = document.documentElement;
-
-	form.innerHTML = "<a name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	root.insertBefore( form, root.firstChild );
-
-	// The workaround has to do additional checks after a getElementById
-	// Which slows things down for other browsers (hence the branching)
-	if ( document.getElementById( id ) ) {
-		Expr.find.ID = function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-
-				return m ?
-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-						[m] :
-						undefined :
-					[];
-			}
-		};
-
-		Expr.filter.ID = function( elem, match ) {
-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-			return elem.nodeType === 1 && node && node.nodeValue === match;
-		};
-	}
-
-	root.removeChild( form );
-
-	// release memory in IE
-	root = form = null;
-})();
-
-(function(){
-	// Check to see if the browser returns only elements
-	// when doing getElementsByTagName("*")
-
-	// Create a fake element
-	var div = document.createElement("div");
-	div.appendChild( document.createComment("") );
-
-	// Make sure no comments are found
-	if ( div.getElementsByTagName("*").length > 0 ) {
-		Expr.find.TAG = function( match, context ) {
-			var results = context.getElementsByTagName( match[1] );
-
-			// Filter out possible comments
-			if ( match[1] === "*" ) {
-				var tmp = [];
-
-				for ( var i = 0; results[i]; i++ ) {
-					if ( results[i].nodeType === 1 ) {
-						tmp.push( results[i] );
-					}
-				}
-
-				results = tmp;
-			}
-
-			return results;
-		};
-	}
-
-	// Check to see if an attribute returns normalized href attributes
-	div.innerHTML = "<a href='#'></a>";
-
-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-			div.firstChild.getAttribute("href") !== "#" ) {
-
-		Expr.attrHandle.href = function( elem ) {
-			return elem.getAttribute( "href", 2 );
-		};
-	}
-
-	// release memory in IE
-	div = null;
-})();
-
-if ( document.querySelectorAll ) {
-	(function(){
-		var oldSizzle = Sizzle,
-			div = document.createElement("div"),
-			id = "__sizzle__";
-
-		div.innerHTML = "<p class='TEST'></p>";
-
-		// Safari can't handle uppercase or unicode characters when
-		// in quirks mode.
-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-			return;
-		}
-	
-		Sizzle = function( query, context, extra, seed ) {
-			context = context || document;
-
-			// Only use querySelectorAll on non-XML documents
-			// (ID selectors don't work in non-HTML documents)
-			if ( !seed && !Sizzle.isXML(context) ) {
-				// See if we find a selector to speed up
-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-				
-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-					// Speed-up: Sizzle("TAG")
-					if ( match[1] ) {
-						return makeArray( context.getElementsByTagName( query ), extra );
-					
-					// Speed-up: Sizzle(".CLASS")
-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-						return makeArray( context.getElementsByClassName( match[2] ), extra );
-					}
-				}
-				
-				if ( context.nodeType === 9 ) {
-					// Speed-up: Sizzle("body")
-					// The body element only exists once, optimize finding it
-					if ( query === "body" && context.body ) {
-						return makeArray( [ context.body ], extra );
-						
-					// Speed-up: Sizzle("#ID")
-					} else if ( match && match[3] ) {
-						var elem = context.getElementById( match[3] );
-
-						// Check parentNode to catch when Blackberry 4.6 returns
-						// nodes that are no longer in the document #6963
-						if ( elem && elem.parentNode ) {
-							// Handle the case where IE and Opera return items
-							// by name instead of ID
-							if ( elem.id === match[3] ) {
-								return makeArray( [ elem ], extra );
-							}
-							
-						} else {
-							return makeArray( [], extra );
-						}
-					}
-					
-					try {
-						return makeArray( context.querySelectorAll(query), extra );
-					} catch(qsaError) {}
-
-				// qSA works strangely on Element-rooted queries
-				// We can work around this by specifying an extra ID on the root
-				// and working up from there (Thanks to Andrew Dupont for the technique)
-				// IE 8 doesn't work on object elements
-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-					var oldContext = context,
-						old = context.getAttribute( "id" ),
-						nid = old || id,
-						hasParent = context.parentNode,
-						relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-					if ( !old ) {
-						context.setAttribute( "id", nid );
-					} else {
-						nid = nid.replace( /'/g, "\\$&" );
-					}
-					if ( relativeHierarchySelector && hasParent ) {
-						context = context.parentNode;
-					}
-
-					try {
-						if ( !relativeHierarchySelector || hasParent ) {
-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-						}
-
-					} catch(pseudoError) {
-					} finally {
-						if ( !old ) {
-							oldContext.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-		
-			return oldSizzle(query, context, extra, seed);
-		};
-
-		for ( var prop in oldSizzle ) {
-			Sizzle[ prop ] = oldSizzle[ prop ];
-		}
-
-		// release memory in IE
-		div = null;
-	})();
-}
-
-(function(){
-	var html = document.documentElement,
-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-	if ( matches ) {
-		// Check to see if it's possible to do matchesSelector
-		// on a disconnected node (IE 9 fails this)
-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-			pseudoWorks = false;
-
-		try {
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( document.documentElement, "[test!='']:sizzle" );
-	
-		} catch( pseudoError ) {
-			pseudoWorks = true;
-		}
-
-		Sizzle.matchesSelector = function( node, expr ) {
-			// Make sure that attribute selectors are quoted
-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-			if ( !Sizzle.isXML( node ) ) {
-				try { 
-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-						var ret = matches.call( node, expr );
-
-						// IE 9's matchesSelector returns false on disconnected nodes
-						if ( ret || !disconnectedMatch ||
-								// As well, disconnected nodes are said to be in a document
-								// fragment in IE 9, so check for that
-								node.document && node.document.nodeType !== 11 ) {
-							return ret;
-						}
-					}
-				} catch(e) {}
-			}
-
-			return Sizzle(expr, null, null, [node]).length > 0;
-		};
-	}
-})();
-
-(function(){
-	var div = document.createElement("div");
-
-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-	// Opera can't find a second classname (in 9.6)
-	// Also, make sure that getElementsByClassName actually exists
-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-		return;
-	}
-
-	// Safari caches class attributes, doesn't catch changes (in 3.2)
-	div.lastChild.className = "e";
-
-	if ( div.getElementsByClassName("e").length === 1 ) {
-		return;
-	}
-	
-	Expr.order.splice(1, 0, "CLASS");
-	Expr.find.CLASS = function( match, context, isXML ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-			return context.getElementsByClassName(match[1]);
-		}
-	};
-
-	// release memory in IE
-	div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem.sizcache === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 && !isXML ){
-					elem.sizcache = doneName;
-					elem.sizset = i;
-				}
-
-				if ( elem.nodeName.toLowerCase() === cur ) {
-					match = elem;
-					break;
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-			
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem.sizcache === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 ) {
-					if ( !isXML ) {
-						elem.sizcache = doneName;
-						elem.sizset = i;
-					}
-
-					if ( typeof cur !== "string" ) {
-						if ( elem === cur ) {
-							match = true;
-							break;
-						}
-
-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-						match = elem;
-						break;
-					}
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-if ( document.documentElement.contains ) {
-	Sizzle.contains = function( a, b ) {
-		return a !== b && (a.contains ? a.contains(b) : true);
-	};
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-	Sizzle.contains = function( a, b ) {
-		return !!(a.compareDocumentPosition(b) & 16);
-	};
-
-} else {
-	Sizzle.contains = function() {
-		return false;
-	};
-}
-
-Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833) 
-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context ) {
-	var match,
-		tmpSet = [],
-		later = "",
-		root = context.nodeType ? [context] : context;
-
-	// Position selectors must be done after the filter
-	// And so must :not(positional) so we move all PSEUDOs to the end
-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-		later += match[0];
-		selector = selector.replace( Expr.match.PSEUDO, "" );
-	}
-
-	selector = Expr.relative[selector] ? selector + "*" : selector;
-
-	for ( var i = 0, l = root.length; i < l; i++ ) {
-		Sizzle( selector, root[i], tmpSet );
-	}
-
-	return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-	// Note: This RegExp should be improved, or likely pulled from Sizzle
-	rmultiselector = /,/,
-	isSimple = /^.[^:#\[\.,]*$/,
-	slice = Array.prototype.slice,
-	POS = jQuery.expr.match.POS,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var self = this,
-			i, l;
-
-		if ( typeof selector !== "string" ) {
-			return jQuery( selector ).filter(function() {
-				for ( i = 0, l = self.length; i < l; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			});
-		}
-
-		var ret = this.pushStack( "", "find", selector ),
-			length, n, r;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			length = ret.length;
-			jQuery.find( selector, this[i], ret );
-
-			if ( i > 0 ) {
-				// Make sure that the results are unique
-				for ( n = length; n < ret.length; n++ ) {
-					for ( r = 0; r < length; r++ ) {
-						if ( ret[r] === ret[n] ) {
-							ret.splice(n--, 1);
-							break;
-						}
-					}
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	has: function( target ) {
-		var targets = jQuery( target );
-		return this.filter(function() {
-			for ( var i = 0, l = targets.length; i < l; i++ ) {
-				if ( jQuery.contains( this, targets[i] ) ) {
-					return true;
-				}
-			}
-		});
-	},
-
-	not: function( selector ) {
-		return this.pushStack( winnow(this, selector, false), "not", selector);
-	},
-
-	filter: function( selector ) {
-		return this.pushStack( winnow(this, selector, true), "filter", selector );
-	},
-
-	is: function( selector ) {
-		return !!selector && ( typeof selector === "string" ?
-			jQuery.filter( selector, this ).length > 0 :
-			this.filter( selector ).length > 0 );
-	},
-
-	closest: function( selectors, context ) {
-		var ret = [], i, l, cur = this[0];
-		
-		// Array
-		if ( jQuery.isArray( selectors ) ) {
-			var match, selector,
-				matches = {},
-				level = 1;
-
-			if ( cur && selectors.length ) {
-				for ( i = 0, l = selectors.length; i < l; i++ ) {
-					selector = selectors[i];
-
-					if ( !matches[ selector ] ) {
-						matches[ selector ] = POS.test( selector ) ?
-							jQuery( selector, context || this.context ) :
-							selector;
-					}
-				}
-
-				while ( cur && cur.ownerDocument && cur !== context ) {
-					for ( selector in matches ) {
-						match = matches[ selector ];
-
-						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
-							ret.push({ selector: selector, elem: cur, level: level });
-						}
-					}
-
-					cur = cur.parentNode;
-					level++;
-				}
-			}
-
-			return ret;
-		}
-
-		// String
-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			cur = this[i];
-
-			while ( cur ) {
-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-					ret.push( cur );
-					break;
-
-				} else {
-					cur = cur.parentNode;
-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-						break;
-					}
-				}
-			}
-		}
-
-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-		return this.pushStack( ret, "closest", selectors );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-		if ( !elem || typeof elem === "string" ) {
-			return jQuery.inArray( this[0],
-				// If it receives a string, the selector is used
-				// If it receives nothing, the siblings are used
-				elem ? jQuery( elem ) : this.parent().children() );
-		}
-		// Locate the position of the desired element
-		return jQuery.inArray(
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[0] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		var set = typeof selector === "string" ?
-				jQuery( selector, context ) :
-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-			all = jQuery.merge( this.get(), set );
-
-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-			all :
-			jQuery.unique( all ) );
-	},
-
-	andSelf: function() {
-		return this.add( this.prevObject );
-	}
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return jQuery.dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return jQuery.nth( elem, 2, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return jQuery.nth( elem, 2, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return jQuery.dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return jQuery.dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return jQuery.sibling( elem.parentNode.firstChild, elem );
-	},
-	children: function( elem ) {
-		return jQuery.sibling( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.makeArray( elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until ),
-			// The variable 'args' was introduced in
-			// https://github.com/jquery/jquery/commit/52a0238
-			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
-			// http://code.google.com/p/v8/issues/detail?id=1050
-			args = slice.call(arguments);
-
-		if ( !runtil.test( name ) ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-			ret = ret.reverse();
-		}
-
-		return this.pushStack( ret, name, args.join(",") );
-	};
-});
-
-jQuery.extend({
-	filter: function( expr, elems, not ) {
-		if ( not ) {
-			expr = ":not(" + expr + ")";
-		}
-
-		return elems.length === 1 ?
-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-			jQuery.find.matches(expr, elems);
-	},
-
-	dir: function( elem, dir, until ) {
-		var matched = [],
-			cur = elem[ dir ];
-
-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-			if ( cur.nodeType === 1 ) {
-				matched.push( cur );
-			}
-			cur = cur[dir];
-		}
-		return matched;
-	},
-
-	nth: function( cur, result, dir, elem ) {
-		result = result || 1;
-		var num = 0;
-
-		for ( ; cur; cur = cur[dir] ) {
-			if ( cur.nodeType === 1 && ++num === result ) {
-				break;
-			}
-		}
-
-		return cur;
-	},
-
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType === 1 && n !== elem ) {
-				r.push( n );
-			}
-		}
-
-		return r;
-	}
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-	// Can't pass null or undefined to indexOf in Firefox 4
-	// Set to 0 to skip string check
-	qualifier = qualifier || 0;
-
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			var retVal = !!qualifier.call( elem, i, elem );
-			return retVal === keep;
-		});
-
-	} else if ( qualifier.nodeType ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			return (elem === qualifier) === keep;
-		});
-
-	} else if ( typeof qualifier === "string" ) {
-		var filtered = jQuery.grep(elements, function( elem ) {
-			return elem.nodeType === 1;
-		});
-
-		if ( isSimple.test( qualifier ) ) {
-			return jQuery.filter(qualifier, filtered, !keep);
-		} else {
-			qualifier = jQuery.filter( qualifier, filtered );
-		}
-	}
-
-	return jQuery.grep(elements, function( elem, i ) {
-		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
-	});
-}
-
-
-
-
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnocache = /<(?:script|object|embed|option|style)/i,
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /\/(java|ecma)script/i,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-	wrapMap = {
-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
-		legend: [ 1, "<fieldset>", "</fieldset>" ],
-		thead: [ 1, "<table>", "</table>" ],
-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-		area: [ 1, "<map>", "</map>" ],
-		_default: [ 0, "", "" ]
-	};
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-	wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-	text: function( text ) {
-		if ( jQuery.isFunction(text) ) {
-			return this.each(function(i) {
-				var self = jQuery( this );
-
-				self.text( text.call(this, i, self.text()) );
-			});
-		}
-
-		if ( typeof text !== "object" && text !== undefined ) {
-			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
-		}
-
-		return jQuery.text( this );
-	},
-
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapAll( html.call(this, i) );
-			});
-		}
-
-		if ( this[0] ) {
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-			if ( this[0].parentNode ) {
-				wrap.insertBefore( this[0] );
-			}
-
-			wrap.map(function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			}).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapInner( html.call(this, i) );
-			});
-		}
-
-		return this.each(function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		});
-	},
-
-	wrap: function( html ) {
-		return this.each(function() {
-			jQuery( this ).wrapAll( html );
-		});
-	},
-
-	unwrap: function() {
-		return this.parent().each(function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		}).end();
-	},
-
-	append: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.appendChild( elem );
-			}
-		});
-	},
-
-	prepend: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.insertBefore( elem, this.firstChild );
-			}
-		});
-	},
-
-	before: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this );
-			});
-		} else if ( arguments.length ) {
-			var set = jQuery(arguments[0]);
-			set.push.apply( set, this.toArray() );
-			return this.pushStack( set, "before", arguments );
-		}
-	},
-
-	after: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			});
-		} else if ( arguments.length ) {
-			var set = this.pushStack( this, "after", arguments );
-			set.push.apply( set, jQuery(arguments[0]).toArray() );
-			return set;
-		}
-	},
-
-	// keepData is for internal use only--do not document
-	remove: function( selector, keepData ) {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-				if ( !keepData && elem.nodeType === 1 ) {
-					jQuery.cleanData( elem.getElementsByTagName("*") );
-					jQuery.cleanData( [ elem ] );
-				}
-
-				if ( elem.parentNode ) {
-					elem.parentNode.removeChild( elem );
-				}
-			}
-		}
-
-		return this;
-	},
-
-	empty: function() {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( elem.getElementsByTagName("*") );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function () {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	html: function( value ) {
-		if ( value === undefined ) {
-			return this[0] && this[0].nodeType === 1 ?
-				this[0].innerHTML.replace(rinlinejQuery, "") :
-				null;
-
-		// See if we can take a shortcut and just use innerHTML
-		} else if ( typeof value === "string" && !rnocache.test( value ) &&
-			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
-			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
-			value = value.replace(rxhtmlTag, "<$1></$2>");
-
-			try {
-				for ( var i = 0, l = this.length; i < l; i++ ) {
-					// Remove element nodes and prevent memory leaks
-					if ( this[i].nodeType === 1 ) {
-						jQuery.cleanData( this[i].getElementsByTagName("*") );
-						this[i].innerHTML = value;
-					}
-				}
-
-			// If using innerHTML throws an exception, use the fallback method
-			} catch(e) {
-				this.empty().append( value );
-			}
-
-		} else if ( jQuery.isFunction( value ) ) {
-			this.each(function(i){
-				var self = jQuery( this );
-
-				self.html( value.call(this, i, self.html()) );
-			});
-
-		} else {
-			this.empty().append( value );
-		}
-
-		return this;
-	},
-
-	replaceWith: function( value ) {
-		if ( this[0] && this[0].parentNode ) {
-			// Make sure that the elements are removed from the DOM before they are inserted
-			// this can help fix replacing a parent with child elements
-			if ( jQuery.isFunction( value ) ) {
-				return this.each(function(i) {
-					var self = jQuery(this), old = self.html();
-					self.replaceWith( value.call( this, i, old ) );
-				});
-			}
-
-			if ( typeof value !== "string" ) {
-				value = jQuery( value ).detach();
-			}
-
-			return this.each(function() {
-				var next = this.nextSibling,
-					parent = this.parentNode;
-
-				jQuery( this ).remove();
-
-				if ( next ) {
-					jQuery(next).before( value );
-				} else {
-					jQuery(parent).append( value );
-				}
-			});
-		} else {
-			return this.length ?
-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-				this;
-		}
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, table, callback ) {
-		var results, first, fragment, parent,
-			value = args[0],
-			scripts = [];
-
-		// We can't cloneNode fragments that contain checked, in WebKit
-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-			return this.each(function() {
-				jQuery(this).domManip( args, table, callback, true );
-			});
-		}
-
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				args[0] = value.call(this, i, table ? self.html() : undefined);
-				self.domManip( args, table, callback );
-			});
-		}
-
-		if ( this[0] ) {
-			parent = value && value.parentNode;
-
-			// If we're in a fragment, just use that instead of building a new one
-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-				results = { fragment: parent };
-
-			} else {
-				results = jQuery.buildFragment( args, this, scripts );
-			}
-
-			fragment = results.fragment;
-
-			if ( fragment.childNodes.length === 1 ) {
-				first = fragment = fragment.firstChild;
-			} else {
-				first = fragment.firstChild;
-			}
-
-			if ( first ) {
-				table = table && jQuery.nodeName( first, "tr" );
-
-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-					callback.call(
-						table ?
-							root(this[i], first) :
-							this[i],
-						// Make sure that we do not leak memory by inadvertently discarding
-						// the original fragment (which might have attached data) instead of
-						// using it; in addition, use the original fragment object for the last
-						// item instead of first because it can end up being emptied incorrectly
-						// in certain situations (Bug #8070).
-						// Fragments from the fragment cache must always be cloned and never used
-						// in place.
-						results.cacheable || (l > 1 && i < lastIndex) ?
-							jQuery.clone( fragment, true, true ) :
-							fragment
-					);
-				}
-			}
-
-			if ( scripts.length ) {
-				jQuery.each( scripts, evalScript );
-			}
-		}
-
-		return this;
-	}
-});
-
-function root( elem, cur ) {
-	return jQuery.nodeName(elem, "table") ?
-		(elem.getElementsByTagName("tbody")[0] ||
-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-		elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var internalKey = jQuery.expando,
-		oldData = jQuery.data( src ),
-		curData = jQuery.data( dest, oldData );
-
-	// Switch to use the internal data object, if it exists, for the next
-	// stage of data copying
-	if ( (oldData = oldData[ internalKey ]) ) {
-		var events = oldData.events;
-				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
-
-		if ( events ) {
-			delete curData.handle;
-			curData.events = {};
-
-			for ( var type in events ) {
-				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
-					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
-				}
-			}
-		}
-	}
-}
-
-function cloneFixAttributes( src, dest ) {
-	var nodeName;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// clearAttributes removes the attributes, which we don't want,
-	// but also removes the attachEvent events, which we *do* want
-	if ( dest.clearAttributes ) {
-		dest.clearAttributes();
-	}
-
-	// mergeAttributes, in contrast, only merges back on the
-	// original attributes, not the events
-	if ( dest.mergeAttributes ) {
-		dest.mergeAttributes( src );
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 fail to clone children inside object elements that use
-	// the proprietary classid attribute value (rather than the type
-	// attribute) to identify the type of content to display
-	if ( nodeName === "object" ) {
-		dest.outerHTML = src.outerHTML;
-
-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-		if ( src.checked ) {
-			dest.defaultChecked = dest.checked = src.checked;
-		}
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-
-	// Event data gets referenced instead of copied if the expando
-	// gets copied too
-	dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-	var fragment, cacheable, cacheresults,
-		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
-
-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-	// Cloning options loses the selected state, so don't cache them
-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
-		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
-		cacheable = true;
-
-		cacheresults = jQuery.fragments[ args[0] ];
-		if ( cacheresults && cacheresults !== 1 ) {
-			fragment = cacheresults;
-		}
-	}
-
-	if ( !fragment ) {
-		fragment = doc.createDocumentFragment();
-		jQuery.clean( args, doc, fragment, scripts );
-	}
-
-	if ( cacheable ) {
-		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
-	}
-
-	return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var ret = [],
-			insert = jQuery( selector ),
-			parent = this.length === 1 && this[0].parentNode;
-
-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-			insert[ original ]( this[0] );
-			return this;
-
-		} else {
-			for ( var i = 0, l = insert.length; i < l; i++ ) {
-				var elems = (i > 0 ? this.clone(true) : this).get();
-				jQuery( insert[i] )[ original ]( elems );
-				ret = ret.concat( elems );
-			}
-
-			return this.pushStack( ret, name, insert.selector );
-		}
-	};
-});
-
-function getAll( elem ) {
-	if ( "getElementsByTagName" in elem ) {
-		return elem.getElementsByTagName( "*" );
-
-	} else if ( "querySelectorAll" in elem ) {
-		return elem.querySelectorAll( "*" );
-
-	} else {
-		return [];
-	}
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-	if ( jQuery.nodeName( elem, "input" ) ) {
-		fixDefaultChecked( elem );
-	} else if ( elem.getElementsByTagName ) {
-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-	}
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var clone = elem.cloneNode(true),
-				srcElements,
-				destElements,
-				i;
-
-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-			// IE copies events bound via attachEvent when using cloneNode.
-			// Calling detachEvent on the clone will also remove the events
-			// from the original. In order to get around this, we use some
-			// proprietary methods to clear the events. Thanks to MooTools
-			// guys for this hotness.
-
-			cloneFixAttributes( elem, clone );
-
-			// Using Sizzle here is crazy slow, so we use getElementsByTagName
-			// instead
-			srcElements = getAll( elem );
-			destElements = getAll( clone );
-
-			// Weird iteration because IE will replace the length property
-			// with an element if you are cloning the body and one of the
-			// elements on the page has a name or id of "length"
-			for ( i = 0; srcElements[i]; ++i ) {
-				cloneFixAttributes( srcElements[i], destElements[i] );
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			cloneCopyEvent( elem, clone );
-
-			if ( deepDataAndEvents ) {
-				srcElements = getAll( elem );
-				destElements = getAll( clone );
-
-				for ( i = 0; srcElements[i]; ++i ) {
-					cloneCopyEvent( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		// Return the cloned set
-		return clone;
-	},
-
-	clean: function( elems, context, fragment, scripts ) {
-		var checkScriptType;
-
-		context = context || document;
-
-		// !context.createElement fails in IE with an error but returns typeof 'object'
-		if ( typeof context.createElement === "undefined" ) {
-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-		}
-
-		var ret = [], j;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( typeof elem === "number" ) {
-				elem += "";
-			}
-
-			if ( !elem ) {
-				continue;
-			}
-
-			// Convert html string into DOM nodes
-			if ( typeof elem === "string" ) {
-				if ( !rhtml.test( elem ) ) {
-					elem = context.createTextNode( elem );
-				} else {
-					// Fix "XHTML"-style tags in all browsers
-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-					// Trim whitespace, otherwise indexOf won't work as expected
-					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
-						wrap = wrapMap[ tag ] || wrapMap._default,
-						depth = wrap[0],
-						div = context.createElement("div");
-
-					// Go to html and back, then peel off extra wrappers
-					div.innerHTML = wrap[1] + elem + wrap[2];
-
-					// Move to the right depth
-					while ( depth-- ) {
-						div = div.lastChild;
-					}
-
-					// Remove IE's autoinserted <tbody> from table fragments
-					if ( !jQuery.support.tbody ) {
-
-						// String was a <table>, *may* have spurious <tbody>
-						var hasBody = rtbody.test(elem),
-							tbody = tag === "table" && !hasBody ?
-								div.firstChild && div.firstChild.childNodes :
-
-								// String was a bare <thead> or <tfoot>
-								wrap[1] === "<table>" && !hasBody ?
-									div.childNodes :
-									[];
-
-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
-							}
-						}
-					}
-
-					// IE completely kills leading whitespace when innerHTML is used
-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-					}
-
-					elem = div.childNodes;
-				}
-			}
-
-			// Resets defaultChecked for any radios and checkboxes
-			// about to be appended to the DOM in IE 6/7 (#8060)
-			var len;
-			if ( !jQuery.support.appendChecked ) {
-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
-					for ( j = 0; j < len; j++ ) {
-						findInputs( elem[j] );
-					}
-				} else {
-					findInputs( elem );
-				}
-			}
-
-			if ( elem.nodeType ) {
-				ret.push( elem );
-			} else {
-				ret = jQuery.merge( ret, elem );
-			}
-		}
-
-		if ( fragment ) {
-			checkScriptType = function( elem ) {
-				return !elem.type || rscriptType.test( elem.type );
-			};
-			for ( i = 0; ret[i]; i++ ) {
-				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
-					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
-				} else {
-					if ( ret[i].nodeType === 1 ) {
-						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-					}
-					fragment.appendChild( ret[i] );
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	cleanData: function( elems ) {
-		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
-			deleteExpando = jQuery.support.deleteExpando;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-				continue;
-			}
-
-			id = elem[ jQuery.expando ];
-
-			if ( id ) {
-				data = cache[ id ] && cache[ id ][ internalKey ];
-
-				if ( data && data.events ) {
-					for ( var type in data.events ) {
-						if ( special[ type ] ) {
-							jQuery.event.remove( elem, type );
-
-						// This is a shortcut to avoid jQuery.event.remove's overhead
-						} else {
-							jQuery.removeEvent( elem, type, data.handle );
-						}
-					}
-
-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
-					if ( data.handle ) {
-						data.handle.elem = null;
-					}
-				}
-
-				if ( deleteExpando ) {
-					delete elem[ jQuery.expando ];
-
-				} else if ( elem.removeAttribute ) {
-					elem.removeAttribute( jQuery.expando );
-				}
-
-				delete cache[ id ];
-			}
-		}
-	}
-});
-
-function evalScript( i, elem ) {
-	if ( elem.src ) {
-		jQuery.ajax({
-			url: elem.src,
-			async: false,
-			dataType: "script"
-		});
-	} else {
-		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
-	}
-
-	if ( elem.parentNode ) {
-		elem.parentNode.removeChild( elem );
-	}
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity=([^)]*)/,
-	rdashAlpha = /-([a-z])/ig,
-	// fixed for IE9, see #8346
-	rupper = /([A-Z]|^ms)/g,
-	rnumpx = /^-?\d+(?:px)?$/i,
-	rnum = /^-?\d/,
-	rrelNum = /^[+\-]=/,
-	rrelNumFilter = /[^+\-\.\de]+/g,
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssWidth = [ "Left", "Right" ],
-	cssHeight = [ "Top", "Bottom" ],
-	curCSS,
-
-	getComputedStyle,
-	currentStyle,
-
-	fcamelCase = function( all, letter ) {
-		return letter.toUpperCase();
-	};
-
-jQuery.fn.css = function( name, value ) {
-	// Setting 'undefined' is a no-op
-	if ( arguments.length === 2 && value === undefined ) {
-		return this;
-	}
-
-	return jQuery.access( this, name, value, true, function( elem, name, value ) {
-		return value !== undefined ?
-			jQuery.style( elem, name, value ) :
-			jQuery.css( elem, name );
-	});
-};
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity", "opacity" );
-					return ret === "" ? "1" : ret;
-
-				} else {
-					return elem.style.opacity;
-				}
-			}
-		}
-	},
-
-	// Exclude the following css properties to add px
-	cssNumber: {
-		"zIndex": true,
-		"fontWeight": true,
-		"opacity": true,
-		"zoom": true,
-		"lineHeight": true,
-		"widows": true,
-		"orphans": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, origName = jQuery.camelCase( name ),
-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-		name = jQuery.cssProps[ origName ] || origName;
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// Make sure that NaN and null values aren't set. See: #7116
-			if ( type === "number" && isNaN( value ) || value == null ) {
-				return;
-			}
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && rrelNum.test( value ) ) {
-				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-				// Fixes bug #5509
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra ) {
-		var ret, hooks;
-
-		// Make sure that we're working with the right name
-		name = jQuery.camelCase( name );
-		hooks = jQuery.cssHooks[ name ];
-		name = jQuery.cssProps[ name ] || name;
-
-		// cssFloat needs a special treatment
-		if ( name === "cssFloat" ) {
-			name = "float";
-		}
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-			return ret;
-
-		// Otherwise, if a way to get the computed value exists, use that
-		} else if ( curCSS ) {
-			return curCSS( elem, name );
-		}
-	},
-
-	// A method for quickly swapping in/out CSS properties to get correct calculations
-	swap: function( elem, options, callback ) {
-		var old = {};
-
-		// Remember the old values, and insert the new ones
-		for ( var name in options ) {
-			old[ name ] = elem.style[ name ];
-			elem.style[ name ] = options[ name ];
-		}
-
-		callback.call( elem );
-
-		// Revert the old values
-		for ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-	},
-
-	camelCase: function( string ) {
-		return string.replace( rdashAlpha, fcamelCase );
-	}
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			var val;
-
-			if ( computed ) {
-				if ( elem.offsetWidth !== 0 ) {
-					val = getWH( elem, name, extra );
-
-				} else {
-					jQuery.swap( elem, cssShow, function() {
-						val = getWH( elem, name, extra );
-					});
-				}
-
-				if ( val <= 0 ) {
-					val = curCSS( elem, name, name );
-
-					if ( val === "0px" && currentStyle ) {
-						val = currentStyle( elem, name, name );
-					}
-
-					if ( val != null ) {
-						// Should return "auto" instead of 0, use 0 for
-						// temporary backwards-compat
-						return val === "" || val === "auto" ? "0px" : val;
-					}
-				}
-
-				if ( val < 0 || val == null ) {
-					val = elem.style[ name ];
-
-					// Should return "auto" instead of 0, use 0 for
-					// temporary backwards-compat
-					return val === "" || val === "auto" ? "0px" : val;
-				}
-
-				return typeof val === "string" ? val : val + "px";
-			}
-		},
-
-		set: function( elem, value ) {
-			if ( rnumpx.test( value ) ) {
-				// ignore negative width and height values #1599
-				value = parseFloat(value);
-
-				if ( value >= 0 ) {
-					return value + "px";
-				}
-
-			} else {
-				return value;
-			}
-		}
-	};
-});
-
-if ( !jQuery.support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle;
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// Set the alpha filter to set the opacity
-			var opacity = jQuery.isNaN( value ) ?
-				"" :
-				"alpha(opacity=" + value * 100 + ")",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery(function() {
-	// This hook cannot be added until DOM ready because the support test
-	// for it is not run until after DOM ready
-	if ( !jQuery.support.reliableMarginRight ) {
-		jQuery.cssHooks.marginRight = {
-			get: function( elem, computed ) {
-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-				// Work around by temporarily setting element display to inline-block
-				var ret;
-				jQuery.swap( elem, { "display": "inline-block" }, function() {
-					if ( computed ) {
-						ret = curCSS( elem, "margin-right", "marginRight" );
-					} else {
-						ret = elem.style.marginRight;
-					}
-				});
-				return ret;
-			}
-		};
-	}
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-	getComputedStyle = function( elem, name ) {
-		var ret, defaultView, computedStyle;
-
-		name = name.replace( rupper, "-$1" ).toLowerCase();
-
-		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
-			return undefined;
-		}
-
-		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-			ret = computedStyle.getPropertyValue( name );
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-		}
-
-		return ret;
-	};
-}
-
-if ( document.documentElement.currentStyle ) {
-	currentStyle = function( elem, name ) {
-		var left,
-			ret = elem.currentStyle && elem.currentStyle[ name ],
-			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
-			style = elem.style;
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-			// Remember the original values
-			left = style.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : (ret || 0);
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = rsLeft;
-			}
-		}
-
-		return ret === "" ? "auto" : ret;
-	};
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-	var which = name === "width" ? cssWidth : cssHeight,
-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
-
-	if ( extra === "border" ) {
-		return val;
-	}
-
-	jQuery.each( which, function() {
-		if ( !extra ) {
-			val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
-		}
-
-		if ( extra === "margin" ) {
-			val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
-
-		} else {
-			val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
-		}
-	});
-
-	return val;
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.hidden = function( elem ) {
-		var width = elem.offsetWidth,
-			height = elem.offsetHeight;
-
-		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
-	};
-
-	jQuery.expr.filters.visible = function( elem ) {
-		return !jQuery.expr.filters.hidden( elem );
-	};
-}
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rhash = /#.*$/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rquery = /\?/,
-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-	rselectTextarea = /^(?:select|textarea)/i,
-	rspacesAjax = /\s+/,
-	rts = /([?&])_=[^&]*/,
-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-	// Keep a copy of the old load method
-	_load = jQuery.fn.load,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Document location
-	ajaxLocation,
-
-	// Document location segments
-	ajaxLocParts;
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		if ( jQuery.isFunction( func ) ) {
-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-				i = 0,
-				length = dataTypes.length,
-				dataType,
-				list,
-				placeBefore;
-
-			// For each dataType in the dataTypeExpression
-			for(; i < length; i++ ) {
-				dataType = dataTypes[ i ];
-				// We control if we're asked to add before
-				// any existing element
-				placeBefore = /^\+/.test( dataType );
-				if ( placeBefore ) {
-					dataType = dataType.substr( 1 ) || "*";
-				}
-				list = structure[ dataType ] = structure[ dataType ] || [];
-				// then we add to the structure accordingly
-				list[ placeBefore ? "unshift" : "push" ]( func );
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-		dataType /* internal */, inspected /* internal */ ) {
-
-	dataType = dataType || options.dataTypes[ 0 ];
-	inspected = inspected || {};
-
-	inspected[ dataType ] = true;
-
-	var list = structure[ dataType ],
-		i = 0,
-		length = list ? list.length : 0,
-		executeOnly = ( structure === prefilters ),
-		selection;
-
-	for(; i < length && ( executeOnly || !selection ); i++ ) {
-		selection = list[ i ]( options, originalOptions, jqXHR );
-		// If we got redirected to another dataType
-		// we try there if executing only and not done already
-		if ( typeof selection === "string" ) {
-			if ( !executeOnly || inspected[ selection ] ) {
-				selection = undefined;
-			} else {
-				options.dataTypes.unshift( selection );
-				selection = inspectPrefiltersOrTransports(
-						structure, options, originalOptions, jqXHR, selection, inspected );
-			}
-		}
-	}
-	// If we're only executing or nothing was selected
-	// we try the catchall dataType if not done already
-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-		selection = inspectPrefiltersOrTransports(
-				structure, options, originalOptions, jqXHR, "*", inspected );
-	}
-	// unnecessary when only executing (prefilters)
-	// but it'll be ignored by the caller in that case
-	return selection;
-}
-
-jQuery.fn.extend({
-	load: function( url, params, callback ) {
-		if ( typeof url !== "string" && _load ) {
-			return _load.apply( this, arguments );
-
-		// Don't do a request if no elements are being requested
-		} else if ( !this.length ) {
-			return this;
-		}
-
-		var off = url.indexOf( " " );
-		if ( off >= 0 ) {
-			var selector = url.slice( off, url.length );
-			url = url.slice( 0, off );
-		}
-
-		// Default to a GET request
-		var type = "GET";
-
-		// If the second parameter was provided
-		if ( params ) {
-			// If it's a function
-			if ( jQuery.isFunction( params ) ) {
-				// We assume that it's the callback
-				callback = params;
-				params = undefined;
-
-			// Otherwise, build a param string
-			} else if ( typeof params === "object" ) {
-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-				type = "POST";
-			}
-		}
-
-		var self = this;
-
-		// Request the remote document
-		jQuery.ajax({
-			url: url,
-			type: type,
-			dataType: "html",
-			data: params,
-			// Complete callback (responseText is used internally)
-			complete: function( jqXHR, status, responseText ) {
-				// Store the response as specified by the jqXHR object
-				responseText = jqXHR.responseText;
-				// If successful, inject the HTML into all the matched elements
-				if ( jqXHR.isResolved() ) {
-					// #4825: Get the actual response in case
-					// a dataFilter is present in ajaxSettings
-					jqXHR.done(function( r ) {
-						responseText = r;
-					});
-					// See if a selector was specified
-					self.html( selector ?
-						// Create a dummy div to hold the results
-						jQuery("<div>")
-							// inject the contents of the document in, removing the scripts
-							// to avoid any 'Permission Denied' errors in IE
-							.append(responseText.replace(rscript, ""))
-
-							// Locate the specified elements
-							.find(selector) :
-
-						// If not, just inject the full result
-						responseText );
-				}
-
-				if ( callback ) {
-					self.each( callback, [ responseText, status, jqXHR ] );
-				}
-			}
-		});
-
-		return this;
-	},
-
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-
-	serializeArray: function() {
-		return this.map(function(){
-			return this.elements ? jQuery.makeArray( this.elements ) : this;
-		})
-		.filter(function(){
-			return this.name && !this.disabled &&
-				( this.checked || rselectTextarea.test( this.nodeName ) ||
-					rinput.test( this.type ) );
-		})
-		.map(function( i, elem ){
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val, i ){
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).get();
-	}
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-	jQuery.fn[ o ] = function( f ){
-		return this.bind( o, f );
-	};
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			type: method,
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	};
-});
-
-jQuery.extend({
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function ( target, settings ) {
-		if ( !settings ) {
-			// Only one parameter, we extend ajaxSettings
-			settings = target;
-			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
-		} else {
-			// target was provided, we extend into it
-			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
-		}
-		// Flatten fields we don't want deep extended
-		for( var field in { context: 1, url: 1 } ) {
-			if ( field in settings ) {
-				target[ field ] = settings[ field ];
-			} else if( field in jQuery.ajaxSettings ) {
-				target[ field ] = jQuery.ajaxSettings[ field ];
-			}
-		}
-		return target;
-	},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		type: "GET",
-		contentType: "application/x-www-form-urlencoded",
-		processData: true,
-		async: true,
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			xml: "application/xml, text/xml",
-			html: "text/html",
-			text: "text/plain",
-			json: "application/json, text/javascript",
-			"*": "*/*"
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText"
-		},
-
-		// List of data converters
-		// 1) key format is "source_type destination_type" (a single space in-between)
-		// 2) the catchall symbol "*" can be used for source_type
-		converters: {
-
-			// Convert anything to text
-			"* text": window.String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		}
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events
-			// It's the callbackContext if one was provided in the options
-			// and if it's a DOM node or a jQuery collection
-			globalEventContext = callbackContext !== s &&
-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-						jQuery( callbackContext ) : jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery._Deferred(),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// ifModified key
-			ifModifiedKey,
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-			// transport
-			transport,
-			// timeout handle
-			timeoutTimer,
-			// Cross-domain detection vars
-			parts,
-			// The jqXHR state
-			state = 0,
-			// To know if global events are to be dispatched
-			fireGlobals,
-			// Loop variable
-			i,
-			// Fake xhr
-			jqXHR = {
-
-				readyState: 0,
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( !state ) {
-						var lname = name.toLowerCase();
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match === undefined ? null : match;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					statusText = statusText || "abort";
-					if ( transport ) {
-						transport.abort( statusText );
-					}
-					done( 0, statusText );
-					return this;
-				}
-			};
-
-		// Callback for when everything is done
-		// It is defined here because jslint complains if it is declared
-		// at the end of the function (which would be more logical and readable)
-		function done( status, statusText, responses, headers ) {
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status ? 4 : 0;
-
-			var isSuccess,
-				success,
-				error,
-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-				lastModified,
-				etag;
-
-			// If successful, handle type chaining
-			if ( status >= 200 && status < 300 || status === 304 ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-
-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
-					}
-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-						jQuery.etag[ ifModifiedKey ] = etag;
-					}
-				}
-
-				// If not modified
-				if ( status === 304 ) {
-
-					statusText = "notmodified";
-					isSuccess = true;
-
-				// If we have data
-				} else {
-
-					try {
-						success = ajaxConvert( s, response );
-						statusText = "success";
-						isSuccess = true;
-					} catch(e) {
-						// We have a parsererror
-						statusText = "parsererror";
-						error = e;
-					}
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if( !statusText || status ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = statusText;
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-						[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-		jqXHR.complete = completeDeferred.done;
-
-		// Status-dependent callbacks
-		jqXHR.statusCode = function( map ) {
-			if ( map ) {
-				var tmp;
-				if ( state < 2 ) {
-					for( tmp in map ) {
-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-					}
-				} else {
-					tmp = map[ jqXHR.status ];
-					jqXHR.then( tmp, tmp );
-				}
-			}
-			return this;
-		};
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-		// Determine if a cross-domain request is in order
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefiler, stop there
-		if ( state === 2 ) {
-			return false;
-		}
-
-		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-			}
-
-			// Get ifModifiedKey before adding the anti-cache parameter
-			ifModifiedKey = s.url;
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-
-				var ts = jQuery.now(),
-					// try replacing _= if it is there
-					ret = s.url.replace( rts, "$1_=" + ts );
-
-				// if nothing was replaced, add timestamp to the end
-				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			ifModifiedKey = ifModifiedKey || s.url;
-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-			}
-			if ( jQuery.etag[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-			}
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-				// Abort if not done already
-				jqXHR.abort();
-				return false;
-
-		}
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout( function(){
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch (e) {
-				// Propagate exception as error if not done
-				if ( status < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					jQuery.error( e );
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a, traditional ) {
-		var s = [],
-			add = function( key, value ) {
-				// If value is a function, invoke it and return its value
-				value = jQuery.isFunction( value ) ? value() : value;
-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-			};
-
-		// Set traditional to true for jQuery <= 1.3.2 behavior.
-		if ( traditional === undefined ) {
-			traditional = jQuery.ajaxSettings.traditional;
-		}
-
-		// If an array was passed in, assume that it is an array of form elements.
-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-			// Serialize the form elements
-			jQuery.each( a, function() {
-				add( this.name, this.value );
-			});
-
-		} else {
-			// If traditional, encode the "old" way (the way 1.3.2 or older
-			// did it), otherwise encode params recursively.
-			for ( var prefix in a ) {
-				buildParams( prefix, a[ prefix ], traditional, add );
-			}
-		}
-
-		// Return the resulting serialization
-		return s.join( "&" ).replace( r20, "+" );
-	}
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-				// If array item is non-scalar (array or object), encode its
-				// numeric index to resolve deserialization ambiguity issues.
-				// Note that rack (as of 1.0.0) can't currently deserialize
-				// nested arrays properly, and attempting to do so may cause
-				// a server error. Possible fixes are to modify rack's
-				// deserialization algorithm or to provide an option or flag
-				// to force array serialization to be shallow.
-				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && obj != null && typeof obj === "object" ) {
-		// Serialize object item.
-		for ( var name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var contents = s.contents,
-		dataTypes = s.dataTypes,
-		responseFields = s.responseFields,
-		ct,
-		type,
-		finalDataType,
-		firstDataType;
-
-	// Fill responseXXX fields
-	for( type in responseFields ) {
-		if ( type in responses ) {
-			jqXHR[ responseFields[type] ] = responses[ type ];
-		}
-	}
-
-	// Remove auto dataType and get content-type in the process
-	while( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-	// Apply the dataFilter if provided
-	if ( s.dataFilter ) {
-		response = s.dataFilter( response, s.dataType );
-	}
-
-	var dataTypes = s.dataTypes,
-		converters = {},
-		i,
-		key,
-		length = dataTypes.length,
-		tmp,
-		// Current and previous dataTypes
-		current = dataTypes[ 0 ],
-		prev,
-		// Conversion expression
-		conversion,
-		// Conversion function
-		conv,
-		// Conversion functions (transitive conversion)
-		conv1,
-		conv2;
-
-	// For each dataType in the chain
-	for( i = 1; i < length; i++ ) {
-
-		// Create converters map
-		// with lowercased keys
-		if ( i === 1 ) {
-			for( key in s.converters ) {
-				if( typeof key === "string" ) {
-					converters[ key.toLowerCase() ] = s.converters[ key ];
-				}
-			}
-		}
-
-		// Get the dataTypes
-		prev = current;
-		current = dataTypes[ i ];
-
-		// If current is auto dataType, update it to prev
-		if( current === "*" ) {
-			current = prev;
-		// If no auto and dataTypes are actually different
-		} else if ( prev !== "*" && prev !== current ) {
-
-			// Get the converter
-			conversion = prev + " " + current;
-			conv = converters[ conversion ] || converters[ "* " + current ];
-
-			// If there is no direct converter, search transitively
-			if ( !conv ) {
-				conv2 = undefined;
-				for( conv1 in converters ) {
-					tmp = conv1.split( " " );
-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-						conv2 = converters[ tmp[1] + " " + current ];
-						if ( conv2 ) {
-							conv1 = converters[ conv1 ];
-							if ( conv1 === true ) {
-								conv = conv2;
-							} else if ( conv2 === true ) {
-								conv = conv1;
-							}
-							break;
-						}
-					}
-				}
-			}
-			// If we found no converter, dispatch an error
-			if ( !( conv || conv2 ) ) {
-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-			}
-			// If found converter is not an equivalence
-			if ( conv !== true ) {
-				// Convert with 1 or 2 converters accordingly
-				response = conv ? conv( response ) : conv2( conv1(response) );
-			}
-		}
-	}
-	return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-	jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		return jQuery.expando + "_" + ( jsc++ );
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
-		( typeof s.data === "string" );
-
-	if ( s.dataTypes[ 0 ] === "jsonp" ||
-		s.jsonp !== false && ( jsre.test( s.url ) ||
-				inspectData && jsre.test( s.data ) ) ) {
-
-		var responseContainer,
-			jsonpCallback = s.jsonpCallback =
-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-			previous = window[ jsonpCallback ],
-			url = s.url,
-			data = s.data,
-			replace = "$1" + jsonpCallback + "$2";
-
-		if ( s.jsonp !== false ) {
-			url = url.replace( jsre, replace );
-			if ( s.url === url ) {
-				if ( inspectData ) {
-					data = data.replace( jsre, replace );
-				}
-				if ( s.data === data ) {
-					// Add callback manually
-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-				}
-			}
-		}
-
-		s.url = url;
-		s.data = data;
-
-		// Install callback
-		window[ jsonpCallback ] = function( response ) {
-			responseContainer = [ response ];
-		};
-
-		// Clean-up function
-		jqXHR.always(function() {
-			// Set callback back to previous value
-			window[ jsonpCallback ] = previous;
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( previous ) ) {
-				window[ jsonpCallback ]( responseContainer[ 0 ] );
-			}
-		});
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( jsonpCallback + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /javascript|ecmascript/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = "async";
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( head && script.parentNode ) {
-							head.removeChild( script );
-						}
-
-						// Dereference the script
-						script = undefined;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-				// This arises when a base node is used (#2709 and #4378).
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( 0, 1 );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
-		// Abort all pending requests
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( 0, 1 );
-		}
-	} : false,
-	xhrId = 0,
-	xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-	/* Microsoft failed to properly
-	 * implement the XMLHttpRequest in IE7 (can't request local files),
-	 * so we use the ActiveXObject when it is available
-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-	 * we need a fallback.
-	 */
-	function() {
-		return !this.isLocal && createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-	jQuery.extend( jQuery.support, {
-		ajax: !!xhr,
-		cors: !!xhr && ( "withCredentials" in xhr )
-	});
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-	jQuery.ajaxTransport(function( s ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !s.crossDomain || jQuery.support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-
-					// Get a new xhr
-					var xhr = s.xhr(),
-						handle,
-						i;
-
-					// Open the socket
-					// Passing null username, generates a login popup on Opera (#2865)
-					if ( s.username ) {
-						xhr.open( s.type, s.url, s.async, s.username, s.password );
-					} else {
-						xhr.open( s.type, s.url, s.async );
-					}
-
-					// Apply custom fields if provided
-					if ( s.xhrFields ) {
-						for ( i in s.xhrFields ) {
-							xhr[ i ] = s.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( s.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( s.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Need an extra try/catch for cross domain requests in Firefox 3
-					try {
-						for ( i in headers ) {
-							xhr.setRequestHeader( i, headers[ i ] );
-						}
-					} catch( _ ) {}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( s.hasContent && s.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-
-						var status,
-							statusText,
-							responseHeaders,
-							responses,
-							xml;
-
-						// Firefox throws exceptions when accessing properties
-						// of an xhr when a network error occured
-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-						try {
-
-							// Was never called and is aborted or complete
-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-								// Only called once
-								callback = undefined;
-
-								// Do not keep as active anymore
-								if ( handle ) {
-									xhr.onreadystatechange = jQuery.noop;
-									if ( xhrOnUnloadAbort ) {
-										delete xhrCallbacks[ handle ];
-									}
-								}
-
-								// If it's an abort
-								if ( isAbort ) {
-									// Abort it manually if needed
-									if ( xhr.readyState !== 4 ) {
-										xhr.abort();
-									}
-								} else {
-									status = xhr.status;
-									responseHeaders = xhr.getAllResponseHeaders();
-									responses = {};
-									xml = xhr.responseXML;
-
-									// Construct response list
-									if ( xml && xml.documentElement /* #4958 */ ) {
-										responses.xml = xml;
-									}
-									responses.text = xhr.responseText;
-
-									// Firefox throws an exception when accessing
-									// statusText for faulty cross-domain requests
-									try {
-										statusText = xhr.statusText;
-									} catch( e ) {
-										// We normalize with Webkit giving an empty statusText
-										statusText = "";
-									}
-
-									// Filter status for non standard behaviors
-
-									// If the request is local and we have data: assume a success
-									// (success with no data won't get notified, that's the best we
-									// can do given current implementations)
-									if ( !status && s.isLocal && !s.crossDomain ) {
-										status = responses.text ? 200 : 404;
-									// IE - #1450: sometimes returns 1223 when it should be 204
-									} else if ( status === 1223 ) {
-										status = 204;
-									}
-								}
-							}
-						} catch( firefoxAccessException ) {
-							if ( !isAbort ) {
-								complete( -1, firefoxAccessException );
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, responseHeaders );
-						}
-					};
-
-					// if we're in sync mode or it's in cache
-					// and has been retrieved directly (IE6 & IE7)
-					// we need to manually fire the callback
-					if ( !s.async || xhr.readyState === 4 ) {
-						callback();
-					} else {
-						handle = ++xhrId;
-						if ( xhrOnUnloadAbort ) {
-							// Create the active xhrs callbacks list if needed
-							// and attach the unload handler
-							if ( !xhrCallbacks ) {
-								xhrCallbacks = {};
-								jQuery( window ).unload( xhrOnUnloadAbort );
-							}
-							// Add to list of active xhrs callbacks
-							xhrCallbacks[ handle ] = callback;
-						}
-						xhr.onreadystatechange = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback(0,1);
-					}
-				}
-			};
-		}
-	});
-}
-
-
-
-
-var elemdisplay = {},
-	iframe, iframeDoc,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-	timerId,
-	fxAttrs = [
-		// height animations
-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-		// width animations
-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-		// opacity animations
-		[ "opacity" ]
-	],
-	fxNow,
-	requestAnimationFrame = window.webkitRequestAnimationFrame ||
-	    window.mozRequestAnimationFrame ||
-	    window.oRequestAnimationFrame;
-
-jQuery.fn.extend({
-	show: function( speed, easing, callback ) {
-		var elem, display;
-
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("show", 3), speed, easing, callback);
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				elem = this[i];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					// Reset the inline display of this element to learn if it is
-					// being hidden by cascaded rules or not
-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-						display = elem.style.display = "";
-					}
-
-					// Set elements which have been overridden with display: none
-					// in a stylesheet to whatever the default browser style is
-					// for such an element
-					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
-						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
-					}
-				}
-			}
-
-			// Set the display of most of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				elem = this[i];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					if ( display === "" || display === "none" ) {
-						elem.style.display = jQuery._data(elem, "olddisplay") || "";
-					}
-				}
-			}
-
-			return this;
-		}
-	},
-
-	hide: function( speed, easing, callback ) {
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("hide", 3), speed, easing, callback);
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				if ( this[i].style ) {
-					var display = jQuery.css( this[i], "display" );
-
-					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
-						jQuery._data( this[i], "olddisplay", display );
-					}
-				}
-			}
-
-			// Set the display of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				if ( this[i].style ) {
-					this[i].style.display = "none";
-				}
-			}
-
-			return this;
-		}
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-
-	toggle: function( fn, fn2, callback ) {
-		var bool = typeof fn === "boolean";
-
-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-			this._toggle.apply( this, arguments );
-
-		} else if ( fn == null || bool ) {
-			this.each(function() {
-				var state = bool ? fn : jQuery(this).is(":hidden");
-				jQuery(this)[ state ? "show" : "hide" ]();
-			});
-
-		} else {
-			this.animate(genFx("toggle", 3), fn, fn2, callback);
-		}
-
-		return this;
-	},
-
-	fadeTo: function( speed, to, easing, callback ) {
-		return this.filter(":hidden").css("opacity", 0).show().end()
-					.animate({opacity: to}, speed, easing, callback);
-	},
-
-	animate: function( prop, speed, easing, callback ) {
-		var optall = jQuery.speed(speed, easing, callback);
-
-		if ( jQuery.isEmptyObject( prop ) ) {
-			return this.each( optall.complete, [ false ] );
-		}
-
-		// Do not change referenced properties as per-property easing will be lost
-		prop = jQuery.extend( {}, prop );
-
-		return this[ optall.queue === false ? "each" : "queue" ](function() {
-			// XXX 'this' does not always have a nodeName when running the
-			// test suite
-
-			if ( optall.queue === false ) {
-				jQuery._mark( this );
-			}
-
-			var opt = jQuery.extend( {}, optall ),
-				isElement = this.nodeType === 1,
-				hidden = isElement && jQuery(this).is(":hidden"),
-				name, val, p,
-				display, e,
-				parts, start, end, unit;
-
-			// will store per property easing and be used to determine when an animation is complete
-			opt.animatedProperties = {};
-
-			for ( p in prop ) {
-
-				// property name normalization
-				name = jQuery.camelCase( p );
-				if ( p !== name ) {
-					prop[ name ] = prop[ p ];
-					delete prop[ p ];
-				}
-
-				val = prop[ name ];
-
-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-				if ( jQuery.isArray( val ) ) {
-					opt.animatedProperties[ name ] = val[ 1 ];
-					val = prop[ name ] = val[ 0 ];
-				} else {
-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-				}
-
-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
-					return opt.complete.call( this );
-				}
-
-				if ( isElement && ( name === "height" || name === "width" ) ) {
-					// Make sure that nothing sneaks out
-					// Record all 3 overflow attributes because IE does not
-					// change the overflow attribute when overflowX and
-					// overflowY are set to the same value
-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-					// Set display property to inline-block for height/width
-					// animations on inline elements that are having width/height
-					// animated
-					if ( jQuery.css( this, "display" ) === "inline" &&
-							jQuery.css( this, "float" ) === "none" ) {
-						if ( !jQuery.support.inlineBlockNeedsLayout ) {
-							this.style.display = "inline-block";
-
-						} else {
-							display = defaultDisplay( this.nodeName );
-
-							// inline-level elements accept inline-block;
-							// block-level elements need to be inline with layout
-							if ( display === "inline" ) {
-								this.style.display = "inline-block";
-
-							} else {
-								this.style.display = "inline";
-								this.style.zoom = 1;
-							}
-						}
-					}
-				}
-			}
-
-			if ( opt.overflow != null ) {
-				this.style.overflow = "hidden";
-			}
-
-			for ( p in prop ) {
-				e = new jQuery.fx( this, opt, p );
-				val = prop[ p ];
-
-				if ( rfxtypes.test(val) ) {
-					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
-
-				} else {
-					parts = rfxnum.exec( val );
-					start = e.cur();
-
-					if ( parts ) {
-						end = parseFloat( parts[2] );
-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-						// We need to compute starting value
-						if ( unit !== "px" ) {
-							jQuery.style( this, p, (end || 1) + unit);
-							start = ((end || 1) / e.cur()) * start;
-							jQuery.style( this, p, start + unit);
-						}
-
-						// If a +=/-= token was provided, we're doing a relative animation
-						if ( parts[1] ) {
-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-						}
-
-						e.custom( start, end, unit );
-
-					} else {
-						e.custom( start, val, "" );
-					}
-				}
-			}
-
-			// For JS strict compliance
-			return true;
-		});
-	},
-
-	stop: function( clearQueue, gotoEnd ) {
-		if ( clearQueue ) {
-			this.queue([]);
-		}
-
-		this.each(function() {
-			var timers = jQuery.timers,
-				i = timers.length;
-			// clear marker counters if we know they won't be
-			if ( !gotoEnd ) {
-				jQuery._unmark( true, this );
-			}
-			while ( i-- ) {
-				if ( timers[i].elem === this ) {
-					if (gotoEnd) {
-						// force the next step to be the last
-						timers[i](true);
-					}
-
-					timers.splice(i, 1);
-				}
-			}
-		});
-
-		// start the next in the queue if the last step wasn't forced
-		if ( !gotoEnd ) {
-			this.dequeue();
-		}
-
-		return this;
-	}
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout( clearFxNow, 0 );
-	return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-	fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-	var obj = {};
-
-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
-		obj[ this ] = type;
-	});
-
-	return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-	slideDown: genFx("show", 1),
-	slideUp: genFx("hide", 1),
-	slideToggle: genFx("toggle", 1),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.extend({
-	speed: function( speed, easing, fn ) {
-		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
-			complete: fn || !fn && easing ||
-				jQuery.isFunction( speed ) && speed,
-			duration: speed,
-			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
-		};
-
-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
-
-		// Queueing
-		opt.old = opt.complete;
-		opt.complete = function( noUnmark ) {
-			if ( opt.queue !== false ) {
-				jQuery.dequeue( this );
-			} else if ( noUnmark !== false ) {
-				jQuery._unmark( this );
-			}
-
-			if ( jQuery.isFunction( opt.old ) ) {
-				opt.old.call( this );
-			}
-		};
-
-		return opt;
-	},
-
-	easing: {
-		linear: function( p, n, firstNum, diff ) {
-			return firstNum + diff * p;
-		},
-		swing: function( p, n, firstNum, diff ) {
-			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
-		}
-	},
-
-	timers: [],
-
-	fx: function( elem, options, prop ) {
-		this.options = options;
-		this.elem = elem;
-		this.prop = prop;
-
-		options.orig = options.orig || {};
-	}
-
-});
-
-jQuery.fx.prototype = {
-	// Simple function for setting a style value
-	update: function() {
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
-	},
-
-	// Get the current size
-	cur: function() {
-		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
-			return this.elem[ this.prop ];
-		}
-
-		var parsed,
-			r = jQuery.css( this.elem, this.prop );
-		// Empty strings, null, undefined and "auto" are converted to 0,
-		// complex values such as "rotate(1rad)" are returned as is,
-		// simple values such as "10px" are parsed to Float.
-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-	},
-
-	// Start an animation from one number to another
-	custom: function( from, to, unit ) {
-		var self = this,
-			fx = jQuery.fx,
-			raf;
-
-		this.startTime = fxNow || createFxNow();
-		this.start = from;
-		this.end = to;
-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-		this.now = this.start;
-		this.pos = this.state = 0;
-
-		function t( gotoEnd ) {
-			return self.step(gotoEnd);
-		}
-
-		t.elem = this.elem;
-
-		if ( t() && jQuery.timers.push(t) && !timerId ) {
-			// Use requestAnimationFrame instead of setInterval if available
-			if ( requestAnimationFrame ) {
-				timerId = 1;
-				raf = function() {
-					// When timerId gets set to null at any point, this stops
-					if ( timerId ) {
-						requestAnimationFrame( raf );
-						fx.tick();
-					}
-				};
-				requestAnimationFrame( raf );
-			} else {
-				timerId = setInterval( fx.tick, fx.interval );
-			}
-		}
-	},
-
-	// Simple 'show' function
-	show: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
-		this.options.show = true;
-
-		// Begin the animation
-		// Make sure that we start at a small width/height to avoid any
-		// flash of content
-		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
-
-		// Start by showing the element
-		jQuery( this.elem ).show();
-	},
-
-	// Simple 'hide' function
-	hide: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
-		this.options.hide = true;
-
-		// Begin the animation
-		this.custom(this.cur(), 0);
-	},
-
-	// Each step of an animation
-	step: function( gotoEnd ) {
-		var t = fxNow || createFxNow(),
-			done = true,
-			elem = this.elem,
-			options = this.options,
-			i, n;
-
-		if ( gotoEnd || t >= options.duration + this.startTime ) {
-			this.now = this.end;
-			this.pos = this.state = 1;
-			this.update();
-
-			options.animatedProperties[ this.prop ] = true;
-
-			for ( i in options.animatedProperties ) {
-				if ( options.animatedProperties[i] !== true ) {
-					done = false;
-				}
-			}
-
-			if ( done ) {
-				// Reset the overflow
-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-					jQuery.each( [ "", "X", "Y" ], function (index, value) {
-						elem.style[ "overflow" + value ] = options.overflow[index];
-					});
-				}
-
-				// Hide the element if the "hide" operation was done
-				if ( options.hide ) {
-					jQuery(elem).hide();
-				}
-
-				// Reset the properties, if the item has been hidden or shown
-				if ( options.hide || options.show ) {
-					for ( var p in options.animatedProperties ) {
-						jQuery.style( elem, p, options.orig[p] );
-					}
-				}
-
-				// Execute the complete function
-				options.complete.call( elem );
-			}
-
-			return false;
-
-		} else {
-			// classical easing cannot be used with an Infinity duration
-			if ( options.duration == Infinity ) {
-				this.now = t;
-			} else {
-				n = t - this.startTime;
-				this.state = n / options.duration;
-
-				// Perform the easing function, defaults to swing
-				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
-				this.now = this.start + ((this.end - this.start) * this.pos);
-			}
-			// Perform the next step of the animation
-			this.update();
-		}
-
-		return true;
-	}
-};
-
-jQuery.extend( jQuery.fx, {
-	tick: function() {
-		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
-			if ( !timers[i]() ) {
-				timers.splice(i--, 1);
-			}
-		}
-
-		if ( !timers.length ) {
-			jQuery.fx.stop();
-		}
-	},
-
-	interval: 13,
-
-	stop: function() {
-		clearInterval( timerId );
-		timerId = null;
-	},
-
-	speeds: {
-		slow: 600,
-		fast: 200,
-		// Default speed
-		_default: 400
-	},
-
-	step: {
-		opacity: function( fx ) {
-			jQuery.style( fx.elem, "opacity", fx.now );
-		},
-
-		_default: function( fx ) {
-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
-			} else {
-				fx.elem[ fx.prop ] = fx.now;
-			}
-		}
-	}
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.animated = function( elem ) {
-		return jQuery.grep(jQuery.timers, function( fn ) {
-			return elem === fn.elem;
-		}).length;
-	};
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-	if ( !elemdisplay[ nodeName ] ) {
-
-		var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
-			display = elem.css( "display" );
-
-		elem.remove();
-
-		// If the simple way fails,
-		// get element's real default display by attaching it to a temp iframe
-		if ( display === "none" || display === "" ) {
-			// No iframe to use yet, so create it
-			if ( !iframe ) {
-				iframe = document.createElement( "iframe" );
-				iframe.frameBorder = iframe.width = iframe.height = 0;
-			}
-
-			document.body.appendChild( iframe );
-
-			// Create a cacheable copy of the iframe document on first call.
-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
-			// document to it, Webkit & Firefox won't allow reusing the iframe document
-			if ( !iframeDoc || !iframe.createElement ) {
-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-				iframeDoc.write( "<!doctype><html><body></body></html>" );
-			}
-
-			elem = iframeDoc.createElement( nodeName );
-
-			iframeDoc.body.appendChild( elem );
-
-			display = jQuery.css( elem, "display" );
-
-			document.body.removeChild( iframe );
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
-	rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0], box;
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		try {
-			box = elem.getBoundingClientRect();
-		} catch(e) {}
-
-		var doc = elem.ownerDocument,
-			docElem = doc.documentElement;
-
-		// Make sure we're not dealing with a disconnected DOM node
-		if ( !box || !jQuery.contains( docElem, elem ) ) {
-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-		}
-
-		var body = doc.body,
-			win = getWindow(doc),
-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-			top  = box.top  + scrollTop  - clientTop,
-			left = box.left + scrollLeft - clientLeft;
-
-		return { top: top, left: left };
-	};
-
-} else {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0];
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		jQuery.offset.initialize();
-
-		var computedStyle,
-			offsetParent = elem.offsetParent,
-			prevOffsetParent = elem,
-			doc = elem.ownerDocument,
-			docElem = doc.documentElement,
-			body = doc.body,
-			defaultView = doc.defaultView,
-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-			top = elem.offsetTop,
-			left = elem.offsetLeft;
-
-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
-				break;
-			}
-
-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-			top  -= elem.scrollTop;
-			left -= elem.scrollLeft;
-
-			if ( elem === offsetParent ) {
-				top  += elem.offsetTop;
-				left += elem.offsetLeft;
-
-				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-				}
-
-				prevOffsetParent = offsetParent;
-				offsetParent = elem.offsetParent;
-			}
-
-			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-			}
-
-			prevComputedStyle = computedStyle;
-		}
-
-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-			top  += body.offsetTop;
-			left += body.offsetLeft;
-		}
-
-		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
-			top  += Math.max( docElem.scrollTop, body.scrollTop );
-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
-		}
-
-		return { top: top, left: left };
-	};
-}
-
-jQuery.offset = {
-	initialize: function() {
-		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
-			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-
-		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
-
-		container.innerHTML = html;
-		body.insertBefore( container, body.firstChild );
-		innerDiv = container.firstChild;
-		checkDiv = innerDiv.firstChild;
-		td = innerDiv.nextSibling.firstChild.firstChild;
-
-		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
-		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
-		checkDiv.style.position = "fixed";
-		checkDiv.style.top = "20px";
-
-		// safari subtracts parent border width here which is 5px
-		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
-		checkDiv.style.position = checkDiv.style.top = "";
-
-		innerDiv.style.overflow = "hidden";
-		innerDiv.style.position = "relative";
-
-		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
-		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
-
-		body.removeChild( container );
-		jQuery.offset.initialize = jQuery.noop;
-	},
-
-	bodyOffset: function( body ) {
-		var top = body.offsetTop,
-			left = body.offsetLeft;
-
-		jQuery.offset.initialize();
-
-		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-		}
-
-		return { top: top, left: left };
-	},
-
-	setOffset: function( elem, options, i ) {
-		var position = jQuery.css( elem, "position" );
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		var curElem = jQuery( elem ),
-			curOffset = curElem.offset(),
-			curCSSTop = jQuery.css( elem, "top" ),
-			curCSSLeft = jQuery.css( elem, "left" ),
-			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-			props = {}, curPosition = {}, curTop, curLeft;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if (options.top != null) {
-			props.top = (options.top - curOffset.top) + curTop;
-		}
-		if (options.left != null) {
-			props.left = (options.left - curOffset.left) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-
-jQuery.fn.extend({
-	position: function() {
-		if ( !this[0] ) {
-			return null;
-		}
-
-		var elem = this[0],
-
-		// Get *real* offsetParent
-		offsetParent = this.offsetParent(),
-
-		// Get correct offsets
-		offset       = this.offset(),
-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-		// Subtract element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-		// Add offsetParent borders
-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
-		// Subtract the two offsets
-		return {
-			top:  offset.top  - parentOffset.top,
-			left: offset.left - parentOffset.left
-		};
-	},
-
-	offsetParent: function() {
-		return this.map(function() {
-			var offsetParent = this.offsetParent || document.body;
-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent;
-		});
-	}
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
-	var method = "scroll" + name;
-
-	jQuery.fn[ method ] = function( val ) {
-		var elem, win;
-
-		if ( val === undefined ) {
-			elem = this[ 0 ];
-
-			if ( !elem ) {
-				return null;
-			}
-
-			win = getWindow( elem );
-
-			// Return the scroll offset
-			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
-				jQuery.support.boxModel && win.document.documentElement[ method ] ||
-					win.document.body[ method ] :
-				elem[ method ];
-		}
-
-		// Set the scroll offset
-		return this.each(function() {
-			win = getWindow( this );
-
-			if ( win ) {
-				win.scrollTo(
-					!i ? val : jQuery( win ).scrollLeft(),
-					 i ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				this[ method ] = val;
-			}
-		});
-	};
-});
-
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-
-
-
-// Create innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
-	var type = name.toLowerCase();
-
-	// innerHeight and innerWidth
-	jQuery.fn["inner" + name] = function() {
-		return this[0] ?
-			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
-			null;
-	};
-
-	// outerHeight and outerWidth
-	jQuery.fn["outer" + name] = function( margin ) {
-		return this[0] ?
-			parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
-			null;
-	};
-
-	jQuery.fn[ type ] = function( size ) {
-		// Get window width or height
-		var elem = this[0];
-		if ( !elem ) {
-			return size == null ? null : this;
-		}
-
-		if ( jQuery.isFunction( size ) ) {
-			return this.each(function( i ) {
-				var self = jQuery( this );
-				self[ type ]( size.call( this, i, self[ type ]() ) );
-			});
-		}
-
-		if ( jQuery.isWindow( elem ) ) {
-			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
-			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-			var docElemProp = elem.document.documentElement[ "client" + name ];
-			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
-				elem.document.body[ "client" + name ] || docElemProp;
-
-		// Get document width or height
-		} else if ( elem.nodeType === 9 ) {
-			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-			return Math.max(
-				elem.documentElement["client" + name],
-				elem.body["scroll" + name], elem.documentElement["scroll" + name],
-				elem.body["offset" + name], elem.documentElement["offset" + name]
-			);
-
-		// Get or set width or height on the element
-		} else if ( size === undefined ) {
-			var orig = jQuery.css( elem, type ),
-				ret = parseFloat( orig );
-
-			return jQuery.isNaN( ret ) ? orig : ret;
-
-		// Set the width or height on the element (default to pixels if value is unitless)
-		} else {
-			return this.css( type, typeof size === "string" ? size : size + "px" );
-		}
-	};
-
-});
-
-
-window.jQuery = window.$ = jQuery;
-})(window);
-(function() {
-
-	var joey = this.joey = function joey(elementDef, parentNode) {
-		return createNode( elementDef, parentNode, parentNode ? parentNode.ownerDocument : this.document );
-	};
-
-	var shortcuts = joey.shortcuts = {
-		"text" : "textContent",
-		"cls" : "className"
-	};
-
-	var plugins = joey.plugins = [
-		function( obj, context ) {
-			if( typeof obj === 'string' ) {
-				return context.createTextNode( obj );
-			}
-		},
-		function( obj, context ) {
-			if( "tag" in obj ) {
-				var el = context.createElement( obj.tag );
-				for( var attr in obj ) {
-					addAttr( el, attr, obj[ attr ], context );
-				}
-				return el;
-			}
-		}
-	];
-
-	function addAttr( el, attr, value, context ) {
-		attr = shortcuts[attr] || attr;
-		if( attr === 'children' ) {
-			for( var i = 0; i < value.length; i++) {
-				createNode( value[i], el, context );
-			}
-		} else if( attr === 'style' || attr === 'dataset' ) {
-			for( var prop in value ) {
-				el[ attr ][ prop ] = value[ prop ];
-			}
-		} else if( attr.indexOf("on") === 0 ) {
-			el.addEventListener( attr.substr(2), value, false );
-		} else if( value !== undefined ) {
-			el[ attr ] = value;
-		}
-	}
-
-	function createNode( obj, parent, context ) {
-		var el;
-		if( obj != null ) {
-			plugins.some( function( plug ) {
-				return ( el = plug( obj, context ) );
-			});
-			parent && parent.appendChild( el );
-			return el;
-		}
-	}
-
-}());
-
-(function($, document) {
-
-	var create = $.create = (function() {
-
-		function addAttrs( el, obj, context ) {
-			for( var attr in obj ){
-				switch( attr ) {
-				case 'tag' :
-					break;
-				case 'html' :
-					el.innerHTML = obj[ attr ];
-					break;
-				case 'css' :
-					for( var style in obj.css ) {
-						$.attr( el.style, style, obj.css[ style ] );
-					}
-					break;
-				case 'text' : case 'child' : case 'children' :
-					createNode( obj[attr], el, context );
-					break;
-				case 'cls' :
-					el.className = obj[attr];
-					break;
-				case 'data' :
-					for( var data in obj.data ) {
-						$.data( el, data, obj.data[data] );
-					}
-					break;
-				default :
-					if( attr.indexOf("on") === 0 && $.isFunction(obj[attr]) ) {
-						$.event.add( el, attr.substr(2).replace(/^[A-Z]/, function(a) { return a.toLowerCase(); }), obj[attr] );
-					} else {
-						$.attr( el, attr, obj[attr] );
-					}
-				}
-			}
-		}
-
-		function createNode(obj, parent, context) {
-			if(obj && ($.isArray(obj) || obj instanceof $)) {
-				for(var ret = [], i = 0; i < obj.length; i++) {
-					var newNode = createNode(obj[i], parent, context);
-					if(newNode) {
-						ret.push(newNode);
-					}
-				}
-				return ret;
-			}
-			var el;
-			if(typeof(obj) === 'string') {
-				el = context.createTextNode( obj );
-			} else if(!obj) {
-				return undefined;
-			} else if(obj.nodeType === 1) {
-				el = obj;
-			} else if( obj instanceof app.ui.AbstractWidget ) {
-				el = obj.el[0];
-			} else {
-				el = context.createElement( obj.tag || 'DIV' );
-				addAttrs(el, obj, context);
-			}
-			if(parent){ parent.appendChild(el); }
-			return el;
-		}
-
-		return function(elementDef, parentNode) {
-			return createNode(elementDef, parentNode, (parentNode && parentNode.ownerDocument) || document);
-		};
-		
-	})();
-	
-
-	// inject create into jquery internals so object definitions are treated as first class constructors (overrides non-public methods)
-	var clean = $.clean,
-		init = $.fn.init;
-
-	$.clean = function( elems, context, fragment, scripts ) {
-		for(var i = 0; i < elems.length; i++) {
-			if( elems[i].tag || elems[i] instanceof app.ui.AbstractWidget ) {
-				elems[i] = create( elems[i], null, context );
-			}
-		}
-		return clean( elems, context, fragment, scripts );
-	};
-
-	$.fn.init = function( selector, context, rootjQuery ) {
-		if ( selector && ( selector.tag || selector instanceof app.ui.AbstractWidget )) {
-			selector = create( selector, null, context );
-		}
-		return init.call( this, selector, context, rootjQuery );
-	};
-
-	$.fn.init.prototype = $.fn;
-
-})(jQuery, window.document);
-
-
-/*!
- * Raphael 1.5.2 - JavaScript Vector Library
- *
- * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
- * Licensed under the MIT (http://raphaeljs.com/license.html) license.
- * from fork at git@github.com:mobz/g.raphael.git
- */
-(function () {
-    function R() {
-        if (R.is(arguments[0], array)) {
-            var a = arguments[0],
-                cnv = create[apply](R, a.splice(0, 3 + R.is(a[0], nu))),
-                res = cnv.set();
-            for (var i = 0, ii = a[length]; i < ii; i++) {
-                var j = a[i] || {};
-                elements[has](j.type) && res[push](cnv[j.type]().attr(j));
-            }
-            return res;
-        }
-        return create[apply](R, arguments);
-    }
-    R.version = "1.5.2";
-    var separator = /[, ]+/,
-        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},
-        formatrg = /\{(\d+)\}/g,
-        proto = "prototype",
-        has = "hasOwnProperty",
-        doc = document,
-        win = window,
-        oldRaphael = {
-            was: Object[proto][has].call(win, "Raphael"),
-            is: win.Raphael
-        },
-        Paper = function () {
-            this.customAttributes = {};
-        },
-        paperproto,
-        appendChild = "appendChild",
-        apply = "apply",
-        concat = "concat",
-        supportsTouch = "createTouch" in doc,
-        E = "",
-        S = " ",
-        Str = String,
-        split = "split",
-        events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[split](S),
-        touchMap = {
-            mousedown: "touchstart",
-            mousemove: "touchmove",
-            mouseup: "touchend"
-        },
-        join = "join",
-        length = "length",
-        lowerCase = Str[proto].toLowerCase,
-        math = Math,
-        mmax = math.max,
-        mmin = math.min,
-        abs = math.abs,
-        pow = math.pow,
-        PI = math.PI,
-        nu = "number",
-        string = "string",
-        array = "array",
-        toString = "toString",
-        fillString = "fill",
-        objectToString = Object[proto][toString],
-        paper = {},
-        push = "push",
-        ISURL = /^url\(['"]?([^\)]+?)['"]?\)$/i,
-        colourRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,
-        isnan = {"NaN": 1, "Infinity": 1, "-Infinity": 1},
-        bezierrg = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,
-        round = math.round,
-        setAttribute = "setAttribute",
-        toFloat = parseFloat,
-        toInt = parseInt,
-        ms = " progid:DXImageTransform.Microsoft",
-        upperCase = Str[proto].toUpperCase,
-        availableAttrs = {blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", opacity: 1, path: "M0,0", r: 0, rotation: 0, rx: 0, ry: 0, scale: "1 1", src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", translation: "0 0", width: 0, x: 0, y: 0},
-        availableAnimAttrs = {along: "along", blur: nu, "clip-rect": "csv", cx: nu, cy: nu, fill: "colour", "fill-opacity": nu, "font-size": nu, height: nu, opacity: nu, path: "path", r: nu, rotation: "csv", rx: nu, ry: nu, scale: "csv", stroke: "colour", "stroke-opacity": nu, "stroke-width": nu, translation: "csv", width: nu, x: nu, y: nu},
-        rp = "replace",
-        animKeyFrames= /^(from|to|\d+%?)$/,
-        commaSpaces = /\s*,\s*/,
-        hsrg = {hs: 1, rg: 1},
-        p2s = /,?([achlmqrstvxz]),?/gi,
-        pathCommand = /([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,
-        pathValues = /(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,
-        radial_gradient = /^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,
-        sortByKey = function (a, b) {
-            return a.key - b.key;
-        };
-
-    R.type = (win.SVGAngle || doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML");
-    if (R.type == "VML") {
-        var d = doc.createElement("div"),
-            b;
-        d.innerHTML = '<v:shape adj="1"/>';
-        b = d.firstChild;
-        b.style.behavior = "url(#default#VML)";
-        if (!(b && typeof b.adj == "object")) {
-            return R.type = null;
-        }
-        d = null;
-    }
-    R.svg = !(R.vml = R.type == "VML");
-    Paper[proto] = R[proto];
-    paperproto = Paper[proto];
-    R._id = 0;
-    R._oid = 0;
-    R.fn = {};
-    R.is = function (o, type) {
-        type = lowerCase.call(type);
-        if (type == "finite") {
-            return !isnan[has](+o);
-        }
-        return  (type == "null" && o === null) ||
-                (type == typeof o) ||
-                (type == "object" && o === Object(o)) ||
-                (type == "array" && Array.isArray && Array.isArray(o)) ||
-                objectToString.call(o).slice(8, -1).toLowerCase() == type;
-    };
-    R.angle = function (x1, y1, x2, y2, x3, y3) {
-        if (x3 == null) {
-            var x = x1 - x2,
-                y = y1 - y2;
-            if (!x && !y) {
-                return 0;
-            }
-            return ((x < 0) * 180 + math.atan(-y / -x) * 180 / PI + 360) % 360;
-        } else {
-            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);
-        }
-    };
-    R.rad = function (deg) {
-        return deg % 360 * PI / 180;
-    };
-    R.deg = function (rad) {
-        return rad * 180 / PI % 360;
-    };
-    R.snapTo = function (values, value, tolerance) {
-        tolerance = R.is(tolerance, "finite") ? tolerance : 10;
-        if (R.is(values, array)) {
-            var i = values.length;
-            while (i--) if (abs(values[i] - value) <= tolerance) {
-                return values[i];
-            }
-        } else {
-            values = +values;
-            var rem = value % values;
-            if (rem < tolerance) {
-                return value - rem;
-            }
-            if (rem > values - tolerance) {
-                return value - rem + values;
-            }
-        }
-        return value;
-    };
-    function createUUID() {
-        // http://www.ietf.org/rfc/rfc4122.txt
-        var s = [],
-            i = 0;
-        for (; i < 32; i++) {
-            s[i] = (~~(math.random() * 16))[toString](16);
-        }
-        s[12] = 4;  // bits 12-15 of the time_hi_and_version field to 0010
-        s[16] = ((s[16] & 3) | 8)[toString](16);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
-        return "r-" + s[join]("");
-    }
-
-    R.setWindow = function (newwin) {
-        win = newwin;
-        doc = win.document;
-    };
-    // colour utilities
-    var toHex = function (color) {
-        if (R.vml) {
-            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/
-            var trim = /^\s+|\s+$/g;
-            var bod;
-            try {
-                var docum = new ActiveXObject("htmlfile");
-                docum.write("<body>");
-                docum.close();
-                bod = docum.body;
-            } catch(e) {
-                bod = createPopup().document.body;
-            }
-            var range = bod.createTextRange();
-            toHex = cacher(function (color) {
-                try {
-                    bod.style.color = Str(color)[rp](trim, E);
-                    var value = range.queryCommandValue("ForeColor");
-                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);
-                    return "#" + ("000000" + value[toString](16)).slice(-6);
-                } catch(e) {
-                    return "none";
-                }
-            });
-        } else {
-            var i = doc.createElement("i");
-            i.title = "Rapha\xebl Colour Picker";
-            i.style.display = "none";
-            doc.body[appendChild](i);
-            toHex = cacher(function (color) {
-                i.style.color = color;
-                return doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
-            });
-        }
-        return toHex(color);
-    },
-    hsbtoString = function () {
-        return "hsb(" + [this.h, this.s, this.b] + ")";
-    },
-    hsltoString = function () {
-        return "hsl(" + [this.h, this.s, this.l] + ")";
-    },
-    rgbtoString = function () {
-        return this.hex;
-    };
-    R.hsb2rgb = function (h, s, b, o) {
-        if (R.is(h, "object") && "h" in h && "s" in h && "b" in h) {
-            b = h.b;
-            s = h.s;
-            h = h.h;
-            o = h.o;
-        }
-        return R.hsl2rgb(h, s, b / 2, o);
-    };
-    R.hsl2rgb = function (h, s, l, o) {
-        if (R.is(h, "object") && "h" in h && "s" in h && "l" in h) {
-            l = h.l;
-            s = h.s;
-            h = h.h;
-        }
-        if (h > 1 || s > 1 || l > 1) {
-            h /= 360;
-            s /= 100;
-            l /= 100;
-        }
-        var rgb = {},
-            channels = ["r", "g", "b"],
-            t2, t1, t3, r, g, b;
-        if (!s) {
-            rgb = {
-                r: l,
-                g: l,
-                b: l
-            };
-        } else {
-            if (l < .5) {
-                t2 = l * (1 + s);
-            } else {
-                t2 = l + s - l * s;
-            }
-            t1 = 2 * l - t2;
-            for (var i = 0; i < 3; i++) {
-                t3 = h + 1 / 3 * -(i - 1);
-                t3 < 0 && t3++;
-                t3 > 1 && t3--;
-                if (t3 * 6 < 1) {
-                    rgb[channels[i]] = t1 + (t2 - t1) * 6 * t3;
-                } else if (t3 * 2 < 1) {
-                    rgb[channels[i]] = t2;
-                } else if (t3 * 3 < 2) {
-                    rgb[channels[i]] = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
-                } else {
-                    rgb[channels[i]] = t1;
-                }
-            }
-        }
-        rgb.r *= 255;
-        rgb.g *= 255;
-        rgb.b *= 255;
-        rgb.hex = "#" + (16777216 | rgb.b | (rgb.g << 8) | (rgb.r << 16)).toString(16).slice(1);
-        R.is(o, "finite") && (rgb.opacity = o);
-        rgb.toString = rgbtoString;
-        return rgb;
-    };
-    R.rgb2hsb = function (red, green, blue) {
-        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
-            blue = red.b;
-            green = red.g;
-            red = red.r;
-        }
-        if (green == null && R.is(red, string)) {
-            var clr = R.getRGB(red);
-            red = clr.r;
-            green = clr.g;
-            blue = clr.b;
-        }
-        if (red > 1 || green > 1 || blue > 1) {
-            red /= 255;
-            green /= 255;
-            blue /= 255;
-        }
-        var max = mmax(red, green, blue),
-            min = mmin(red, green, blue),
-            hue,
-            saturation,
-            brightness = max;
-        if (min == max) {
-            return {h: 0, s: 0, b: max, toString: hsbtoString};
-        } else {
-            var delta = (max - min);
-            saturation = delta / max;
-            if (red == max) {
-                hue = (green - blue) / delta;
-            } else if (green == max) {
-                hue = 2 + ((blue - red) / delta);
-            } else {
-                hue = 4 + ((red - green) / delta);
-            }
-            hue /= 6;
-            hue < 0 && hue++;
-            hue > 1 && hue--;
-        }
-        return {h: hue, s: saturation, b: brightness, toString: hsbtoString};
-    };
-    R.rgb2hsl = function (red, green, blue) {
-        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
-            blue = red.b;
-            green = red.g;
-            red = red.r;
-        }
-        if (green == null && R.is(red, string)) {
-            var clr = R.getRGB(red);
-            red = clr.r;
-            green = clr.g;
-            blue = clr.b;
-        }
-        if (red > 1 || green > 1 || blue > 1) {
-            red /= 255;
-            green /= 255;
-            blue /= 255;
-        }
-        var max = mmax(red, green, blue),
-            min = mmin(red, green, blue),
-            h,
-            s,
-            l = (max + min) / 2,
-            hsl;
-        if (min == max) {
-            hsl =  {h: 0, s: 0, l: l};
-        } else {
-            var delta = max - min;
-            s = l < .5 ? delta / (max + min) : delta / (2 - max - min);
-            if (red == max) {
-                h = (green - blue) / delta;
-            } else if (green == max) {
-                h = 2 + (blue - red) / delta;
-            } else {
-                h = 4 + (red - green) / delta;
-            }
-            h /= 6;
-            h < 0 && h++;
-            h > 1 && h--;
-            hsl = {h: h, s: s, l: l};
-        }
-        hsl.toString = hsltoString;
-        return hsl;
-    };
-    R._path2string = function () {
-        return this.join(",")[rp](p2s, "$1");
-    };
-    function cacher(f, scope, postprocessor) {
-        function newf() {
-            var arg = Array[proto].slice.call(arguments, 0),
-                args = arg[join]("\u25ba"),
-                cache = newf.cache = newf.cache || {},
-                count = newf.count = newf.count || [];
-            if (cache[has](args)) {
-                return postprocessor ? postprocessor(cache[args]) : cache[args];
-            }
-            count[length] >= 1e3 && delete cache[count.shift()];
-            count[push](args);
-            cache[args] = f[apply](scope, arg);
-            return postprocessor ? postprocessor(cache[args]) : cache[args];
-        }
-        return newf;
-    }
- 
-    R.getRGB = cacher(function (colour) {
-        if (!colour || !!((colour = Str(colour)).indexOf("-") + 1)) {
-            return {r: -1, g: -1, b: -1, hex: "none", error: 1};
-        }
-        if (colour == "none") {
-            return {r: -1, g: -1, b: -1, hex: "none"};
-        }
-        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
-        var res,
-            red,
-            green,
-            blue,
-            opacity,
-            t,
-            values,
-            rgb = colour.match(colourRegExp);
-        if (rgb) {
-            if (rgb[2]) {
-                blue = toInt(rgb[2].substring(5), 16);
-                green = toInt(rgb[2].substring(3, 5), 16);
-                red = toInt(rgb[2].substring(1, 3), 16);
-            }
-            if (rgb[3]) {
-                blue = toInt((t = rgb[3].charAt(3)) + t, 16);
-                green = toInt((t = rgb[3].charAt(2)) + t, 16);
-                red = toInt((t = rgb[3].charAt(1)) + t, 16);
-            }
-            if (rgb[4]) {
-                values = rgb[4][split](commaSpaces);
-                red = toFloat(values[0]);
-                values[0].slice(-1) == "%" && (red *= 2.55);
-                green = toFloat(values[1]);
-                values[1].slice(-1) == "%" && (green *= 2.55);
-                blue = toFloat(values[2]);
-                values[2].slice(-1) == "%" && (blue *= 2.55);
-                rgb[1].toLowerCase().slice(0, 4) == "rgba" && (opacity = toFloat(values[3]));
-                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
-            }
-            if (rgb[5]) {
-                values = rgb[5][split](commaSpaces);
-                red = toFloat(values[0]);
-                values[0].slice(-1) == "%" && (red *= 2.55);
-                green = toFloat(values[1]);
-                values[1].slice(-1) == "%" && (green *= 2.55);
-                blue = toFloat(values[2]);
-                values[2].slice(-1) == "%" && (blue *= 2.55);
-                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
-                rgb[1].toLowerCase().slice(0, 4) == "hsba" && (opacity = toFloat(values[3]));
-                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
-                return R.hsb2rgb(red, green, blue, opacity);
-            }
-            if (rgb[6]) {
-                values = rgb[6][split](commaSpaces);
-                red = toFloat(values[0]);
-                values[0].slice(-1) == "%" && (red *= 2.55);
-                green = toFloat(values[1]);
-                values[1].slice(-1) == "%" && (green *= 2.55);
-                blue = toFloat(values[2]);
-                values[2].slice(-1) == "%" && (blue *= 2.55);
-                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
-                rgb[1].toLowerCase().slice(0, 4) == "hsla" && (opacity = toFloat(values[3]));
-                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
-                return R.hsl2rgb(red, green, blue, opacity);
-            }
-            rgb = {r: red, g: green, b: blue};
-            rgb.hex = "#" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);
-            R.is(opacity, "finite") && (rgb.opacity = opacity);
-            return rgb;
-        }
-        return {r: -1, g: -1, b: -1, hex: "none", error: 1};
-    }, R);
-    R.getColor = function (value) {
-        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},
-            rgb = this.hsb2rgb(start.h, start.s, start.b);
-        start.h += .075;
-        if (start.h > 1) {
-            start.h = 0;
-            start.s -= .2;
-            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});
-        }
-        return rgb.hex;
-    };
-    R.getColor.reset = function () {
-        delete this.start;
-    };
-    // path utilities
-    R.parsePathString = cacher(function (pathString) {
-        if (!pathString) {
-            return null;
-        }
-        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0},
-            data = [];
-        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption
-            data = pathClone(pathString);
-        }
-        if (!data[length]) {
-            Str(pathString)[rp](pathCommand, function (a, b, c) {
-                var params = [],
-                    name = lowerCase.call(b);
-                c[rp](pathValues, function (a, b) {
-                    b && params[push](+b);
-                });
-                if (name == "m" && params[length] > 2) {
-                    data[push]([b][concat](params.splice(0, 2)));
-                    name = "l";
-                    b = b == "m" ? "l" : "L";
-                }
-                while (params[length] >= paramCounts[name]) {
-                    data[push]([b][concat](params.splice(0, paramCounts[name])));
-                    if (!paramCounts[name]) {
-                        break;
-                    }
-                }
-            });
-        }
-        data[toString] = R._path2string;
-        return data;
-    });
-    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
-        var t1 = 1 - t,
-            x = pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
-            y = pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y,
-            mx = p1x + 2 * t * (c1x - p1x) + t * t * (c2x - 2 * c1x + p1x),
-            my = p1y + 2 * t * (c1y - p1y) + t * t * (c2y - 2 * c1y + p1y),
-            nx = c1x + 2 * t * (c2x - c1x) + t * t * (p2x - 2 * c2x + c1x),
-            ny = c1y + 2 * t * (c2y - c1y) + t * t * (p2y - 2 * c2y + c1y),
-            ax = (1 - t) * p1x + t * c1x,
-            ay = (1 - t) * p1y + t * c1y,
-            cx = (1 - t) * c2x + t * p2x,
-            cy = (1 - t) * c2y + t * p2y,
-            alpha = (90 - math.atan((mx - nx) / (my - ny)) * 180 / PI);
-        (mx > nx || my < ny) && (alpha += 180);
-        return {x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha};
-    };
-    var pathDimensions = cacher(function (path) {
-        if (!path) {
-            return {x: 0, y: 0, width: 0, height: 0};
-        }
-        path = path2curve(path);
-        var x = 0, 
-            y = 0,
-            X = [],
-            Y = [],
-            p;
-        for (var i = 0, ii = path[length]; i < ii; i++) {
-            p = path[i];
-            if (p[0] == "M") {
-                x = p[1];
-                y = p[2];
-                X[push](x);
-                Y[push](y);
-            } else {
-                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
-                X = X[concat](dim.min.x, dim.max.x);
-                Y = Y[concat](dim.min.y, dim.max.y);
-                x = p[5];
-                y = p[6];
-            }
-        }
-        var xmin = mmin[apply](0, X),
-            ymin = mmin[apply](0, Y);
-        return {
-            x: xmin,
-            y: ymin,
-            width: mmax[apply](0, X) - xmin,
-            height: mmax[apply](0, Y) - ymin
-        };
-    }),
-        pathClone = function (pathArray) {
-            var res = [];
-            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
-                pathArray = R.parsePathString(pathArray);
-            }
-            for (var i = 0, ii = pathArray[length]; i < ii; i++) {
-                res[i] = [];
-                for (var j = 0, jj = pathArray[i][length]; j < jj; j++) {
-                    res[i][j] = pathArray[i][j];
-                }
-            }
-            res[toString] = R._path2string;
-            return res;
-        },
-        pathToRelative = cacher(function (pathArray) {
-            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
-                pathArray = R.parsePathString(pathArray);
-            }
-            var res = [],
-                x = 0,
-                y = 0,
-                mx = 0,
-                my = 0,
-                start = 0;
-            if (pathArray[0][0] == "M") {
-                x = pathArray[0][1];
-                y = pathArray[0][2];
-                mx = x;
-                my = y;
-                start++;
-                res[push](["M", x, y]);
-            }
-            for (var i = start, ii = pathArray[length]; i < ii; i++) {
-                var r = res[i] = [],
-                    pa = pathArray[i];
-                if (pa[0] != lowerCase.call(pa[0])) {
-                    r[0] = lowerCase.call(pa[0]);
-                    switch (r[0]) {
-                        case "a":
-                            r[1] = pa[1];
-                            r[2] = pa[2];
-                            r[3] = pa[3];
-                            r[4] = pa[4];
-                            r[5] = pa[5];
-                            r[6] = +(pa[6] - x).toFixed(3);
-                            r[7] = +(pa[7] - y).toFixed(3);
-                            break;
-                        case "v":
-                            r[1] = +(pa[1] - y).toFixed(3);
-                            break;
-                        case "m":
-                            mx = pa[1];
-                            my = pa[2];
-                        default:
-                            for (var j = 1, jj = pa[length]; j < jj; j++) {
-                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);
-                            }
-                    }
-                } else {
-                    r = res[i] = [];
-                    if (pa[0] == "m") {
-                        mx = pa[1] + x;
-                        my = pa[2] + y;
-                    }
-                    for (var k = 0, kk = pa[length]; k < kk; k++) {
-                        res[i][k] = pa[k];
-                    }
-                }
-                var len = res[i][length];
-                switch (res[i][0]) {
-                    case "z":
-                        x = mx;
-                        y = my;
-                        break;
-                    case "h":
-                        x += +res[i][len - 1];
-                        break;
-                    case "v":
-                        y += +res[i][len - 1];
-                        break;
-                    default:
-                        x += +res[i][len - 2];
-                        y += +res[i][len - 1];
-                }
-            }
-            res[toString] = R._path2string;
-            return res;
-        }, 0, pathClone),
-        pathToAbsolute = cacher(function (pathArray) {
-            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
-                pathArray = R.parsePathString(pathArray);
-            }
-            var res = [],
-                x = 0,
-                y = 0,
-                mx = 0,
-                my = 0,
-                start = 0;
-            if (pathArray[0][0] == "M") {
-                x = +pathArray[0][1];
-                y = +pathArray[0][2];
-                mx = x;
-                my = y;
-                start++;
-                res[0] = ["M", x, y];
-            }
-            for (var i = start, ii = pathArray[length]; i < ii; i++) {
-                var r = res[i] = [],
-                    pa = pathArray[i];
-                if (pa[0] != upperCase.call(pa[0])) {
-                    r[0] = upperCase.call(pa[0]);
-                    switch (r[0]) {
-                        case "A":
-                            r[1] = pa[1];
-                            r[2] = pa[2];
-                            r[3] = pa[3];
-                            r[4] = pa[4];
-                            r[5] = pa[5];
-                            r[6] = +(pa[6] + x);
-                            r[7] = +(pa[7] + y);
-                            break;
-                        case "V":
-                            r[1] = +pa[1] + y;
-                            break;
-                        case "H":
-                            r[1] = +pa[1] + x;
-                            break;
-                        case "M":
-                            mx = +pa[1] + x;
-                            my = +pa[2] + y;
-                        default:
-                            for (var j = 1, jj = pa[length]; j < jj; j++) {
-                                r[j] = +pa[j] + ((j % 2) ? x : y);
-                            }
-                    }
-                } else {
-                    for (var k = 0, kk = pa[length]; k < kk; k++) {
-                        res[i][k] = pa[k];
-                    }
-                }
-                switch (r[0]) {
-                    case "Z":
-                        x = mx;
-                        y = my;
-                        break;
-                    case "H":
-                        x = r[1];
-                        break;
-                    case "V":
-                        y = r[1];
-                        break;
-                    case "M":
-                        mx = res[i][res[i][length] - 2];
-                        my = res[i][res[i][length] - 1];
-                    default:
-                        x = res[i][res[i][length] - 2];
-                        y = res[i][res[i][length] - 1];
-                }
-            }
-            res[toString] = R._path2string;
-            return res;
-        }, null, pathClone),
-        l2c = function (x1, y1, x2, y2) {
-            return [x1, y1, x2, y2, x2, y2];
-        },
-        q2c = function (x1, y1, ax, ay, x2, y2) {
-            var _13 = 1 / 3,
-                _23 = 2 / 3;
-            return [
-                    _13 * x1 + _23 * ax,
-                    _13 * y1 + _23 * ay,
-                    _13 * x2 + _23 * ax,
-                    _13 * y2 + _23 * ay,
-                    x2,
-                    y2
-                ];
-        },
-        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
-            // for more information of where this math came from visit:
-            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
-            var _120 = PI * 120 / 180,
-                rad = PI / 180 * (+angle || 0),
-                res = [],
-                xy,
-                rotate = cacher(function (x, y, rad) {
-                    var X = x * math.cos(rad) - y * math.sin(rad),
-                        Y = x * math.sin(rad) + y * math.cos(rad);
-                    return {x: X, y: Y};
-                });
-            if (!recursive) {
-                xy = rotate(x1, y1, -rad);
-                x1 = xy.x;
-                y1 = xy.y;
-                xy = rotate(x2, y2, -rad);
-                x2 = xy.x;
-                y2 = xy.y;
-                var cos = math.cos(PI / 180 * angle),
-                    sin = math.sin(PI / 180 * angle),
-                    x = (x1 - x2) / 2,
-                    y = (y1 - y2) / 2;
-                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);
-                if (h > 1) {
-                    h = math.sqrt(h);
-                    rx = h * rx;
-                    ry = h * ry;
-                }
-                var rx2 = rx * rx,
-                    ry2 = ry * ry,
-                    k = (large_arc_flag == sweep_flag ? -1 : 1) *
-                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),
-                    cx = k * rx * y / ry + (x1 + x2) / 2,
-                    cy = k * -ry * x / rx + (y1 + y2) / 2,
-                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),
-                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));
-
-                f1 = x1 < cx ? PI - f1 : f1;
-                f2 = x2 < cx ? PI - f2 : f2;
-                f1 < 0 && (f1 = PI * 2 + f1);
-                f2 < 0 && (f2 = PI * 2 + f2);
-                if (sweep_flag && f1 > f2) {
-                    f1 = f1 - PI * 2;
-                }
-                if (!sweep_flag && f2 > f1) {
-                    f2 = f2 - PI * 2;
-                }
-            } else {
-                f1 = recursive[0];
-                f2 = recursive[1];
-                cx = recursive[2];
-                cy = recursive[3];
-            }
-            var df = f2 - f1;
-            if (abs(df) > _120) {
-                var f2old = f2,
-                    x2old = x2,
-                    y2old = y2;
-                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);
-                x2 = cx + rx * math.cos(f2);
-                y2 = cy + ry * math.sin(f2);
-                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);
-            }
-            df = f2 - f1;
-            var c1 = math.cos(f1),
-                s1 = math.sin(f1),
-                c2 = math.cos(f2),
-                s2 = math.sin(f2),
-                t = math.tan(df / 4),
-                hx = 4 / 3 * rx * t,
-                hy = 4 / 3 * ry * t,
-                m1 = [x1, y1],
-                m2 = [x1 + hx * s1, y1 - hy * c1],
-                m3 = [x2 + hx * s2, y2 - hy * c2],
-                m4 = [x2, y2];
-            m2[0] = 2 * m1[0] - m2[0];
-            m2[1] = 2 * m1[1] - m2[1];
-            if (recursive) {
-                return [m2, m3, m4][concat](res);
-            } else {
-                res = [m2, m3, m4][concat](res)[join]()[split](",");
-                var newres = [];
-                for (var i = 0, ii = res[length]; i < ii; i++) {
-                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;
-                }
-                return newres;
-            }
-        },
-        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
-            var t1 = 1 - t;
-            return {
-                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
-                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y
-            };
-        },
-        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
-            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),
-                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),
-                c = p1x - c1x,
-                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,
-                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,
-                y = [p1y, p2y],
-                x = [p1x, p2x],
-                dot;
-            abs(t1) > "1e12" && (t1 = .5);
-            abs(t2) > "1e12" && (t2 = .5);
-            if (t1 > 0 && t1 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            if (t2 > 0 && t2 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);
-            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);
-            c = p1y - c1y;
-            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;
-            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;
-            abs(t1) > "1e12" && (t1 = .5);
-            abs(t2) > "1e12" && (t2 = .5);
-            if (t1 > 0 && t1 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            if (t2 > 0 && t2 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            return {
-                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},
-                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}
-            };
-        }),
-        path2curve = cacher(function (path, path2) {
-            var p = pathToAbsolute(path),
-                p2 = path2 && pathToAbsolute(path2),
-                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
-                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
-                processPath = function (path, d) {
-                    var nx, ny;
-                    if (!path) {
-                        return ["C", d.x, d.y, d.x, d.y, d.x, d.y];
-                    }
-                    !(path[0] in {T:1, Q:1}) && (d.qx = d.qy = null);
-                    switch (path[0]) {
-                        case "M":
-                            d.X = path[1];
-                            d.Y = path[2];
-                            break;
-                        case "A":
-                            path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));
-                            break;
-                        case "S":
-                            nx = d.x + (d.x - (d.bx || d.x));
-                            ny = d.y + (d.y - (d.by || d.y));
-                            path = ["C", nx, ny][concat](path.slice(1));
-                            break;
-                        case "T":
-                            d.qx = d.x + (d.x - (d.qx || d.x));
-                            d.qy = d.y + (d.y - (d.qy || d.y));
-                            path = ["C"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));
-                            break;
-                        case "Q":
-                            d.qx = path[1];
-                            d.qy = path[2];
-                            path = ["C"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));
-                            break;
-                        case "L":
-                            path = ["C"][concat](l2c(d.x, d.y, path[1], path[2]));
-                            break;
-                        case "H":
-                            path = ["C"][concat](l2c(d.x, d.y, path[1], d.y));
-                            break;
-                        case "V":
-                            path = ["C"][concat](l2c(d.x, d.y, d.x, path[1]));
-                            break;
-                        case "Z":
-                            path = ["C"][concat](l2c(d.x, d.y, d.X, d.Y));
-                            break;
-                    }
-                    return path;
-                },
-                fixArc = function (pp, i) {
-                    if (pp[i][length] > 7) {
-                        pp[i].shift();
-                        var pi = pp[i];
-                        while (pi[length]) {
-                            pp.splice(i++, 0, ["C"][concat](pi.splice(0, 6)));
-                        }
-                        pp.splice(i, 1);
-                        ii = mmax(p[length], p2 && p2[length] || 0);
-                    }
-                },
-                fixM = function (path1, path2, a1, a2, i) {
-                    if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") {
-                        path2.splice(i, 0, ["M", a2.x, a2.y]);
-                        a1.bx = 0;
-                        a1.by = 0;
-                        a1.x = path1[i][1];
-                        a1.y = path1[i][2];
-                        ii = mmax(p[length], p2 && p2[length] || 0);
-                    }
-                };
-            for (var i = 0, ii = mmax(p[length], p2 && p2[length] || 0); i < ii; i++) {
-                p[i] = processPath(p[i], attrs);
-                fixArc(p, i);
-                p2 && (p2[i] = processPath(p2[i], attrs2));
-                p2 && fixArc(p2, i);
-                fixM(p, p2, attrs, attrs2, i);
-                fixM(p2, p, attrs2, attrs, i);
-                var seg = p[i],
-                    seg2 = p2 && p2[i],
-                    seglen = seg[length],
-                    seg2len = p2 && seg2[length];
-                attrs.x = seg[seglen - 2];
-                attrs.y = seg[seglen - 1];
-                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;
-                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;
-                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);
-                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);
-                attrs2.x = p2 && seg2[seg2len - 2];
-                attrs2.y = p2 && seg2[seg2len - 1];
-            }
-            return p2 ? [p, p2] : p;
-        }, null, pathClone),
-        parseDots = cacher(function (gradient) {
-            var dots = [];
-            for (var i = 0, ii = gradient[length]; i < ii; i++) {
-                var dot = {},
-                    par = gradient[i].match(/^([^:]*):?([\d\.]*)/);
-                dot.color = R.getRGB(par[1]);
-                if (dot.color.error) {
-                    return null;
-                }
-                dot.color = dot.color.hex;
-                par[2] && (dot.offset = par[2] + "%");
-                dots[push](dot);
-            }
-            for (i = 1, ii = dots[length] - 1; i < ii; i++) {
-                if (!dots[i].offset) {
-                    var start = toFloat(dots[i - 1].offset || 0),
-                        end = 0;
-                    for (var j = i + 1; j < ii; j++) {
-                        if (dots[j].offset) {
-                            end = dots[j].offset;
-                            break;
-                        }
-                    }
-                    if (!end) {
-                        end = 100;
-                        j = ii;
-                    }
-                    end = toFloat(end);
-                    var d = (end - start) / (j - i + 1);
-                    for (; i < j; i++) {
-                        start += d;
-                        dots[i].offset = start + "%";
-                    }
-                }
-            }
-            return dots;
-        }),
-        getContainer = function (x, y, w, h) {
-            var container;
-            if (R.is(x, string) || R.is(x, "object")) {
-                container = R.is(x, string) ? doc.getElementById(x) : x;
-                if (container.tagName) {
-                    if (y == null) {
-                        return {
-                            container: container,
-                            width: container.style.pixelWidth || container.offsetWidth,
-                            height: container.style.pixelHeight || container.offsetHeight
-                        };
-                    } else {
-                        return {container: container, width: y, height: w};
-                    }
-                }
-            } else {
-                return {container: 1, x: x, y: y, width: w, height: h};
-            }
-        },
-        plugins = function (con, add) {
-            var that = this;
-            for (var prop in add) {
-                if (add[has](prop) && !(prop in con)) {
-                    switch (typeof add[prop]) {
-                        case "function":
-                            (function (f) {
-                                con[prop] = con === that ? f : function () { return f[apply](that, arguments); };
-                            })(add[prop]);
-                        break;
-                        case "object":
-                            con[prop] = con[prop] || {};
-                            plugins.call(this, con[prop], add[prop]);
-                        break;
-                        default:
-                            con[prop] = add[prop];
-                        break;
-                    }
-                }
-            }
-        },
-        tear = function (el, paper) {
-            el == paper.top && (paper.top = el.prev);
-            el == paper.bottom && (paper.bottom = el.next);
-            el.next && (el.next.prev = el.prev);
-            el.prev && (el.prev.next = el.next);
-        },
-        tofront = function (el, paper) {
-            if (paper.top === el) {
-                return;
-            }
-            tear(el, paper);
-            el.next = null;
-            el.prev = paper.top;
-            paper.top.next = el;
-            paper.top = el;
-        },
-        toback = function (el, paper) {
-            if (paper.bottom === el) {
-                return;
-            }
-            tear(el, paper);
-            el.next = paper.bottom;
-            el.prev = null;
-            paper.bottom.prev = el;
-            paper.bottom = el;
-        },
-        insertafter = function (el, el2, paper) {
-            tear(el, paper);
-            el2 == paper.top && (paper.top = el);
-            el2.next && (el2.next.prev = el);
-            el.next = el2.next;
-            el.prev = el2;
-            el2.next = el;
-        },
-        insertbefore = function (el, el2, paper) {
-            tear(el, paper);
-            el2 == paper.bottom && (paper.bottom = el);
-            el2.prev && (el2.prev.next = el);
-            el.prev = el2.prev;
-            el2.prev = el;
-            el.next = el2;
-        },
-        removed = function (methodname) {
-            return function () {
-                throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object");
-            };
-        };
-    R.pathToRelative = pathToRelative;
-    // SVG
-    if (R.svg) {
-        paperproto.svgns = "http://www.w3.org/2000/svg";
-        paperproto.xlink = "http://www.w3.org/1999/xlink";
-        round = function (num) {
-            return +num + (~~num === num) * .5;
-        };
-        var $ = function (el, attr) {
-            if (attr) {
-                for (var key in attr) {
-                    if (attr[has](key)) {
-                        el[setAttribute](key, Str(attr[key]));
-                    }
-                }
-            } else {
-                el = doc.createElementNS(paperproto.svgns, el);
-                el.style.webkitTapHighlightColor = "rgba(0,0,0,0)";
-                return el;
-            }
-        };
-        R[toString] = function () {
-            return  "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version;
-        };
-        var thePath = function (pathString, SVG) {
-            var el = $("path");
-            SVG.canvas && SVG.canvas[appendChild](el);
-            var p = new Element(el, SVG);
-            p.type = "path";
-            setFillAndStroke(p, {fill: "none", stroke: "#000", path: pathString});
-            return p;
-        };
-        var addGradientFill = function (o, gradient, SVG) {
-            var type = "linear",
-                fx = .5, fy = .5,
-                s = o.style;
-            gradient = Str(gradient)[rp](radial_gradient, function (all, _fx, _fy) {
-                type = "radial";
-                if (_fx && _fy) {
-                    fx = toFloat(_fx);
-                    fy = toFloat(_fy);
-                    var dir = ((fy > .5) * 2 - 1);
-                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&
-                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&
-                        fy != .5 &&
-                        (fy = fy.toFixed(5) - 1e-5 * dir);
-                }
-                return E;
-            });
-            gradient = gradient[split](/\s*\-\s*/);
-            if (type == "linear") {
-                var angle = gradient.shift();
-                angle = -toFloat(angle);
-                if (isNaN(angle)) {
-                    return null;
-                }
-                var vector = [0, 0, math.cos(angle * PI / 180), math.sin(angle * PI / 180)],
-                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);
-                vector[2] *= max;
-                vector[3] *= max;
-                if (vector[2] < 0) {
-                    vector[0] = -vector[2];
-                    vector[2] = 0;
-                }
-                if (vector[3] < 0) {
-                    vector[1] = -vector[3];
-                    vector[3] = 0;
-                }
-            }
-            var dots = parseDots(gradient);
-            if (!dots) {
-                return null;
-            }
-            var id = o.getAttribute(fillString);
-            id = id.match(/^url\(#(.*)\)$/);
-            id && SVG.defs.removeChild(doc.getElementById(id[1]));
-
-            var el = $(type + "Gradient");
-            el.id = createUUID();
-            $(el, type == "radial" ? {fx: fx, fy: fy} : {x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3]});
-            SVG.defs[appendChild](el);
-            for (var i = 0, ii = dots[length]; i < ii; i++) {
-                var stop = $("stop");
-                $(stop, {
-                    offset: dots[i].offset ? dots[i].offset : !i ? "0%" : "100%",
-                    "stop-color": dots[i].color || "#fff"
-                });
-                el[appendChild](stop);
-            }
-            $(o, {
-                fill: "url(#" + el.id + ")",
-                opacity: 1,
-                "fill-opacity": 1
-            });
-            s.fill = E;
-            s.opacity = 1;
-            s.fillOpacity = 1;
-            return 1;
-        };
-        var updatePosition = function (o) {
-            var bbox = o.getBBox();
-            $(o.pattern, {patternTransform: R.format("translate({0},{1})", bbox.x, bbox.y)});
-        };
-        var setFillAndStroke = function (o, params) {
-            var dasharray = {
-                    "": [0],
-                    "none": [0],
-                    "-": [3, 1],
-                    ".": [1, 1],
-                    "-.": [3, 1, 1, 1],
-                    "-..": [3, 1, 1, 1, 1, 1],
-                    ". ": [1, 3],
-                    "- ": [4, 3],
-                    "--": [8, 3],
-                    "- .": [4, 3, 1, 3],
-                    "--.": [8, 3, 1, 3],
-                    "--..": [8, 3, 1, 3, 1, 3]
-                },
-                node = o.node,
-                attrs = o.attrs,
-                rot = o.rotate(),
-                addDashes = function (o, value) {
-                    value = dasharray[lowerCase.call(value)];
-                    if (value) {
-                        var width = o.attrs["stroke-width"] || "1",
-                            butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0,
-                            dashes = [];
-                        var i = value[length];
-                        while (i--) {
-                            dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;
-                        }
-                        $(node, {"stroke-dasharray": dashes[join](",")});
-                    }
-                };
-            params[has]("rotation") && (rot = params.rotation);
-            var rotxy = Str(rot)[split](separator);
-            if (!(rotxy.length - 1)) {
-                rotxy = null;
-            } else {
-                rotxy[1] = +rotxy[1];
-                rotxy[2] = +rotxy[2];
-            }
-            toFloat(rot) && o.rotate(0, true);
-            for (var att in params) {
-                if (params[has](att)) {
-                    if (!availableAttrs[has](att)) {
-                        continue;
-                    }
-                    var value = params[att];
-                    attrs[att] = value;
-                    switch (att) {
-                        case "blur":
-                            o.blur(value);
-                            break;
-                        case "rotation":
-                            o.rotate(value, true);
-                            break;
-                        case "href":
-                        case "title":
-                        case "target":
-                            var pn = node.parentNode;
-                            if (lowerCase.call(pn.tagName) != "a") {
-                                var hl = $("a");
-                                pn.insertBefore(hl, node);
-                                hl[appendChild](node);
-                                pn = hl;
-                            }
-                            if (att == "target" && value == "blank") {
-                                pn.setAttributeNS(o.paper.xlink, "show", "new");
-                            } else {
-                                pn.setAttributeNS(o.paper.xlink, att, value);
-                            }
-                            break;
-                        case "cursor":
-                            node.style.cursor = value;
-                            break;
-                        case "clip-rect":
-                            var rect = Str(value)[split](separator);
-                            if (rect[length] == 4) {
-                                o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);
-                                var el = $("clipPath"),
-                                    rc = $("rect");
-                                el.id = createUUID();
-                                $(rc, {
-                                    x: rect[0],
-                                    y: rect[1],
-                                    width: rect[2],
-                                    height: rect[3]
-                                });
-                                el[appendChild](rc);
-                                o.paper.defs[appendChild](el);
-                                $(node, {"clip-path": "url(#" + el.id + ")"});
-                                o.clip = rc;
-                            }
-                            if (!value) {
-                                var clip = doc.getElementById(node.getAttribute("clip-path")[rp](/(^url\(#|\)$)/g, E));
-                                clip && clip.parentNode.removeChild(clip);
-                                $(node, {"clip-path": E});
-                                delete o.clip;
-                            }
-                        break;
-                        case "path":
-                            if (o.type == "path") {
-                                $(node, {d: value ? attrs.path = pathToAbsolute(value) : "M0,0"});
-                            }
-                            break;
-                        case "width":
-                            node[setAttribute](att, value);
-                            if (attrs.fx) {
-                                att = "x";
-                                value = attrs.x;
-                            } else {
-                                break;
-                            }
-                        case "x":
-                            if (attrs.fx) {
-                                value = -attrs.x - (attrs.width || 0);
-                            }
-                        case "rx":
-                            if (att == "rx" && o.type == "rect") {
-                                break;
-                            }
-                        case "cx":
-                            rotxy && (att == "x" || att == "cx") && (rotxy[1] += value - attrs[att]);
-                            node[setAttribute](att, value);
-                            o.pattern && updatePosition(o);
-                            break;
-                        case "height":
-                            node[setAttribute](att, value);
-                            if (attrs.fy) {
-                                att = "y";
-                                value = attrs.y;
-                            } else {
-                                break;
-                            }
-                        case "y":
-                            if (attrs.fy) {
-                                value = -attrs.y - (attrs.height || 0);
-                            }
-                        case "ry":
-                            if (att == "ry" && o.type == "rect") {
-                                break;
-                            }
-                        case "cy":
-                            rotxy && (att == "y" || att == "cy") && (rotxy[2] += value - attrs[att]);
-                            node[setAttribute](att, value);
-                            o.pattern && updatePosition(o);
-                            break;
-                        case "r":
-                            if (o.type == "rect") {
-                                $(node, {rx: value, ry: value});
-                            } else {
-                                node[setAttribute](att, value);
-                            }
-                            break;
-                        case "src":
-                            if (o.type == "image") {
-                                node.setAttributeNS(o.paper.xlink, "href", value);
-                            }
-                            break;
-                        case "stroke-width":
-                            node.style.strokeWidth = value;
-                            // Need following line for Firefox
-                            node[setAttribute](att, value);
-                            if (attrs["stroke-dasharray"]) {
-                                addDashes(o, attrs["stroke-dasharray"]);
-                            }
-                            break;
-                        case "stroke-dasharray":
-                            addDashes(o, value);
-                            break;
-                        case "translation":
-                            var xy = Str(value)[split](separator);
-                            xy[0] = +xy[0] || 0;
-                            xy[1] = +xy[1] || 0;
-                            if (rotxy) {
-                                rotxy[1] += xy[0];
-                                rotxy[2] += xy[1];
-                            }
-                            translate.call(o, xy[0], xy[1]);
-                            break;
-                        case "scale":
-                            xy = Str(value)[split](separator);
-                            o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, isNaN(toFloat(xy[2])) ? null : +xy[2], isNaN(toFloat(xy[3])) ? null : +xy[3]);
-                            break;
-                        case fillString:
-                            var isURL = Str(value).match(ISURL);
-                            if (isURL) {
-                                el = $("pattern");
-                                var ig = $("image");
-                                el.id = createUUID();
-                                $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1});
-                                $(ig, {x: 0, y: 0});
-                                ig.setAttributeNS(o.paper.xlink, "href", isURL[1]);
-                                el[appendChild](ig);
- 
-                                var img = doc.createElement("img");
-                                img.style.cssText = "position:absolute;left:-9999em;top-9999em";
-                                img.onload = function () {
-                                    $(el, {width: this.offsetWidth, height: this.offsetHeight});
-                                    $(ig, {width: this.offsetWidth, height: this.offsetHeight});
-                                    doc.body.removeChild(this);
-                                    o.paper.safari();
-                                };
-                                doc.body[appendChild](img);
-                                img.src = isURL[1];
-                                o.paper.defs[appendChild](el);
-                                node.style.fill = "url(#" + el.id + ")";
-                                $(node, {fill: "url(#" + el.id + ")"});
-                                o.pattern = el;
-                                o.pattern && updatePosition(o);
-                                break;
-                            }
-                            var clr = R.getRGB(value);
-                            if (!clr.error) {
-                                delete params.gradient;
-                                delete attrs.gradient;
-                                !R.is(attrs.opacity, "undefined") &&
-                                    R.is(params.opacity, "undefined") &&
-                                    $(node, {opacity: attrs.opacity});
-                                !R.is(attrs["fill-opacity"], "undefined") &&
-                                    R.is(params["fill-opacity"], "undefined") &&
-                                    $(node, {"fill-opacity": attrs["fill-opacity"]});
-                            } else if ((({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper)) {
-                                attrs.gradient = value;
-                                attrs.fill = "none";
-                                break;
-                            }
-                            clr[has]("opacity") && $(node, {"fill-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
-                        case "stroke":
-                            clr = R.getRGB(value);
-                            node[setAttribute](att, clr.hex);
-                            att == "stroke" && clr[has]("opacity") && $(node, {"stroke-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
-                            break;
-                        case "gradient":
-                            (({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper);
-                            break;
-                        case "opacity":
-                            if (attrs.gradient && !attrs[has]("stroke-opacity")) {
-                                $(node, {"stroke-opacity": value > 1 ? value / 100 : value});
-                            }
-                            // fall
-                        case "fill-opacity":
-                            if (attrs.gradient) {
-                                var gradient = doc.getElementById(node.getAttribute(fillString)[rp](/^url\(#|\)$/g, E));
-                                if (gradient) {
-                                    var stops = gradient.getElementsByTagName("stop");
-                                    stops[stops[length] - 1][setAttribute]("stop-opacity", value);
-                                }
-                                break;
-                            }
-                        default:
-                            att == "font-size" && (value = toInt(value, 10) + "px");
-                            var cssrule = att[rp](/(\-.)/g, function (w) {
-                                return upperCase.call(w.substring(1));
-                            });
-                            node.style[cssrule] = value;
-                            // Need following line for Firefox
-                            node[setAttribute](att, value);
-                            break;
-                    }
-                }
-            }
-            
-            tuneText(o, params);
-            if (rotxy) {
-                o.rotate(rotxy.join(S));
-            } else {
-                toFloat(rot) && o.rotate(rot, true);
-            }
-        };
-        var leading = 1.2,
-        tuneText = function (el, params) {
-            if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) {
-                return;
-            }
-            var a = el.attrs,
-                node = el.node,
-                fontSize = node.firstChild ? toInt(doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10;
- 
-            if (params[has]("text")) {
-                a.text = params.text;
-                while (node.firstChild) {
-                    node.removeChild(node.firstChild);
-                }
-                var texts = Str(params.text)[split]("\n");
-                for (var i = 0, ii = texts[length]; i < ii; i++) if (texts[i]) {
-                    var tspan = $("tspan");
-                    i && $(tspan, {dy: fontSize * leading, x: a.x});
-                    tspan[appendChild](doc.createTextNode(texts[i]));
-                    node[appendChild](tspan);
-                }
-            } else {
-                texts = node.getElementsByTagName("tspan");
-                for (i = 0, ii = texts[length]; i < ii; i++) {
-                    i && $(texts[i], {dy: fontSize * leading, x: a.x});
-                }
-            }
-            $(node, {y: a.y});
-            var bb = el.getBBox(),
-                dif = a.y - (bb.y + bb.height / 2);
-            dif && R.is(dif, "finite") && $(node, {y: a.y + dif});
-        },
-        Element = function (node, svg) {
-            var X = 0,
-                Y = 0;
-            this[0] = node;
-            this.id = R._oid++;
-            this.node = node;
-            node.raphael = this;
-            this.paper = svg;
-            this.attrs = this.attrs || {};
-            this.transformations = []; // rotate, translate, scale
-            this._ = {
-                tx: 0,
-                ty: 0,
-                rt: {deg: 0, cx: 0, cy: 0},
-                sx: 1,
-                sy: 1
-            };
-            !svg.bottom && (svg.bottom = this);
-            this.prev = svg.top;
-            svg.top && (svg.top.next = this);
-            svg.top = this;
-            this.next = null;
-        };
-        var elproto = Element[proto];
-        Element[proto].rotate = function (deg, cx, cy) {
-            if (this.removed) {
-                return this;
-            }
-            if (deg == null) {
-                if (this._.rt.cx) {
-                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
-                }
-                return this._.rt.deg;
-            }
-            var bbox = this.getBBox();
-            deg = Str(deg)[split](separator);
-            if (deg[length] - 1) {
-                cx = toFloat(deg[1]);
-                cy = toFloat(deg[2]);
-            }
-            deg = toFloat(deg[0]);
-            if (cx != null && cx !== false) {
-                this._.rt.deg = deg;
-            } else {
-                this._.rt.deg += deg;
-            }
-            (cy == null) && (cx = null);
-            this._.rt.cx = cx;
-            this._.rt.cy = cy;
-            cx = cx == null ? bbox.x + bbox.width / 2 : cx;
-            cy = cy == null ? bbox.y + bbox.height / 2 : cy;
-            if (this._.rt.deg) {
-                this.transformations[0] = R.format("rotate({0} {1} {2})", this._.rt.deg, cx, cy);
-                this.clip && $(this.clip, {transform: R.format("rotate({0} {1} {2})", -this._.rt.deg, cx, cy)});
-            } else {
-                this.transformations[0] = E;
-                this.clip && $(this.clip, {transform: E});
-            }
-            $(this.node, {transform: this.transformations[join](S)});
-            return this;
-        };
-        Element[proto].hide = function () {
-            !this.removed && (this.node.style.display = "none");
-            return this;
-        };
-        Element[proto].show = function () {
-            !this.removed && (this.node.style.display = "");
-            return this;
-        };
-        Element[proto].remove = function () {
-            if (this.removed) {
-                return;
-            }
-            tear(this, this.paper);
-            this.node.parentNode.removeChild(this.node);
-            for (var i in this) {
-                delete this[i];
-            }
-            this.removed = true;
-        };
-        Element[proto].getBBox = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (this.type == "path") {
-                return pathDimensions(this.attrs.path);
-            }
-            if (this.node.style.display == "none") {
-                this.show();
-                var hide = true;
-            }
-            var bbox = {};
-            try {
-                bbox = this.node.getBBox();
-            } catch(e) {
-                // Firefox 3.0.x plays badly here
-            } finally {
-                bbox = bbox || {};
-            }
-            if (this.type == "text") {
-                bbox = {x: bbox.x, y: Infinity, width: 0, height: 0};
-                for (var i = 0, ii = this.node.getNumberOfChars(); i < ii; i++) {
-                    var bb = this.node.getExtentOfChar(i);
-                    (bb.y < bbox.y) && (bbox.y = bb.y);
-                    (bb.y + bb.height - bbox.y > bbox.height) && (bbox.height = bb.y + bb.height - bbox.y);
-                    (bb.x + bb.width - bbox.x > bbox.width) && (bbox.width = bb.x + bb.width - bbox.x);
-                }
-            }
-            hide && this.hide();
-            return bbox;
-        };
-        Element[proto].attr = function (name, value) {
-            if (this.removed) {
-                return this;
-            }
-            if (name == null) {
-                var res = {};
-                for (var i in this.attrs) if (this.attrs[has](i)) {
-                    res[i] = this.attrs[i];
-                }
-                this._.rt.deg && (res.rotation = this.rotate());
-                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
-                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
-                return res;
-            }
-            if (value == null && R.is(name, string)) {
-                if (name == "translation") {
-                    return translate.call(this);
-                }
-                if (name == "rotation") {
-                    return this.rotate();
-                }
-                if (name == "scale") {
-                    return this.scale();
-                }
-                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
-                    return this.attrs.gradient;
-                }
-                return this.attrs[name];
-            }
-            if (value == null && R.is(name, array)) {
-                var values = {};
-                for (var j = 0, jj = name.length; j < jj; j++) {
-                    values[name[j]] = this.attr(name[j]);
-                }
-                return values;
-            }
-            if (value != null) {
-                var params = {};
-                params[name] = value;
-            } else if (name != null && R.is(name, "object")) {
-                params = name;
-            }
-            for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
-                var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
-                this.attrs[key] = params[key];
-                for (var subkey in par) if (par[has](subkey)) {
-                    params[subkey] = par[subkey];
-                }
-            }
-            setFillAndStroke(this, params);
-            return this;
-        };
-        Element[proto].toFront = function () {
-            if (this.removed) {
-                return this;
-            }
-            this.node.parentNode[appendChild](this.node);
-            var svg = this.paper;
-            svg.top != this && tofront(this, svg);
-            return this;
-        };
-        Element[proto].toBack = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (this.node.parentNode.firstChild != this.node) {
-                this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
-                toback(this, this.paper);
-                var svg = this.paper;
-            }
-            return this;
-        };
-        Element[proto].insertAfter = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            var node = element.node || element[element.length - 1].node;
-            if (node.nextSibling) {
-                node.parentNode.insertBefore(this.node, node.nextSibling);
-            } else {
-                node.parentNode[appendChild](this.node);
-            }
-            insertafter(this, element, this.paper);
-            return this;
-        };
-        Element[proto].insertBefore = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            var node = element.node || element[0].node;
-            node.parentNode.insertBefore(this.node, node);
-            insertbefore(this, element, this.paper);
-            return this;
-        };
-        Element[proto].blur = function (size) {
-            // Experimental. No Safari support. Use it on your own risk.
-            var t = this;
-            if (+size !== 0) {
-                var fltr = $("filter"),
-                    blur = $("feGaussianBlur");
-                t.attrs.blur = size;
-                fltr.id = createUUID();
-                $(blur, {stdDeviation: +size || 1.5});
-                fltr.appendChild(blur);
-                t.paper.defs.appendChild(fltr);
-                t._blur = fltr;
-                $(t.node, {filter: "url(#" + fltr.id + ")"});
-            } else {
-                if (t._blur) {
-                    t._blur.parentNode.removeChild(t._blur);
-                    delete t._blur;
-                    delete t.attrs.blur;
-                }
-                t.node.removeAttribute("filter");
-            }
-        };
-        var theCircle = function (svg, x, y, r) {
-            var el = $("circle");
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {cx: x, cy: y, r: r, fill: "none", stroke: "#000"};
-            res.type = "circle";
-            $(el, res.attrs);
-            return res;
-        },
-        theRect = function (svg, x, y, w, h, r) {
-            var el = $("rect");
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000"};
-            res.type = "rect";
-            $(el, res.attrs);
-            return res;
-        },
-        theEllipse = function (svg, x, y, rx, ry) {
-            var el = $("ellipse");
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: "none", stroke: "#000"};
-            res.type = "ellipse";
-            $(el, res.attrs);
-            return res;
-        },
-        theImage = function (svg, src, x, y, w, h) {
-            var el = $("image");
-            $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: "none"});
-            el.setAttributeNS(svg.xlink, "href", src);
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {x: x, y: y, width: w, height: h, src: src};
-            res.type = "image";
-            return res;
-        },
-        theText = function (svg, x, y, text) {
-            var el = $("text");
-            $(el, {x: x, y: y, "text-anchor": "middle"});
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {x: x, y: y, "text-anchor": "middle", text: text, font: availableAttrs.font, stroke: "none", fill: "#000"};
-            res.type = "text";
-            setFillAndStroke(res, res.attrs);
-            return res;
-        },
-        setSize = function (width, height) {
-            this.width = width || this.width;
-            this.height = height || this.height;
-            this.canvas[setAttribute]("width", this.width);
-            this.canvas[setAttribute]("height", this.height);
-            return this;
-        },
-        create = function () {
-            var con = getContainer[apply](0, arguments),
-                container = con && con.container,
-                x = con.x,
-                y = con.y,
-                width = con.width,
-                height = con.height;
-            if (!container) {
-                throw new Error("SVG container not found.");
-            }
-            var cnvs = $("svg");
-            x = x || 0;
-            y = y || 0;
-            width = width || 512;
-            height = height || 342;
-            $(cnvs, {
-                xmlns: "http://www.w3.org/2000/svg",
-                version: 1.1,
-                width: width,
-                height: height
-            });
-            if (container == 1) {
-                cnvs.style.cssText = "position:absolute;left:" + x + "px;top:" + y + "px";
-                doc.body[appendChild](cnvs);
-            } else {
-                if (container.firstChild) {
-                    container.insertBefore(cnvs, container.firstChild);
-                } else {
-                    container[appendChild](cnvs);
-                }
-            }
-            container = new Paper;
-            container.width = width;
-            container.height = height;
-            container.canvas = cnvs;
-            plugins.call(container, container, R.fn);
-            container.clear();
-            return container;
-        };
-        paperproto.clear = function () {
-            var c = this.canvas;
-            while (c.firstChild) {
-                c.removeChild(c.firstChild);
-            }
-            this.bottom = this.top = null;
-            (this.desc = $("desc"))[appendChild](doc.createTextNode("Created with Rapha\xebl"));
-            c[appendChild](this.desc);
-            c[appendChild](this.defs = $("defs"));
-        };
-        paperproto.remove = function () {
-            this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);
-            for (var i in this) {
-                this[i] = removed(i);
-            }
-        };
-    }
-
-    // VML
-    if (R.vml) {
-        var map = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"},
-            bites = /([clmz]),?([^clmz]*)/gi,
-            blurregexp = / progid:\S+Blur\([^\)]+\)/g,
-            val = /-?[^,\s-]+/g,
-            coordsize = 1e3 + S + 1e3,
-            zoom = 10,
-            pathlike = {path: 1, rect: 1},
-            path2vml = function (path) {
-                var total =  /[ahqstv]/ig,
-                    command = pathToAbsolute;
-                Str(path).match(total) && (command = path2curve);
-                total = /[clmz]/g;
-                if (command == pathToAbsolute && !Str(path).match(total)) {
-                    var res = Str(path)[rp](bites, function (all, command, args) {
-                        var vals = [],
-                            isMove = lowerCase.call(command) == "m",
-                            res = map[command];
-                        args[rp](val, function (value) {
-                            if (isMove && vals[length] == 2) {
-                                res += vals + map[command == "m" ? "l" : "L"];
-                                vals = [];
-                            }
-                            vals[push](round(value * zoom));
-                        });
-                        return res + vals;
-                    });
-                    return res;
-                }
-                var pa = command(path), p, r;
-                res = [];
-                for (var i = 0, ii = pa[length]; i < ii; i++) {
-                    p = pa[i];
-                    r = lowerCase.call(pa[i][0]);
-                    r == "z" && (r = "x");
-                    for (var j = 1, jj = p[length]; j < jj; j++) {
-                        r += round(p[j] * zoom) + (j != jj - 1 ? "," : E);
-                    }
-                    res[push](r);
-                }
-                return res[join](S);
-            };
-        
-        R[toString] = function () {
-            return  "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version;
-        };
-        thePath = function (pathString, vml) {
-            var g = createNode("group");
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = vml.coordsize;
-            g.coordorigin = vml.coordorigin;
-            var el = createNode("shape"), ol = el.style;
-            ol.width = vml.width + "px";
-            ol.height = vml.height + "px";
-            el.coordsize = coordsize;
-            el.coordorigin = vml.coordorigin;
-            g[appendChild](el);
-            var p = new Element(el, g, vml),
-                attr = {fill: "none", stroke: "#000"};
-            pathString && (attr.path = pathString);
-            p.type = "path";
-            p.path = [];
-            p.Path = E;
-            setFillAndStroke(p, attr);
-            vml.canvas[appendChild](g);
-            return p;
-        };
-        setFillAndStroke = function (o, params) {
-            o.attrs = o.attrs || {};
-            var node = o.node,
-                a = o.attrs,
-                s = node.style,
-                xy,
-                newpath = (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.r != a.r) && o.type == "rect",
-                res = o;
-
-            for (var par in params) if (params[has](par)) {
-                a[par] = params[par];
-            }
-            if (newpath) {
-                a.path = rectPath(a.x, a.y, a.width, a.height, a.r);
-                o.X = a.x;
-                o.Y = a.y;
-                o.W = a.width;
-                o.H = a.height;
-            }
-            params.href && (node.href = params.href);
-            params.title && (node.title = params.title);
-            params.target && (node.target = params.target);
-            params.cursor && (s.cursor = params.cursor);
-            "blur" in params && o.blur(params.blur);
-            if (params.path && o.type == "path" || newpath) {
-                node.path = path2vml(a.path);
-            }
-            if (params.rotation != null) {
-                o.rotate(params.rotation, true);
-            }
-            if (params.translation) {
-                xy = Str(params.translation)[split](separator);
-                translate.call(o, xy[0], xy[1]);
-                if (o._.rt.cx != null) {
-                    o._.rt.cx +=+ xy[0];
-                    o._.rt.cy +=+ xy[1];
-                    o.setBox(o.attrs, xy[0], xy[1]);
-                }
-            }
-            if (params.scale) {
-                xy = Str(params.scale)[split](separator);
-                o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, +xy[2] || null, +xy[3] || null);
-            }
-            if ("clip-rect" in params) {
-                var rect = Str(params["clip-rect"])[split](separator);
-                if (rect[length] == 4) {
-                    rect[2] = +rect[2] + (+rect[0]);
-                    rect[3] = +rect[3] + (+rect[1]);
-                    var div = node.clipRect || doc.createElement("div"),
-                        dstyle = div.style,
-                        group = node.parentNode;
-                    dstyle.clip = R.format("rect({1}px {2}px {3}px {0}px)", rect);
-                    if (!node.clipRect) {
-                        dstyle.position = "absolute";
-                        dstyle.top = 0;
-                        dstyle.left = 0;
-                        dstyle.width = o.paper.width + "px";
-                        dstyle.height = o.paper.height + "px";
-                        group.parentNode.insertBefore(div, group);
-                        div[appendChild](group);
-                        node.clipRect = div;
-                    }
-                }
-                if (!params["clip-rect"]) {
-                    node.clipRect && (node.clipRect.style.clip = E);
-                }
-            }
-            if (o.type == "image" && params.src) {
-                node.src = params.src;
-            }
-            if (o.type == "image" && params.opacity) {
-                node.filterOpacity = ms + ".Alpha(opacity=" + (params.opacity * 100) + ")";
-                s.filter = (node.filterMatrix || E) + (node.filterOpacity || E);
-            }
-            params.font && (s.font = params.font);
-            params["font-family"] && (s.fontFamily = '"' + params["font-family"][split](",")[0][rp](/^['"]+|['"]+$/g, E) + '"');
-            params["font-size"] && (s.fontSize = params["font-size"]);
-            params["font-weight"] && (s.fontWeight = params["font-weight"]);
-            params["font-style"] && (s.fontStyle = params["font-style"]);
-            if (params.opacity != null || 
-                params["stroke-width"] != null ||
-                params.fill != null ||
-                params.stroke != null ||
-                params["stroke-width"] != null ||
-                params["stroke-opacity"] != null ||
-                params["fill-opacity"] != null ||
-                params["stroke-dasharray"] != null ||
-                params["stroke-miterlimit"] != null ||
-                params["stroke-linejoin"] != null ||
-                params["stroke-linecap"] != null) {
-                node = o.shape || node;
-                var fill = (node.getElementsByTagName(fillString) && node.getElementsByTagName(fillString)[0]),
-                    newfill = false;
-                !fill && (newfill = fill = createNode(fillString));
-                if ("fill-opacity" in params || "opacity" in params) {
-                    var opacity = ((+a["fill-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);
-                    opacity = mmin(mmax(opacity, 0), 1);
-                    fill.opacity = opacity;
-                }
-                params.fill && (fill.on = true);
-                if (fill.on == null || params.fill == "none") {
-                    fill.on = false;
-                }
-                if (fill.on && params.fill) {
-                    var isURL = params.fill.match(ISURL);
-                    if (isURL) {
-                        fill.src = isURL[1];
-                        fill.type = "tile";
-                    } else {
-                        fill.color = R.getRGB(params.fill).hex;
-                        fill.src = E;
-                        fill.type = "solid";
-                        if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != "r") && addGradientFill(res, params.fill)) {
-                            a.fill = "none";
-                            a.gradient = params.fill;
-                        }
-                    }
-                }
-                newfill && node[appendChild](fill);
-                var stroke = (node.getElementsByTagName("stroke") && node.getElementsByTagName("stroke")[0]),
-                newstroke = false;
-                !stroke && (newstroke = stroke = createNode("stroke"));
-                if ((params.stroke && params.stroke != "none") ||
-                    params["stroke-width"] ||
-                    params["stroke-opacity"] != null ||
-                    params["stroke-dasharray"] ||
-                    params["stroke-miterlimit"] ||
-                    params["stroke-linejoin"] ||
-                    params["stroke-linecap"]) {
-                    stroke.on = true;
-                }
-                (params.stroke == "none" || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false);
-                var strokeColor = R.getRGB(params.stroke);
-                stroke.on && params.stroke && (stroke.color = strokeColor.hex);
-                opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);
-                var width = (toFloat(params["stroke-width"]) || 1) * .75;
-                opacity = mmin(mmax(opacity, 0), 1);
-                params["stroke-width"] == null && (width = a["stroke-width"]);
-                params["stroke-width"] && (stroke.weight = width);
-                width && width < 1 && (opacity *= width) && (stroke.weight = 1);
-                stroke.opacity = opacity;
-                
-                params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter");
-                stroke.miterlimit = params["stroke-miterlimit"] || 8;
-                params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round");
-                if (params["stroke-dasharray"]) {
-                    var dasharray = {
-                        "-": "shortdash",
-                        ".": "shortdot",
-                        "-.": "shortdashdot",
-                        "-..": "shortdashdotdot",
-                        ". ": "dot",
-                        "- ": "dash",
-                        "--": "longdash",
-                        "- .": "dashdot",
-                        "--.": "longdashdot",
-                        "--..": "longdashdotdot"
-                    };
-                    stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E;
-                }
-                newstroke && node[appendChild](stroke);
-            }
-            if (res.type == "text") {
-                s = res.paper.span.style;
-                a.font && (s.font = a.font);
-                a["font-family"] && (s.fontFamily = a["font-family"]);
-                a["font-size"] && (s.fontSize = a["font-size"]);
-                a["font-weight"] && (s.fontWeight = a["font-weight"]);
-                a["font-style"] && (s.fontStyle = a["font-style"]);
-                res.node.string && (res.paper.span.innerHTML = Str(res.node.string)[rp](/</g, "&#60;")[rp](/&/g, "&#38;")[rp](/\n/g, "<br>"));
-                res.W = a.w = res.paper.span.offsetWidth;
-                res.H = a.h = res.paper.span.offsetHeight;
-                res.X = a.x;
-                res.Y = a.y + round(res.H / 2);
- 
-                // text-anchor emulationm
-                switch (a["text-anchor"]) {
-                    case "start":
-                        res.node.style["v-text-align"] = "left";
-                        res.bbx = round(res.W / 2);
-                    break;
-                    case "end":
-                        res.node.style["v-text-align"] = "right";
-                        res.bbx = -round(res.W / 2);
-                    break;
-                    default:
-                        res.node.style["v-text-align"] = "center";
-                    break;
-                }
-            }
-        };
-        addGradientFill = function (o, gradient) {
-            o.attrs = o.attrs || {};
-            var attrs = o.attrs,
-                fill,
-                type = "linear",
-                fxfy = ".5 .5";
-            o.attrs.gradient = gradient;
-            gradient = Str(gradient)[rp](radial_gradient, function (all, fx, fy) {
-                type = "radial";
-                if (fx && fy) {
-                    fx = toFloat(fx);
-                    fy = toFloat(fy);
-                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);
-                    fxfy = fx + S + fy;
-                }
-                return E;
-            });
-            gradient = gradient[split](/\s*\-\s*/);
-            if (type == "linear") {
-                var angle = gradient.shift();
-                angle = -toFloat(angle);
-                if (isNaN(angle)) {
-                    return null;
-                }
-            }
-            var dots = parseDots(gradient);
-            if (!dots) {
-                return null;
-            }
-            o = o.shape || o.node;
-            fill = o.getElementsByTagName(fillString)[0] || createNode(fillString);
-            !fill.parentNode && o.appendChild(fill);
-            if (dots[length]) {
-                fill.on = true;
-                fill.method = "none";
-                fill.color = dots[0].color;
-                fill.color2 = dots[dots[length] - 1].color;
-                var clrs = [];
-                for (var i = 0, ii = dots[length]; i < ii; i++) {
-                    dots[i].offset && clrs[push](dots[i].offset + S + dots[i].color);
-                }
-                fill.colors && (fill.colors.value = clrs[length] ? clrs[join]() : "0% " + fill.color);
-                if (type == "radial") {
-                    fill.type = "gradientradial";
-                    fill.focus = "100%";
-                    fill.focussize = fxfy;
-                    fill.focusposition = fxfy;
-                } else {
-                    fill.type = "gradient";
-                    fill.angle = (270 - angle) % 360;
-                }
-            }
-            return 1;
-        };
-        Element = function (node, group, vml) {
-            var Rotation = 0,
-                RotX = 0,
-                RotY = 0,
-                Scale = 1;
-            this[0] = node;
-            this.id = R._oid++;
-            this.node = node;
-            node.raphael = this;
-            this.X = 0;
-            this.Y = 0;
-            this.attrs = {};
-            this.Group = group;
-            this.paper = vml;
-            this._ = {
-                tx: 0,
-                ty: 0,
-                rt: {deg:0},
-                sx: 1,
-                sy: 1
-            };
-            !vml.bottom && (vml.bottom = this);
-            this.prev = vml.top;
-            vml.top && (vml.top.next = this);
-            vml.top = this;
-            this.next = null;
-        };
-        elproto = Element[proto];
-        elproto.rotate = function (deg, cx, cy) {
-            if (this.removed) {
-                return this;
-            }
-            if (deg == null) {
-                if (this._.rt.cx) {
-                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
-                }
-                return this._.rt.deg;
-            }
-            deg = Str(deg)[split](separator);
-            if (deg[length] - 1) {
-                cx = toFloat(deg[1]);
-                cy = toFloat(deg[2]);
-            }
-            deg = toFloat(deg[0]);
-            if (cx != null) {
-                this._.rt.deg = deg;
-            } else {
-                this._.rt.deg += deg;
-            }
-            cy == null && (cx = null);
-            this._.rt.cx = cx;
-            this._.rt.cy = cy;
-            this.setBox(this.attrs, cx, cy);
-            this.Group.style.rotation = this._.rt.deg;
-            // gradient fix for rotation. TODO
-            // var fill = (this.shape || this.node).getElementsByTagName(fillString);
-            // fill = fill[0] || {};
-            // var b = ((360 - this._.rt.deg) - 270) % 360;
-            // !R.is(fill.angle, "undefined") && (fill.angle = b);
-            return this;
-        };
-        elproto.setBox = function (params, cx, cy) {
-            if (this.removed) {
-                return this;
-            }
-            var gs = this.Group.style,
-                os = (this.shape && this.shape.style) || this.node.style;
-            params = params || {};
-            for (var i in params) if (params[has](i)) {
-                this.attrs[i] = params[i];
-            }
-            cx = cx || this._.rt.cx;
-            cy = cy || this._.rt.cy;
-            var attr = this.attrs,
-                x,
-                y,
-                w,
-                h;
-            switch (this.type) {
-                case "circle":
-                    x = attr.cx - attr.r;
-                    y = attr.cy - attr.r;
-                    w = h = attr.r * 2;
-                    break;
-                case "ellipse":
-                    x = attr.cx - attr.rx;
-                    y = attr.cy - attr.ry;
-                    w = attr.rx * 2;
-                    h = attr.ry * 2;
-                    break;
-                case "image":
-                    x = +attr.x;
-                    y = +attr.y;
-                    w = attr.width || 0;
-                    h = attr.height || 0;
-                    break;
-                case "text":
-                    this.textpath.v = ["m", round(attr.x), ", ", round(attr.y - 2), "l", round(attr.x) + 1, ", ", round(attr.y - 2)][join](E);
-                    x = attr.x - round(this.W / 2);
-                    y = attr.y - this.H / 2;
-                    w = this.W;
-                    h = this.H;
-                    break;
-                case "rect":
-                case "path":
-                    if (!this.attrs.path) {
-                        x = 0;
-                        y = 0;
-                        w = this.paper.width;
-                        h = this.paper.height;
-                    } else {
-                        var dim = pathDimensions(this.attrs.path);
-                        x = dim.x;
-                        y = dim.y;
-                        w = dim.width;
-                        h = dim.height;
-                    }
-                    break;
-                default:
-                    x = 0;
-                    y = 0;
-                    w = this.paper.width;
-                    h = this.paper.height;
-                    break;
-            }
-            cx = (cx == null) ? x + w / 2 : cx;
-            cy = (cy == null) ? y + h / 2 : cy;
-            var left = cx - this.paper.width / 2,
-                top = cy - this.paper.height / 2, t;
-            gs.left != (t = left + "px") && (gs.left = t);
-            gs.top != (t = top + "px") && (gs.top = t);
-            this.X = pathlike[has](this.type) ? -left : x;
-            this.Y = pathlike[has](this.type) ? -top : y;
-            this.W = w;
-            this.H = h;
-            if (pathlike[has](this.type)) {
-                os.left != (t = -left * zoom + "px") && (os.left = t);
-                os.top != (t = -top * zoom + "px") && (os.top = t);
-            } else if (this.type == "text") {
-                os.left != (t = -left + "px") && (os.left = t);
-                os.top != (t = -top + "px") && (os.top = t);
-            } else {
-                gs.width != (t = this.paper.width + "px") && (gs.width = t);
-                gs.height != (t = this.paper.height + "px") && (gs.height = t);
-                os.left != (t = x - left + "px") && (os.left = t);
-                os.top != (t = y - top + "px") && (os.top = t);
-                os.width != (t = w + "px") && (os.width = t);
-                os.height != (t = h + "px") && (os.height = t);
-            }
-        };
-        elproto.hide = function () {
-            !this.removed && (this.Group.style.display = "none");
-            return this;
-        };
-        elproto.show = function () {
-            !this.removed && (this.Group.style.display = "block");
-            return this;
-        };
-        elproto.getBBox = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (pathlike[has](this.type)) {
-                return pathDimensions(this.attrs.path);
-            }
-            return {
-                x: this.X + (this.bbx || 0),
-                y: this.Y,
-                width: this.W,
-                height: this.H
-            };
-        };
-        elproto.remove = function () {
-            if (this.removed) {
-                return;
-            }
-            tear(this, this.paper);
-            this.node.parentNode.removeChild(this.node);
-            this.Group.parentNode.removeChild(this.Group);
-            this.shape && this.shape.parentNode.removeChild(this.shape);
-            for (var i in this) {
-                delete this[i];
-            }
-            this.removed = true;
-        };
-        elproto.attr = function (name, value) {
-            if (this.removed) {
-                return this;
-            }
-            if (name == null) {
-                var res = {};
-                for (var i in this.attrs) if (this.attrs[has](i)) {
-                    res[i] = this.attrs[i];
-                }
-                this._.rt.deg && (res.rotation = this.rotate());
-                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
-                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
-                return res;
-            }
-            if (value == null && R.is(name, "string")) {
-                if (name == "translation") {
-                    return translate.call(this);
-                }
-                if (name == "rotation") {
-                    return this.rotate();
-                }
-                if (name == "scale") {
-                    return this.scale();
-                }
-                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
-                    return this.attrs.gradient;
-                }
-                return this.attrs[name];
-            }
-            if (this.attrs && value == null && R.is(name, array)) {
-                var ii, values = {};
-                for (i = 0, ii = name[length]; i < ii; i++) {
-                    values[name[i]] = this.attr(name[i]);
-                }
-                return values;
-            }
-            var params;
-            if (value != null) {
-                params = {};
-                params[name] = value;
-            }
-            value == null && R.is(name, "object") && (params = name);
-            if (params) {
-                for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
-                    var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
-                    this.attrs[key] = params[key];
-                    for (var subkey in par) if (par[has](subkey)) {
-                        params[subkey] = par[subkey];
-                    }
-                }
-                if (params.text && this.type == "text") {
-                    this.node.string = params.text;
-                }
-                setFillAndStroke(this, params);
-                if (params.gradient && (({circle: 1, ellipse: 1})[has](this.type) || Str(params.gradient).charAt() != "r")) {
-                    addGradientFill(this, params.gradient);
-                }
-                (!pathlike[has](this.type) || this._.rt.deg) && this.setBox(this.attrs);
-            }
-            return this;
-        };
-        elproto.toFront = function () {
-            !this.removed && this.Group.parentNode[appendChild](this.Group);
-            this.paper.top != this && tofront(this, this.paper);
-            return this;
-        };
-        elproto.toBack = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (this.Group.parentNode.firstChild != this.Group) {
-                this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild);
-                toback(this, this.paper);
-            }
-            return this;
-        };
-        elproto.insertAfter = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            if (element.constructor == Set) {
-                element = element[element.length - 1];
-            }
-            if (element.Group.nextSibling) {
-                element.Group.parentNode.insertBefore(this.Group, element.Group.nextSibling);
-            } else {
-                element.Group.parentNode[appendChild](this.Group);
-            }
-            insertafter(this, element, this.paper);
-            return this;
-        };
-        elproto.insertBefore = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            if (element.constructor == Set) {
-                element = element[0];
-            }
-            element.Group.parentNode.insertBefore(this.Group, element.Group);
-            insertbefore(this, element, this.paper);
-            return this;
-        };
-        elproto.blur = function (size) {
-            var s = this.node.runtimeStyle,
-                f = s.filter;
-            f = f.replace(blurregexp, E);
-            if (+size !== 0) {
-                this.attrs.blur = size;
-                s.filter = f + S + ms + ".Blur(pixelradius=" + (+size || 1.5) + ")";
-                s.margin = R.format("-{0}px 0 0 -{0}px", round(+size || 1.5));
-            } else {
-                s.filter = f;
-                s.margin = 0;
-                delete this.attrs.blur;
-            }
-        };
- 
-        theCircle = function (vml, x, y, r) {
-            var g = createNode("group"),
-                o = createNode("oval"),
-                ol = o.style;
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            g[appendChild](o);
-            var res = new Element(o, g, vml);
-            res.type = "circle";
-            setFillAndStroke(res, {stroke: "#000", fill: "none"});
-            res.attrs.cx = x;
-            res.attrs.cy = y;
-            res.attrs.r = r;
-            res.setBox({x: x - r, y: y - r, width: r * 2, height: r * 2});
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        function rectPath(x, y, w, h, r) {
-            if (r) {
-                return R.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z", x + r, y, w - r * 2, r, -r, h - r * 2, r * 2 - w, r * 2 - h);
-            } else {
-                return R.format("M{0},{1}l{2},0,0,{3},{4},0z", x, y, w, h, -w);
-            }
-        }
-        theRect = function (vml, x, y, w, h, r) {
-            var path = rectPath(x, y, w, h, r),
-                res = vml.path(path),
-                a = res.attrs;
-            res.X = a.x = x;
-            res.Y = a.y = y;
-            res.W = a.width = w;
-            res.H = a.height = h;
-            a.r = r;
-            a.path = path;
-            res.type = "rect";
-            return res;
-        };
-        theEllipse = function (vml, x, y, rx, ry) {
-            var g = createNode("group"),
-                o = createNode("oval"),
-                ol = o.style;
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            g[appendChild](o);
-            var res = new Element(o, g, vml);
-            res.type = "ellipse";
-            setFillAndStroke(res, {stroke: "#000"});
-            res.attrs.cx = x;
-            res.attrs.cy = y;
-            res.attrs.rx = rx;
-            res.attrs.ry = ry;
-            res.setBox({x: x - rx, y: y - ry, width: rx * 2, height: ry * 2});
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        theImage = function (vml, src, x, y, w, h) {
-            var g = createNode("group"),
-                o = createNode("image");
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            o.src = src;
-            g[appendChild](o);
-            var res = new Element(o, g, vml);
-            res.type = "image";
-            res.attrs.src = src;
-            res.attrs.x = x;
-            res.attrs.y = y;
-            res.attrs.w = w;
-            res.attrs.h = h;
-            res.setBox({x: x, y: y, width: w, height: h});
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        theText = function (vml, x, y, text) {
-            var g = createNode("group"),
-                el = createNode("shape"),
-                ol = el.style,
-                path = createNode("path"),
-                ps = path.style,
-                o = createNode("textpath");
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            path.v = R.format("m{0},{1}l{2},{1}", round(x * 10), round(y * 10), round(x * 10) + 1);
-            path.textpathok = true;
-            ol.width = vml.width;
-            ol.height = vml.height;
-            o.string = Str(text);
-            o.on = true;
-            el[appendChild](o);
-            el[appendChild](path);
-            g[appendChild](el);
-            var res = new Element(o, g, vml);
-            res.shape = el;
-            res.textpath = path;
-            res.type = "text";
-            res.attrs.text = text;
-            res.attrs.x = x;
-            res.attrs.y = y;
-            res.attrs.w = 1;
-            res.attrs.h = 1;
-            setFillAndStroke(res, {font: availableAttrs.font, stroke: "none", fill: "#000"});
-            res.setBox();
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        setSize = function (width, height) {
-            var cs = this.canvas.style;
-            width == +width && (width += "px");
-            height == +height && (height += "px");
-            cs.width = width;
-            cs.height = height;
-            cs.clip = "rect(0 " + width + " " + height + " 0)";
-            return this;
-        };
-        var createNode;
-        doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
-        try {
-            !doc.namespaces.rvml && doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
-            createNode = function (tagName) {
-                return doc.createElement('<rvml:' + tagName + ' class="rvml">');
-            };
-        } catch (e) {
-            createNode = function (tagName) {
-                return doc.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
-            };
-        }
-        create = function () {
-            var con = getContainer[apply](0, arguments),
-                container = con.container,
-                height = con.height,
-                s,
-                width = con.width,
-                x = con.x,
-                y = con.y;
-            if (!container) {
-                throw new Error("VML container not found.");
-            }
-            var res = new Paper,
-                c = res.canvas = doc.createElement("div"),
-                cs = c.style;
-            x = x || 0;
-            y = y || 0;
-            width = width || 512;
-            height = height || 342;
-            width == +width && (width += "px");
-            height == +height && (height += "px");
-            res.width = 1e3;
-            res.height = 1e3;
-            res.coordsize = zoom * 1e3 + S + zoom * 1e3;
-            res.coordorigin = "0 0";
-            res.span = doc.createElement("span");
-            res.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
-            c[appendChild](res.span);
-            cs.cssText = R.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", width, height);
-            if (container == 1) {
-                doc.body[appendChild](c);
-                cs.left = x + "px";
-                cs.top = y + "px";
-                cs.position = "absolute";
-            } else {
-                if (container.firstChild) {
-                    container.insertBefore(c, container.firstChild);
-                } else {
-                    container[appendChild](c);
-                }
-            }
-            plugins.call(res, res, R.fn);
-            return res;
-        };
-        paperproto.clear = function () {
-            this.canvas.innerHTML = E;
-            this.span = doc.createElement("span");
-            this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
-            this.canvas[appendChild](this.span);
-            this.bottom = this.top = null;
-        };
-        paperproto.remove = function () {
-            this.canvas.parentNode.removeChild(this.canvas);
-            for (var i in this) {
-                this[i] = removed(i);
-            }
-            return true;
-        };
-    }
- 
-    // rest
-    // WebKit rendering bug workaround method
-    var version = navigator.userAgent.match(/Version\/(.*?)\s/);
-    if ((navigator.vendor == "Apple Computer, Inc.") && (version && version[1] < 4 || navigator.platform.slice(0, 2) == "iP")) {
-        paperproto.safari = function () {
-            var rect = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: "none"});
-            win.setTimeout(function () {rect.remove();});
-        };
-    } else {
-        paperproto.safari = function () {};
-    }
- 
-    // Events
-    var preventDefault = function () {
-        this.returnValue = false;
-    },
-    preventTouch = function () {
-        return this.originalEvent.preventDefault();
-    },
-    stopPropagation = function () {
-        this.cancelBubble = true;
-    },
-    stopTouch = function () {
-        return this.originalEvent.stopPropagation();
-    },
-    addEvent = (function () {
-        if (doc.addEventListener) {
-            return function (obj, type, fn, element) {
-                var realName = supportsTouch && touchMap[type] ? touchMap[type] : type;
-                var f = function (e) {
-                    if (supportsTouch && touchMap[has](type)) {
-                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {
-                            if (e.targetTouches[i].target == obj) {
-                                var olde = e;
-                                e = e.targetTouches[i];
-                                e.originalEvent = olde;
-                                e.preventDefault = preventTouch;
-                                e.stopPropagation = stopTouch;
-                                break;
-                            }
-                        }
-                    }
-                    return fn.call(element, e);
-                };
-                obj.addEventListener(realName, f, false);
-                return function () {
-                    obj.removeEventListener(realName, f, false);
-                    return true;
-                };
-            };
-        } else if (doc.attachEvent) {
-            return function (obj, type, fn, element) {
-                var f = function (e) {
-                    e = e || win.event;
-                    e.preventDefault = e.preventDefault || preventDefault;
-                    e.stopPropagation = e.stopPropagation || stopPropagation;
-                    return fn.call(element, e);
-                };
-                obj.attachEvent("on" + type, f);
-                var detacher = function () {
-                    obj.detachEvent("on" + type, f);
-                    return true;
-                };
-                return detacher;
-            };
-        }
-    })(),
-    drag = [],
-    dragMove = function (e) {
-        var x = e.clientX,
-            y = e.clientY,
-            scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
-            scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft,
-            dragi,
-            j = drag.length;
-        while (j--) {
-            dragi = drag[j];
-            if (supportsTouch) {
-                var i = e.touches.length,
-                    touch;
-                while (i--) {
-                    touch = e.touches[i];
-                    if (touch.identifier == dragi.el._drag.id) {
-                        x = touch.clientX;
-                        y = touch.clientY;
-                        (e.originalEvent ? e.originalEvent : e).preventDefault();
-                        break;
-                    }
-                }
-            } else {
-                e.preventDefault();
-            }
-            x += scrollX;
-            y += scrollY;
-            dragi.move && dragi.move.call(dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);
-        }
-    },
-    dragUp = function (e) {
-        R.unmousemove(dragMove).unmouseup(dragUp);
-        var i = drag.length,
-            dragi;
-        while (i--) {
-            dragi = drag[i];
-            dragi.el._drag = {};
-            dragi.end && dragi.end.call(dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);
-        }
-        drag = [];
-    };
-    for (var i = events[length]; i--;) {
-        (function (eventName) {
-            R[eventName] = Element[proto][eventName] = function (fn, scope) {
-                if (R.is(fn, "function")) {
-                    this.events = this.events || [];
-                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || doc, eventName, fn, scope || this)});
-                }
-                return this;
-            };
-            R["un" + eventName] = Element[proto]["un" + eventName] = function (fn) {
-                var events = this.events,
-                    l = events[length];
-                while (l--) if (events[l].name == eventName && events[l].f == fn) {
-                    events[l].unbind();
-                    events.splice(l, 1);
-                    !events.length && delete this.events;
-                    return this;
-                }
-                return this;
-            };
-        })(events[i]);
-    }
-    elproto.hover = function (f_in, f_out, scope_in, scope_out) {
-        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);
-    };
-    elproto.unhover = function (f_in, f_out) {
-        return this.unmouseover(f_in).unmouseout(f_out);
-    };
-    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {
-        this._drag = {};
-        this.mousedown(function (e) {
-            (e.originalEvent || e).preventDefault();
-            var scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
-                scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft;
-            this._drag.x = e.clientX + scrollX;
-            this._drag.y = e.clientY + scrollY;
-            this._drag.id = e.identifier;
-            onstart && onstart.call(start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);
-            !drag.length && R.mousemove(dragMove).mouseup(dragUp);
-            drag.push({el: this, move: onmove, end: onend, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});
-        });
-        return this;
-    };
-    elproto.undrag = function (onmove, onstart, onend) {
-        var i = drag.length;
-        while (i--) {
-            drag[i].el == this && (drag[i].move == onmove && drag[i].end == onend) && drag.splice(i++, 1);
-        }
-        !drag.length && R.unmousemove(dragMove).unmouseup(dragUp);
-    };
-    paperproto.circle = function (x, y, r) {
-        return theCircle(this, x || 0, y || 0, r || 0);
-    };
-    paperproto.rect = function (x, y, w, h, r) {
-        return theRect(this, x || 0, y || 0, w || 0, h || 0, r || 0);
-    };
-    paperproto.ellipse = function (x, y, rx, ry) {
-        return theEllipse(this, x || 0, y || 0, rx || 0, ry || 0);
-    };
-    paperproto.path = function (pathString) {
-        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);
-        return thePath(R.format[apply](R, arguments), this);
-    };
-    paperproto.image = function (src, x, y, w, h) {
-        return theImage(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0);
-    };
-    paperproto.text = function (x, y, text) {
-        return theText(this, x || 0, y || 0, Str(text));
-    };
-    paperproto.set = function (itemsArray) {
-        arguments[length] > 1 && (itemsArray = Array[proto].splice.call(arguments, 0, arguments[length]));
-        return new Set(itemsArray);
-    };
-    paperproto.setSize = setSize;
-    paperproto.top = paperproto.bottom = null;
-    paperproto.raphael = R;
-    function x_y() {
-        return this.x + S + this.y;
-    }
-    elproto.resetScale = function () {
-        if (this.removed) {
-            return this;
-        }
-        this._.sx = 1;
-        this._.sy = 1;
-        this.attrs.scale = "1 1";
-    };
-    elproto.scale = function (x, y, cx, cy) {
-        if (this.removed) {
-            return this;
-        }
-        if (x == null && y == null) {
-            return {
-                x: this._.sx,
-                y: this._.sy,
-                toString: x_y
-            };
-        }
-        y = y || x;
-        !+y && (y = x);
-        var dx,
-            dy,
-            dcx,
-            dcy,
-            a = this.attrs;
-        if (x != 0) {
-            var bb = this.getBBox(),
-                rcx = bb.x + bb.width / 2,
-                rcy = bb.y + bb.height / 2,
-                kx = abs(x / this._.sx),
-                ky = abs(y / this._.sy);
-            cx = (+cx || cx == 0) ? cx : rcx;
-            cy = (+cy || cy == 0) ? cy : rcy;
-            var posx = this._.sx > 0,
-                posy = this._.sy > 0,
-                dirx = ~~(x / abs(x)),
-                diry = ~~(y / abs(y)),
-                dkx = kx * dirx,
-                dky = ky * diry,
-                s = this.node.style,
-                ncx = cx + abs(rcx - cx) * dkx * (rcx > cx == posx ? 1 : -1),
-                ncy = cy + abs(rcy - cy) * dky * (rcy > cy == posy ? 1 : -1),
-                fr = (x * dirx > y * diry ? ky : kx);
-            switch (this.type) {
-                case "rect":
-                case "image":
-                    var neww = a.width * kx,
-                        newh = a.height * ky;
-                    this.attr({
-                        height: newh,
-                        r: a.r * fr,
-                        width: neww,
-                        x: ncx - neww / 2,
-                        y: ncy - newh / 2
-                    });
-                    break;
-                case "circle":
-                case "ellipse":
-                    this.attr({
-                        rx: a.rx * kx,
-                        ry: a.ry * ky,
-                        r: a.r * fr,
-                        cx: ncx,
-                        cy: ncy
-                    });
-                    break;
-                case "text":
-                    this.attr({
-                        x: ncx,
-                        y: ncy
-                    });
-                    break;
-                case "path":
-                    var path = pathToRelative(a.path),
-                        skip = true,
-                        fx = posx ? dkx : kx,
-                        fy = posy ? dky : ky;
-                    for (var i = 0, ii = path[length]; i < ii; i++) {
-                        var p = path[i],
-                            P0 = upperCase.call(p[0]);
-                        if (P0 == "M" && skip) {
-                            continue;
-                        } else {
-                            skip = false;
-                        }
-                        if (P0 == "A") {
-                            p[path[i][length] - 2] *= fx;
-                            p[path[i][length] - 1] *= fy;
-                            p[1] *= kx;
-                            p[2] *= ky;
-                            p[5] = +(dirx + diry ? !!+p[5] : !+p[5]);
-                        } else if (P0 == "H") {
-                            for (var j = 1, jj = p[length]; j < jj; j++) {
-                                p[j] *= fx;
-                            }
-                        } else if (P0 == "V") {
-                            for (j = 1, jj = p[length]; j < jj; j++) {
-                                p[j] *= fy;
-                            }
-                         } else {
-                            for (j = 1, jj = p[length]; j < jj; j++) {
-                                p[j] *= (j % 2) ? fx : fy;
-                            }
-                        }
-                    }
-                    var dim2 = pathDimensions(path);
-                    dx = ncx - dim2.x - dim2.width / 2;
-                    dy = ncy - dim2.y - dim2.height / 2;
-                    path[0][1] += dx;
-                    path[0][2] += dy;
-                    this.attr({path: path});
-                break;
-            }
-            if (this.type in {text: 1, image:1} && (dirx != 1 || diry != 1)) {
-                if (this.transformations) {
-                    this.transformations[2] = "scale("[concat](dirx, ",", diry, ")");
-                    this.node[setAttribute]("transform", this.transformations[join](S));
-                    dx = (dirx == -1) ? -a.x - (neww || 0) : a.x;
-                    dy = (diry == -1) ? -a.y - (newh || 0) : a.y;
-                    this.attr({x: dx, y: dy});
-                    a.fx = dirx - 1;
-                    a.fy = diry - 1;
-                } else {
-                    this.node.filterMatrix = ms + ".Matrix(M11="[concat](dirx,
-                        ", M12=0, M21=0, M22=", diry,
-                        ", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");
-                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
-                }
-            } else {
-                if (this.transformations) {
-                    this.transformations[2] = E;
-                    this.node[setAttribute]("transform", this.transformations[join](S));
-                    a.fx = 0;
-                    a.fy = 0;
-                } else {
-                    this.node.filterMatrix = E;
-                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
-                }
-            }
-            a.scale = [x, y, cx, cy][join](S);
-            this._.sx = x;
-            this._.sy = y;
-        }
-        return this;
-    };
-    elproto.clone = function () {
-        if (this.removed) {
-            return null;
-        }
-        var attr = this.attr();
-        delete attr.scale;
-        delete attr.translation;
-        return this.paper[this.type]().attr(attr);
-    };
-    var curveslengths = {},
-    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {
-        var len = 0,
-            precision = 100,
-            name = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y].join(),
-            cache = curveslengths[name],
-            old, dot;
-        !cache && (curveslengths[name] = cache = {data: []});
-        cache.timer && clearTimeout(cache.timer);
-        cache.timer = setTimeout(function () {delete curveslengths[name];}, 2000);
-        if (length != null) {
-            var total = getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);
-            precision = ~~total * 10;
-        }
-        for (var i = 0; i < precision + 1; i++) {
-            if (cache.data[length] > i) {
-                dot = cache.data[i * precision];
-            } else {
-                dot = R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, i / precision);
-                cache.data[i] = dot;
-            }
-            i && (len += pow(pow(old.x - dot.x, 2) + pow(old.y - dot.y, 2), .5));
-            if (length != null && len >= length) {
-                return dot;
-            }
-            old = dot;
-        }
-        if (length == null) {
-            return len;
-        }
-    },
-    getLengthFactory = function (istotal, subpath) {
-        return function (path, length, onlystart) {
-            path = path2curve(path);
-            var x, y, p, l, sp = "", subpaths = {}, point,
-                len = 0;
-            for (var i = 0, ii = path.length; i < ii; i++) {
-                p = path[i];
-                if (p[0] == "M") {
-                    x = +p[1];
-                    y = +p[2];
-                } else {
-                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
-                    if (len + l > length) {
-                        if (subpath && !subpaths.start) {
-                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
-                            sp += ["C", point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];
-                            if (onlystart) {return sp;}
-                            subpaths.start = sp;
-                            sp = ["M", point.x, point.y + "C", point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]][join]();
-                            len += l;
-                            x = +p[5];
-                            y = +p[6];
-                            continue;
-                        }
-                        if (!istotal && !subpath) {
-                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
-                            return {x: point.x, y: point.y, alpha: point.alpha};
-                        }
-                    }
-                    len += l;
-                    x = +p[5];
-                    y = +p[6];
-                }
-                sp += p;
-            }
-            subpaths.end = sp;
-            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[1], p[2], p[3], p[4], p[5], p[6], 1);
-            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});
-            return point;
-        };
-    };
-    var getTotalLength = getLengthFactory(1),
-        getPointAtLength = getLengthFactory(),
-        getSubpathsAtLength = getLengthFactory(0, 1);
-    elproto.getTotalLength = function () {
-        if (this.type != "path") {return;}
-        if (this.node.getTotalLength) {
-            return this.node.getTotalLength();
-        }
-        return getTotalLength(this.attrs.path);
-    };
-    elproto.getPointAtLength = function (length) {
-        if (this.type != "path") {return;}
-        return getPointAtLength(this.attrs.path, length);
-    };
-    elproto.getSubpath = function (from, to) {
-        if (this.type != "path") {return;}
-        if (abs(this.getTotalLength() - to) < "1e-6") {
-            return getSubpathsAtLength(this.attrs.path, from).end;
-        }
-        var a = getSubpathsAtLength(this.attrs.path, to, 1);
-        return from ? getSubpathsAtLength(a, from).end : a;
-    };
-
-    // animation easing formulas
-    R.easing_formulas = {
-        linear: function (n) {
-            return n;
-        },
-        "<": function (n) {
-            return pow(n, 3);
-        },
-        ">": function (n) {
-            return pow(n - 1, 3) + 1;
-        },
-        "<>": function (n) {
-            n = n * 2;
-            if (n < 1) {
-                return pow(n, 3) / 2;
-            }
-            n -= 2;
-            return (pow(n, 3) + 2) / 2;
-        },
-        backIn: function (n) {
-            var s = 1.70158;
-            return n * n * ((s + 1) * n - s);
-        },
-        backOut: function (n) {
-            n = n - 1;
-            var s = 1.70158;
-            return n * n * ((s + 1) * n + s) + 1;
-        },
-        elastic: function (n) {
-            if (n == 0 || n == 1) {
-                return n;
-            }
-            var p = .3,
-                s = p / 4;
-            return pow(2, -10 * n) * math.sin((n - s) * (2 * PI) / p) + 1;
-        },
-        bounce: function (n) {
-            var s = 7.5625,
-                p = 2.75,
-                l;
-            if (n < (1 / p)) {
-                l = s * n * n;
-            } else {
-                if (n < (2 / p)) {
-                    n -= (1.5 / p);
-                    l = s * n * n + .75;
-                } else {
-                    if (n < (2.5 / p)) {
-                        n -= (2.25 / p);
-                        l = s * n * n + .9375;
-                    } else {
-                        n -= (2.625 / p);
-                        l = s * n * n + .984375;
-                    }
-                }
-            }
-            return l;
-        }
-    };
-
-    var animationElements = [],
-        animation = function () {
-            var Now = +new Date;
-            for (var l = 0; l < animationElements[length]; l++) {
-                var e = animationElements[l];
-                if (e.stop || e.el.removed) {
-                    continue;
-                }
-                var time = Now - e.start,
-                    ms = e.ms,
-                    easing = e.easing,
-                    from = e.from,
-                    diff = e.diff,
-                    to = e.to,
-                    t = e.t,
-                    that = e.el,
-                    set = {},
-                    now;
-                if (time < ms) {
-                    var pos = easing(time / ms);
-                    for (var attr in from) if (from[has](attr)) {
-                        switch (availableAnimAttrs[attr]) {
-                            case "along":
-                                now = pos * ms * diff[attr];
-                                to.back && (now = to.len - now);
-                                var point = getPointAtLength(to[attr], now);
-                                that.translate(diff.sx - diff.x || 0, diff.sy - diff.y || 0);
-                                diff.x = point.x;
-                                diff.y = point.y;
-                                that.translate(point.x - diff.sx, point.y - diff.sy);
-                                to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
-                                break;
-                            case nu:
-                                now = +from[attr] + pos * ms * diff[attr];
-                                break;
-                            case "colour":
-                                now = "rgb(" + [
-                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),
-                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),
-                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))
-                                ][join](",") + ")";
-                                break;
-                            case "path":
-                                now = [];
-                                for (var i = 0, ii = from[attr][length]; i < ii; i++) {
-                                    now[i] = [from[attr][i][0]];
-                                    for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
-                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];
-                                    }
-                                    now[i] = now[i][join](S);
-                                }
-                                now = now[join](S);
-                                break;
-                            case "csv":
-                                switch (attr) {
-                                    case "translation":
-                                        var x = pos * ms * diff[attr][0] - t.x,
-                                            y = pos * ms * diff[attr][1] - t.y;
-                                        t.x += x;
-                                        t.y += y;
-                                        now = x + S + y;
-                                    break;
-                                    case "rotation":
-                                        now = +from[attr][0] + pos * ms * diff[attr][0];
-                                        from[attr][1] && (now += "," + from[attr][1] + "," + from[attr][2]);
-                                    break;
-                                    case "scale":
-                                        now = [+from[attr][0] + pos * ms * diff[attr][0], +from[attr][1] + pos * ms * diff[attr][1], (2 in to[attr] ? to[attr][2] : E), (3 in to[attr] ? to[attr][3] : E)][join](S);
-                                    break;
-                                    case "clip-rect":
-                                        now = [];
-                                        i = 4;
-                                        while (i--) {
-                                            now[i] = +from[attr][i] + pos * ms * diff[attr][i];
-                                        }
-                                    break;
-                                }
-                                break;
-                            default:
-                              var from2 = [].concat(from[attr]);
-                                now = [];
-                                i = that.paper.customAttributes[attr].length;
-                                while (i--) {
-                                    now[i] = +from2[i] + pos * ms * diff[attr][i];
-                                }
-                                break;
-                        }
-                        set[attr] = now;
-                    }
-                    that.attr(set);
-                    that._run && that._run.call(that);
-                } else {
-                    if (to.along) {
-                        point = getPointAtLength(to.along, to.len * !to.back);
-                        that.translate(diff.sx - (diff.x || 0) + point.x - diff.sx, diff.sy - (diff.y || 0) + point.y - diff.sy);
-                        to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
-                    }
-                    (t.x || t.y) && that.translate(-t.x, -t.y);
-                    to.scale && (to.scale += E);
-                    that.attr(to);
-                    animationElements.splice(l--, 1);
-                }
-            }
-            R.svg && that && that.paper && that.paper.safari();
-            animationElements[length] && setTimeout(animation);
-        },
-        keyframesRun = function (attr, element, time, prev, prevcallback) {
-            var dif = time - prev;
-            element.timeouts.push(setTimeout(function () {
-                R.is(prevcallback, "function") && prevcallback.call(element);
-                element.animate(attr, dif, attr.easing);
-            }, prev));
-        },
-        upto255 = function (color) {
-            return mmax(mmin(color, 255), 0);
-        },
-        translate = function (x, y) {
-            if (x == null) {
-                return {x: this._.tx, y: this._.ty, toString: x_y};
-            }
-            this._.tx += +x;
-            this._.ty += +y;
-            switch (this.type) {
-                case "circle":
-                case "ellipse":
-                    this.attr({cx: +x + this.attrs.cx, cy: +y + this.attrs.cy});
-                    break;
-                case "rect":
-                case "image":
-                case "text":
-                    this.attr({x: +x + this.attrs.x, y: +y + this.attrs.y});
-                    break;
-                case "path":
-                    var path = pathToRelative(this.attrs.path);
-                    path[0][1] += +x;
-                    path[0][2] += +y;
-                    this.attr({path: path});
-                break;
-            }
-            return this;
-        };
-    elproto.animateWith = function (element, params, ms, easing, callback) {
-        for (var i = 0, ii = animationElements.length; i < ii; i++) {
-            if (animationElements[i].el.id == element.id) {
-                params.start = animationElements[i].start;
-            }
-        }
-        return this.animate(params, ms, easing, callback);
-    };
-    elproto.animateAlong = along();
-    elproto.animateAlongBack = along(1);
-    function along(isBack) {
-        return function (path, ms, rotate, callback) {
-            var params = {back: isBack};
-            R.is(rotate, "function") ? (callback = rotate) : (params.rot = rotate);
-            path && path.constructor == Element && (path = path.attrs.path);
-            path && (params.along = path);
-            return this.animate(params, ms, callback);
-        };
-    }
-    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {
-        var cx = 3 * p1x,
-            bx = 3 * (p2x - p1x) - cx,
-            ax = 1 - cx - bx,
-            cy = 3 * p1y,
-            by = 3 * (p2y - p1y) - cy,
-            ay = 1 - cy - by;
-        function sampleCurveX(t) {
-            return ((ax * t + bx) * t + cx) * t;
-        }
-        function solve(x, epsilon) {
-            var t = solveCurveX(x, epsilon);
-            return ((ay * t + by) * t + cy) * t;
-        }
-        function solveCurveX(x, epsilon) {
-            var t0, t1, t2, x2, d2, i;
-            for(t2 = x, i = 0; i < 8; i++) {
-                x2 = sampleCurveX(t2) - x;
-                if (abs(x2) < epsilon) {
-                    return t2;
-                }
-                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
-                if (abs(d2) < 1e-6) {
-                    break;
-                }
-                t2 = t2 - x2 / d2;
-            }
-            t0 = 0;
-            t1 = 1;
-            t2 = x;
-            if (t2 < t0) {
-                return t0;
-            }
-            if (t2 > t1) {
-                return t1;
-            }
-            while (t0 < t1) {
-                x2 = sampleCurveX(t2);
-                if (abs(x2 - x) < epsilon) {
-                    return t2;
-                }
-                if (x > x2) {
-                    t0 = t2;
-                } else {
-                    t1 = t2;
-                }
-                t2 = (t1 - t0) / 2 + t0;
-            }
-            return t2;
-        }
-        return solve(t, 1 / (200 * duration));
-    }
-    elproto.onAnimation = function (f) {
-        this._run = f || 0;
-        return this;
-    };
-    elproto.animate = function (params, ms, easing, callback) {
-        var element = this;
-        element.timeouts = element.timeouts || [];
-        if (R.is(easing, "function") || !easing) {
-            callback = easing || null;
-        }
-        if (element.removed) {
-            callback && callback.call(element);
-            return element;
-        }
-        var from = {},
-            to = {},
-            animateable = false,
-            diff = {};
-        for (var attr in params) if (params[has](attr)) {
-            if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {
-                animateable = true;
-                from[attr] = element.attr(attr);
-                (from[attr] == null) && (from[attr] = availableAttrs[attr]);
-                to[attr] = params[attr];
-                switch (availableAnimAttrs[attr]) {
-                    case "along":
-                        var len = getTotalLength(params[attr]);
-                        var point = getPointAtLength(params[attr], len * !!params.back);
-                        var bb = element.getBBox();
-                        diff[attr] = len / ms;
-                        diff.tx = bb.x;
-                        diff.ty = bb.y;
-                        diff.sx = point.x;
-                        diff.sy = point.y;
-                        to.rot = params.rot;
-                        to.back = params.back;
-                        to.len = len;
-                        params.rot && (diff.r = toFloat(element.rotate()) || 0);
-                        break;
-                    case nu:
-                        diff[attr] = (to[attr] - from[attr]) / ms;
-                        break;
-                    case "colour":
-                        from[attr] = R.getRGB(from[attr]);
-                        var toColour = R.getRGB(to[attr]);
-                        diff[attr] = {
-                            r: (toColour.r - from[attr].r) / ms,
-                            g: (toColour.g - from[attr].g) / ms,
-                            b: (toColour.b - from[attr].b) / ms
-                        };
-                        break;
-                    case "path":
-                        var pathes = path2curve(from[attr], to[attr]);
-                        from[attr] = pathes[0];
-                        var toPath = pathes[1];
-                        diff[attr] = [];
-                        for (var i = 0, ii = from[attr][length]; i < ii; i++) {
-                            diff[attr][i] = [0];
-                            for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
-                                diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;
-                            }
-                        }
-                        break;
-                    case "csv":
-                        var values = Str(params[attr])[split](separator),
-                            from2 = Str(from[attr])[split](separator);
-                        switch (attr) {
-                            case "translation":
-                                from[attr] = [0, 0];
-                                diff[attr] = [values[0] / ms, values[1] / ms];
-                            break;
-                            case "rotation":
-                                from[attr] = (from2[1] == values[1] && from2[2] == values[2]) ? from2 : [0, values[1], values[2]];
-                                diff[attr] = [(values[0] - from[attr][0]) / ms, 0, 0];
-                            break;
-                            case "scale":
-                                params[attr] = values;
-                                from[attr] = Str(from[attr])[split](separator);
-                                diff[attr] = [(values[0] - from[attr][0]) / ms, (values[1] - from[attr][1]) / ms, 0, 0];
-                            break;
-                            case "clip-rect":
-                                from[attr] = Str(from[attr])[split](separator);
-                                diff[attr] = [];
-                                i = 4;
-                                while (i--) {
-                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;
-                                }
-                            break;
-                        }
-                        to[attr] = values;
-                        break;
-                    default:
-                        values = [].concat(params[attr]);
-                        from2 = [].concat(from[attr]);
-                        diff[attr] = [];
-                        i = element.paper.customAttributes[attr][length];
-                        while (i--) {
-                            diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;
-                        }
-                        break;
-                }
-            }
-        }
-        if (!animateable) {
-            var attrs = [],
-                lastcall;
-            for (var key in params) if (params[has](key) && animKeyFrames.test(key)) {
-                attr = {value: params[key]};
-                key == "from" && (key = 0);
-                key == "to" && (key = 100);
-                attr.key = toInt(key, 10);
-                attrs.push(attr);
-            }
-            attrs.sort(sortByKey);
-            if (attrs[0].key) {
-                attrs.unshift({key: 0, value: element.attrs});
-            }
-            for (i = 0, ii = attrs[length]; i < ii; i++) {
-                keyframesRun(attrs[i].value, element, ms / 100 * attrs[i].key, ms / 100 * (attrs[i - 1] && attrs[i - 1].key || 0), attrs[i - 1] && attrs[i - 1].value.callback);
-            }
-            lastcall = attrs[attrs[length] - 1].value.callback;
-            if (lastcall) {
-                element.timeouts.push(setTimeout(function () {lastcall.call(element);}, ms));
-            }
-        } else {
-            var easyeasy = R.easing_formulas[easing];
-            if (!easyeasy) {
-                easyeasy = Str(easing).match(bezierrg);
-                if (easyeasy && easyeasy[length] == 5) {
-                    var curve = easyeasy;
-                    easyeasy = function (t) {
-                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);
-                    };
-                } else {
-                    easyeasy = function (t) {
-                        return t;
-                    };
-                }
-            }
-            animationElements.push({
-                start: params.start || +new Date,
-                ms: ms,
-                easing: easyeasy,
-                from: from,
-                diff: diff,
-                to: to,
-                el: element,
-                t: {x: 0, y: 0}
-            });
-            R.is(callback, "function") && (element._ac = setTimeout(function () {
-                callback.call(element);
-            }, ms));
-            animationElements[length] == 1 && setTimeout(animation);
-        }
-        return this;
-    };
-    elproto.stop = function () {
-        for (var i = 0; i < animationElements.length; i++) {
-            animationElements[i].el.id == this.id && animationElements.splice(i--, 1);
-        }
-        for (i = 0, ii = this.timeouts && this.timeouts.length; i < ii; i++) {
-            clearTimeout(this.timeouts[i]);
-        }
-        this.timeouts = [];
-        clearTimeout(this._ac);
-        delete this._ac;
-        return this;
-    };
-    elproto.translate = function (x, y) {
-        return this.attr({translation: x + " " + y});
-    };
-    elproto[toString] = function () {
-        return "Rapha\xebl\u2019s object";
-    };
-    R.ae = animationElements;
- 
-    // Set
-    var Set = function (items) {
-        this.items = [];
-        this[length] = 0;
-        this.type = "set";
-        if (items) {
-            for (var i = 0, ii = items[length]; i < ii; i++) {
-                if (items[i] && (items[i].constructor == Element || items[i].constructor == Set)) {
-                    this[this.items[length]] = this.items[this.items[length]] = items[i];
-                    this[length]++;
-                }
-            }
-        }
-    };
-    Set[proto][push] = function () {
-        var item,
-            len;
-        for (var i = 0, ii = arguments[length]; i < ii; i++) {
-            item = arguments[i];
-            if (item && (item.constructor == Element || item.constructor == Set)) {
-                len = this.items[length];
-                this[len] = this.items[len] = item;
-                this[length]++;
-            }
-        }
-        return this;
-    };
-    Set[proto].pop = function () {
-        delete this[this[length]--];
-        return this.items.pop();
-    };
-    for (var method in elproto) if (elproto[has](method)) {
-        Set[proto][method] = (function (methodname) {
-            return function () {
-                for (var i = 0, ii = this.items[length]; i < ii; i++) {
-                    this.items[i][methodname][apply](this.items[i], arguments);
-                }
-                return this;
-            };
-        })(method);
-    }
-    Set[proto].attr = function (name, value) {
-        if (name && R.is(name, array) && R.is(name[0], "object")) {
-            for (var j = 0, jj = name[length]; j < jj; j++) {
-                this.items[j].attr(name[j]);
-            }
-        } else {
-            for (var i = 0, ii = this.items[length]; i < ii; i++) {
-                this.items[i].attr(name, value);
-            }
-        }
-        return this;
-    };
-    Set[proto].animate = function (params, ms, easing, callback) {
-        (R.is(easing, "function") || !easing) && (callback = easing || null);
-        var len = this.items[length],
-            i = len,
-            item,
-            set = this,
-            collector;
-        callback && (collector = function () {
-            !--len && callback.call(set);
-        });
-        easing = R.is(easing, string) ? easing : collector;
-        item = this.items[--i].animate(params, ms, easing, collector);
-        while (i--) {
-            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, params, ms, easing, collector);
-        }
-        return this;
-    };
-    Set[proto].insertAfter = function (el) {
-        var i = this.items[length];
-        while (i--) {
-            this.items[i].insertAfter(el);
-        }
-        return this;
-    };
-    Set[proto].getBBox = function () {
-        var x = [],
-            y = [],
-            w = [],
-            h = [];
-        for (var i = this.items[length]; i--;) {
-            var box = this.items[i].getBBox();
-            x[push](box.x);
-            y[push](box.y);
-            w[push](box.x + box.width);
-            h[push](box.y + box.height);
-        }
-        x = mmin[apply](0, x);
-        y = mmin[apply](0, y);
-        return {
-            x: x,
-            y: y,
-            width: mmax[apply](0, w) - x,
-            height: mmax[apply](0, h) - y
-        };
-    };
-    Set[proto].clone = function (s) {
-        s = new Set;
-        for (var i = 0, ii = this.items[length]; i < ii; i++) {
-            s[push](this.items[i].clone());
-        }
-        return s;
-    };
-
-    R.registerFont = function (font) {
-        if (!font.face) {
-            return font;
-        }
-        this.fonts = this.fonts || {};
-        var fontcopy = {
-                w: font.w,
-                face: {},
-                glyphs: {}
-            },
-            family = font.face["font-family"];
-        for (var prop in font.face) if (font.face[has](prop)) {
-            fontcopy.face[prop] = font.face[prop];
-        }
-        if (this.fonts[family]) {
-            this.fonts[family][push](fontcopy);
-        } else {
-            this.fonts[family] = [fontcopy];
-        }
-        if (!font.svg) {
-            fontcopy.face["units-per-em"] = toInt(font.face["units-per-em"], 10);
-            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {
-                var path = font.glyphs[glyph];
-                fontcopy.glyphs[glyph] = {
-                    w: path.w,
-                    k: {},
-                    d: path.d && "M" + path.d[rp](/[mlcxtrv]/g, function (command) {
-                            return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[command] || "M";
-                        }) + "z"
-                };
-                if (path.k) {
-                    for (var k in path.k) if (path[has](k)) {
-                        fontcopy.glyphs[glyph].k[k] = path.k[k];
-                    }
-                }
-            }
-        }
-        return font;
-    };
-    paperproto.getFont = function (family, weight, style, stretch) {
-        stretch = stretch || "normal";
-        style = style || "normal";
-        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;
-        if (!R.fonts) {
-            return;
-        }
-        var font = R.fonts[family];
-        if (!font) {
-            var name = new RegExp("(^|\\s)" + family[rp](/[^\w\d\s+!~.:_-]/g, E) + "(\\s|$)", "i");
-            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {
-                if (name.test(fontName)) {
-                    font = R.fonts[fontName];
-                    break;
-                }
-            }
-        }
-        var thefont;
-        if (font) {
-            for (var i = 0, ii = font[length]; i < ii; i++) {
-                thefont = font[i];
-                if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) {
-                    break;
-                }
-            }
-        }
-        return thefont;
-    };
-    paperproto.print = function (x, y, string, font, size, origin, letter_spacing) {
-        origin = origin || "middle"; // baseline|middle
-        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);
-        var out = this.set(),
-            letters = Str(string)[split](E),
-            shift = 0,
-            path = E,
-            scale;
-        R.is(font, string) && (font = this.getFont(font));
-        if (font) {
-            scale = (size || 16) / font.face["units-per-em"];
-            var bb = font.face.bbox.split(separator),
-                top = +bb[0],
-                height = +bb[1] + (origin == "baseline" ? bb[3] - bb[1] + (+font.face.descent) : (bb[3] - bb[1]) / 2);
-            for (var i = 0, ii = letters[length]; i < ii; i++) {
-                var prev = i && font.glyphs[letters[i - 1]] || {},
-                    curr = font.glyphs[letters[i]];
-                shift += i ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;
-                curr && curr.d && out[push](this.path(curr.d).attr({fill: "#000", stroke: "none", translation: [shift, 0]}));
-            }
-            out.scale(scale, scale, top, height).translate(x - top, y - height);
-        }
-        return out;
-    };
-
-    R.format = function (token, params) {
-        var args = R.is(params, array) ? [0][concat](params) : arguments;
-        token && R.is(token, string) && args[length] - 1 && (token = token[rp](formatrg, function (str, i) {
-            return args[++i] == null ? E : args[i];
-        }));
-        return token || E;
-    };
-    R.ninja = function () {
-        oldRaphael.was ? (win.Raphael = oldRaphael.is) : delete Raphael;
-        return R;
-    };
-    R.el = elproto;
-    R.st = Set[proto];
-
-    oldRaphael.was ? (win.Raphael = R) : (Raphael = R);
-})();/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
- 
- 
-(function () {
-    var mmax = Math.max,
-        mmin = Math.min;
-    Raphael.fn.g = Raphael.fn.g || {};
-    Raphael.fn.g.markers = {
-        disc: "disc",
-        o: "disc",
-        flower: "flower",
-        f: "flower",
-        diamond: "diamond",
-        d: "diamond",
-        square: "square",
-        s: "square",
-        triangle: "triangle",
-        t: "triangle",
-        star: "star",
-        "*": "star",
-        cross: "cross",
-        x: "cross",
-        plus: "plus",
-        "+": "plus",
-        arrow: "arrow",
-        "->": "arrow"
-    };
-    Raphael.fn.g.shim = {stroke: "none", fill: "#000", "fill-opacity": 0};
-    Raphael.fn.g.txtattr = {font: "12px Arial, sans-serif"};
-    Raphael.fn.g.colors = [];
-    var hues = [.6, .2, .05, .1333, .75, 0];
-    for (var i = 0; i < 10; i++) {
-        if (i < hues.length) {
-            Raphael.fn.g.colors.push("hsb(" + hues[i] + ", .75, .75)");
-        } else {
-            Raphael.fn.g.colors.push("hsb(" + hues[i - hues.length] + ", 1, .5)");
-        }
-    }
-    Raphael.fn.g.text = function (x, y, text) {
-        return this.text(x, y, text).attr(this.g.txtattr);
-    };
-    Raphael.fn.g.labelise = function (label, val, total) {
-        if (label) {
-            return (label + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (all, value, percent) {
-                if (value) {
-                    return (+val).toFixed(value.replace(/^#+\.?/g, "").length);
-                }
-                if (percent) {
-                    return (val * 100 / total).toFixed(percent.replace(/^%+\.?/g, "").length) + "%";
-                }
-            });
-        } else {
-            return (+val).toFixed(0);
-        }
-    };
-
-    Raphael.fn.g.finger = function (x, y, width, height, dir, ending, isPath) {
-        // dir 0 for horisontal and 1 for vertical
-        if ((dir && !height) || (!dir && !width)) {
-            return isPath ? "" : this.path();
-        }
-        ending = {square: "square", sharp: "sharp", soft: "soft"}[ending] || "round";
-        var path;
-        height = Math.round(height);
-        width = Math.round(width);
-        x = Math.round(x);
-        y = Math.round(y);
-        switch (ending) {
-            case "round":
-            if (!dir) {
-                var r = ~~(height / 2);
-                if (width < r) {
-                    r = width;
-                    path = ["M", x + .5, y + .5 - ~~(height / 2), "l", 0, 0, "a", r, ~~(height / 2), 0, 0, 1, 0, height, "l", 0, 0, "z"];
-                } else {
-                    path = ["M", x + .5, y + .5 - r, "l", width - r, 0, "a", r, r, 0, 1, 1, 0, height, "l", r - width, 0, "z"];
-                }
-            } else {
-                r = ~~(width / 2);
-                if (height < r) {
-                    r = height;
-                    path = ["M", x - ~~(width / 2), y, "l", 0, 0, "a", ~~(width / 2), r, 0, 0, 1, width, 0, "l", 0, 0, "z"];
-                } else {
-                    path = ["M", x - r, y, "l", 0, r - height, "a", r, r, 0, 1, 1, width, 0, "l", 0, height - r, "z"];
-                }
-            }
-            break;
-            case "sharp":
-            if (!dir) {
-                var half = ~~(height / 2);
-                path = ["M", x, y + half, "l", 0, -height, mmax(width - half, 0), 0, mmin(half, width), half, -mmin(half, width), half + (half * 2 < height), "z"];
-            } else {
-                half = ~~(width / 2);
-                path = ["M", x + half, y, "l", -width, 0, 0, -mmax(height - half, 0), half, -mmin(half, height), half, mmin(half, height), half, "z"];
-            }
-            break;
-            case "square":
-            if (!dir) {
-                path = ["M", x, y + ~~(height / 2), "l", 0, -height, width, 0, 0, height, "z"];
-            } else {
-                path = ["M", x + ~~(width / 2), y, "l", 1 - width, 0, 0, -height, width - 1, 0, "z"];
-            }
-            break;
-            case "soft":
-            if (!dir) {
-                r = mmin(width, Math.round(height / 5));
-                path = ["M", x + .5, y + .5 - ~~(height / 2), "l", width - r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r * 2, "a", r, r, 0, 0, 1, -r, r, "l", r - width, 0, "z"];
-            } else {
-                r = mmin(Math.round(width / 5), height);
-                path = ["M", x - ~~(width / 2), y, "l", 0, r - height, "a", r, r, 0, 0, 1, r, -r, "l", width - 2 * r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r, "z"];
-            }
-        }
-        if (isPath) {
-            return path.join(",");
-        } else {
-            return this.path(path);
-        }
-    };
-
-    // Symbols
-    Raphael.fn.g.disc = function (cx, cy, r) {
-        return this.circle(cx, cy, r);
-    };
-    Raphael.fn.g.line = function (cx, cy, r) {
-        return this.rect(cx - r, cy - r / 5, 2 * r, 2 * r / 5);
-    };
-    Raphael.fn.g.square = function (cx, cy, r) {
-        r = r * .7;
-        return this.rect(cx - r, cy - r, 2 * r, 2 * r);
-    };
-    Raphael.fn.g.triangle = function (cx, cy, r) {
-        r *= 1.75;
-        return this.path("M".concat(cx, ",", cy, "m0-", r * .58, "l", r * .5, ",", r * .87, "-", r, ",0z"));
-    };
-    Raphael.fn.g.diamond = function (cx, cy, r) {
-        return this.path(["M", cx, cy - r, "l", r, r, -r, r, -r, -r, r, -r, "z"]);
-    };
-    Raphael.fn.g.flower = function (cx, cy, r, n) {
-        r = r * 1.25;
-        var rout = r,
-            rin = rout * .5;
-        n = +n < 3 || !n ? 5 : n;
-        var points = ["M", cx, cy + rin, "Q"],
-            R;
-        for (var i = 1; i < n * 2 + 1; i++) {
-            R = i % 2 ? rout : rin;
-            points = points.concat([+(cx + R * Math.sin(i * Math.PI / n)).toFixed(3), +(cy + R * Math.cos(i * Math.PI / n)).toFixed(3)]);
-        }
-        points.push("z");
-        return this.path(points.join(","));
-    };
-    Raphael.fn.g.star = function (cx, cy, r, r2, rays) {
-        r2 = r2 || r * .382;
-        rays = rays || 5;
-        var points = ["M", cx, cy + r2, "L"],
-            R;
-        for (var i = 1; i < rays * 2; i++) {
-            R = i % 2 ? r : r2;
-            points = points.concat([(cx + R * Math.sin(i * Math.PI / rays)), (cy + R * Math.cos(i * Math.PI / rays))]);
-        }
-        points.push("z");
-        return this.path(points.join(","));
-    };
-    Raphael.fn.g.cross = function (cx, cy, r) {
-        r = r / 2.5;
-        return this.path("M".concat(cx - r, ",", cy, "l", [-r, -r, r, -r, r, r, r, -r, r, r, -r, r, r, r, -r, r, -r, -r, -r, r, -r, -r, "z"]));
-    };
-    Raphael.fn.g.plus = function (cx, cy, r) {
-        r = r / 2;
-        return this.path("M".concat(cx - r / 2, ",", cy - r / 2, "l", [0, -r, r, 0, 0, r, r, 0, 0, r, -r, 0, 0, r, -r, 0, 0, -r, -r, 0, 0, -r, "z"]));
-    };
-    Raphael.fn.g.arrow = function (cx, cy, r) {
-        return this.path("M".concat(cx - r * .7, ",", cy - r * .4, "l", [r * .6, 0, 0, -r * .4, r, r * .8, -r, r * .8, 0, -r * .4, -r * .6, 0], "z"));
-    };
-
-    // Tooltips
-    Raphael.fn.g.tag = function (x, y, text, angle, r) {
-        angle = angle || 0;
-        r = r == null ? 5 : r;
-        text = text == null ? "$9.99" : text;
-        var R = .5522 * r,
-            res = this.set(),
-            d = 3;
-        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
-        res.update = function () {
-            this.rotate(0, x, y);
-            var bb = this[1].getBBox();
-            if (bb.height >= r * 2) {
-                this[0].attr({path: ["M", x, y + r, "a", r, r, 0, 1, 1, 0, -r * 2, r, r, 0, 1, 1, 0, r * 2, "m", 0, -r * 2 -d, "a", r + d, r + d, 0, 1, 0, 0, (r + d) * 2, "L", x + r + d, y + bb.height / 2 + d, "l", bb.width + 2 * d, 0, 0, -bb.height - 2 * d, -bb.width - 2 * d, 0, "L", x, y - r - d].join(",")});
-            } else {
-                var dx = Math.sqrt(Math.pow(r + d, 2) - Math.pow(bb.height / 2 + d, 2));
-                this[0].attr({path: ["M", x, y + r, "c", -R, 0, -r, R - r, -r, -r, 0, -R, r - R, -r, r, -r, R, 0, r, r - R, r, r, 0, R, R - r, r, -r, r, "M", x + dx, y - bb.height / 2 - d, "a", r + d, r + d, 0, 1, 0, 0, bb.height + 2 * d, "l", r + d - dx + bb.width + 2 * d, 0, 0, -bb.height - 2 * d, "L", x + dx, y - bb.height / 2 - d].join(",")});
-            }
-            this[1].attr({x: x + r + d + bb.width / 2, y: y});
-            angle = (360 - angle) % 360;
-            this.rotate(angle, x, y);
-            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
-            return this;
-        };
-        res.update();
-        return res;
-    };
-    Raphael.fn.g.popupit = function (x, y, set, dir, size) {
-        dir = dir == null ? 2 : dir;
-        size = size || 5;
-        x = Math.round(x);
-        y = Math.round(y);
-        var bb = set.getBBox(),
-            w = Math.round(bb.width / 2),
-            h = Math.round(bb.height / 2),
-            dx = [0, w + size * 2, 0, -w - size * 2],
-            dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
-            p = ["M", x - dx[dir], y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
-                "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
-                "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
-                "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
-                "l", -mmax(w - size, 0), 0, "z"].join(","),
-            xy = [{x: x, y: y + size * 2 + h}, {x: x - size * 2 - w, y: y}, {x: x, y: y - size * 2 - h}, {x: x + size * 2 + w, y: y}][dir];
-        set.translate(xy.x - w - bb.x, xy.y - h - bb.y);
-        return this.path(p).attr({fill: "#000", stroke: "none"}).insertBefore(set.node ? set : set[0]);
-    };
-    Raphael.fn.g.popup = function (x, y, text, dir, size) {
-        dir = dir == null ? 2 : dir > 3 ? 3 : dir;
-        size = size || 5;
-        text = text || "$9.99";
-        var res = this.set(),
-            d = 3;
-        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
-        res.update = function (X, Y, withAnimation) {
-            X = X || x;
-            Y = Y || y;
-            var bb = this[1].getBBox(),
-                w = bb.width / 2,
-                h = bb.height / 2,
-                dx = [0, w + size * 2, 0, -w - size * 2],
-                dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
-                p = ["M", X - dx[dir], Y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
-                    "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
-                    "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
-                    "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
-                    "l", -mmax(w - size, 0), 0, "z"].join(","),
-                xy = [{x: X, y: Y + size * 2 + h}, {x: X - size * 2 - w, y: Y}, {x: X, y: Y - size * 2 - h}, {x: X + size * 2 + w, y: Y}][dir];
-            xy.path = p;
-            if (withAnimation) {
-                this.animate(xy, 500, ">");
-            } else {
-                this.attr(xy);
-            }
-            return this;
-        };
-        return res.update(x, y);
-    };
-    Raphael.fn.g.flag = function (x, y, text, angle) {
-        angle = angle || 0;
-        text = text || "$9.99";
-        var res = this.set(),
-            d = 3;
-        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
-        res.update = function (x, y) {
-            this.rotate(0, x, y);
-            var bb = this[1].getBBox(),
-                h = bb.height / 2;
-            this[0].attr({path: ["M", x, y, "l", h + d, -h - d, bb.width + 2 * d, 0, 0, bb.height + 2 * d, -bb.width - 2 * d, 0, "z"].join(",")});
-            this[1].attr({x: x + h + d + bb.width / 2, y: y});
-            angle = 360 - angle;
-            this.rotate(angle, x, y);
-            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
-            return this;
-        };
-        return res.update(x, y);
-    };
-    Raphael.fn.g.label = function (x, y, text) {
-        var res = this.set();
-        res.push(this.rect(x, y, 10, 10).attr({stroke: "none", fill: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff"}));
-        res.update = function () {
-            var bb = this[1].getBBox(),
-                r = mmin(bb.width + 10, bb.height + 10) / 2;
-            this[0].attr({x: bb.x - r / 2, y: bb.y - r / 2, width: bb.width + r, height: bb.height + r, r: r});
-        };
-        res.update();
-        return res;
-    };
-    Raphael.fn.g.labelit = function (set) {
-        var bb = set.getBBox(),
-            r = mmin(20, bb.width + 10, bb.height + 10) / 2;
-        return this.rect(bb.x - r / 2, bb.y - r / 2, bb.width + r, bb.height + r, r).attr({stroke: "none", fill: "#000"}).insertBefore(set.node ? set : set[0]);
-    };
-    Raphael.fn.g.drop = function (x, y, text, size, angle) {
-        size = size || 30;
-        angle = angle || 0;
-        var res = this.set();
-        res.push(this.path(["M", x, y, "l", size, 0, "A", size * .4, size * .4, 0, 1, 0, x + size * .7, y - size * .7, "z"]).attr({fill: "#000", stroke: "none", rotation: [22.5 - angle, x, y]}));
-        angle = (angle + 90) * Math.PI / 180;
-        res.push(this.text(x + size * Math.sin(angle), y + size * Math.cos(angle), text).attr(this.g.txtattr).attr({"font-size": size * 12 / 30, fill: "#fff"}));
-        res.drop = res[0];
-        res.text = res[1];
-        return res;
-    };
-    Raphael.fn.g.blob = function (x, y, text, angle, size) {
-        angle = (+angle + 1 ? angle : 45) + 90;
-        size = size || 12;
-        var rad = Math.PI / 180,
-            fontSize = size * 12 / 12;
-        var res = this.set();
-        res.push(this.path().attr({fill: "#000", stroke: "none"}));
-        res.push(this.text(x + size * Math.sin((angle) * rad), y + size * Math.cos((angle) * rad) - fontSize / 2, text).attr(this.g.txtattr).attr({"font-size": fontSize, fill: "#fff"}));
-        res.update = function (X, Y, withAnimation) {
-            X = X || x;
-            Y = Y || y;
-            var bb = this[1].getBBox(),
-                w = mmax(bb.width + fontSize, size * 25 / 12),
-                h = mmax(bb.height + fontSize, size * 25 / 12),
-                x2 = X + size * Math.sin((angle - 22.5) * rad),
-                y2 = Y + size * Math.cos((angle - 22.5) * rad),
-                x1 = X + size * Math.sin((angle + 22.5) * rad),
-                y1 = Y + size * Math.cos((angle + 22.5) * rad),
-                dx = (x1 - x2) / 2,
-                dy = (y1 - y2) / 2,
-                rx = w / 2,
-                ry = h / 2,
-                k = -Math.sqrt(Math.abs(rx * rx * ry * ry - rx * rx * dy * dy - ry * ry * dx * dx) / (rx * rx * dy * dy + ry * ry * dx * dx)),
-                cx = k * rx * dy / ry + (x1 + x2) / 2,
-                cy = k * -ry * dx / rx + (y1 + y2) / 2;
-            if (withAnimation) {
-                this.animate({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")}, 500, ">");
-            } else {
-                this.attr({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")});
-            }
-            return this;
-        };
-        res.update(x, y);
-        return res;
-    };
-
-    Raphael.fn.g.colorValue = function (value, total, s, b) {
-        return "hsb(" + [mmin((1 - value / total) * .4, 1), s || .75, b || .75] + ")";
-    };
-
-    Raphael.fn.g.snapEnds = function (from, to, steps) {
-        var f = from,
-            t = to;
-        if (f == t) {
-            return {from: f, to: t, power: 0};
-        }
-        function round(a) {
-            return Math.abs(a - .5) < .25 ? ~~(a) + .5 : Math.round(a);
-        }
-        var d = (t - f) / steps,
-            r = ~~(d),
-            R = r,
-            i = 0;
-        if (r) {
-            while (R) {
-                i--;
-                R = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
-            }
-            i ++;
-        } else {
-            while (!r) {
-                i = i || 1;
-                r = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
-                i++;
-            }
-            i && i--;
-        }
-        t = round(to * Math.pow(10, i)) / Math.pow(10, i);
-        if (t < to) {
-            t = round((to + .5) * Math.pow(10, i)) / Math.pow(10, i);
-        }
-        f = round((from - (i > 0 ? 0 : .5)) * Math.pow(10, i)) / Math.pow(10, i);
-        return {from: f, to: t, power: i};
-    };
-    Raphael.fn.g.axis = function (x, y, length, from, to, steps, orientation, labels, type, dashsize) {
-        dashsize = dashsize == null ? 2 : dashsize;
-        type = type || "t";
-        steps = steps || 10;
-        var path = type == "|" || type == " " ? ["M", x + .5, y, "l", 0, .001] : orientation == 1 || orientation == 3 ? ["M", x + .5, y, "l", 0, -length] : ["M", x, y + .5, "l", length, 0],
-            ends = this.g.snapEnds(from, to, steps),
-            f = ends.from,
-            t = ends.to,
-            i = ends.power,
-            j = 0,
-            text = this.set();
-        d = (t - f) / steps;
-        var label = f,
-            rnd = i > 0 ? i : 0;
-            dx = length / steps;
-        if (+orientation == 1 || +orientation == 3) {
-            var Y = y,
-                addon = (orientation - 1 ? 1 : -1) * (dashsize + 3 + !!(orientation - 1));
-            while (Y >= y - length) {
-                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), Y + .5, "l", dashsize * 2 + 1, 0]));
-                text.push(this.text(x + addon, Y, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
-                label += d;
-                Y -= dx;
-            }
-            if (Math.round(Y + dx - (y - length))) {
-                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), y - length + .5, "l", dashsize * 2 + 1, 0]));
-                text.push(this.text(x + addon, y - length, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
-            }
-        } else {
-            label = f;
-            rnd = (i > 0) * i;
-            addon = (orientation ? -1 : 1) * (dashsize + 9 + !orientation);
-            var X = x,
-                dx = length / steps,
-                txt = 0,
-                prev = 0;
-            while (X <= x + length) {
-                type != "-" && type != " " && (path = path.concat(["M", X + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
-                text.push(txt = this.text(X, y + addon, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
-                var bb = txt.getBBox();
-                if (prev >= bb.x - 5) {
-                    text.pop(text.length - 1).remove();
-                } else {
-                    prev = bb.x + bb.width;
-                }
-                label += d;
-                X += dx;
-            }
-            if (Math.round(X - dx - x - length)) {
-                type != "-" && type != " " && (path = path.concat(["M", x + length + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
-                text.push(this.text(x + length, y + addon, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
-            }
-        }
-        var res = this.path(path);
-        res.text = text;
-        res.all = this.set([res, text]);
-        res.remove = function () {
-            this.text.remove();
-            this.constructor.prototype.remove.call(this);
-        };
-        return res;
-    };
-
-    Raphael.el.lighter = function (times) {
-        times = times || 2;
-        var fs = [this.attrs.fill, this.attrs.stroke];
-        this.fs = this.fs || [fs[0], fs[1]];
-        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
-        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
-        fs[0].b = mmin(fs[0].b * times, 1);
-        fs[0].s = fs[0].s / times;
-        fs[1].b = mmin(fs[1].b * times, 1);
-        fs[1].s = fs[1].s / times;
-        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
-    };
-    Raphael.el.darker = function (times) {
-        times = times || 2;
-        var fs = [this.attrs.fill, this.attrs.stroke];
-        this.fs = this.fs || [fs[0], fs[1]];
-        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
-        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
-        fs[0].s = mmin(fs[0].s * times, 1);
-        fs[0].b = fs[0].b / times;
-        fs[1].s = mmin(fs[1].s * times, 1);
-        fs[1].b = fs[1].b / times;
-        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
-    };
-    Raphael.el.original = function () {
-        if (this.fs) {
-            this.attr({fill: this.fs[0], stroke: this.fs[1]});
-            delete this.fs;
-        }
-    };
-})();/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.barchart = function (x, y, width, height, values, opts) {
-    opts = opts || {};
-    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
-        gutter = parseFloat(opts.gutter || "20%"),
-        chart = this.set(),
-        bars = this.set(),
-        covers = this.set(),
-        covers2 = this.set(),
-        total = Math.max.apply(Math, values),
-        stacktotal = [],
-        paper = this,
-        multi = 0,
-        colors = opts.colors || this.g.colors,
-        len = values.length;
-    if (this.raphael.is(values[0], "array")) {
-        total = [];
-        multi = len;
-        len = 0;
-        for (var i = values.length; i--;) {
-            bars.push(this.set());
-            total.push(Math.max.apply(Math, values[i]));
-            len = Math.max(len, values[i].length);
-        }
-        if (opts.stacked) {
-            for (var i = len; i--;) {
-                var tot = 0;
-                for (var j = values.length; j--;) {
-                    tot +=+ values[j][i] || 0;
-                }
-                stacktotal.push(tot);
-            }
-        }
-        for (var i = values.length; i--;) {
-            if (values[i].length < len) {
-                for (var j = len; j--;) {
-                    values[i].push(0);
-                }
-            }
-        }
-        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
-    }
-    
-    total = (opts.to) || total;
-    var barwidth = width / (len * (100 + gutter) + gutter) * 100,
-        barhgutter = barwidth * gutter / 100,
-        barvgutter = opts.vgutter == null ? 20 : opts.vgutter,
-        stack = [],
-        X = x + barhgutter,
-        Y = (height - 2 * barvgutter) / total;
-    if (!opts.stretch) {
-        barhgutter = Math.round(barhgutter);
-        barwidth = Math.floor(barwidth);
-    }
-    !opts.stacked && (barwidth /= multi || 1);
-    for (var i = 0; i < len; i++) {
-        stack = [];
-        for (var j = 0; j < (multi || 1); j++) {
-            var h = Math.round((multi ? values[j][i] : values[i]) * Y),
-                top = y + height - barvgutter - h,
-                bar = this.g.finger(Math.round(X + barwidth / 2), top + h, barwidth, h, true, type).attr({stroke: "none", fill: colors[multi ? j : i]});
-            if (multi) {
-                bars[j].push(bar);
-            } else {
-                bars.push(bar);
-            }
-            bar.y = top;
-            bar.x = Math.round(X + barwidth / 2);
-            bar.w = barwidth;
-            bar.h = h;
-						bar.index = i;
-            bar.value = multi ? values[j][i] : values[i];
-            if (!opts.stacked) {
-                X += barwidth;
-            } else {
-                stack.push(bar);
-            }
-        }
-        if (opts.stacked) {
-            var cvr;
-            covers2.push(cvr = this.rect(stack[0].x - stack[0].w / 2, y, barwidth, height).attr(this.g.shim));
-            cvr.bars = this.set();
-            var size = 0;
-            for (var s = stack.length; s--;) {
-                stack[s].toFront();
-            }
-            for (var s = 0, ss = stack.length; s < ss; s++) {
-                var bar = stack[s],
-                    cover,
-                    h = (size + bar.value) * Y,
-                    path = this.g.finger(bar.x, y + height - barvgutter - !!size * .5, barwidth, h, true, type, 1);
-                cvr.bars.push(bar);
-                size && bar.attr({path: path});
-                bar.h = h;
-                bar.y = y + height - barvgutter - !!size * .5 - h;
-                covers.push(cover = this.rect(bar.x - bar.w / 2, bar.y, barwidth, bar.value * Y).attr(this.g.shim));
-                cover.bar = bar;
-                cover.value = bar.value;
-                size += bar.value;
-            }
-            X += barwidth;
-        }
-        X += barhgutter;
-    }
-    covers2.toFront();
-    X = x + barhgutter;
-    if (!opts.stacked) {
-        for (var i = 0; i < len; i++) {
-            for (var j = 0; j < (multi || 1); j++) {
-                var cover;
-                covers.push(cover = this.rect(Math.round(X), y + barvgutter, barwidth, height - barvgutter).attr(this.g.shim));
-                cover.bar = multi ? bars[j][i] : bars[i];
-                cover.value = cover.bar.value;
-                X += barwidth;
-            }
-            X += barhgutter;
-        }
-    }
-    chart.label = function (labels, isBottom, rotate) {
-        labels = labels || [];
-        isBottom = isBottom == undefined ? true : isBottom;
-	rotate = rotate == undefined ? false : rotate;
-        this.labels = paper.set();
-        var L, l = -Infinity;
-        if (opts.stacked) {
-            for (var i = 0; i < len; i++) {
-                var tot = 0;
-                for (var j = 0; j < (multi || 1); j++) {
-                    tot += multi ? values[j][i] : values[i];
-                    if (j == 0) {
-                        var label = paper.g.labelise(labels[j][i], tot, total);
-                        L = paper.g.text(bars[j][i].x, isBottom ? y + height - barvgutter / 2 : bars[j][i].y - 10, label);
-			if (rotate) {
-				L.rotate(90);
-			}
-                        var bb = L.getBBox();
-                        if (bb.x - 7 < l) {
-                            L.remove();
-                        } else {
-                            this.labels.push(L);
-                            l = bb.x + (rotate ? bb.height : bb.width);
-                        }
-                    }
-                }
-            }
-        } else {
-            for (var i = 0; i < len; i++) {
-                for (var j = 0; j < (multi || 1); j++) {
-                    // did not remove the loop because don't yet know whether to accept multi array input for arrays
-                    var label = paper.g.labelise(multi ? labels[0] && labels[0][i] : labels[i], multi ? values[0][i] : values[i], total);
-                     L = paper.g.text(bars[0][i].x, isBottom ? y + 5 + height - barvgutter / 2 : bars[0][i].y - 10, label);
-			if (rotate) {
-				L.rotate(90);
-				// If we rotated it, we need to move it as well. Still have to use the width
-				// to get the "length" of the label, divided it in two and shift down.
-				L.translate(0, (L.getBBox().width / 2));
-			}
-                    var bb = L.getBBox();
-//                    if (bb.x - 7 < l) {
-                    if (bb.x - (this.getBBox().width) < l) {
-                        L.remove();
-                    } else {
-                        this.labels.push(L);
-                        l = bb.x + (rotate ? bb.height : bb.width);
-                    }
-                }
-            }
-        }
-        return this;
-    };
-    chart.hover = function (fin, fout) {
-        covers2.hide();
-        covers.show();
-        covers.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.hoverColumn = function (fin, fout) {
-        covers.hide();
-        covers2.show();
-        fout = fout || function () {};
-        covers2.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.click = function (f) {
-        covers2.hide();
-        covers.show();
-        covers.click(f);
-        return this;
-    };
-    chart.each = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers.length; i--;) {
-            f.call(covers[i]);
-        }
-        return this;
-    };
-    chart.eachColumn = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers2.length; i--;) {
-            f.call(covers2[i]);
-        }
-        return this;
-    };
-    chart.clickColumn = function (f) {
-        covers.hide();
-        covers2.show();
-        covers2.click(f);
-        return this;
-    };
-    chart.push(bars, covers, covers2);
-    chart.bars = bars;
-    chart.covers = covers;
-    return chart;
-};
-Raphael.fn.g.hbarchart = function (x, y, width, height, values, opts) {
-    opts = opts || {};
-    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
-        gutter = parseFloat(opts.gutter || "20%"),
-        chart = this.set(),
-        bars = this.set(),
-        covers = this.set(),
-        covers2 = this.set(),
-        total = Math.max.apply(Math, values),
-        stacktotal = [],
-        paper = this,
-        multi = 0,
-        colors = opts.colors || this.g.colors,
-        len = values.length;
-    if (this.raphael.is(values[0], "array")) {
-        total = [];
-        multi = len;
-        len = 0;
-        for (var i = values.length; i--;) {
-            bars.push(this.set());
-            total.push(Math.max.apply(Math, values[i]));
-            len = Math.max(len, values[i].length);
-        }
-        if (opts.stacked) {
-            for (var i = len; i--;) {
-                var tot = 0;
-                for (var j = values.length; j--;) {
-                    tot +=+ values[j][i] || 0;
-                }
-                stacktotal.push(tot);
-            }
-        }
-        for (var i = values.length; i--;) {
-            if (values[i].length < len) {
-                for (var j = len; j--;) {
-                    values[i].push(0);
-                }
-            }
-        }
-        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
-    }
-    
-    total = (opts.to) || total;
-    var barheight = Math.floor(height / (len * (100 + gutter) + gutter) * 100),
-        bargutter = Math.floor(barheight * gutter / 100),
-        stack = [],
-        Y = y + bargutter,
-        X = (width - 1) / total;
-    !opts.stacked && (barheight /= multi || 1);
-    for (var i = 0; i < len; i++) {
-        stack = [];
-        for (var j = 0; j < (multi || 1); j++) {
-            var val = multi ? values[j][i] : values[i],
-                bar = this.g.finger(x, Y + barheight / 2, Math.round(val * X), barheight - 1, false, type).attr({stroke: "none", fill: colors[multi ? j : i]});
-            if (multi) {
-                bars[j].push(bar);
-            } else {
-                bars.push(bar);
-            }
-            bar.x = x + Math.round(val * X);
-            bar.y = Y + barheight / 2;
-            bar.w = Math.round(val * X);
-            bar.h = barheight;
-            bar.value = +val;
-            if (!opts.stacked) {
-                Y += barheight;
-            } else {
-                stack.push(bar);
-            }
-        }
-        if (opts.stacked) {
-            var cvr = this.rect(x, stack[0].y - stack[0].h / 2, width, barheight).attr(this.g.shim);
-            covers2.push(cvr);
-            cvr.bars = this.set();
-            var size = 0;
-            for (var s = stack.length; s--;) {
-                stack[s].toFront();
-            }
-            for (var s = 0, ss = stack.length; s < ss; s++) {
-                var bar = stack[s],
-                    cover,
-                    val = Math.round((size + bar.value) * X),
-                    path = this.g.finger(x, bar.y, val, barheight - 1, false, type, 1);
-                cvr.bars.push(bar);
-                size && bar.attr({path: path});
-                bar.w = val;
-                bar.x = x + val;
-                covers.push(cover = this.rect(x + size * X, bar.y - bar.h / 2, bar.value * X, barheight).attr(this.g.shim));
-                cover.bar = bar;
-                size += bar.value;
-            }
-            Y += barheight;
-        }
-        Y += bargutter;
-    }
-    covers2.toFront();
-    Y = y + bargutter;
-    if (!opts.stacked) {
-        for (var i = 0; i < len; i++) {
-            for (var j = 0; j < (multi || 1); j++) {
-                var cover = this.rect(x, Y, width, barheight).attr(this.g.shim);
-                covers.push(cover);
-                cover.bar = multi ? bars[j][i] : bars[i];
-                cover.value = cover.bar.value;
-                Y += barheight;
-            }
-            Y += bargutter;
-        }
-    }
-    chart.label = function (labels, isRight) {
-        labels = labels || [];
-        this.labels = paper.set();
-        for (var i = 0; i < len; i++) {
-            for (var j = 0; j < multi; j++) {
-                var  label = paper.g.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total);
-                var X = isRight ? bars[i * (multi || 1) + j].x - barheight / 2 + 3 : x + 5,
-                    A = isRight ? "end" : "start",
-                    L;
-                this.labels.push(L = paper.g.text(X, bars[i * (multi || 1) + j].y, label).attr({"text-anchor": A}).insertBefore(covers[0]));
-                if (L.getBBox().x < x + 5) {
-                    L.attr({x: x + 5, "text-anchor": "start"});
-                } else {
-                    bars[i * (multi || 1) + j].label = L;
-                }
-            }
-        }
-        return this;
-    };
-    chart.hover = function (fin, fout) {
-        covers2.hide();
-        covers.show();
-        fout = fout || function () {};
-        covers.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.hoverColumn = function (fin, fout) {
-        covers.hide();
-        covers2.show();
-        fout = fout || function () {};
-        covers2.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.each = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers.length; i--;) {
-            f.call(covers[i]);
-        }
-        return this;
-    };
-    chart.eachColumn = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers2.length; i--;) {
-            f.call(covers2[i]);
-        }
-        return this;
-    };
-    chart.click = function (f) {
-        covers2.hide();
-        covers.show();
-        covers.click(f);
-        return this;
-    };
-    chart.clickColumn = function (f) {
-        covers.hide();
-        covers2.show();
-        covers2.click(f);
-        return this;
-    };
-    chart.push(bars, covers, covers2);
-    chart.bars = bars;
-    chart.covers = covers;
-    return chart;
-};
-/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.dotchart = function (x, y, width, height, valuesx, valuesy, size, opts) {
-    function drawAxis(ax) {
-        +ax[0] && (ax[0] = paper.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[1] && (ax[1] = paper.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
-        +ax[2] && (ax[2] = paper.g.axis(x + gutter, y + height - gutter + maxR, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[3] && (ax[3] = paper.g.axis(x + gutter - maxR, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
-    }
-    opts = opts || {};
-    var xdim = this.g.snapEnds(Math.min.apply(Math, valuesx), Math.max.apply(Math, valuesx), valuesx.length - 1),
-        minx = xdim.from,
-        maxx = xdim.to,
-        gutter = opts.gutter || 10,
-        ydim = this.g.snapEnds(Math.min.apply(Math, valuesy), Math.max.apply(Math, valuesy), valuesy.length - 1),
-        miny = ydim.from,
-        maxy = ydim.to,
-        len = Math.max(valuesx.length, valuesy.length, size.length),
-        symbol = this.g.markers[opts.symbol] || "disc",
-        res = this.set(),
-        series = this.set(),
-        max = opts.max || 100,
-        top = Math.max.apply(Math, size),
-        R = [],
-        paper = this,
-        k = Math.sqrt(top / Math.PI) * 2 / max;
-
-    for (var i = 0; i < len; i++) {
-        R[i] = Math.min(Math.sqrt(size[i] / Math.PI) * 2 / k, max);
-    }
-    gutter = Math.max.apply(Math, R.concat(gutter));
-    var axis = this.set(),
-        maxR = Math.max.apply(Math, R);
-    if (opts.axis) {
-        var ax = (opts.axis + "").split(/[,\s]+/);
-        drawAxis(ax);
-        var g = [], b = [];
-        for (var i = 0, ii = ax.length; i < ii; i++) {
-            var bb = ax[i].all ? ax[i].all.getBBox()[["height", "width"][i % 2]] : 0;
-            g[i] = bb + gutter;
-            b[i] = bb;
-        }
-        gutter = Math.max.apply(Math, g.concat(gutter));
-        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
-            ax[i].remove();
-            ax[i] = 1;
-        }
-        drawAxis(ax);
-        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
-            axis.push(ax[i].all);
-        }
-        res.axis = axis;
-    }
-    var kx = (width - gutter * 2) / ((maxx - minx) || 1),
-        ky = (height - gutter * 2) / ((maxy - miny) || 1);
-    for (var i = 0, ii = valuesy.length; i < ii; i++) {
-        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
-            X = x + gutter + (valuesx[i] - minx) * kx,
-            Y = y + height - gutter - (valuesy[i] - miny) * ky;
-        sym && R[i] && series.push(this.g[sym](X, Y, R[i]).attr({fill: opts.heat ? this.g.colorValue(R[i], maxR) : Raphael.fn.g.colors[0], "fill-opacity": opts.opacity ? R[i] / max : 1, stroke: "none"}));
-    }
-    var covers = this.set();
-    for (var i = 0, ii = valuesy.length; i < ii; i++) {
-        var X = x + gutter + (valuesx[i] - minx) * kx,
-            Y = y + height - gutter - (valuesy[i] - miny) * ky;
-        covers.push(this.circle(X, Y, maxR).attr(this.g.shim));
-        opts.href && opts.href[i] && covers[i].attr({href: opts.href[i]});
-        covers[i].r = +R[i].toFixed(3);
-        covers[i].x = +X.toFixed(3);
-        covers[i].y = +Y.toFixed(3);
-        covers[i].X = valuesx[i];
-        covers[i].Y = valuesy[i];
-        covers[i].value = size[i] || 0;
-        covers[i].dot = series[i];
-    }
-    res.covers = covers;
-    res.series = series;
-    res.push(series, axis, covers);
-    res.hover = function (fin, fout) {
-        covers.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    res.click = function (f) {
-        covers.click(f);
-        return this;
-    };
-    res.each = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers.length; i--;) {
-            f.call(covers[i]);
-        }
-        return this;
-    };
-    res.href = function (map) {
-        var cover;
-        for (var i = covers.length; i--;) {
-            cover = covers[i];
-            if (cover.X == map.x && cover.Y == map.y && cover.value == map.value) {
-                cover.attr({href: map.href});
-            }
-        }
-    };
-    return res;
-};
-/*!
- * g.Raphael 0.4.2 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.linechart = function (x, y, width, height, valuesx, valuesy, opts) {
-    function shrink(values, dim) {
-        var k = values.length / dim,
-            j = 0,
-            l = k,
-            sum = 0,
-            res = [];
-        while (j < values.length) {
-            l--;
-            if (l < 0) {
-                sum += values[j] * (1 + l);
-                res.push(sum / k);
-                sum = values[j++] * -l;
-                l += k;
-            } else {
-                sum += values[j++];
-            }
-        }
-        return res;
-    }
-    function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) {
-        var l1 = (p2x - p1x) / 2,
-            l2 = (p3x - p2x) / 2,
-            a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)),
-            b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y));
-        a = p1y < p2y ? Math.PI - a : a;
-        b = p3y < p2y ? Math.PI - b : b;
-        var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2,
-            dx1 = l1 * Math.sin(alpha + a),
-            dy1 = l1 * Math.cos(alpha + a),
-            dx2 = l2 * Math.sin(alpha + b),
-            dy2 = l2 * Math.cos(alpha + b);
-        return {
-            x1: p2x - dx1,
-            y1: p2y + dy1,
-            x2: p2x + dx2,
-            y2: p2y + dy2
-        };
-    }
-    opts = opts || {};
-    if (!this.raphael.is(valuesx[0], "array")) {
-        valuesx = [valuesx];
-    }
-    if (!this.raphael.is(valuesy[0], "array")) {
-        valuesy = [valuesy];
-    }
-    var gutter = opts.gutter || 10,
-        len = Math.max(valuesx[0].length, valuesy[0].length),
-        symbol = opts.symbol || "",
-        colors = opts.colors || Raphael.fn.g.colors,
-        that = this,
-        columns = null,
-        dots = null,
-        chart = this.set(),
-        path = [];
-
-    for (var i = 0, ii = valuesy.length; i < ii; i++) {
-        len = Math.max(len, valuesy[i].length);
-    }
-    var shades = this.set();
-    for (i = 0, ii = valuesy.length; i < ii; i++) {
-        if (opts.shade) {
-            shades.push(this.path().attr({stroke: "none", fill: colors[i], opacity: opts.nostroke ? 1 : .3}));
-        }
-        if (valuesy[i].length > width - 2 * gutter) {
-            valuesy[i] = shrink(valuesy[i], width - 2 * gutter);
-            len = width - 2 * gutter;
-        }
-        if (valuesx[i] && valuesx[i].length > width - 2 * gutter) {
-            valuesx[i] = shrink(valuesx[i], width - 2 * gutter);
-        }
-    }
-    var allx = Array.prototype.concat.apply([], valuesx),
-        ally = Array.prototype.concat.apply([], valuesy),
-        xdim = this.g.snapEnds(Math.min.apply(Math, allx), Math.max.apply(Math, allx), valuesx[0].length - 1);
-        if(opts.clip) {
-            var minx = opts.minx || xdim.from,
-                maxx = opts.maxx || xdim.to,
-                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
-                miny = opts.miny || ydim.from,
-                maxy = opts.maxy || ydim.to;
-        } else {
-            var minx = opts.minx && Math.min(opts.minx, xdim.from) || xdim.from,
-                maxx = opts.maxx && Math.max(opts.maxx, xdimt.to) || xdim.to,
-                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
-                miny = opts.miny && Math.min(opts.miny, ydim.from) || ydim.from,
-                maxy = opts.maxy && Math.max(opts.maxy, ydim.to) || ydim.to;
-        }
-        kx = (width - gutter * 2) / ((maxx - minx) || 1),
-        ky = (height - gutter * 2) / ((maxy - miny) || 1);
-
-    var lines = this.set(),
-        symbols = this.set(),
-        line;
-    for (i = 0, ii = valuesy.length; i < ii; i++) {
-        if (!opts.nostroke) {
-            lines.push(line = this.path().attr({
-                stroke: colors[i],
-                "stroke-width": opts.width || 2,
-                "stroke-linejoin": "round",
-                "stroke-linecap": "round",
-                "stroke-dasharray": opts.dash || ""
-            }));
-        }
-        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
-            symset = this.set();
-        path = [];
-        for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
-            var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
-                Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
-            (Raphael.is(sym, "array") ? sym[j] : sym) && symset.push(this.g[Raphael.fn.g.markers[this.raphael.is(sym, "array") ? sym[j] : sym]](X, Y, (opts.width || 2) * 3).attr({fill: colors[i], stroke: "none"}));
-            if (opts.smooth) {
-                if (j && j != jj - 1) {
-                    var X0 = x + gutter + ((valuesx[i] || valuesx[0])[j - 1] - minx) * kx,
-                        Y0 = y + height - gutter - (valuesy[i][j - 1] - miny) * ky,
-                        X2 = x + gutter + ((valuesx[i] || valuesx[0])[j + 1] - minx) * kx,
-                        Y2 = y + height - gutter - (valuesy[i][j + 1] - miny) * ky;
-                    var a = getAnchors(X0, Y0, X, Y, X2, Y2);
-                    path = path.concat([a.x1, a.y1, X, Y, a.x2, a.y2]);
-                }
-                if (!j) {
-                    path = ["M", X, Y, "C", X, Y];
-                }
-            } else {
-                path = path.concat([j ? "L" : "M", X, Y]);
-            }
-        }
-        if (opts.smooth) {
-            path = path.concat([X, Y, X, Y]);
-        }
-        symbols.push(symset);
-        if (opts.shade) {
-            shades[i].attr({path: path.concat(["L", X, y + height - gutter, "L",  x + gutter + ((valuesx[i] || valuesx[0])[0] - minx) * kx, y + height - gutter, "z"]).join(",")});
-        }
-        !opts.nostroke && line.attr({path: path.join(","), 'clip-rect': [x + gutter, y + gutter, width - 2 * gutter, height - 2 * gutter].join(",")});
-    }
-
-    function createColumns(f) {
-        // unite Xs together
-        var Xs = [];
-        for (var i = 0, ii = valuesx.length; i < ii; i++) {
-            Xs = Xs.concat(valuesx[i]);
-        }
-        Xs.sort(function(a,b) { return a - b; });
-        // remove duplicates
-        var Xs2 = [],
-            xs = [];
-        for (i = 0, ii = Xs.length; i < ii; i++) {
-            Xs[i] != Xs[i - 1] && Xs2.push(Xs[i]) && xs.push(x + gutter + (Xs[i] - minx) * kx);
-        }
-        Xs = Xs2;
-        ii = Xs.length;
-        var cvrs = f || that.set();
-        for (i = 0; i < ii; i++) {
-            var X = xs[i] - (xs[i] - (xs[i - 1] || x)) / 2,
-                w = ((xs[i + 1] || x + width) - xs[i]) / 2 + (xs[i] - (xs[i - 1] || x)) / 2,
-                C;
-            f ? (C = {}) : cvrs.push(C = that.rect(X - 1, y, Math.max(w + 1, 1), height).attr({stroke: "none", fill: "#000", opacity: 0}));
-            C.values = [];
-            C.symbols = that.set();
-            C.y = [];
-            C.x = xs[i];
-            C.axis = Xs[i];
-            for (var j = 0, jj = valuesy.length; j < jj; j++) {
-                Xs2 = valuesx[j] || valuesx[0];
-                for (var k = 0, kk = Xs2.length; k < kk; k++) {
-                    if (Xs2[k] == Xs[i]) {
-                        C.values.push(valuesy[j][k]);
-                        C.y.push(y + height - gutter - (valuesy[j][k] - miny) * ky);
-                        C.symbols.push(chart.symbols[j][k]);
-                    }
-                }
-            }
-            f && f.call(C);
-        }
-        !f && (columns = cvrs);
-    }
-    function createDots(f) {
-        var cvrs = f || that.set(),
-            C;
-        for (var i = 0, ii = valuesy.length; i < ii; i++) {
-            for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
-                var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
-                    nearX = x + gutter + ((valuesx[i] || valuesx[0])[j ? j - 1 : 1] - minx) * kx,
-                    Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
-                f ? (C = {}) : cvrs.push(C = that.circle(X, Y, Math.abs(nearX - X) / 2).attr({stroke: "none", fill: "#000", opacity: 0}));
-                C.x = X;
-                C.y = Y;
-                C.value = valuesy[i][j];
-                C.line = chart.lines[i];
-                C.shade = chart.shades[i];
-                C.symbol = chart.symbols[i][j];
-                C.symbols = chart.symbols[i];
-                C.axis = (valuesx[i] || valuesx[0])[j];
-                f && f.call(C);
-            }
-        }
-        !f && (dots = cvrs);
-    }
-
-    var axis = this.set();
-    if (opts.axis) {
-        var ax = (opts.axis + "").split(/[,\s]+/);
-        +ax[0] && axis.push(this.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[1] && axis.push(this.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
-        +ax[2] && axis.push(this.g.axis(x + gutter, y + height - gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[3] && axis.push(this.g.axis(x + gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
-    }
-
-    chart.push(lines, shades, symbols, axis, columns, dots);
-    chart.lines = lines;
-    chart.shades = shades;
-    chart.symbols = symbols;
-    chart.axis = axis;
-    chart.hoverColumn = function (fin, fout) {
-        !columns && createColumns();
-        columns.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.clickColumn = function (f) {
-        !columns && createColumns();
-        columns.click(f);
-        return this;
-    };
-    chart.hrefColumn = function (cols) {
-        var hrefs = that.raphael.is(arguments[0], "array") ? arguments[0] : arguments;
-        if (!(arguments.length - 1) && typeof cols == "object") {
-            for (var x in cols) {
-                for (var i = 0, ii = columns.length; i < ii; i++) if (columns[i].axis == x) {
-                    columns[i].attr("href", cols[x]);
-                }
-            }
-        }
-        !columns && createColumns();
-        for (i = 0, ii = hrefs.length; i < ii; i++) {
-            columns[i] && columns[i].attr("href", hrefs[i]);
-        }
-        return this;
-    };
-    chart.hover = function (fin, fout) {
-        !dots && createDots();
-        dots.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.click = function (f) {
-        !dots && createDots();
-        dots.click(f);
-        return this;
-    };
-    chart.each = function (f) {
-        createDots(f);
-        return this;
-    };
-    chart.eachColumn = function (f) {
-        createColumns(f);
-        return this;
-    };
-    return chart;
-};
-/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.piechart = function (cx, cy, r, values, opts) {
-    opts = opts || {};
-    var paper = this,
-        sectors = [],
-        covers = this.set(),
-        chart = this.set(),
-        series = this.set(),
-        order = [],
-        len = values.length,
-        angle = 0,
-        total = 0,
-        others = 0,
-        cut = 9,
-        defcut = true;
-
-    var sum = 0;
-    for (var i = 0; i < len; i++)
-        sum += values[i];
-    var single = false;
-    var single_index = -1;
-    for (var i = 0; i < len; i++)
-        if (sum == values[i]) {
-            single = true;
-            single_index = i;
-            break;
-        }
-    if (len == 1 || single == true) {
-        for(var i = 0; i < len; i++) {
-            var radius = 0.1;
-            if (i == single_index) {
-                radius = r;
-            }
-            series.push(this.circle(cx, cy, radius).attr({fill: opts.colors && opts.colors[i] || this.g.colors[i], stroke: opts.stroke || "#fff", "stroke-width": opts.strokewidth == null ? 1 : opts.strokewidth}));
-            covers.push(this.circle(cx, cy, radius).attr({href: opts.href ? opts.href[i] : null}).attr(this.g.shim));
-            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
-            series[i].middle = {x: cx, y: cy};
-            series[i].mangle = 180;
-        }
-        total = values[single_index];
-    } else {
-        function sector(cx, cy, r, startAngle, endAngle, fill) {
-            var rad = Math.PI / 180,
-                x1 = cx + r * Math.cos(-startAngle * rad),
-                x2 = cx + r * Math.cos(-endAngle * rad),
-                xm = cx + r / 2 * Math.cos(-(startAngle + (endAngle - startAngle) / 2) * rad),
-                y1 = cy + r * Math.sin(-startAngle * rad),
-                y2 = cy + r * Math.sin(-endAngle * rad),
-                ym = cy + r / 2 * Math.sin(-(startAngle + (endAngle - startAngle) / 2) * rad),
-                res = ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(Math.abs(endAngle - startAngle) > 180), 1, x2, y2, "z"];
-            res.middle = {x: xm, y: ym};
-            return res;
-        }
-        for (var i = 0; i < len; i++) {
-            total += values[i];
-            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
-        }
-        values.sort(function (a, b) {
-            return b.value - a.value;
-        });
-        for (i = 0; i < len; i++) {
-            if (defcut && values[i] * 360 / total <= 1.5) {
-                cut = i;
-                defcut = false;
-            }
-            if (i > cut) {
-                defcut = false;
-                values[cut].value += values[i];
-                values[cut].others = true;
-                others = values[cut].value;
-            }
-        }
-        len = Math.min(cut + 1, values.length);
-        others && values.splice(len) && (values[cut].others = true);
-        for (i = 0; i < len; i++) {
-            var valueOrder = values[i].order;
-            var mangle = angle - 360 * values[i] / total / 2;
-            if (!i) {
-                angle = 90 - mangle;
-                mangle = angle - 360 * values[i] / total / 2;
-            }
-            if (opts.init) {
-                var ipath = sector(cx, cy, 1, angle, angle - 360 * values[i] / total).join(",");
-            }
-            var path = sector(cx, cy, r, angle, angle -= 360 * values[i] / total);
-            var p = this.path(opts.init ? ipath : path).attr({fill: opts.colors && opts.colors[valueOrder] || this.g.colors[valueOrder] || "#666", stroke: opts.stroke || "#fff", "stroke-width": (opts.strokewidth == null ? 1 : opts.strokewidth), "stroke-linejoin": "round"});
-            p.value = values[i];
-            p.middle = path.middle;
-            p.mangle = mangle;
-            sectors.push(p);
-            series.push(p);
-            opts.init && p.animate({path: path.join(",")}, (+opts.init - 1) || 1000, ">");
-        }
-        for (i = 0; i < len; i++) {
-            p = paper.path(sectors[i].attr("path")).attr(this.g.shim);
-            var valueOrder = values[i].order;
-            opts.href && opts.href[valueOrder] && p.attr({href: opts.href[valueOrder]});
-            //p.attr = function () {}; // this breaks translate!
-            covers.push(p);
-        }
-    }
-
-    chart.hover = function (fin, fout) {
-        fout = fout || function () {};
-        var that = this;
-        for (var i = 0; i < len; i++) {
-            (function (sector, cover, j) {
-                var o = {
-                    sector: sector,
-                    cover: cover,
-                    cx: cx,
-                    cy: cy,
-                    mx: sector.middle.x,
-                    my: sector.middle.y,
-                    mangle: sector.mangle,
-                    r: r,
-                    value: values[j],
-                    total: total,
-                    label: that.labels && that.labels[j]
-                };
-                cover.mouseover(function () {
-                    fin.call(o);
-                }).mouseout(function () {
-                    fout.call(o);
-                });
-            })(series[i], covers[i], i);
-        }
-        return this;
-    };
-    // x: where label could be put
-    // y: where label could be put
-    // value: value to show
-    // total: total number to count %
-    chart.each = function (f) {
-        var that = this;
-        for (var i = 0; i < len; i++) {
-            (function (sector, cover, j) {
-                var o = {
-                    sector: sector,
-                    cover: cover,
-                    cx: cx,
-                    cy: cy,
-                    x: sector.middle.x,
-                    y: sector.middle.y,
-                    mangle: sector.mangle,
-                    r: r,
-                    value: values[j],
-                    total: total,
-                    label: that.labels && that.labels[j]
-                };
-                f.call(o);
-            })(series[i], covers[i], i);
-        }
-        return this;
-    };
-    chart.click = function (f) {
-        var that = this;
-        for (var i = 0; i < len; i++) {
-            (function (sector, cover, j) {
-                var o = {
-                    sector: sector,
-                    cover: cover,
-                    cx: cx,
-                    cy: cy,
-                    mx: sector.middle.x,
-                    my: sector.middle.y,
-                    mangle: sector.mangle,
-                    r: r,
-                    value: values[j],
-                    total: total,
-                    label: that.labels && that.labels[j]
-                };
-                cover.click(function () { f.call(o); });
-            })(series[i], covers[i], i);
-        }
-        return this;
-    };
-    chart.inject = function (element) {
-        element.insertBefore(covers[0]);
-    };
-    var legend = function (labels, otherslabel, mark, dir) {
-        var x = cx + r + r / 5,
-            y = cy,
-            h = y + 10;
-        labels = labels || [];
-        dir = (dir && dir.toLowerCase && dir.toLowerCase()) || "east";
-        mark = paper.g.markers[mark && mark.toLowerCase()] || "disc";
-        chart.labels = paper.set();
-        for (var i = 0; i < len; i++) {
-            var clr = series[i].attr("fill"),
-                j = values[i].order,
-                txt;
-            values[i].others && (labels[j] = otherslabel || "Others");
-            labels[j] = paper.g.labelise(labels[j], values[i], total);
-            chart.labels.push(paper.set());
-            chart.labels[i].push(paper.g[mark](x + 5, h, 5).attr({fill: clr, stroke: "none"}));
-            chart.labels[i].push(txt = paper.text(x + 20, h, labels[j] || values[j]).attr(paper.g.txtattr).attr({fill: opts.legendcolor || "#000", "text-anchor": "start"}));
-            covers[i].label = chart.labels[i];
-            h += txt.getBBox().height * 1.2;
-        }
-        var bb = chart.labels.getBBox(),
-            tr = {
-                east: [0, -bb.height / 2],
-                west: [-bb.width - 2 * r - 20, -bb.height / 2],
-                north: [-r - bb.width / 2, -r - bb.height - 10],
-                south: [-r - bb.width / 2, r + 10]
-            }[dir];
-        chart.labels.translate.apply(chart.labels, tr);
-        chart.push(chart.labels);
-    };
-    if (opts.legend) {
-        legend(opts.legend, opts.legendothers, opts.legendmark, opts.legendpos);
-    }
-    chart.push(series, covers);
-    chart.series = series;
-    chart.covers = covers;
-    
-    var w = paper.width,
-        h = paper.height,
-        bb = chart.getBBox(),
-        tr = [(w - bb.width)/2 - bb.x, (h - bb.height)/2 - bb.y];
-    cx += tr[0];
-    cy += tr[1];
-    chart.translate.apply(chart, tr);
-    return chart;
-};
-
-/*!
- * date-range-parser.js
- * Contributed to the Apache Software Foundation by:
- *    Ben Birch - Aconex
- * fork me at https://github.com/mobz/date-range-parser
-
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-
-*/
-
-(function() {
-
-	var drp = window.dateRangeParser = {};
-
-	drp.defaultRange = 1000 * 60 * 60 * 24;
-
-	drp.now = null; // set a different value for now than the time at function invocation
-
-	drp.parse = function(v) {
-		try {
-			var r = drp._parse(v);
-			r.end && r.end--; // remove 1 millisecond from the final end range
-		} catch(e) {
-			r = null;
-		}
-		return r;
-	};
-
-	drp.print = function(t, p) {
-		var format = ["", "-", "-", " ", ":", ":", "."];
-		var da = makeArray(t);
-		var str = "";
-		for(var i = 0; i <= p; i++) {
-			str += format[i] + (da[i] < 10 ? "0" : "") + da[i];
-		}
-		return str;
-	};
-
-	(function() {
-		drp._relTokens = {};
-
-		var values = {
-			"yr"  : 365*24*60*60*1000,
-			"mon" : 31*24*60*60*1000,
-			"day" : 24*60*60*1000,
-			"hr"  : 60*60*1000,
-			"min" : 60*1000,
-			"sec" : 1000
-		};
-
-		var alias_lu = {
-			"yr" : "y,yr,yrs,year,years",
-			"mon" : "mo,mon,mos,mons,month,months",
-			"day" : "d,dy,dys,day,days",
-			"hr" : "h,hr,hrs,hour,hours",
-			"min" : "m,min,mins,minute,minutes",
-			"sec" : "s,sec,secs,second,seconds"
-		};
-
-		for(var key in alias_lu) {
-			if(alias_lu.hasOwnProperty(key)) {
-				var aliases = alias_lu[key].split(",");
-				for(var i = 0; i < aliases.length; i++) {
-					drp._relTokens[aliases[i]] = values[key];
-				}
-			}
-		}
-	})();
-
-	function makeArray(d) {
-		var da = new Date(d);
-		return [ da.getUTCFullYear(), da.getUTCMonth()+1, da.getUTCDate(), da.getUTCHours(), da.getUTCMinutes(), da.getUTCSeconds(), da.getUTCMilliseconds() ];
-	}
-
-	function fromArray(a) {
-		var d = [].concat(a); d[1]--;
-		return Date.UTC.apply(null, d);
-	}
-
-	drp._parse = function parse(v) {
-		var now = this.now || new Date().getTime();
-
-		function precArray(d, p, offset) {
-			var tn = makeArray(d);
-			tn[p] += offset || 0;
-			for(var i = p+1; i < 7; i++) {
-				tn[i] = i < 3 ? 1 : 0;
-			}
-			return tn;
-		}
-		function makePrecRange(dt, p, r) {
-			var ret = { };
-			ret.start = fromArray(dt);
-			dt[p] += r || 1;
-			ret.end = fromArray(dt);
-			return ret;
-		}
-		function procTerm(term) {
-			var m = term.replace(/\s/g, "").toLowerCase().match(/^([a-z ]+)$|^([ 0-9:-]+)$|^(\d+[a-z]+)$/);
-			if(m[1]) {	// matches ([a-z ]+)
-				function dra(p, o, r) {
-					var dt = precArray(now, p, o);
-					if(r) {
-						dt[2] -= new Date(fromArray(dt)).getUTCDay();
-					}
-					return makePrecRange(dt, p, r);
-				}
-				switch( m[1]) {
-					case "now" : return { start: now, end: now, now: now };
-					case "today" : return dra( 2, 0 );
-					case "thisweek" : return dra( 2, 0, 7 );
-					case "thismonth" : return dra( 1, 0 );
-					case "thisyear" : return dra( 0, 0 );
-					case "yesterday" : return dra( 2, -1 );
-					case "lastweek" : return dra( 2, -7, 7 );
-					case "lastmonth" : return dra( 1, -1 );
-					case "lastyear" : return dra( 0, -1 );
-					case "tomorrow" : return dra( 2, 1 );
-					case "nextweek" : return dra( 2, 7, 7 );
-					case "nextmonth" : return dra( 1, 1 );
-					case "nextyear" : return dra(0, 1 );
-				}
-				throw "unknown token " +  m[1];
-			} else if(m[2]) { // matches ([ 0-9:-]+)
-				dn = makeArray(now);
-				var dt = m[2].match(/^(?:(\d{4})(?:\-(\d\d))?(?:\-(\d\d))?)? ?(?:(\d{1,2})(?:\:(\d\d)(?:\:(\d\d))?)?)?$/);
-				dt.shift();
-				for(var p = 0, z = false, i = 0; i < 7; i++) {
-					if(dt[i]) {
-						dn[i] = parseInt(dt[i], 10);
-						p = i;
-						z = true;
-					} else {
-						if(z)
-							dn[i] = i < 3 ? 1 : 0;
-					}
-				}
-				return makePrecRange(dn, p);
-			} else if(m[3]) { // matches (\d+[a-z]{1,4})
-				var dr = m[3].match(/(\d+)\s*([a-z]+)/i);
-				var n = parseInt(dr[1], 10);
-				return { rel: n * drp._relTokens[dr[2]] };
-			}
-			throw "unknown term " + term;
-		}
-
-		if(!v) {
-			return { start: null, end: null };
-		}
-		var terms = v.split(/\s*([^<>]*[^<>-])?\s*(->|<>|<)?\s*([^<>]+)?\s*/);
-
-		var term1 = terms[1] ? procTerm(terms[1]) : null;
-		var op = terms[2] || "";
-		var term2 = terms[3] ? procTerm(terms[3]) : null;
-
-		if(op === "<" || op === "->" ) {
-			if(term1 && !term2) {
-				return { start: term1.start, end: null };
-			} else if(!term1 && term2) {
-				return { start: null, end: term2.end };
-			} else {
-				if(term2.rel) {
-					return { start: term1.start, end: term1.end + term2.rel };
-				} else if(term1.rel) {
-					return { start: term2.start - term1.rel, end: term2.end };
-				} else {
-					return { start: term1.start, end: term2.end };
-				}
-			}
-		} else if(op === "<>") {
-			if(!term2) {
-				return { start: term1.start - drp.defaultRange, end: term1.end + drp.defaultRange }
-			} else {
-				if(! ("rel" in term2)) throw "second term did not hav a range";
-				return { start: term1.start - term2.rel, end: term1.end + term2.rel };
-			}
-		} else {
-			if(term1.rel) {
-				return { start: now - term1.rel, end: now + term1.rel };
-			} else if(term1.now) {
-				return { start: term1.now - drp.defaultRange, end: term1.now + drp.defaultRange };
-			} else {
-				return { start: term1.start, end: term1.end };
-			}
-		}
-		throw "could not process value " + v;
-	};
-})();
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/elasticsearch-head.sublime-project b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/elasticsearch-head.sublime-project
deleted file mode 100644
index 16bb2d8..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/elasticsearch-head.sublime-project
+++ /dev/null
@@ -1,9 +0,0 @@
-{
-	"folders":
-	[
-		{
-			"path": ".",
-			"folder_exclude_patterns": [ "node_modules", "_site" ]
-		}
-	]
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/grunt_fileSets.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/grunt_fileSets.js
deleted file mode 100644
index 2ac1ae0..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/grunt_fileSets.js
+++ /dev/null
@@ -1,102 +0,0 @@
-exports.vendorJs = [
-	'src/vendor/jquery/jquery.js',
-	'src/vendor/joey/joey.js',
-	'src/vendor/nohtml/jquery-nohtml.js',
-	'src/vendor/graphael/g.raphael.standalone.js',
-	'src/vendor/dateRangeParser/date-range-parser.js'
-];
-
-exports.vendorCss = [
-	'src/vendor/font-awesome/css/font-awesome.css'
-];
-
-exports.srcJs = [
-	'src/app/base/boot.js',
-
-	'src/app/ux/class.js',
-	'src/app/ux/templates/templates.js',
-	'src/app/ux/observable.js',
-	'src/app/ux/singleton.js',
-	'src/app/ux/dragdrop.js',
-	'src/app/ux/fieldCollection.js',
-
-	'src/app/data/model/model.js',
-	'src/app/data/dataSourceInterface.js',
-	'src/app/data/resultDataSourceInterface.js',
-	'src/app/data/metaData.js',
-	'src/app/data/metaDataFactory.js',
-	'src/app/data/query.js',
-	'src/app/data/queryDataSourceInterface.js',
-	'src/app/data/boolQuery.js',
-
-	'src/app/services/preferences/preferences.js',
-	'src/app/services/cluster/cluster.js',
-	'src/app/services/clusterState/clusterState.js',
-
-	'src/app/ui/abstractWidget/abstractWidget.js',
-	'src/app/ui/abstractField/abstractField.js',
-	'src/app/ui/textField/textField.js',
-	'src/app/ui/checkField/checkField.js',
-	'src/app/ui/button/button.js',
-	'src/app/ui/menuButton/menuButton.js',
-	'src/app/ui/splitButton/splitButton.js',
-	'src/app/ui/refreshButton/refreshButton.js',
-	'src/app/ui/toolbar/toolbar.js',
-	'src/app/ui/abstractPanel/abstractPanel.js',
-	'src/app/ui/draggablePanel/draggablePanel.js',
-	'src/app/ui/infoPanel/infoPanel.js',
-	'src/app/ui/dialogPanel/dialogPanel.js',
-	'src/app/ui/menuPanel/menuPanel.js',
-	'src/app/ui/selectMenuPanel/selectMenuPanel.js',
-	'src/app/ui/table/table.js',
-	'src/app/ui/csvTable/csvTable.js',
-	'src/app/ui/jsonPretty/jsonPretty.js',
-	'src/app/ui/panelForm/panelForm.js',
-	'src/app/ui/helpPanel/helpPanel.js',
-	'src/app/ui/jsonPanel/jsonPanel.js',
-	'src/app/ui/sidebarSection/sidebarSection.js',
-	'src/app/ui/resultTable/resultTable.js',
-	'src/app/ui/queryFilter/queryFilter.js',
-	'src/app/ui/page/page.js',
-	'src/app/ui/browser/browser.js',
-	'src/app/ui/anyRequest/anyRequest.js',
-	'src/app/ui/nodesView/nodesView.js',
-	'src/app/ui/clusterOverview/clusterOverview.js',
-	'src/app/ui/dateHistogram/dateHistogram.js',
-	'src/app/ui/clusterConnect/clusterConnect.js',
-	'src/app/ui/structuredQuery/structuredQuery.js',
-	'src/app/ui/filterBrowser/filterBrowser.js',
-	'src/app/ui/indexSelector/indexSelector.js',
-	'src/app/ui/header/header.js',
-	'src/app/ui/indexOverview/indexOverview.js',
-
-	'src/app/app.js'
-];
-
-exports.srcCss = [
-	'src/app/ux/table.css',
-	'src/app/ui/abstractField/abstractField.css',
-	'src/app/ui/button/button.css',
-	'src/app/ui/menuButton/menuButton.css',
-	'src/app/ui/splitButton/splitButton.css',
-	'src/app/ui/toolbar/toolbar.css',
-	'src/app/ui/abstractPanel/abstractPanel.css',
-	'src/app/ui/infoPanel/infoPanel.css',
-	'src/app/ui/menuPanel/menuPanel.css',
-	'src/app/ui/selectMenuPanel/selectMenuPanel.css',
-	'src/app/ui/table/table.css',
-	'src/app/ui/jsonPretty/jsonPretty.css',
-	'src/app/ui/jsonPanel/jsonPanel.css',
-	'src/app/ui/panelForm/panelForm.css',
-	'src/app/ui/sidebarSection/sidebarSection.css',
-	'src/app/ui/queryFilter/queryFilter.css',
-	'src/app/ui/browser/browser.css',
-	'src/app/ui/anyRequest/anyRequest.css',
-	'src/app/ui/nodesView/nodesView.css',
-	'src/app/ui/clusterOverview/clusterOverview.css',
-	'src/app/ui/clusterConnect/clusterConnect.css',
-	'src/app/ui/structuredQuery/structuredQuery.css',
-	'src/app/ui/filterBrowser/filterBrowser.css',
-	'src/app/ui/header/header.css',
-	'src/app/app.css'
-];
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/index.html b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/index.html
deleted file mode 100644
index 8b5c3ee..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/index.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-	<head>
-		<meta charset="UTF-8">
-		<title>elasticsearch-head</title>
-		<link rel="stylesheet" href="_site/base/reset.css">
-		<link rel="stylesheet" href="_site/vendor.css">
-		<link rel="stylesheet" href="_site/app.css">
-		<script src="_site/i18n.js" data-baseDir="_site/lang" data-langs="en,fr,pt,zh,tr"></script>
-		<script src="_site/vendor.js"></script>
-		<script src="_site/app.js"></script>
-		<script>
-			window.onload = function() {
-				if(location.href.contains("/_plugin/")) {
-					var base_uri = location.href.replace(/_plugin\/.*/, '');
-				}
-				var args = location.search.substring(1).split("&").reduce(function(r, p) {
-					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
-				}, {});
-				new app.App("body", {
-					id: "es",
-					base_uri: args["base_uri"] || base_uri,
-					auth_user : args["auth_user"] || "",
-					auth_password : args["auth_password"],
-					dashboard: args["dashboard"]
-				});
-			};
-		</script>
-		<link rel="icon" href="base/favicon.png" type="image/png">
-	</head>
-	<body></body>
-</html>
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/package.json b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/package.json
deleted file mode 100644
index 4aefb7a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/package.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
-  "name": "elasticsearch-head",
-  "version": "0.0.0",
-  "description": "Front end for an elasticsearch cluster",
-  "main": "_site/index.html",
-  "directories": {
-    "test": "test"
-  },
-  "scripts": {
-    "test": "grunt jasmine"
-  },
-  "repository": {
-    "type": "git",
-    "url": "https://github.com/mobz/elasticsearch-head.git"
-  },
-  "author": "",
-  "license": "Apache2",
-  "gitHead": "0c2ac0b5723b493e4454baa7398f386ecb829412",
-  "readmeFilename": "README.textile",
-  "devDependencies": {
-    "grunt": "0.4.5",
-    "grunt-contrib-concat": "0.4.0",
-    "grunt-contrib-watch": "0.5.1",
-    "grunt-contrib-connect": "0.3.0",
-    "grunt-contrib-copy": "0.5.0",
-    "grunt-contrib-clean": "0.5.0",
-    "grunt-contrib-jasmine": "0.6.4",
-    "karma": "0.12.16",
-    "grunt-karma": "0.8.3"
-  }
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/plugin-descriptor.properties b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/plugin-descriptor.properties
deleted file mode 100644
index 37a9064..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/plugin-descriptor.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-description=head - A web front end for an elastic search cluster
-version=master
-site=true
-name=head
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.css
deleted file mode 100644
index 08e2dcf..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.css
+++ /dev/null
@@ -1,39 +0,0 @@
-.uiApp-header {
-	background: #eee;
-	position: fixed;
-	width: 100%;
-	z-index: 9;
-}
-
-.uiApp-header H1 {
-	margin: -2px 0 -4px 0;
-	float: left;
-	padding-right: 25px;
-}
-
-.uiApp-headerMenu {
-	border-bottom: 1px solid #bbb;
-	padding: 0px 3px;
-	height: 22px;
-}
-
-.uiApp-headerMenu .active {
-	background: white;
-	border-bottom-color: white;
-}
-
-.uiApp-headerMenuItem {
-	border: 1px solid #bbb;
-	padding: 4px 8px 1px ;
-	margin: 2px 1px 0;
-	height: 14px;
-	cursor: pointer;
-}
-
-.uiApp-body {
-	padding: 51px 0px 0px 0px;
-}
-
-.uiApp-headerNewMenuItem {
-	color: blue;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.js
deleted file mode 100644
index 036e97f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/app.js
+++ /dev/null
@@ -1,132 +0,0 @@
-(function( app, i18n ) {
-
-	var ui = app.ns("ui");
-	var services = app.ns("services");
-
-	app.App = ui.AbstractWidget.extend({
-		defaults: {
-			base_uri: null
-		},
-		init: function(parent) {
-			this._super();
-			this.prefs = services.Preferences.instance();
-			this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
-			if( this.base_uri.charAt( this.base_uri.length - 1 ) !== "/" ) {
-				// XHR request fails if the URL is not ending with a "/"
-				this.base_uri += "/";
-			}
-			if( this.config.auth_user ) {
-				var credentials = window.btoa( this.config.auth_user + ":" + this.config.auth_password );
-				$.ajaxSetup({
-					headers: {
-						"Authorization": "Basic " + credentials
-					}
-				});
-			}
-			this.cluster = new services.Cluster({ base_uri: this.base_uri });
-			this._clusterState = new services.ClusterState({
-				cluster: this.cluster
-			});
-
-			this._header = new ui.Header({ cluster: this.cluster, clusterState: this._clusterState });
-			this.$body = $.joey( this._body_template() );
-			this.el = $.joey(this._main_template());
-			this.attach( parent );
-			this.instances = {};
-			this.el.find(".uiApp-headerMenuItem:first").click();
-			if( this.config.dashboard ) {
-				if( this.config.dashboard === "cluster" ) {
-					var page = this.instances["ClusterOverview"];
-					page._refreshButton.set( 5000 );
-				}
-			}
-		},
-
-		navigateTo: function( type, config, ev ) {
-			if( ev.target.classList.contains( "uiApp-headerNewMenuItem" ) ) {
-				this.showNew( type, config, ev );
-			} else {
-				var ref = type + "0";
-				if(! this.instances[ ref ]) {
-					this.createPage( type, 0, config );
-				}
-				this.show( ref, ev );
-			}
-		},
-
-		createPage: function( type, id, config ) {
-			var page = this.instances[ type + id ] = new ui[ type ]( config );
-			this.$body.append( page );
-			return page;
-		},
-
-		show: function( ref, ev ) {
-			$( ev.target ).closest("DIV.uiApp-headerMenuItem").addClass("active").siblings().removeClass("active");
-			for(var p in this.instances) {
-				this.instances[p][ p === ref ? "show" : "hide" ]();
-			}
-		},
-
-		showNew: function( type, config, jEv ) {
-			var ref, page, $tab,
-				type_index = 0;
-
-			while ( ! page ) {
-				ref = type + ( ++type_index );
-				if (! ( ref in this.instances ) ) {
-					page = this.createPage( type, type_index, config );
-				}
-			}
-
-			// Add the tab and its click handlers
-			$tab = $.joey({
-				tag: "DIV",
-				cls: "uiApp-headerMenuItem pull-left",
-				text: i18n.text("Nav." + type ) + " " + type_index,
-				onclick: function( ev ) { this.show( ref, ev ); }.bind(this),
-				children: [
-					{ tag: "A", text: " [-]", onclick: function (ev) {
-						$tab.remove();
-						page.remove();
-						delete this.instances[ ref ];
-					}.bind(this) }
-				]
-			});
-
-			$('.uiApp-headerMenu').append( $tab );
-			$tab.trigger("click");
-		},
-
-		_openAnyRequest_handler: function(ev) { this.navigateTo("AnyRequest", { cluster: this.cluster }, ev ); },
-		_openStructuredQuery_handler: function(ev) { this.navigateTo("StructuredQuery", { cluster: this.cluster }, ev ); },
-		_openBrowser_handler: function(ev) { this.navigateTo("Browser", { cluster: this.cluster }, ev );  },
-		_openClusterOverview_handler: function(ev) { this.navigateTo("ClusterOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
-		_openIndexOverview_handler: function(ev) { this.navigateTo("IndexOverview", { cluster: this.cluster, clusterState: this._clusterState }, ev ); },
-
-		_body_template: function() { return (
-			{ tag: "DIV", id: this.id("body"), cls: "uiApp-body" }
-		); },
-
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiApp", children: [
-				{ tag: "DIV", id: this.id("header"), cls: "uiApp-header", children: [
-					this._header,
-					{ tag: "DIV", cls: "uiApp-headerMenu", children: [
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Overview"), onclick: this._openClusterOverview_handler },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Indices"), onclick: this._openIndexOverview_handler },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.Browser"), onclick: this._openBrowser_handler },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.StructuredQuery"), onclick: this._openStructuredQuery_handler, children: [
-							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
-						] },
-						{ tag: "DIV", cls: "uiApp-headerMenuItem pull-left", text: i18n.text("Nav.AnyRequest"), onclick: this._openAnyRequest_handler, children: [
-							{ tag: "A", cls: "uiApp-headerNewMenuItem ", text: ' [+]' }
-						] },
-					]}
-				]},
-				this.$body
-			]};
-		}
-		
-	});
-
-})( this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/boot.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/boot.js
deleted file mode 100644
index 4dd0c0d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/boot.js
+++ /dev/null
@@ -1,241 +0,0 @@
-(function() {
-
-	var window = this,
-		$ = jQuery;
-
-	function ns( namespace ) {
-		return (namespace || "").split(".").reduce( function( space, name ) {
-			return space[ name ] || ( space[ name ] = { ns: ns } );
-		}, this );
-	}
-
-	var app = ns("app");
-
-	var acx = ns("acx");
-
-	/**
-	 * object iterator, returns an array with one element for each property of the object
-	 * @function
-	 */
-	acx.eachMap = function(obj, fn, thisp) {
-		var ret = [];
-		for(var n in obj) {
-			ret.push(fn.call(thisp, n, obj[n], obj));
-		}
-		return ret;
-	};
-
-	/**
-	 * augments the first argument with the properties of the second and subsequent arguments
-	 * like {@link $.extend} except that existing properties are not overwritten
-	 */
-	acx.augment = function() {
-		var args = Array.prototype.slice.call(arguments),
-			src = (args.length === 1) ? this : args.shift(),
-			augf = function(n, v) {
-				if(! (n in src)) {
-					src[n] = v;
-				}
-			};
-		for(var i = 0; i < args.length; i++) {
-			$.each(args[i], augf);
-		}
-		return src;
-	};
-
-	/**
-	 * tests whether the argument is an array
-	 * @function
-	 */
-	acx.isArray = $.isArray;
-
-	/**
-	 * tests whether the argument is an object
-	 * @function
-	 */
-	acx.isObject = function (value) {
-		return Object.prototype.toString.call(value) == "[object Object]";
-	};
-
-	/**
-	 * tests whether the argument is a function
-	 * @function
-	 */
-	acx.isFunction = $.isFunction;
-
-	/**
-	 * tests whether the argument is a date
-	 * @function
-	 */
-	acx.isDate = function (value) {
-		return Object.prototype.toString.call(value) == "[object Date]";
-	};
-
-	/**
-	 * tests whether the argument is a regexp
-	 * @function
-	 */
-	acx.isRegExp = function (value) {
-		return Object.prototype.toString.call(value) == "[object RegExp]";
-	};
-
-	/**
-	 * tests whether the value is blank or empty
-	 * @function
-	 */
-	acx.isEmpty = function (value, allowBlank) {
-		return value === null || value === undefined || ((acx.isArray(value) && !value.length)) || (!allowBlank ? value === '' : false);
-	};
-
-	/**
-	 * data type for performing chainable geometry calculations<br>
-	 * can be initialised x,y | {x, y} | {left, top}
-	 */
-	acx.vector = function(x, y) {
-		return new acx.vector.prototype.Init(x, y);
-	};
-
-	acx.vector.prototype = {
-		Init : function(x, y) {
-			x = x || 0;
-			this.y = isFinite(x.y) ? x.y : (isFinite(x.top) ? x.top : (isFinite(y) ? y : 0));
-			this.x = isFinite(x.x) ? x.x : (isFinite(x.left) ? x.left : (isFinite(x) ? x : 0));
-		},
-		
-		add : function(i, j) {
-			var d = acx.vector(i, j);
-			return new this.Init(this.x + d.x, this.y + d.y);
-		},
-		
-		sub : function(i, j) {
-			var d = acx.vector(i, j);
-			return new this.Init(this.x - d.x, this.y - d.y);
-		},
-		
-		addX : function(i) {
-			return new this.Init(this.x + i, this.y);
-		},
-		
-		addY : function(j) {
-			return new this.Init(this.x, this.y + j);
-		},
-
-		mod : function(fn) { // runs a function against the x and y values
-			return new this.Init({x: fn.call(this, this.x, "x"), y: fn.call(this, this.y, "y")});
-		},
-		
-		/** returns true if this is within a rectangle formed by the points p and q */
-		within : function(p, q) {
-			return ( this.x >= ((p.x < q.x) ? p.x : q.x) && this.x <= ((p.x > q.x) ? p.x : q.x) &&
-					this.y >= ((p.y < q.y) ? p.y : q.y) && this.y <= ((p.y > q.y) ? p.y : q.y) );
-		},
-		
-		asOffset : function() {
-			return { top: this.y, left: this.x };
-		},
-		
-		asSize : function() {
-			return { height: this.y, width: this.x };
-		}
-	};
-
-	acx.vector.prototype.Init.prototype = acx.vector.prototype;
-
-	/**
-	 * short cut functions for working with vectors and jquery.
-	 * Each function returns the equivalent jquery value in a two dimentional vector
-	 */
-	$.fn.vSize = function() { return acx.vector(this.width(), this.height()); };
-	$.fn.vOuterSize = function(margin) { return acx.vector(this.outerWidth(margin), this.outerHeight(margin)); };
-	$.fn.vScroll = function() { return acx.vector(this.scrollLeft(), this.scrollTop()); };
-	$.fn.vOffset = function() { return acx.vector(this.offset()); };
-	$.fn.vPosition = function() { return acx.vector(this.position()); };
-	$.Event.prototype.vMouse = function() { return acx.vector(this.pageX, this.pageY); };
-
-	/**
-	 * object extensions (ecma5 compatible)
-	 */
-	acx.augment(Object, {
-		keys: function(obj) {
-			var ret = [];
-			for(var n in obj) if(Object.prototype.hasOwnProperty.call(obj, n)) ret.push(n);
-			return ret;
-		}
-	});
-
-	/**
-	 * Array prototype extensions
-	 */
-	acx.augment(Array.prototype, {
-		'contains' : function(needle) {
-			return this.indexOf(needle) !== -1;
-		},
-
-		// returns a new array consisting of all the members that are in both arrays
-		'intersection' : function(b) {
-			var ret = [];
-			for(var i = 0; i < this.length; i++) {
-				if(b.contains(this[i])) {
-					ret.push(this[i]);
-				}
-			}
-			return ret;
-		},
-		
-		'remove' : function(value) {
-			var i = this.indexOf(value);
-			if(i !== -1) {
-				this.splice(i, 1);
-			}
-		}
-	});
-
-	/**
-	 * String prototype extensions
-	 */
-	acx.augment(String.prototype, {
-		'contains' : function(needle) {
-			return this.indexOf(needle) !== -1;
-		},
-
-		'equalsIgnoreCase' : function(match) {
-			return this.toLowerCase() === match.toLowerCase();
-		},
-
-		'escapeHtml' : function() {
-			return this.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-		},
-
-		'escapeJS' : function() {
-			var meta = {'"':'\\"', '\\':'\\\\', '/':'\\/', '\b':'\\b', '\f':'\\f', '\n':'\\n', '\r':'\\r', '\t':'\\t'},
-				xfrm = function(c) { return meta[c] || "\\u" + c.charCodeAt(0).toString(16).zeroPad(4); };
-			return this.replace(new RegExp('(["\\\\\x00-\x1f\x7f-\uffff])', 'g'), xfrm);
-		},
-
-		'escapeRegExp' : function() {
-			var ret = "", esc = "\\^$*+?.()=|{,}[]-";
-			for ( var i = 0; i < this.length; i++) {
-				ret += (esc.contains(this.charAt(i)) ? "\\" : "") + this.charAt(i);
-			}
-			return ret;
-		},
-		
-		'zeroPad' : function(len) {
-			return ("0000000000" + this).substring(this.length - len + 10);
-		}
-	});
-
-	$.fn.forEach = Array.prototype.forEach;
-
-	// joey / jquery integration
-	$.joey = function( obj ) {
-		return $( window.joey( obj ) );
-	};
-
-	window.joey.plugins.push( function( obj ) {
-		if( obj instanceof jQuery ) {
-			return obj[0];
-		}
-	});
-
-})();
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/favicon.png b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/favicon.png
deleted file mode 100644
index f433ec6..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/favicon.png
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/loading.gif b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/loading.gif
deleted file mode 100644
index f001e23..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/loading.gif
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/reset.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/reset.css
deleted file mode 100644
index 29a5f1b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/base/reset.css
+++ /dev/null
@@ -1,44 +0,0 @@
-BODY {
-	font-family: Verdana, sans-serif;
-	font-size: 73%;
-	padding: 0;
-	margin: 0;
-}
-
-INPUT, SELECT, TEXTAREA {
-	border: 1px solid #cecece;
-	padding: 1px 3px;
-	background: white;
-}
-
-SELECT {
-	padding: 0;
-}
-
-.saf SELECT {
-	margin-top: 0;
-	margin-bottom: 0;
-}
-
-TEXTAREA, CODE {
-	font-family: monospace;
-	font-size: 13px;
-}
-
-BUTTON::-moz-focus-inner {
-	border: none;
-}
-
-.pull-left {
-	float: left;
-}
-
-.pull-right {
-	float: right;
-}
-
-.loading  {
-	background-image: url(loading.gif);
-	background-repeat: no-repeat;
-	text-indent: 20px;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js
deleted file mode 100644
index 782d490..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/boolQuery.js
+++ /dev/null
@@ -1,75 +0,0 @@
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.BoolQuery = ux.Observable.extend({
-		defaults: {
-			size: 50		// size of pages to return
-		},
-		init: function() {
-			this._super();
-			this.refuid = 0;
-			this.refmap = {};
-			this.search = {
-				query: { bool: { must: [], must_not: [], should: [] } },
-				from: 0,
-				size: this.config.size,
-				sort: [],
-				aggs: {}
-			};
-			this.defaultClause = this.addClause();
-		},
-		setSize: function(size) {
-			this.search.size = parseInt( size, 10 );
-		},
-		setPage: function(page) {
-			this.search.from = this.config.size * (page - 1) + 1;
-		},
-		addClause: function(value, field, op, bool) {
-			bool = bool || "should";
-			op = op || "match_all";
-			field = field || "_all";
-			var clause = this._setClause(value, field, op, bool);
-			var uqid = "q-" + this.refuid++;
-			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
-			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
-				this.removeClause(this.defaultClause);
-			}
-			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
-			return uqid; // returns reference to inner query object to allow fast updating
-		},
-		removeClause: function(uqid) {
-			var ref = this.refmap[uqid],
-				bool = this.search.query.bool[ref.bool];
-			var clauseIdx = bool.indexOf(ref.clause);
-			// Check that this clause hasn't already been removed
-			if (clauseIdx >=0) {
-				bool.splice(clauseIdx, 1);
-			}
-		},
-		_setClause: function(value, field, op, bool) {
-			var clause = {}, query = {};
-			if(op === "match_all") {
-			} else if(op === "query_string") {
-				query["default_field"] = field;
-				query["query"] = value;
-			} else if(op === "missing") {
-				op = "constant_score"
-				var missing = {}, filter = {};
-				missing["field"] = field;
-				filter["missing"] = missing
-				query["filter"] = filter;
-			} else {
-				query[field.substring(field.indexOf(".")+1)] = value;
-			}
-			clause[op] = query;
-			this.search.query.bool[bool].push(clause);
-			return clause;
-		},
-		getData: function() {
-			return JSON.stringify(this.search);
-		}
-	});
-
-})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js
deleted file mode 100644
index 001d532..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/dataSourceInterface.js
+++ /dev/null
@@ -1,24 +0,0 @@
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.DataSourceInterface = ux.Observable.extend({
-		/*
-		properties
-			meta = { total: 0 },
-			headers = [ { name: "" } ],
-			data = [ { column: value, column: value } ],
-			sort = { column: "name", dir: "desc" }
-		events
-			data: function( DataSourceInterface )
-		 */
-		_getSummary: function(res) {
-			this.summary = i18n.text("TableResults.Summary", res._shards.successful, res._shards.total, res.hits.total, (res.took / 1000).toFixed(3));
-		},
-		_getMeta: function(res) {
-			this.meta = { total: res.hits.total, shards: res._shards, tool: res.took };
-		}
-	});
-
-})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaData.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaData.js
deleted file mode 100644
index bb420fd..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaData.js
+++ /dev/null
@@ -1,172 +0,0 @@
-(function( app ) {
-
-	/*
-	notes on elasticsearch terminology used in this project
-
-	indices[index] contains one or more
-	types[type] contains one or more
-	documents contain one or more
-	paths[path]
-	each path contains one element of data
-	each path maps to one field
-
-	eg PUT, "/twitter/tweet/1"
-	{
-		user: "mobz",
-		date: "2011-01-01",
-		message: "You know, for browsing elasticsearch",
-		name: {
-			first: "Ben",
-			last: "Birch"
-		}
-	}
-
-	creates
-		1 index: twitter
-				this is the collection of index data
-		1 type: tweet
-				this is the type of document (kind of like a table in sql)
-		1 document: /twitter/tweet/1
-				this is an actual document in the index ( kind of like a row in sql)
-		5 paths: [ ["user"], ["date"], ["message"], ["name","first"], ["name","last"] ]
-				since documents can be heirarchical this maps a path from a document root to a piece of data
-		5 fields: [ "user", "date", "message", "first", "last" ]
-				this is an indexed 'column' of data. fields are not heirarchical
-
-		the relationship between a path and a field is called a mapping. mappings also contain a wealth of information about how es indexes the field
-
-	notes
-	1) a path is stored as an array, the dpath is  <index> . <type> . path.join("."),
-			which can be considered the canonical reference for a mapping
-	2) confusingly, es uses the term index for both the collection of indexed data, and the individually indexed fields
-			so the term index_name is the same as field_name in this sense.
-
-	*/
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	var coretype_map = {
-		"string" : "string",
-		"keyword" : "string",
-		"text" : "string",
-		"byte" : "number",
-		"short" : "number",
-		"long" : "number",
-		"integer" : "number",
-		"float" : "number",
-		"double" : "number",
-		"ip" : "number",
-		"date" : "date",
-		"boolean" : "boolean",
-		"binary" : "binary",
-		"multi_field" : "multi_field"
-	};
-
-	var default_property_map = {
-		"string" : { "store" : "no", "index" : "analysed" },
-		"number" : { "store" : "no", "precision_steps" : 4 },
-		"date" : { "store" : "no", "format" : "dateOptionalTime", "index": "yes", "precision_steps": 4 },
-		"boolean" : { "store" : "no", "index": "yes" },
-		"binary" : { },
-		"multi_field" : { }
-	};
-
-	// parses metatdata from a cluster, into a bunch of useful data structures
-	data.MetaData = ux.Observable.extend({
-		defaults: {
-			state: null // (required) response from a /_cluster/state request
-		},
-		init: function() {
-			this._super();
-			this.refresh(this.config.state);
-		},
-		getIndices: function(alias) {
-			return alias ? this.aliases[alias] : this.indicesList;
-		},
-		// returns an array of strings containing all types that are in all of the indices passed in, or all types
-		getTypes: function(indices) {
-			var indices = indices || [], types = [];
-			this.typesList.forEach(function(type) {
-				for(var i = 0; i < indices.length; i++) {
-					if(! this.indices[indices[i]].types.contains(type))
-						return;
-				}
-				types.push(type);
-			}, this);
-			return types;
-		},
-		refresh: function(state) {
-			// currently metadata expects all like named fields to have the same type, even when from different types and indices
-			var aliases = this.aliases = {};
-			var indices = this.indices = {};
-			var types = this.types = {};
-			var fields = this.fields = {};
-			var paths = this.paths = {};
-
-			function createField( mapping, index, type, path, name ) {
-				var dpath = [ index, type ].concat( path ).join( "." );
-				var field_name = mapping.index_name || path.join( "." );
-				var field = paths[ dpath ] = fields[ field_name ] || $.extend({
-					field_name : field_name,
-					core_type : coretype_map[ mapping.type ],
-					dpaths : []
-				}, default_property_map[ coretype_map[ mapping.type ] ], mapping );
-
-				if (field.type === "multi_field" && typeof field.fields !== "undefined") {
-					for (var subField in field.fields) {
-						field.fields[ subField ] = createField( field.fields[ subField ], index, type, path.concat( subField ), name + "." + subField );
-					}
-				}
-				if (fields.dpaths) {
-					field.dpaths.push(dpath);
-				}
-				return field;
-			}
-			function getFields(properties, type, index, listeners) {
-				(function procPath(prop, path) {
-					for (var n in prop) {
-						if ("properties" in prop[n]) {
-							procPath( prop[ n ].properties, path.concat( n ) );
-						} else {
-							var field = createField(prop[n], index, type, path.concat(n), n);							
-							listeners.forEach( function( listener ) {
-								listener[ field.field_name ] = field;
-							} );
-						}
-					}
-				})(properties, []);
-			}
-			for (var index in state.metadata.indices) {
-				indices[index] = {
-					types : [], fields : {}, paths : {}, parents : {}
-				};
-				indices[index].aliases = state.metadata.indices[index].aliases;
-				indices[index].aliases.forEach(function(alias) {
-					(aliases[alias] || (aliases[alias] = [])).push(index);
-				});
-				var mapping = state.metadata.indices[index].mappings;
-				for (var type in mapping) {
-					indices[index].types.push(type);
-					if ( type in types) {
-						types[type].indices.push(index);
-					} else {
-						types[type] = {
-							indices : [index], fields : {}
-						};
-					}
-					getFields(mapping[type].properties, type, index, [fields, types[type].fields, indices[index].fields]);
-					if ( typeof mapping[type]._parent !== "undefined") {
-						indices[index].parents[type] = mapping[type]._parent.type;
-					}
-				}
-			}
-
-			this.aliasesList = Object.keys(aliases);
-			this.indicesList = Object.keys(indices);
-			this.typesList = Object.keys(types);
-			this.fieldsList = Object.keys(fields);
-		}
-	});
-
-})( this.app );	
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js
deleted file mode 100644
index 694546e..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/metaDataFactory.js
+++ /dev/null
@@ -1,19 +0,0 @@
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.MetaDataFactory = ux.Observable.extend({
-		defaults: {
-			cluster: null // (required) an app.services.Cluster
-		},
-		init: function() {
-			this._super();
-			this.config.cluster.get("_cluster/state", function(data) {
-				this.metaData = new app.data.MetaData({state: data});
-				this.fire("ready", this.metaData,  { originalData: data }); // TODO originalData needed for legacy ui.FilterBrowser
-			}.bind(this));
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/model.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/model.js
deleted file mode 100644
index a35e53b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/model.js
+++ /dev/null
@@ -1,35 +0,0 @@
-(function( $, app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.Model = ux.Observable.extend({
-		defaults: {
-			data: null
-		},
-		init: function() {
-			this.set( this.config.data );
-		},
-		set: function( key, value ) {
-			if( arguments.length === 1 ) {
-				this._data = $.extend( {}, key );
-			} else {
-				key.split(".").reduce(function( ptr, prop, i, props) {
-					if(i === (props.length - 1) ) {
-						ptr[prop] = value;
-					} else {
-						if( !(prop in ptr) ) {
-							ptr[ prop ] = {};
-						}
-						return ptr[prop];
-					}
-				}, this._data );
-			}
-		},
-		get: function( key ) {
-			return key.split(".").reduce( function( ptr, prop ) {
-				return ( ptr && ( prop in ptr ) ) ? ptr[ prop ] : undefined;
-			}, this._data );
-		},
-	});
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js
deleted file mode 100644
index fa9d904..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/model/modelSpec.js
+++ /dev/null
@@ -1,74 +0,0 @@
-describe("app.data.Model", function() {
-
-	var Model = window.app.data.Model;
-
-	it("test setting model does a shallow copy", function() {
-		var test = {};
-		var array = [ 1, 2, 3 ];
-		var m = new Model({
-			data: {
-				"foo": "bar",
-				"test": test,
-				"array": array
-			}
-		});
-		expect( m.get("foo") ).toBe("bar");
-		expect( m.get("array").length ).toBe(  3  );
-		expect( m.get("array")[1] ).toBe( 2 );
-		expect( m.get("array") ).toBe( array );
-		expect( m.get("test") ).toBe( test );
-	});
-
-	it("should replace model with shallow copy when put with no path", function() {
-		var m = new Model({ foo: "bar" });
-		m.set({ bar: "blat" });
-		expect( m.get("foo")).toBe( undefined );
-		expect( m.get("bar")).toBe("blat");
-	});
-
-	it("test getting values from deep in a model", function() {
-		var m = new Model({
-			data: {
-				"foo": {
-					"bar": {
-						"baz": {
-							"quix": "abcdefg"
-						}
-					}
-				}
-			}
-		});
-
-		expect( m.get("foo.bar.baz.quix") ).toBe( "abcdefg" );
-	});
-
-	it("test setting non-existant values creates new values", function() {
-		var m = new Model({
-			data: {
-				"foo": {
-					"bar": "abc"
-				}
-			}
-		});
-		m.set("foo.bar", "123" );
-		m.set("foo.baz", "456" );
-		expect( m.get("foo.bar") ).toBe( "123" );
-		expect( m.get("foo.baz") ).toBe( "456" );
-	});
-
-	it("test setting values deep in a model", function() {
-		var m = new Model({
-			data: {
-				"foo": {
-					"bar": "abc"
-				}
-			}
-		});
-		m.set("foo.bar", "123" );
-		m.set("foo.baz", "456" );
-		m.set("foo.something.else.is.here", "xyz" );
-		expect( m.get("foo.something.else.is").here ).toBe( "xyz" );
-		expect( m.get("foo.something.else.is.here") ).toBe( "xyz" );
-	});
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/query.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/query.js
deleted file mode 100644
index 41890b3..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/query.js
+++ /dev/null
@@ -1,203 +0,0 @@
-(function( app ) {
-
-	var data = app.ns("data");
-	var ux = app.ns("ux");
-
-	data.Query = ux.Observable.extend({
-		defaults: {
-			cluster: null,  // (required) instanceof app.services.Cluster
-			size: 50        // size of pages to return
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.refuid = 0;
-			this.refmap = {};
-			this.indices = [];
-			this.types = [];
-			this.search = {
-				query: { bool: { must: [], must_not: [], should: [] } },
-				from: 0,
-				size: this.config.size,
-				sort: [],
-				aggs: {},
-				version: true
-			};
-			this.defaultClause = this.addClause();
-			this.history = [ this.getState() ];
-		},
-		clone: function() {
-			var q = new data.Query({ cluster: this.cluster });
-			q.restoreState(this.getState());
-			for(var uqid in q.refmap) {
-				q.removeClause(uqid);
-			}
-			return q;
-		},
-		getState: function() {
-			return $.extend(true, {}, { search: this.search, indices: this.indices, types: this.types });
-		},
-		restoreState: function(state) {
-			state = $.extend(true, {}, state || this.history[this.history.length - 1]);
-			this.indices = state.indices;
-			this.types = state.types;
-			this.search = state.search;
-		},
-		getData: function() {
-			return JSON.stringify(this.search);
-		},
-		query: function() {
-			var state = this.getState();
-			this.cluster.post(
-					(this.indices.join(",") || "_all") + "/" + ( this.types.length ? this.types.join(",") + "/" : "") + "_search",
-					this.getData(),
-					function(results) {
-						if(results === null) {
-							alert(i18n.text("Query.FailAndUndo"));
-							this.restoreState();
-							return;
-						}
-						this.history.push(state);
-
-						this.fire("results", this, results);
-					}.bind(this));
-		},
-		loadParents: function(res,metadata){
-			//create data for mget
-			var data = { docs :[] };
-			var indexToTypeToParentIds = {};
-			res.hits.hits.forEach(function(hit) {
-			if (typeof hit.fields != "undefined"){
-				if (typeof hit.fields._parent != "undefined"){
-					var parentType = metadata.indices[hit._index].parents[hit._type];
-					if (typeof indexToTypeToParentIds[hit._index] == "undefined"){
-						indexToTypeToParentIds[hit._index] = new Object();
-					}
-					if (typeof indexToTypeToParentIds[hit._index][hit._type] == "undefined"){
-						indexToTypeToParentIds[hit._index][hit._type] = new Object();
-					}
-					if (typeof indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] == "undefined"){
-						indexToTypeToParentIds[hit._index][hit._type][hit.fields._parent] = null;
-						data.docs.push({ _index:hit._index, _type:parentType, _id:hit.fields._parent});
-					}
-				}
-			}
-		});
-
-		//load parents
-		var state = this.getState();
-			this.cluster.post("_mget",JSON.stringify(data),
-				function(results) {
-					if(results === null) {
-						alert(i18n.text("Query.FailAndUndo"));
-						this.restoreState();
-						return;
-					}
-					this.history.push(state);
-					var indexToTypeToParentIdToHit = new Object();
-					results.docs.forEach(function(doc) {
-						if (typeof indexToTypeToParentIdToHit[doc._index] == "undefined"){
-						indexToTypeToParentIdToHit[doc._index] = new Object();
-					}
-					
-					if (typeof indexToTypeToParentIdToHit[doc._index][doc._type] == "undefined"){
-						indexToTypeToParentIdToHit[doc._index][doc._type] = new Object();
-					}
-					
-					indexToTypeToParentIdToHit[doc._index][doc._type][doc._id] = doc;
-					});
-					
-					res.hits.hits.forEach(function(hit) {
-						if (typeof hit.fields != "undefined"){
-							if (typeof hit.fields._parent != "undefined"){
-								var parentType = metadata.indices[hit._index].parents[hit._type];
-								hit._parent = indexToTypeToParentIdToHit[hit._index][parentType][hit.fields._parent];
-							}
-						}
-					});
-
-					this.fire("resultsWithParents", this, res);
-				}.bind(this));
-		},
-		setPage: function(page) {
-			this.search.from = this.config.size * (page - 1);
-		},
-		setSort: function(index, desc) {
-			var sortd = {}; sortd[index] = { reverse: !!desc };
-			this.search.sort.unshift( sortd );
-			for(var i = 1; i < this.search.sort.length; i++) {
-				if(Object.keys(this.search.sort[i])[0] === index) {
-					this.search.sort.splice(i, 1);
-					break;
-				}
-			}
-		},
-		setIndex: function(index, add) {
-			if(add) {
-				if(! this.indices.contains(index)) this.indices.push(index);
-			} else {
-				this.indices.remove(index);
-			}
-			this.fire("setIndex", this, { index: index, add: !!add });
-		},
-		setType: function(type, add) {
-			if(add) {
-				if(! this.types.contains(type)) this.types.push(type);
-			} else {
-				this.types.remove(type);
-			}
-			this.fire("setType", this, { type: type, add: !!add });
-		},
-		addClause: function(value, field, op, bool) {
-			bool = bool || "should";
-			op = op || "match_all";
-			field = field || "_all";
-			var clause = this._setClause(value, field, op, bool);
-			var uqid = "q-" + this.refuid++;
-			this.refmap[uqid] = { clause: clause, value: value, field: field, op: op, bool: bool };
-			if(this.search.query.bool.must.length + this.search.query.bool.should.length > 1) {
-				this.removeClause(this.defaultClause);
-			}
-			this.fire("queryChanged", this, { uqid: uqid, search: this.search} );
-			return uqid; // returns reference to inner query object to allow fast updating
-		},
-		removeClause: function(uqid) {
-			var ref = this.refmap[uqid],
-				bool = this.search.query.bool[ref.bool];
-			bool.remove(ref.clause);
-			if(this.search.query.bool.must.length + this.search.query.bool.should.length === 0) {
-				this.defaultClause = this.addClause();
-			}
-		},
-		addAggs: function(aggs) {
-			var aggsId = "f-" + this.refuid++;
-			this.search.aggs[aggsId] = aggs;
-			this.refmap[aggsId] = { aggsId: aggsId, aggs: aggs };
-			return aggsId;
-		},
-		removeAggs: function(aggsId) {
-			delete this.search.aggs[aggsId];
-			delete this.refmap[aggsId];
-		},
-		_setClause: function(value, field, op, bool) {
-			var clause = {}, query = {};
-			if(op === "match_all") {
-			} else if(op === "query_string") {
-				query["default_field"] = field;
-				query["query"] = value;
-			} else if(op === "missing") {
-				op = "constant_score"
-				var missing = {}, filter = {};
-				missing["field"] = field;
-				filter["missing"] = missing
-				query["filter"] = filter;
-			} else {
-				query[field] = value;
-			}
-			clause[op] = query;
-			this.search.query.bool[bool].push(clause);
-			return clause;
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js
deleted file mode 100644
index 3e2b45a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/queryDataSourceInterface.js
+++ /dev/null
@@ -1,87 +0,0 @@
-(function( app ) {
-
-	var data = app.ns("data");
-
-	data.QueryDataSourceInterface = data.DataSourceInterface.extend({
-		defaults: {
-			metadata: null, // (required) instanceof app.data.MetaData, the cluster metadata
-			query: null     // (required) instanceof app.data.Query the data source
-		},
-		init: function() {
-			this._super();
-			this.config.query.on("results", this._results_handler.bind(this) );
-			this.config.query.on("resultsWithParents", this._load_parents.bind(this) );
-		},
-		_results_handler: function(query, res) {
-			this._getSummary(res);
-			this._getMeta(res);
-			var sort = query.search.sort[0] || { "_score": { reverse: false }};
-			var sortField = Object.keys(sort)[0];
-			this.sort = { column: sortField, dir: (sort[sortField].reverse ? "asc" : "desc") };
-			this._getData(res, this.config.metadata);
-			this.fire("data", this);
-		},
-		_load_parents: function(query, res) {
-			query.loadParents(res, this.config.metadata);
-		},
-		_getData: function(res, metadata) {
-			var metaColumns = ["_index", "_type", "_id", "_score"];
-			var columns = this.columns = [].concat(metaColumns);
-
-			this.data = res.hits.hits.map(function(hit) {
-				var row = (function(path, spec, row) {
-					for(var prop in spec) {
-						if(acx.isObject(spec[prop])) {
-							arguments.callee(path.concat(prop), spec[prop], row);
-						} else if(acx.isArray(spec[prop])) {
-							if(spec[prop].length) {
-								arguments.callee(path.concat(prop), spec[prop][0], row)
-							}
-						} else {
-							var dpath = path.concat(prop).join(".");
-							if(metadata.paths[dpath]) {
-								var field_name = metadata.paths[dpath].field_name;
-								if(! columns.contains(field_name)) {
-									columns.push(field_name);
-								}
-								row[field_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
-							} else {
-								// TODO: field not in metadata index
-							}
-						}
-					}
-					return row;
-				})([ hit._index, hit._type ], hit._source, {});
-				metaColumns.forEach(function(n) { row[n] = hit[n]; });
-				row._source = hit;
-				if (typeof hit._parent!= "undefined") {
-					(function(prefix, path, spec, row) {
-					for(var prop in spec) {
-						if(acx.isObject(spec[prop])) {
-							arguments.callee(prefix, path.concat(prop), spec[prop], row);
-						} else if(acx.isArray(spec[prop])) {
-							if(spec[prop].length) {
-								arguments.callee(prefix, path.concat(prop), spec[prop][0], row)
-							}
-						} else {
-							var dpath = path.concat(prop).join(".");
-							if(metadata.paths[dpath]) {
-								var field_name = metadata.paths[dpath].field_name;
-								var column_name = prefix+"."+field_name;
-								if(! columns.contains(column_name)) {
-									columns.push(column_name);
-								}
-								row[column_name] = (spec[prop] === null ? "null" : spec[prop] ).toString();
-							} else {
-								// TODO: field not in metadata index
-							}
-						}
-					}
-					})(hit._parent._type,[hit._parent._index, hit._parent._type], hit._parent._source, row);
-				}
-				return row;
-			}, this);
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js
deleted file mode 100644
index b985b04..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/data/resultDataSourceInterface.js
+++ /dev/null
@@ -1,40 +0,0 @@
-(function( app ) {
-
-	var data = app.ns("data");
-
-	data.ResultDataSourceInterface = data.DataSourceInterface.extend({
-		results: function(res) {
-			this._getSummary(res);
-			this._getMeta(res);
-			this._getData(res);
-			this.sort = {};
-			this.fire("data", this);
-		},
-		_getData: function(res) {
-			var columns = this.columns = [];
-			this.data = res.hits.hits.map(function(hit) {
-				var row = (function(path, spec, row) {
-					for(var prop in spec) {
-						if(acx.isObject(spec[prop])) {
-							arguments.callee(path.concat(prop), spec[prop], row);
-						} else if(acx.isArray(spec[prop])) {
-							if(spec[prop].length) {
-								arguments.callee(path.concat(prop), spec[prop][0], row)
-							}
-						} else {
-							var dpath = path.concat(prop).join(".");
-							if(! columns.contains(dpath)) {
-								columns.push(dpath);
-							}
-							row[dpath] = (spec[prop] || "null").toString();
-						}
-					}
-					return row;
-				})([ hit._type ], hit, {});
-				row._source = hit;
-				return row;
-			}, this);
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js
deleted file mode 100644
index 3679dfb..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/en_strings.js
+++ /dev/null
@@ -1,177 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "Loading Aggregations...",
-	"General.Searching": "Searching...",
-	"General.Search": "Search",
-	"General.Help": "Help",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Refresh",
-	"General.ManualRefresh": "Manual Refresh",
-	"General.RefreshQuickly": "Refresh quickly",
-	"General.Refresh5seconds": "Refresh every 5 seconds",
-	"General.Refresh1minute": "Refresh every minute",
-	"AliasForm.AliasName": "Alias Name",
-	"AliasForm.NewAliasForIndex": "New Alias for {0}",
-	"AliasForm.DeleteAliasMessage": "type ''{0}'' to delete {1}. There is no undo",
-	"AnyRequest.DisplayOptions" : "Display Options",
-	"AnyRequest.AsGraph" : "Graph Results",
-	"AnyRequest.AsJson" : "Show Raw JSON",
-	"AnyRequest.AsTable" : "Show Search Results Table",
-	"AnyRequest.History" : "History",
-	"AnyRequest.RepeatRequest" : "Repeat Request",
-	"AnyRequest.RepeatRequestSelect" : "Repeat request every ",
-	"AnyRequest.Transformer" : "Result Transformer",
-	"AnyRequest.Pretty": "Pretty",
-	"AnyRequest.Query" : "Query",
-	"AnyRequest.Request": "Request",
-	"AnyRequest.Requesting": "Requesting...",
-	"AnyRequest.ValidateJSON": "Validate JSON",
-	"Browser.Title": "Browser",
-	"Browser.ResultSourcePanelTitle": "Result Source",
-	"Command.DELETE": "DELETE",
-	"Command.SHUTDOWN": "SHUTDOWN",
-	"Command.DeleteAliasMessage": "Delete Alias?",
-	"ClusterOverView.IndexName": "Index Name",
-	"ClusterOverview.NumShards": "Number of Shards",
-	"ClusterOverview.NumReplicas": "Number of Replicas",
-	"ClusterOverview.NewIndex": "New Index",
-	"IndexActionsMenu.Title": "Actions",
-	"IndexActionsMenu.NewAlias": "New Alias...",
-	"IndexActionsMenu.Refresh": "Refresh",
-	"IndexActionsMenu.Flush": "Flush",
-	"IndexActionsMenu.Optimize": "Optimize...",
-	"IndexActionsMenu.Snapshot": "Gateway Snapshot",
-	"IndexActionsMenu.Analyser": "Test Analyser",
-	"IndexActionsMenu.Open": "Open",
-	"IndexActionsMenu.Close": "Close",
-	"IndexActionsMenu.Delete": "Delete...",
-	"IndexInfoMenu.Title": "Info",
-	"IndexInfoMenu.Status": "Index Status",
-	"IndexInfoMenu.Metadata": "Index Metadata",
-	"IndexCommand.TextToAnalyze": "Text to Analyse",
-	"IndexCommand.ShutdownMessage": "type ''{0}'' to shutdown {1}. Node can NOT be restarted from this interface",
-	"IndexOverview.PageTitle": "Indices Overview",
-	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
-	"IndexSelector.SearchIndexForDocs": "Search {0} for documents where:",
-	"FilterBrowser.OutputType": "Output Results: {0}",
-	"FilterBrowser.OutputSize": "Number of Results: {0}",
-	"Header.ClusterHealth": "cluster health: {0} ({1} of {2})",
-	"Header.ClusterNotConnected": "cluster health: not connected",
-	"Header.Connect": "Connect",
-	"Nav.AnyRequest": "Any Request",
-	"Nav.Browser": "Browser",
-	"Nav.ClusterHealth": "Cluster Health",
-	"Nav.ClusterState": "Cluster State",
-	"Nav.ClusterNodes": "Nodes Info",
-	"Nav.Info": "Info",
-	"Nav.NodeStats": "Nodes Stats",
-	"Nav.Overview": "Overview",
-	"Nav.Indices": "Indices",
-	"Nav.Plugins": "Plugins",
-	"Nav.Status": "Indices Stats",
-	"Nav.Templates": "Templates",
-	"Nav.StructuredQuery": "Structured Query",
-	"NodeActionsMenu.Title": "Actions",
-	"NodeActionsMenu.Shutdown": "Shutdown...",
-	"NodeInfoMenu.Title": "Info",
-	"NodeInfoMenu.ClusterNodeInfo": "Cluster Node Info",
-	"NodeInfoMenu.NodeStats": "Node Stats",
-	"NodeType.Client": "Client Node",
-	"NodeType.Coord": "Coordinator",
-	"NodeType.Master": "Master Node",
-	"NodeType.Tribe": "Tribe Node",
-	"NodeType.Worker": "Worker Node",
-	"NodeType.Unassigned": "Unassigned",
-	"OptimizeForm.OptimizeIndex": "Optimize {0}",
-	"OptimizeForm.MaxSegments": "Maximum # Of Segments",
-	"OptimizeForm.ExpungeDeletes": "Only Expunge Deletes",
-	"OptimizeForm.FlushAfter": "Flush After Optimize",
-	"OptimizeForm.WaitForMerge": "Wait For Merge",
-	"Overview.PageTitle" : "Cluster Overview",
-	"Output.JSON": "JSON",
-	"Output.Table": "Table",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "Show query source",
-	"Preference.SortCluster": "Sort Cluster",
-	"Sort.ByName": "By Name",
-	"Sort.ByAddress": "By Address",
-	"Sort.ByType": "By Type",
-	"Preference.SortIndices": "Sort Indices",
-	"SortIndices.Descending": "Descending",
-	"SortIndices.Ascending": "Ascending",
-	"Preference.ViewAliases": "View Aliases",
-	"ViewAliases.Grouped": "Grouped",
-	"ViewAliases.List": "List",
-	"ViewAliases.None": "None",
-	"Overview.IndexFilter": "Index Filter",
-	"TableResults.Summary": "Searched {0} of {1} shards. {2} hits. {3} seconds",
-	"QueryFilter.AllIndices": "All Indices",
-	"QueryFilter.AnyValue": "any",
-	"QueryFilter-Header-Indices": "Indices",
-	"QueryFilter-Header-Types": "Types",
-	"QueryFilter-Header-Fields": "Fields",
-	"QueryFilter.DateRangeHint.from": "From : {0}",
-	"QueryFilter.DateRangeHint.to": "  To : {0}",
-	"Query.FailAndUndo": "Query Failed. Undoing last changes",
-	"StructuredQuery.ShowRawJson": "Show Raw JSON"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>The Result Transformer can be used to post process the raw json results from a request into a more useful format.</p>\
-		<p>The transformer should contain the body of a javascript function. The return value from the function becomes the new value passed to the json printer</p>\
-		<p>Example:<br>\
-		  <code>return root.hits.hits[0];</code> would traverse a result set to show just the first match<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> would return the total memory used across an entire cluster<br></p>\
-		<p>The following functions are available and can be useful processing arrays and objects<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>When Repeat Request is running, an extra parameter called prev is passed to the transformation function. This allows comparisons, and cumulative graphing</p>\
-		<p>Example:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> would return the load average on the first cluster node over the last minute\
-		This could be fed into the Graph to produce a load graph for the node\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>Raw Json: shows complete results of the query and transformation in raw JSON format </p>\
-		<p>Graph Results: To produce a graph of your results, use the result transformer to produce an array of values</p>\
-		<p>Search Results Table: If your query is a search, you can display the results of the search in a table.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Date fields accept a natural language query to produce a From and To date that form a range that the results are queried over.</p>\
-		<p>The following formats are supported:</p>\
-		<ul>\
-			<li><b>Keywords / Key Phrases</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				searches for dates matching the keyword. <code>last year</code> would search all of last year.</li>\
-			<li><b>Ranges</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (spaces optional, many synonyms for range qualifiers)<br>\
-				Create a search range centered on <code>now</code> extending into the past and future by the amount specified.</li>\
-			<li><b>DateTime and Partial DateTime</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				these formats specify a specific date range. <code>2011</code> would search the whole of 2011, while <code>2011-01-18 12:32:45</code> would only search for results in that 1 second range</li>\
-			<li><b>Time and Time Partials</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				these formats search for a particular time during the current day. <code>12:32</code> would search that minute during today</li>\
-			<li><b>Date Ranges</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				A Date Range is created by specifying two dates in any format (Keyword / DateTime / Time) separated by &lt; or -&gt; (both do the same thing). If either end of the date range is missing, it is the same as having no constraint in that direction.</li>\
-			<li><b>Date Range using Offset</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Searches the specified date including the range in the direction specified.</li>\
-			<li><b>Anchored Ranges</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Similar to above except the range is extend in both directions from the anchor date</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js
deleted file mode 100644
index 2cc9bbb..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/fr_strings.js
+++ /dev/null
@@ -1,164 +0,0 @@
-i18n.setKeys({
-//	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs" : "Chargement des facettes...",
-	"General.Searching": "Recherche en cours...",
-	"General.Search": "Recherche",
-	"General.Help": "Aide",
-//	"General.HelpGlyph": "?",
-//	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Rafraîchir",
-	"General.ManualRefresh": "Rafraîchissement manuel",
-	"General.RefreshQuickly": "Rafraîchissement rapide",
-	"General.Refresh5seconds": "Rafraîchissement toutes les 5 secondes",
-	"General.Refresh1minute": "Rafraîchissement toutes les minutes",
-	"AliasForm.AliasName": "Alias",
-	"AliasForm.NewAliasForIndex": "Nouvel Alias pour {0}",
-	"AliasForm.DeleteAliasMessage": "Entrez ''{0}'' pour effacer {1}. Attention, action irréversible.",
-	"AnyRequest.DisplayOptions" : "Options d'affichage",
-	"AnyRequest.AsGraph" : "En graphe",
-	"AnyRequest.AsJson" : "En JSON brut",
-	"AnyRequest.AsTable" : "En tableau",
-	"AnyRequest.History" : "Historique",
-	"AnyRequest.RepeatRequest" : "Répétition automatique de la requête",
-	"AnyRequest.RepeatRequestSelect" : "Répéter la requête toutes les ",
-	"AnyRequest.Transformer" : "Transformation des résultats",
-//	"AnyRequest.Pretty": "Pretty",
-	"AnyRequest.Query" : "Recherche",
-	"AnyRequest.Request": "Requête",
-	"AnyRequest.Requesting": "Requête en cours...",
-	"AnyRequest.ValidateJSON": "Valider le JSON",
-	"Browser.Title": "Navigateur",
-	"Browser.ResultSourcePanelTitle": "Résultat au format JSON",
-	"Command.DELETE": "SUPPRIMER",
-	"Command.SHUTDOWN": "ETEINDRE",
-	"Command.DeleteAliasMessage": "Supprimer l'Alias?",
-	"ClusterOverView.IndexName": "Index",
-	"ClusterOverview.NumShards": "Nombre de shards",
-	"ClusterOverview.NumReplicas": "Nombre de replica",
-	"ClusterOverview.NewIndex": "Nouvel Index",
-//	"IndexActionsMenu.Title": "Actions",
-	"IndexActionsMenu.NewAlias": "Nouvel Alias...",
-	"IndexActionsMenu.Refresh": "Rafraîchir",
-	"IndexActionsMenu.Flush": "Flusher",
-	"IndexActionsMenu.Optimize": "Optimiser...",
-	"IndexActionsMenu.Snapshot": "Dupliquer l'index (Snapshot)",
-	"IndexActionsMenu.Analyser": "Tester un analyseur",
-	"IndexActionsMenu.Open": "Ouvrir",
-	"IndexActionsMenu.Close": "Fermer",
-	"IndexActionsMenu.Delete": "Effacer...",
-//	"IndexInfoMenu.Title": "Info",
-	"IndexInfoMenu.Status": "Etat de l'Index",
-	"IndexInfoMenu.Metadata": "Métadonnées de l'Index",
-	"IndexCommand.TextToAnalyze": "Texte à analyser",
-	"IndexCommand.ShutdownMessage": "Entrez ''{0}'' pour éteindre {1}. Le noeud NE PEUT PAS être redémarré depuis cette interface.",
-//	"IndexSelector.NameWithDocs": "{0} ({1} docs)",
-	"IndexSelector.SearchIndexForDocs": "Chercher dans {0} les documents correspondant à",
-	"FilterBrowser.OutputType": "Format d'affichage des résultats {0}",
-	"FilterBrowser.OutputSize": "Nombre de Résultats: {0}",
-	"Header.ClusterHealth": "Santé du cluster: {0} ({1} {2})",
-	"Header.ClusterNotConnected": "Santé du cluster: non connecté",
-	"Header.Connect": "Se connecter",
-	"Nav.AnyRequest": "Autres requêtes",
-	"Nav.StructuredQuery": "Requêtes structurées",
-	"Nav.Browser": "Navigateur",
-	"Nav.ClusterHealth": "Santé du cluster",
-	"Nav.ClusterState": "Etat du cluster",
-	"Nav.ClusterNodes": "Noeuds du cluster",
-//	"Nav.Info": "Info",
-	"Nav.NodeStats": "Statistiques sur les noeuds",
-	"Nav.Overview": "Aperçu",
-	"Nav.Indices": "Index",
-	"Nav.Plugins": "Plugins",
-	"Nav.Status": "Etat",
-	"Nav.Templates": "Templates",
-	"Nav.StructuredQuery": "Recherche Structurée",
-//	"NodeActionsMenu.Title": "Actions",
-	"NodeActionsMenu.Shutdown": "Eteindre...",
-//	"NodeInfoMenu.Title": "Info",
-	"NodeInfoMenu.ClusterNodeInfo": "Infos sur le noeud du cluster",
-	"NodeInfoMenu.NodeStats": "Statistiques du noeud",
-	"NodeType.Client": "Noeud Client",
-	"NodeType.Coord": "Coordinateur",
-	"NodeType.Master": "Noeud Master",
-	"NodeType.Tribe": "Noeud Tribe",
-	"NodeType.Worker": "Noeud Worker",
-	"NodeType.Unassigned": "Non assigné",
-	"OptimizeForm.OptimizeIndex": "Optimiser {0}",
-	"OptimizeForm.MaxSegments": "Nombre maximum de segments",
-	"OptimizeForm.ExpungeDeletes": "Seulement purger les suppressions",
-	"OptimizeForm.FlushAfter": "Flusher après l'optimisation",
-	"OptimizeForm.WaitForMerge": "Attendre la fin de la fusion",
-	"Overview.PageTitle" : "Aperçu du cluster",
-//	"Output.JSON": "JSON",
-	"Output.Table": "Tableau",
-	"Output.ShowSource": "Voir la requête source",
-    "TableResults.Summary": "Recherche sur {0} des {1} shards. {2} résultats. {3} secondes",
-	"QueryFilter.AllIndices": "Tous les index",
-	"QueryFilter.AnyValue": "Tout",
-	"QueryFilter-Header-Indices": "Index",
-//	"QueryFilter-Header-Types": "Types",
-	"QueryFilter-Header-Fields": "Champs",
-	"QueryFilter.DateRangeHint.from": "De : {0}",
-	"QueryFilter.DateRangeHint.to": "  A : {0}",
-	"Query.FailAndUndo": "Requête en échec. Annulation des dernières modifications.",
-	"StructuredQuery.ShowRawJson": "Voir le JSON brut"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>Le transformateur de résultats peut être utilisé pour modifier a posteriori les résultats JSON bruts dans un format plus utile.</p>\
-		<p>Le transformateur devrait contenir le corps d'une fonction javascript. La valeur de retour de la fonction devient la nouvelle valeur qui sera passée à l'afficheur des documents JSON.</p>\
-		<p>Exemple:<br>\
-		  <code>return root.hits.hits[0];</code> ne renverra que le premier élément de l'ensemble des résultats.<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> retournera la mémoire totale utilisée dans l'ensemble du cluster.<br></p>\
-		<p>Les fonctions suivantes sont disponibles et peuvent vous être utiles pour travailler sur les tableaux et les objets:<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>Lorsque vous activez la répétition automatique de la requête, un paramètre supplémentaire nommé prev est passé à la fonction de transformation. Cela permet les comparaisons et les graphes cumulatifs.</p>\
-		<p>Exemple:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> retournera la charge moyenne du premier noeud du cluster pour la dernière minute écoulée.\
-		Cela peut alimenter ensuite le graphe pour produire un graphe de charge du noeud.\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>En JSON brut: affiche les résultats complets de la recherche éventuellement transformée au format JSON brut.</p>\
-		<p>En graphe: pour fabriquer un graphe de vos résultats, utilsez la transformation de résultats pour générer un tableau de valeurs.</p>\
-		<p>En tableau: si votre requête est une recherche, vous pouvez alors afficher les résultats dans un tableau.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Les champs Date acceptent une requête en langage naturel pour produire un écart de date (from/to) correspondant.</p>\
-		<p>Les formats suivants sont acceptés :</p>\
-		<ul>\
-			<li><b>Mots clés</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				Cherchera pour des dates correspondant au mot clé. <code>last year</code> cherchera sur toute l'année précédente.</li>\
-			<li><b>Ecarts</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (les espaces sont optionnels et il existe beaucoup de synonymes pour qualifier les écarts)<br>\
-				Créé un écart de date basé sur l'heure courante (maintenant) avec plus ou moins l'écart indiqué.</li>\
-			<li><b>Dates et Dates partielles</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				Ces formats indiquent un écart de date spécifique. <code>2011</code> cherchera sur toute l'année 2011, alors que <code>2011-01-18 12:32:45</code> ne cherchera que pour la date précise à la seconde près.</li>\
-			<li><b>Heures et heures partielles</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				Ces formats indiquent un espace de temps pour la date du jour. <code>12:32</code> cherchera les éléments d'aujourd'hui à cette minute précise.</li>\
-			<li><b>Ecart de Date</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				Un écart de date est créé en spécifiant deux dates dans n'importe lequel des formats précédents (Mot clé / Dates / Heures) séparées par &lt; ou -&gt; (les deux produisent le même effet). Si la date de fin n'est pas indiquée, alors il n'y aura aucune contrainte de fin.</li>\
-			<li><b>Ecart de date avec décalage</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Cherche en incluant un décalage de la date dans la direction indiquée.</li>\
-			<li><b>Ecart de date avec bornes</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Similaire à ci-dessus excepté que le décalage est appliqué dans les deux sens à partir de la date indiquée.</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js
deleted file mode 100644
index d4b6abf..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/pt_strings.js
+++ /dev/null
@@ -1,174 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "Carregando Facetas...",
-	"General.Searching": "Buscando...",
-	"General.Search": "Busca",
-	"General.Help": "Ajuda",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Atualizar",
-	"General.ManualRefresh": "Atualização Manual",
-	"General.RefreshQuickly": "Atualização rápida",
-	"General.Refresh5seconds": "Atualização a cada 5 segundos",
-	"General.Refresh1minute": "Atualização a cada minuto",
-	"AliasForm.AliasName": "Apelido",
-	"AliasForm.NewAliasForIndex": "Novo apelido para {0}",
-	"AliasForm.DeleteAliasMessage": "digite ''{0}'' para deletar {1}. Não há como voltar atrás",
-	"AnyRequest.DisplayOptions" : "Mostrar Opções",
-	"AnyRequest.AsGraph" : "Mostrar como gráfico",
-	"AnyRequest.AsJson" : "Mostrar JSON bruto",
-	"AnyRequest.AsTable" : "Mostrar tabela de resultados da consulta",
-	"AnyRequest.History" : "Histórico",
-	"AnyRequest.RepeatRequest" : "Refazer requisição",
-	"AnyRequest.RepeatRequestSelect" : "Repetir requisição a cada ",
-	"AnyRequest.Transformer" : "Transformador de resultado",
-	"AnyRequest.Pretty": "Amigável",
-	"AnyRequest.Query" : "Consulta",
-	"AnyRequest.Request": "Requisição",
-	"AnyRequest.Requesting": "Realizando requisição...",
-	"AnyRequest.ValidateJSON": "Validar JSON",
-	"Browser.Title": "Navegador",
-	"Browser.ResultSourcePanelTitle": "Resultado",
-	"Command.DELETE": "DELETAR",
-	"Command.SHUTDOWN": "DESLIGAR",
-	"Command.DeleteAliasMessage": "Remover apelido?",
-	"ClusterOverView.IndexName": "Nome do índice",
-	"ClusterOverview.NumShards": "Número de Shards",
-	"ClusterOverview.NumReplicas": "Número de Réplicas",
-	"ClusterOverview.NewIndex": "Novo índice",
-	"IndexActionsMenu.Title": "Ações",
-	"IndexActionsMenu.NewAlias": "Novo apelido...",
-	"IndexActionsMenu.Refresh": "Atualizar",
-	"IndexActionsMenu.Flush": "Flush",
-	"IndexActionsMenu.Optimize": "Otimizar...",
-	"IndexActionsMenu.Snapshot": "Snapshot do Gateway",
-	"IndexActionsMenu.Analyser": "Analizador de teste",
-	"IndexActionsMenu.Open": "Abrir",
-	"IndexActionsMenu.Close": "Fechar",
-	"IndexActionsMenu.Delete": "Deletar...",
-	"IndexInfoMenu.Title": "Info",
-	"IndexInfoMenu.Status": "Status do índice",
-	"IndexInfoMenu.Metadata": "Metadados do índice",
-	"IndexCommand.TextToAnalyze": "Texto para analizar",
-	"IndexCommand.ShutdownMessage": "digite ''{0}'' para desligar {1}. Nó NÃO PODE ser reiniciado à partir dessa interface",
-	"IndexOverview.PageTitle": "Visão geral dos índices",
-	"IndexSelector.NameWithDocs": "{0} ({1} documentoss)",
-	"IndexSelector.SearchIndexForDocs": "Busca {0} por documentos onde:",
-	"FilterBrowser.OutputType": "Resultados: {0}",
-	"FilterBrowser.OutputSize": "Número de Resultados: {0}",
-	"Header.ClusterHealth": "saúde do cluster: {0} ({1} {2})",
-	"Header.ClusterNotConnected": "saúde do cluster: não conectado",
-	"Header.Connect": "Conectar",
-	"Nav.AnyRequest": "Qualquer requisição",
-	"Nav.Browser": "Navegador",
-	"Nav.ClusterHealth": "Saúde do Cluster",
-	"Nav.ClusterState": "Estado do Cluster",
-	"Nav.ClusterNodes": "Nós do Cluster",
-	"Nav.Info": "Informações",
-	"Nav.NodeStats": "Estatísticas do nó",
-	"Nav.Overview": "Visão Geral",
-	"Nav.Indices": "Índices",
-	"Nav.Plugins": "Plugins",
-	"Nav.Status": "Status",
-	"Nav.Templates": "Modelos",
-	"Nav.StructuredQuery": "Consulta Estruturada",
-	"NodeActionsMenu.Title": "Ações",
-	"NodeActionsMenu.Shutdown": "Desligar...",
-	"NodeInfoMenu.Title": "Informações",
-	"NodeInfoMenu.ClusterNodeInfo": "Informações do Nó do Cluster",
-	"NodeInfoMenu.NodeStats": "Estatísticas do Nó",
-	"NodeType.Client": "Nó cliente",
-	"NodeType.Coord": "Coordenador",
-	"NodeType.Master": "Nó mestre",
-	"NodeType.Tribe": "Nó tribo",
-	"NodeType.Worker": "Nó trabalhador",
-	"NodeType.Unassigned": "Não atribuido",
-	"OptimizeForm.OptimizeIndex": "Otimizar {0}",
-	"OptimizeForm.MaxSegments": "# Máximo De Segmentos",
-	"OptimizeForm.ExpungeDeletes": "Apenas Expurgar Exclusões",
-	"OptimizeForm.FlushAfter": "Flush após Otimizar",
-	"OptimizeForm.WaitForMerge": "Esperar Por Merge",
-	"Overview.PageTitle": "Visão geral do Cluster",
-	"Output.JSON": "JSON",
-	"Output.Table": "Tabela",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "Mostrar consulta original",
-	"Preference.SortCluster": "Ordenar Cluster",
-	"Sort.ByName": "Por nome",
-	"Sort.ByAddress": "Por endereço",
-	"Sort.ByType": "Por tipo",
-	"Preference.ViewAliases": "Ver Alias",
-	"ViewAliases.Grouped": "Agrupado",
-	"ViewAliases.List": "Lista",
-	"ViewAliases.None": "Nenhum",
-	"Overview.IndexFilter": "Filtar Índice",
-	"TableResults.Summary": "Buscado {0} de {1} shards. {2} resultados. {3} segundos",
-	"QueryFilter.AllIndices": "Todos os Índices",
-	"QueryFilter.AnyValue": "qualquer",
-	"QueryFilter-Header-Indices": "Índices",
-	"QueryFilter-Header-Types": "Tipos",
-	"QueryFilter-Header-Fields": "Campos",
-	"QueryFilter.DateRangeHint.from": "De : {0}",
-	"QueryFilter.DateRangeHint.to": "  A : {0}",
-	"Query.FailAndUndo": "Consulta falhou. Desfazendo últimas alterações",
-	"StructuredQuery.ShowRawJson": "Mostrar JSON bruto"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>O Transformador de Resultados pode ser usado para transformar os resultados de uma consulta de json bruto para um formato mais útil.</p>\
-		<p>O transformador deve possuir o corpo de uma função javascript. O retorno da função se torna o novo valor passado para o json printer</p>\
-		<p>Exemplo:<br>\
-		  <code>return root.hits.hits[0];</code> irá alterar a resposta para mostrar apenas o primeiro resultado<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> irá retornar o total de memória utilizada pelo cluster<br></p>\
-		<p>As seguintes funções estão disponíveis e podem ser úteis no processamento de vetores e objetos<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>Durante a execução da opção Refazer Requisição, um parâmetro extra chamado prev é passado para a função de transformação. Isso permite fazer comparações e marcações cumulativas</p>\
-		<p>Exemplo:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> irá retornar a carga média no primeiro nó do cluster no último minuto\
-		Essa informação pode ser inserida no Gráfico para fazer um gráfico de carga do nó\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>Json Bruto: Exibe o resultado completo da consulta e da transformação no formato de JSON bruto</p>\
-		<p>Gráfico de Resultados: Para gerar um gráfico com seus resultados, utilize o tranformador de resultados para produzir um vetor de valores</p>\
-		<p>Tabela de Resultados da Consulta: Se sua consulta for uma busca, você pode exibir seus resultados no formato de uma tabela.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Campos do tipo Data aceitam consultas em linguagem natural (em inglês) para produzir um <i>From</i> e um <i>To</i> de modo a formar um intervalo dentro do qual os resultados são filtrados.</p>\
-		<p>Os seguintes formatos são suportados:</p>\
-		<ul>\
-			<li><b>Palavras-chave</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				buscam por datas de acordo com a palavra-chave. <code>last year</code> irá buscar tudo do último ano.</li>\
-			<li><b>Intervalos</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (espaços são opcionais, diversos sinônimos para qualificadores de intervalo)<br>\
-				Cria um intervalo de busca a partir de agora (<code>now</code>), extendendo este intervalo no passado e no futuro de acordo com intervalo especificado.</li>\
-			<li><b>Data/Hora (<i>DateTime</i>) e Data/Hora parcial</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				esses formatos especificam um intervalo especifico. <code>2011</code> irá buscar todo o ano de 2011, enquanto <code>2011-01-18 12:32:45</code> irá buscar apenas por resultados dentro deste intervalo de 1 segundo</li>\
-			<li><b>Tempo (<i>Time</i>) e Tempo parcial</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				esses formatos buscam por um horário específico no dia atual. <code>12:32</code> irá buscar este minuto específico do dia</li>\
-			<li><b>Intervalos de Data</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				Um intervalo de data é criado especificando-se duas datas em qualquer formato (Palavras-chave, Data/Hora ou Tempo) separados por &lt; ou -&gt; (ambos fazem a mesma coisa). Se a data de início ou fim do intervalo não for especificada é a mesma coisa que não impor limites na busca nesta direção.</li>\
-			<li><b>Intervalo de Data com Deslocamento</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Busca a data especificada incluindo o intervalo na direção determinada pelo deslocamento</li>\
-			<li><b>Intervalos Bidirecionais</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Idêntico ao exemplo anterior porém o intervalo é extendido em ambas as direções a partir da data especificada</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js
deleted file mode 100644
index f611956..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/tr_strings.js
+++ /dev/null
@@ -1,177 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "Gruplar Yükleniyor...",
-	"General.Searching": "Aranıyor...",
-	"General.Search": "Ara",
-	"General.Help": "Yardım",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "Yenile",
-	"General.ManualRefresh": "Manuel Yenileme",
-	"General.RefreshQuickly": "Hızlı yenile",
-	"General.Refresh5seconds": "5 saniyede bir yenile",
-	"General.Refresh1minute": "Her dakika yenile",
-	"AliasForm.AliasName": "Alternatif İsim",
-	"AliasForm.NewAliasForIndex": "{0} için yeni alternatif isim",
-	"AliasForm.DeleteAliasMessage": "{1} silmek için ''{0}'' . Geriye dönüş yoktur.",
-	"AnyRequest.DisplayOptions" : "Seçenekleri Göster",
-	"AnyRequest.AsGraph" : "Sonuçları Çizdir",
-	"AnyRequest.AsJson" : "JSON formatında göster",
-	"AnyRequest.AsTable" : "Arama sonuçlarını tablo halinde göster",
-	"AnyRequest.History" : "Geçmiş",
-	"AnyRequest.RepeatRequest" : "İsteği Tekrarla",
-	"AnyRequest.RepeatRequestSelect" : "İsteği sürekli tekrarla ",
-	"AnyRequest.Transformer" : "Sonuç Dönüştürücü",
-	"AnyRequest.Pretty": "Düzenli",
-	"AnyRequest.Query" : "Sorgu",
-	"AnyRequest.Request": "Gönder",
-	"AnyRequest.Requesting": "İsteniyor...",
-	"AnyRequest.ValidateJSON": "JSON Doğrula",
-	"Browser.Title": "Browser",
-	"Browser.ResultSourcePanelTitle": "Sonuç Kaynağı",
-	"Command.DELETE": "SİL",
-	"Command.SHUTDOWN": "KAPA",
-	"Command.DeleteAliasMessage": "Alternatif ismi sil?",
-	"ClusterOverView.IndexName": "Indeks İsmi",
-	"ClusterOverview.NumShards": "Sektör Sayısı",
-	"ClusterOverview.NumReplicas": "Yedek Sayısı",
-	"ClusterOverview.NewIndex": "Yeni Indeks",
-	"IndexActionsMenu.Title": "İşlemler",
-	"IndexActionsMenu.NewAlias": "Yeni Alternatif İsim...",
-	"IndexActionsMenu.Refresh": "Yenile",
-	"IndexActionsMenu.Flush": "Boşalt",
-	"IndexActionsMenu.Optimize": "Optimize et...",
-	"IndexActionsMenu.Snapshot": "Gateway Snapshot (Kopya Al)",
-	"IndexActionsMenu.Analyser": "Analizi test et",
-	"IndexActionsMenu.Open": "Aç",
-	"IndexActionsMenu.Close": "Kapa",
-	"IndexActionsMenu.Delete": "Sil...",
-	"IndexInfoMenu.Title": "Bilgi",
-	"IndexInfoMenu.Status": "Indeks Durumu",
-	"IndexInfoMenu.Metadata": "Indeks Metaveri",
-	"IndexCommand.TextToAnalyze": "Analiz edilecek metin",
-	"IndexCommand.ShutdownMessage": "{1} kapatmak için ''{0}'' yazın . Nod bu arayüzden tekrar BAŞLATILAMAZ",
-	"IndexOverview.PageTitle": "Indeksler Genel Bakış",
-	"IndexSelector.NameWithDocs": "{0} ({1} döküman)",
-	"IndexSelector.SearchIndexForDocs": "{0} indeksinde ara:",
-	"FilterBrowser.OutputType": "Sonuç Formatı: {0}",
-	"FilterBrowser.OutputSize": "Sonuç Sayısı: {0}",
-	"Header.ClusterHealth": "Küme Durumu: {0} ({1} de {2})",
-	"Header.ClusterNotConnected": "Küme Durumu: Bağlı Değil",
-	"Header.Connect": "Bağlan",
-	"Nav.AnyRequest": "Özel Sorgu",
-	"Nav.Browser": "Görüntüle",
-	"Nav.ClusterHealth": "Küme Durumu",
-	"Nav.ClusterState": "Küme Statüsü",
-	"Nav.ClusterNodes": "Nod Bilgileri",
-	"Nav.Info": "Bilgi",
-	"Nav.NodeStats": "Nod İstatistikleri",
-	"Nav.Overview": "Genel Bakış",
-	"Nav.Indices": "Indeksler",
-	"Nav.Plugins": "Eklentiler",
-	"Nav.Status": "Indeks İstatistikleri",
-	"Nav.Templates": "Şablonlar",
-	"Nav.StructuredQuery": "Yapılandırılmış Sorgu",
-	"NodeActionsMenu.Title": "İşlemler",
-	"NodeActionsMenu.Shutdown": "Kapat...",
-	"NodeInfoMenu.Title": "Bilgi",
-	"NodeInfoMenu.ClusterNodeInfo": "Küme Nod Bilgileri",
-	"NodeInfoMenu.NodeStats": "Nod İstatistikleri",
-	"NodeType.Client": "Client Nod",
-	"NodeType.Coord": "Coordinator",
-	"NodeType.Master": "Master Nod",
-	"NodeType.Tribe": "Tribe Nod",
-	"NodeType.Worker": "Worker Nod",
-	"NodeType.Unassigned": "Sahipsiz",
-	"OptimizeForm.OptimizeIndex": "{0} Optimize Et",
-	"OptimizeForm.MaxSegments": "Maksimum Segment Sayısı",
-	"OptimizeForm.ExpungeDeletes": "Silme İşlemi Artıklarını Temizle",
-	"OptimizeForm.FlushAfter": "Optimize Ettikten Sonra Boşalt",
-	"OptimizeForm.WaitForMerge": "Birleştirme İçin Bekle",
-	"Overview.PageTitle" : "Kümeler Genelbakış",
-	"Output.JSON": "JSON",
-	"Output.Table": "Tablo",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "Sorgu kaynağını göster",
-	"Preference.SortCluster": "Kümeyi Sırala",
-	"Sort.ByName": "İsme göre",
-	"Sort.ByAddress": "Adrese göre",
-	"Sort.ByType": "Tipe göre",
-	"Preference.SortIndices": "Indeksleri sırala",
-	"SortIndices.Descending": "Azalan",
-	"SortIndices.Ascending": "Artan",
-	"Preference.ViewAliases": "Alternatif isimleri görüntüle",
-	"ViewAliases.Grouped": "Gruplanmış",
-	"ViewAliases.List": "Liste",
-	"ViewAliases.None": "Karışık",
-	"Overview.IndexFilter": "Indeks Filtresi",
-	"TableResults.Summary": "{0} parçanın {1} tanesi arandı. {2} sonuç. {3} saniye",
-	"QueryFilter.AllIndices": "Tüm Indeksler",
-	"QueryFilter.AnyValue": "herhangi",
-	"QueryFilter-Header-Indices": "Indeksler",
-	"QueryFilter-Header-Types": "Tipler",
-	"QueryFilter-Header-Fields": "Alanlar",
-	"QueryFilter.DateRangeHint.from": "{0}'dan",
-	"QueryFilter.DateRangeHint.to": "  {0}'a",
-	"Query.FailAndUndo": "Sorgu Başarısız. Son değişiklikler geri alınıyor.",
-	"StructuredQuery.ShowRawJson": "Formatsız JSON göster"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>Sonuç Dönüştürücü sorgudan dönen JSON sonuçlarını işleyip daha kullanışlı bir formata dönüştürmek için kullanılabilir.</p>\
-		<p>Dönüştürücü içierisinde javascript fonksiyonu tanımlanmalıdır. Bu fonksiyondan dönen yeni sonuç çıktı kısmına yazdırılır.</p>\
-		<p>Örnek:<br>\
-		  <code>return root.hits.hits[0];</code> sonucu dolaşarak ilk eşleşmeyi göster<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code> tüm kümede kullanılan toplam belleği gösterir<br></p>\
-		<p>Aşağıdaki fonksiyonlar dizi ve objelerin işlenmesinde yardımcı olması için kullanılabilir<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>Sorgu tekrarlama çalışırken, prev isimli ekstra bir parametre dönüştürücü fonksiyonuna verilir. Bu sayede karşılaştırmalar ve toplu grafik gösterimleri yapılabilir.</p>\
-		<p>Örnek:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code> önceki dakika boyunca kümede bulunan ilk nod üzerindeki averaj yükü verir.\
-		Bu sonuç nod için yük grafiği yaratılmasında kullanılabilir.\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>Sade Json: Sorgunun tüm sonuçlarını ve (yapıldıysa) dönüştürüldükten sonraki halini sade JSON formatında gösterir </p>\
-		<p>Sonuçları Çizdir: Sonuçları grafiksel olarak görüntülemek için sonuç dörücüyü kullanarak değerleri dizi haline getirin.</p>\
-		<p>Arama Sonuçları Tablosu: Eğer sorgunuz bir arama ise, sonuçları bir tabloda görüntüleyebilirsiniz.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Tarih alanları ana dile yakın kelimeler kullanarak iki tarih aralığında sorgu yapılabilmesini sağlar.</p>\
-		<p>Aşağıdaki tanımlar kullanılabilir:</p>\
-		<ul>\
-			<li><b>Anahtar Kelimeler</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				kelimeleri eşleşen tarihleri verir. Örneğin <code>last year</code> geçen yıl tarihli bütün verileri döndürür.</li>\
-			<li><b>Aralıklar</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (boşluklar isteğe bağlıdır, ayni kelime için farklı yazım şekilleri kullanılabilir)<br>\
-				Şu anki tarihi (<code>now</code>) baz alarak geçmiş veya ileriki bir tarih aralığındaki kayıtları verir.</li>\
-			<li><b>Tarih ve Kısmi Tarihler</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				bu formatlar spesifik bir tarihi tanımlarlar. <code>2011</code> tüm 2011 yılını ararken, <code>2011-01-18 12:32:45</code> şeklinde bir sorgu sadece o saniyedeki sonuçları verir.</li>\
-			<li><b>Zaman ve Kısmi Zamanlar</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				bu formatlar gün içerisinde spesifik bir zamanı tanımlarlar. Örneğin <code>12:32</code> sadece bu saat ve dakikadaki kayıtları verir.</li>\
-			<li><b>Tarih Aralıkları</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				Tarih aralıkları yukarda belirtilen herhangi bir formatı &lt; or -&gt;  ile ayırarak yapılabilir. Eğer aralığın bir tarafı eksikse, sorgu ucu açıkmış gibi davranır.</li>\
-			<li><b>Ofsetli Tarih Aralığı</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				Verilen yöndeki tarih aralığına bakar.</li>\
-			<li><b>Çakılı Aralıklar</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				Yukarıdakiyle ayni fakat belirtilen tarihten her iki yöne de bakılır.</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js
deleted file mode 100644
index 0038de1..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/lang/zh_strings.js
+++ /dev/null
@@ -1,172 +0,0 @@
-i18n.setKeys({
-	"General.Elasticsearch": "Elasticsearch",
-	"General.LoadingAggs": "加载聚合查询...",
-	"General.Searching": "搜索中...",
-	"General.Search": "搜索",
-	"General.Help": "帮助",
-	"General.HelpGlyph": "?",
-	"General.CloseGlyph": "X",
-	"General.RefreshResults": "刷新",
-	"General.ManualRefresh": "手动刷新",
-	"General.RefreshQuickly": "快速刷新",
-	"General.Refresh5seconds": "每5秒刷新",
-	"General.Refresh1minute": "每1分钟刷新",
-	"AliasForm.AliasName": "别名",
-	"AliasForm.NewAliasForIndex": "为 {0} 创建新别名",
-	"AliasForm.DeleteAliasMessage": "输入 ''{0}''  删除 {1}. 此操作无法恢复",
-	"AnyRequest.DisplayOptions" : "显示选项",
-	"AnyRequest.AsGraph" : "图形视图",
-	"AnyRequest.AsJson" : "原始 JSON",
-	"AnyRequest.AsTable" : "表格视图",
-	"AnyRequest.History" : "历史记录",
-	"AnyRequest.RepeatRequest" : "重复请求",
-	"AnyRequest.RepeatRequestSelect" : "重复周期 ",
-	"AnyRequest.Transformer" : "结果转换器",
-	"AnyRequest.Pretty": "易读",
-	"AnyRequest.Query" : "查询",
-	"AnyRequest.Request": "提交请求",
-	"AnyRequest.Requesting": "请求中...",
-	"AnyRequest.ValidateJSON": "验证 JSON",
-	"Browser.Title": "数据浏览",
-	"Browser.ResultSourcePanelTitle": "原始数据",
-	"Command.DELETE": "删除",
-	"Command.SHUTDOWN": "关闭",
-	"Command.DeleteAliasMessage": "删除别名?",
-	"ClusterOverView.IndexName": "索引名称",
-	"ClusterOverview.NumShards": "分片数",
-	"ClusterOverview.NumReplicas": "副本数",
-	"ClusterOverview.NewIndex": "新建索引",
-	"IndexActionsMenu.Title": "动作",
-	"IndexActionsMenu.NewAlias": "新建别名...",
-	"IndexActionsMenu.Refresh": "刷新",
-	"IndexActionsMenu.Flush": "Flush刷新",
-	"IndexActionsMenu.Optimize": "优化...",
-	"IndexActionsMenu.Snapshot": "网关快照",
-	"IndexActionsMenu.Analyser": "测试分析器",
-	"IndexActionsMenu.Open": "开启",
-	"IndexActionsMenu.Close": "关闭",
-	"IndexActionsMenu.Delete": "删除...",
-	"IndexInfoMenu.Title": "信息",
-	"IndexInfoMenu.Status": "索引状态",
-	"IndexInfoMenu.Metadata": "索引信息",
-	"IndexCommand.TextToAnalyze": "文本分析",
-	"IndexCommand.ShutdownMessage": "输入 ''{0}'' 以关闭 {1} 节点. 关闭的节点无法从此界面重新启动",
-	"IndexOverview.PageTitle": "索引概览",
-	"IndexSelector.NameWithDocs": "{0} ({1} 个文档)",
-	"IndexSelector.SearchIndexForDocs": "搜索 {0} 的文档， 查询条件:",
-	"FilterBrowser.OutputType": "返回格式: {0}",
-	"FilterBrowser.OutputSize": "显示数量: {0}",
-	"Header.ClusterHealth": "集群健康值: {0} ({1} of {2})",
-	"Header.ClusterNotConnected": "集群健康值: 未连接",
-	"Header.Connect": "连接",
-	"Nav.AnyRequest": "复合查询",
-	"Nav.Browser": "数据浏览",
-	"Nav.ClusterHealth": "集群健康值",
-	"Nav.ClusterState": "群集状态",
-	"Nav.ClusterNodes": "集群节点",
-	"Nav.Info": "信息",
-	"Nav.NodeStats": "节点状态",
-	"Nav.Overview": "概览",
-	"Nav.Indices": "索引",
-	"Nav.Plugins": "插件",
-	"Nav.Status": "状态",
-	"Nav.Templates": "模板",
-	"Nav.StructuredQuery": "基本查询",
-	"NodeActionsMenu.Title": "动作",
-	"NodeActionsMenu.Shutdown": "关停...",
-	"NodeInfoMenu.Title": "信息",
-	"NodeInfoMenu.ClusterNodeInfo": "集群节点信息",
-	"NodeInfoMenu.NodeStats": "节点状态",
-	"NodeType.Client": "节点客户端",
-	"NodeType.Coord": "协调器",
-	"NodeType.Master": "主节点",
-	"NodeType.Tribe": "分支结点",
-	"NodeType.Worker": "工作节点",
-	"NodeType.Unassigned": "未分配",
-	"OptimizeForm.OptimizeIndex": "优化 {0}",
-	"OptimizeForm.MaxSegments": "最大索引段数",
-	"OptimizeForm.ExpungeDeletes": "只删除被标记为删除的",
-	"OptimizeForm.FlushAfter": "优化后刷新",
-	"OptimizeForm.WaitForMerge": "等待合并",
-	"Overview.PageTitle" : "集群概览",
-	"Output.JSON": "JSON",
-	"Output.Table": "Table",
-	"Output.CSV": "CSV",
-	"Output.ShowSource": "显示查询语句",
-	"Preference.SortCluster": "集群排序",
-	"Sort.ByName": "按名称",
-	"Sort.ByAddress": "按地址",
-	"Sort.ByType": "按类型",
-	"TableResults.Summary": "查询 {1} 个分片中用的 {0} 个. {2} 命中. 耗时 {3} 秒",
-	"QueryFilter.AllIndices": "所有索引",
-	"QueryFilter.AnyValue": "任意",
-	"QueryFilter-Header-Indices": "索引",
-	"QueryFilter-Header-Types": "类型",
-	"QueryFilter-Header-Fields": "字段",
-	"QueryFilter.DateRangeHint.from": "从 : {0}",
-	"QueryFilter.DateRangeHint.to": "  到 : {0}",
-	"Query.FailAndUndo": "查询失败. 撤消最近的更改",
-	"StructuredQuery.ShowRawJson": "显示原始 JSON"
-});
-
-i18n.setKeys({
-	"AnyRequest.TransformerHelp" : "\
-		<p>结果转换器用于返回结果原始JSON的后续处理, 将结果转换为更有用的格式.</p>\
-		<p>转换器应当包含javascript函数体. 函数的返回值将传递给json分析器</p>\
-		<p>Example:<br>\
-		  <code>return root.hits.hits[0];</code><br>\
-		  遍历结果并只显示第一个元素<br>\
-		  <code>return Object.keys(root.nodes).reduce(function(tot, node) { return tot + root.nodes[node].os.mem.used_in_bytes; }, 0);</code><br>\
-		  将返回整个集群使用的总内存<br></p>\
-		<p>以下函数可以方便的处理数组与对象<br>\
-		<ul>\
-			<li><i>Object.keys</i>(object) := array</li>\
-			<li>array.<i>forEach</i>(function(prop, index))</li>\
-			<li>array.<i>map</i>(function(prop, index)) := array</li>\
-			<li>array.<i>reduce</i>(function(accumulator, prop, index), initial_value) := final_value</li>\
-		</ul>\
-		<p>当启用重复请求时, prev 参数将会传递给转换器函数. 这将用于比较并累加图形</p>\
-		<p>Example:<br>\
-		<code>var la = [ root.nodes[Object.keys(root.nodes)[0]].os.load_average[0] ]; return prev ? la.concat(prev) : la;</code><br>\
-		将返回第一个集群节点最近一分钟内的平均负载\
-		将会把结果送人图表以产生一个负载曲线图\
-		"
-});
-
-i18n.setKeys({
-	"AnyRequest.DisplayOptionsHelp" : "\
-		<p>原始 Json: 将完整的查询结果转换为原始JSON格式 </p>\
-		<p>图形视图: 将查询结果图形化, 将查询结果转换为数组值的形式</p>\
-		<p>表格视图: 如果查询是一个搜索, 可以将搜索结果以表格形式显示.</p>\
-		"
-});
-
-i18n.setKeys({
-	"QueryFilter.DateRangeHelp" : "\
-		<p>Date 字段接受日期范围的形式查询.</p>\
-		<p>一下格式被支持:</p>\
-		<ul>\
-			<li><b>关键词 / 关键短语</b><br>\
-				<code>now<br> today<br> tomorrow<br> yesterday<br> last / this / next + week / month / year</code><br>\
-				搜索关键字匹配的日期. <code>last year</code> 将搜索过去全年.</li>\
-			<li><b>范围</b><br>\
-				<code>1000 secs<br> 5mins<br> 1day<br> 2days<br> 80d<br> 9 months<br> 2yrs</code> (空格可选, 同等于多个范围修饰词)<br>\
-				创建一个指定时间范围的搜索, 将围绕<code>现在</code> 并延伸至过去与未来时间段.</li>\
-			<li><b>DateTime 与 DateTime局部</b><br>\
-				<code>2011<br> 2011-01<br> 2011-01-18<br> 2011-01-18 12<br> 2011-01-18 12:32<br> 2011-01-18 12:32:45</code><br>\
-				指定一个特定的日期范围. <code>2011</code>会搜索整个 2011年, 而 <code>2011-01-18 12:32:45</code> 将只搜索1秒范围内</li>\
-			<li><b>Time 与 Time局部</b><br>\
-				<code>12<br> 12:32<br> 12:32:45</code><br>\
-				这些格式只搜索当天的特定时间. <code>12:32</code> 将搜索当天的那一分钟</li>\
-			<li><b>日期范围</b><br>\
-				<code>2010 -&gt; 2011<br> last week -&gt; next week<br> 2011-05 -&gt;<br> &lt; now</code><br>\
-				日期范围是将两个日期格式串 (日期关键字 / DateTime / Time) 用  &lt; 或 -&gt; (效果相同) 分隔. 如果缺少任意一端，那么在这个方向上时间将没有限制.</li>\
-			<li><b>偏移日期范围</b><br>\
-				<code>2010 -> 1yr<br> 3mins < now</code>\
-				搜索包括指定方向上偏移的日期.</li>\
-			<li><b>锚定范围</b><br>\
-				<code>2010-05-13 05:13 <> 10m<br> now <> 1yr<br> lastweek <> 1month</code><br>\
-				类似于上面的便宜日期，在两个方向上将锚定的日期延长</li>\
-		</ul>\
-	"
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js
deleted file mode 100644
index c4ddf65..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/cluster.js
+++ /dev/null
@@ -1,47 +0,0 @@
-(function( $, app ) {
-
-	var services = app.ns("services");
-	var ux = app.ns("ux");
-
-	function parse_version( v ) {
-		return v.match(/^(\d+)\.(\d+)\.(\d+)/).slice(1,4).map( function(d) { return parseInt(d || 0, 10); } );
-	}
-
-	services.Cluster = ux.Class.extend({
-		defaults: {
-			base_uri: null
-		},
-		init: function() {
-			this.base_uri = this.config.base_uri;
-		},
-		setVersion: function( v ) {
-			this.version = v;
-			this._version_parts = parse_version( v );
-		},
-		versionAtLeast: function( v ) {
-			var testVersion = parse_version( v );
-			for( var i = 0; i < 3; i++ ) {
-				if( testVersion[i] !== this._version_parts[i] ) {
-					return testVersion[i] < this._version_parts[i];
-				}
-			}
-			return true;
-		},
-		request: function( params ) {
-			return $.ajax( $.extend({
-				url: this.base_uri + params.path,
-				dataType: "json",
-				error: function(xhr, type, message) {
-					if("console" in window) {
-						console.log({ "XHR Error": type, "message": message });
-					}
-				}
-			},  params) );
-		},
-		"get": function(path, success) { return this.request( { type: "GET", path: path, success: success } ); },
-		"post": function(path, data, success) { return this.request( { type: "POST", path: path, data: data, success: success } ); },
-		"put": function(path, data, success) { return this.request( { type: "PUT", path: path, data: data, success: success } ); },
-		"delete": function(path, data, success) { return this.request( { type: "DELETE", path: path, data: data, success: success } ); }
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js
deleted file mode 100644
index ff4e8a9..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/cluster/clusterSpec.js
+++ /dev/null
@@ -1,65 +0,0 @@
-describe("app.services.Cluster", function() {
-
-	var Cluster = window.app.services.Cluster;
-	var test = window.test;
-
-	var cluster;
-
-	beforeEach( function() {
-		cluster = new Cluster({ base_uri: "http://localhost:9200/" });
-	});
-
-	describe( "when it is initialised", function() {
-
-		it("should have a localhost base_uri", function() {
-			expect( cluster.base_uri ).toBe( "http://localhost:9200/" );
-		});
-
-		it("should have no version", function() {
-			expect( cluster.version ).toBe( undefined );
-		});
-
-	});
-
-	describe( "setVersion()", function() {
-
-		it("have a version", function() {
-			cluster.setVersion( "1.12.3-5" );
-			expect( cluster.version ).toBe( "1.12.3-5" );
-		});
-
-	});
-
-	describe("versionAtLeast()", function() {
-		var vs = [ "0.0.3", "0.13.5", "0.90.3", "1.0.0", "1.1.0", "1.2.3", "1.12.4.rc2", "13.0.0" ];
-
-		it("should return true for versions that are less than or equal to the current version", function() {
-			cluster.setVersion("1.12.5");
-			expect( cluster.versionAtLeast("1.12.5" ) ).toBe( true );
-			expect( cluster.versionAtLeast("1.12.5rc2" ) ).toBe( true );
-			expect( cluster.versionAtLeast("1.12.5-6" ) ).toBe( true );
-			expect( cluster.versionAtLeast("1.12.5-6.beta7" ) ).toBe( true );
-			expect( cluster.versionAtLeast("1.12.4" ) ).toBe( true );
-			expect( cluster.versionAtLeast("0.12.4" ) ).toBe( true );
-			expect( cluster.versionAtLeast("1.1.8" ) ).toBe( true );
-
-			for( var i = 0; i < vs.length - 1; i++ ) {
-				cluster.setVersion( vs[i+1] );
-				expect( cluster.versionAtLeast( vs[i] ) ).toBe( true );
-			}
-		});
-
-		it("should return false for versions that are greater than the current version", function() {
-			cluster.setVersion("1.12.5");
-			expect( cluster.versionAtLeast("1.12.6" ) ).toBe( false );
-			expect( cluster.versionAtLeast("1.13.4" ) ).toBe( false );
-			expect( cluster.versionAtLeast("2.0.0" ) ).toBe( false );
-
-			for( var i = 0; i < vs.length - 1; i++ ) {
-				cluster.setVersion( vs[i] );
-				expect( cluster.versionAtLeast( vs[i+1] ) ).toBe( false );
-			}
-		});
-	});
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js
deleted file mode 100644
index 1d7334e..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterState.js
+++ /dev/null
@@ -1,73 +0,0 @@
-	(function( app ) {
-
-	var services = app.ns("services");
-	var ux = app.ns("ux");
-
-	services.ClusterState = ux.Observable.extend({
-		defaults: {
-			cluster: null
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.clusterState = null;
-			this.status = null;
-			this.nodeStats = null;
-			this.clusterNodes = null;
-		},
-		refresh: function() {
-			var self = this, clusterState, status, nodeStats, clusterNodes, clusterHealth;
-			function updateModel() {
-				if( clusterState && status && nodeStats && clusterNodes && clusterHealth ) {
-					this.clusterState = clusterState;
-					this.status = status;
-					this.nodeStats = nodeStats;
-					this.clusterNodes = clusterNodes;
-					this.clusterHealth = clusterHealth;
-					this.fire( "data", this );
-				}
-			}
-			this.cluster.get("_cluster/state", function( data ) {
-				clusterState = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_stats", function( data ) {
-				status = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_nodes/stats", function( data ) {
-				nodeStats = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_nodes", function( data ) {
-				clusterNodes = data;
-				updateModel.call( self );
-			});
-			this.cluster.get("_cluster/health", function( data ) {
-				clusterHealth = data;
-				updateModel.call( self );
-			});
-		},
-		_clusterState_handler: function(state) {
-			this.clusterState = state;
-			this.redraw("clusterState");
-		},
-		_status_handler: function(status) {
-			this.status = status;
-			this.redraw("status");
-		},
-		_clusterNodeStats_handler: function(stats) {
-			this.nodeStats = stats;
-			this.redraw("nodeStats");
-		},
-		_clusterNodes_handler: function(nodes) {
-			this.clusterNodes = nodes;
-			this.redraw("clusterNodes");
-		},
-		_clusterHealth_handler: function(health) {
-			this.clusterHealth = health;
-			this.redraw("status");
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js
deleted file mode 100644
index b91237c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/clusterState/clusterStateSpec.js
+++ /dev/null
@@ -1,64 +0,0 @@
-describe("app.services.ClusterState", function() {
-
-	var ClusterState = window.app.services.ClusterState;
-	var test = window.test;
-
-	var c;
-	var dummyData = {};
-	var dataEventCallback;
-
-	function expectAllDataToBeNull() {
-		expect( c.clusterState ).toBe( null );
-		expect( c.status ).toBe( null );
-		expect( c.nodeStats ).toBe( null );
-		expect( c.clusterNodes ).toBe( null );
-	}
-
-	beforeEach( function() {
-		test.cb.use();
-		dataEventCallback = jasmine.createSpy("onData");
-		c = new ClusterState({
-			cluster: {
-				get: test.cb.createSpy("get", 1, [ dummyData ] )
-			},
-			onData: dataEventCallback
-		});
-	});
-
-	describe( "when it is initialised", function() {
-
-		it("should have null data", function() {
-			expectAllDataToBeNull();
-		});
-
-	});
-
-	describe( "when refresh is called", function() {
-
-		beforeEach( function() {
-			c.refresh();
-		});
-
-		it("should not not update models until all network requests have completed", function() {			
-			test.cb.execOne();
-			expectAllDataToBeNull();
-			test.cb.execOne();
-			expectAllDataToBeNull();
-			test.cb.execOne();
-			expectAllDataToBeNull();
-			test.cb.execOne();
-			expectAllDataToBeNull();
-			test.cb.execOne();
-			expect( c.clusterState ).toBe( dummyData );
-			expect( c.status ).toBe( dummyData );
-			expect( c.nodeStats ).toBe( dummyData );
-			expect( c.clusterNodes ).toBe( dummyData );
-		});
-
-		it("should fire a 'data' event when all data is ready", function() {
-			test.cb.execAll();
-			expect( dataEventCallback ).toHaveBeenCalledWith( c );
-		});
-	});
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js
deleted file mode 100644
index 968815d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferenceSpec.js
+++ /dev/null
@@ -1,23 +0,0 @@
-describe("app.services.Preferences", function(){
-
-var Preferences = window.app.services.Preferences;
-
-	var prefs;
-
-	beforeEach( function() {
-		spyOn(window.localStorage, "getItem").and.returnValue( '{"foo":true}' );
-		spyOn(window.localStorage, "setItem");
-		prefs = Preferences.instance();
-	});
-
-	it("should return a preference from localStorage", function() {
-		expect( prefs.get("foo") ).toEqual( {foo:true} );
-	});
-
-	it("should set a preference in localStorage", function() {
-		prefs.set("foo", { foo: false } );
-		expect( window.localStorage.setItem ).toHaveBeenCalledWith('foo', '{"foo":false}');
-	});
-
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js
deleted file mode 100644
index a45eb96..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/services/preferences/preferences.js
+++ /dev/null
@@ -1,35 +0,0 @@
-(function( app ) {
-	
-	var ux = app.ns("ux");
-	var services = app.ns("services");
-
-	services.Preferences = ux.Singleton.extend({
-		init: function() {
-			this._storage = window.localStorage;
-			this._setItem("__version", 1 );
-		},
-		get: function( key ) {
-			return this._getItem( key );
-		},
-		set: function( key, val ) {
-			return this._setItem( key, val );
-		},
-		_getItem: function( key ) {
-			try {
-				return JSON.parse( this._storage.getItem( key ) );
-			} catch(e) {
-				console.warn( e );
-				return undefined;
-			}
-		},
-		_setItem: function( key, val ) {
-			try {
-				return this._storage.setItem( key, JSON.stringify( val ) );
-			} catch(e) {
-				console.warn( e );
-				return undefined;
-			}
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css
deleted file mode 100644
index 3042e7b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.css
+++ /dev/null
@@ -1 +0,0 @@
-.require { color: #a00; }
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js
deleted file mode 100644
index 3d629b7..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractField/abstractField.js
+++ /dev/null
@@ -1,49 +0,0 @@
-(function( $, app, joey ) {
-
-	var ui = app.ns("ui");
-
-	ui.AbstractField = ui.AbstractWidget.extend({
-
-		defaults: {
-			name : "",			// (required) - name of the field
-			require: false,	// validation requirements (false, true, regexp, function)
-			value: "",			// default value
-			label: ""				// human readable label of this field
-		},
-
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this._main_template());
-			this.field = this.el.find("[name="+this.config.name+"]");
-			this.label = this.config.label;
-			this.require = this.config.require;
-			this.name = this.config.name;
-			this.val( this.config.value );
-			this.attach( parent );
-		},
-
-		val: function( val ) {
-			if(val === undefined) {
-				return this.field.val();
-			} else {
-				this.field.val( val );
-				return this;
-			}
-		},
-
-		validate: function() {
-			var val = this.val(), req = this.require;
-			if( req === false ) {
-				return true;
-			} else if( req === true ) {
-				return val.length > 0;
-			} else if( req.test && $.isFunction(req.test) ) {
-				return req.test( val );
-			} else if( $.isFunction(req) ) {
-				return req( val, this );
-			}
-		}
-
-	});
-
-})( this.jQuery, this.app, this.joey );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css
deleted file mode 100644
index 6cce209..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.css
+++ /dev/null
@@ -1,43 +0,0 @@
-#uiModal {
-	background: black;
-}
-
-.uiPanel {
-	box-shadow: -1px 2.5px 4px -3px black, -1px -2.5px 4px -3px black, 3px 2.5px 4px -3px black, 3px -2.5px 4px -3px black;
-	position: absolute;
-	background: #eee;
-	border: 1px solid #666;
-}
-
-.uiPanel-titleBar {
-	text-align: center;
-	font-weight: bold;
-	padding: 2px 0;
-	background: rgba(223, 223, 223, 0.75);
-	background: -moz-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
-	background: -webkit-linear-gradient(top, rgba(223, 223, 223, 0.75), rgba(193, 193, 193, 0.75), rgba(223, 223, 223, 0.75));
-	border-bottom: 1px solid #bbb;
-}
-
-.uiPanel-close {
-	cursor: pointer;
-	border: 1px solid #aaa;
-	background: #fff;
-	color: #fff;
-	float: left;
-	height: 10px;
-	left: 3px;
-	line-height: 9px;
-	padding: 1px 0;
-	position: relative;
-	text-shadow: 0 0 1px #000;
-	top: 0px;
-	width: 12px;
-}
-.uiPanel-close:hover {
-	background: #eee;
-}
-
-.uiPanel-body {
-	overflow: auto;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js
deleted file mode 100644
index 17f62a7..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractPanel/abstractPanel.js
+++ /dev/null
@@ -1,83 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.AbstractPanel = ui.AbstractWidget.extend({
-		defaults: {
-			body: null,            // initial content of the body
-			modal: true,           // create a modal panel - creates a div that blocks interaction with page
-			height: 'auto',        // panel height
-			width: 400,            // panel width (in pixels)
-			open: false,           // show the panel when it is created
-			parent: 'BODY',        // node that panel is attached to
-			autoRemove: false      // remove the panel from the dom and destroy it when the widget is closed
-		},
-		shared: {  // shared data for all instances of ui.Panel and decendants
-			stack: [], // array of all open panels
-			modal: $( { tag: "DIV", id: "uiModal", css: { opacity: 0.2, position: "absolute", top: "0px", left: "0px" } } )
-		},
-		init: function() {
-			this._super();
-		},
-		open: function( ev ) {
-			this.el
-				.css( { visibility: "hidden" } )
-				.appendTo( this.config.parent )
-				.css( this._getPosition( ev ) )
-				.css( { zIndex: (this.shared.stack.length ? (+this.shared.stack[this.shared.stack.length - 1].el.css("zIndex") + 10) : 100) } )
-				.css( { visibility: "visible", display: "block" } );
-			this.shared.stack.remove(this);
-			this.shared.stack.push(this);
-			this._setModal();
-			$(document).bind("keyup", this._close_handler );
-			this.fire("open", { source: this, event: ev } );
-			return this;
-		},
-		close: function() {
-			var index = this.shared.stack.indexOf(this);
-			if(index !== -1) {
-				this.shared.stack.splice(index, 1);
-				this.el.css( { left: "-2999px" } ); // move the dialog to the left rather than hiding to prevent ie6 rendering artifacts
-				this._setModal();
-				this.fire("close", this );
-				if(this.config.autoRemove) {
-					this.remove();
-				}
-			}
-			return this;
-		},
-		// close the panel and remove it from the dom, destroying it (you can not reuse the panel after calling remove)
-		remove: function() {
-			this.close();
-			$(document).unbind("keyup", this._close_handler );
-			this._super();
-		},
-		// starting at the top of the stack, find the first panel that wants a modal and put it just underneath, otherwise remove the modal
-		_setModal: function() {
-			for(var stackPtr = this.shared.stack.length - 1; stackPtr >= 0; stackPtr--) {
-				if(this.shared.stack[stackPtr].config.modal) {
-					this.shared.modal
-						.appendTo( document.body )
-						.css( { zIndex: this.shared.stack[stackPtr].el.css("zIndex") - 5 } )
-						.css( $(document).vSize().asSize() );
-					return;
-				}
-			}
-			this.shared.modal.remove(); // no panels that want a modal were found
-		},
-		_getPosition: function() {
-			return $(window).vSize()                        // get the current viewport size
-				.sub(this.el.vSize())                         // subtract the size of the panel
-				.mod(function(s) { return s / 2; })           // divide by 2 (to center it)
-				.add($(document).vScroll())                   // add the current scroll offset
-				.mod(function(s) { return Math.max(5, s); })  // make sure the panel is not off the edge of the window
-				.asOffset();                                  // and return it as a {top, left} object
-		},
-		_close_handler: function( ev ) {
-			if( ev.type === "keyup" && ev.keyCode !== 27) { return; } // press esc key to close
-			$(document).unbind("keyup", this._close_handler);
-			this.close( ev );
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js
deleted file mode 100644
index bf3b4c8..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/abstractWidget/abstractWidget.js
+++ /dev/null
@@ -1,49 +0,0 @@
-(function( $, joey, app ) {
-
-	var ui = app.ns("ui");
-	var ux = app.ns("ux");
-
-	ui.AbstractWidget = ux.Observable.extend({
-		defaults : {
-			id: null     // the id of the widget
-		},
-
-		el: null,       // this is the jquery wrapped dom element(s) that is the root of the widget
-
-		init: function() {
-			this._super();
-			for(var prop in this) {       // automatically bind all the event handlers
-				if(prop.contains("_handler")) {
-					this[prop] = this[prop].bind(this);
-				}
-			}
-		},
-
-		id: function(suffix) {
-			return this.config.id ? (this.config.id + (suffix ? "-" + suffix : "")) : undefined;
-		},
-
-		attach: function( parent, method ) {
-			if( parent ) {
-				this.el[ method || "appendTo"]( parent );
-			}
-			this.fire("attached", this );
-			return this;
-		},
-
-		remove: function() {
-			this.el.remove();
-			this.fire("removed", this );
-			this.removeAllObservers();
-			this.el = null;
-			return this;
-		}
-	});
-
-	joey.plugins.push( function( obj ) {
-		if( obj instanceof ui.AbstractWidget ) {
-			return obj.el[0];
-		}
-	});
-
-})( this.jQuery, this.joey, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css
deleted file mode 100644
index f00412c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.css
+++ /dev/null
@@ -1,38 +0,0 @@
-.uiAnyRequest-request {
-	float: left;
-	width: 350px;
-	padding: 5px;
-	background: #d8e7ff;
-	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
-	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
-}
-
-.uiAnyRequest-request INPUT[type=text],
-.uiAnyRequest-request TEXTAREA {
-	width: 340px;
-}
-
-.anyRequest INPUT[name=path] {
-	width: 259px;
-}
-
-.uiAnyRequest-out {
-	margin-left: 365px;
-}
-
-.uiAnyRequest-out P {
-	margin-top: 0;
-}
-
-.uiAnyRequest-jsonErr {
-	color: red;
-}
-
-.uiAnyRequest-history {
-	margin: 0;
-	padding: 0;
-	list-style: none;
-	max-height: 100px;
-	overflow-x: hidden;
-	overflow-y: auto;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js
deleted file mode 100644
index 926bbcc..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/anyRequest/anyRequest.js
+++ /dev/null
@@ -1,235 +0,0 @@
-(function( $, app, i18n, raphael ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-	var services = app.ns("services");
-
-	ui.AnyRequest = ui.Page.extend({
-		defaults: {
-			cluster: null,       // (required) instanceof app.services.Cluster
-			path: "_search",     // default uri to send a request to
-			query: { query: { match_all: { }}},
-			transform: "  return root;" // default transformer function (does nothing)
-		},
-		init: function(parent) {
-			this._super();
-			this.prefs = services.Preferences.instance();
-			this.history = this.prefs.get("anyRequest-history") || [ { type: "POST", path: this.config.path, query : JSON.stringify(this.config.query), transform: this.config.transform } ];
-			this.el = $.joey(this._main_template());
-			this.base_uriEl = this.el.find("INPUT[name=base_uri]");
-			this.pathEl = this.el.find("INPUT[name=path]");
-			this.typeEl = this.el.find("SELECT[name=method]");
-			this.dataEl = this.el.find("TEXTAREA[name=body]");
-			this.prettyEl = this.el.find("INPUT[name=pretty]");
-			this.transformEl = this.el.find("TEXTAREA[name=transform]");
-			this.asGraphEl = this.el.find("INPUT[name=asGraph]");
-			this.asTableEl = this.el.find("INPUT[name=asTable]");
-			this.asJsonEl = this.el.find("INPUT[name=asJson]");
-			this.cronEl = this.el.find("SELECT[name=cron]");
-			this.outEl = this.el.find("DIV.uiAnyRequest-out");
-			this.errEl = this.el.find("DIV.uiAnyRequest-jsonErr");
-			this.typeEl.val("GET");
-			this.attach(parent);
-			this.setHistoryItem(this.history[this.history.length - 1]);
-		},
-		setHistoryItem: function(item) {
-			this.pathEl.val(item.path);
-			this.typeEl.val(item.type);
-			this.dataEl.val(item.query);
-			this.transformEl.val(item.transform);
-		},
-		_request_handler: function( ev ) {
-			if(! this._validateJson_handler()) {
-				return;
-			}
-			var path = this.pathEl.val(),
-					type = this.typeEl.val(),
-					query = JSON.stringify(JSON.parse(this.dataEl.val())),
-					transform = this.transformEl.val(),
-					base_uri = this.base_uriEl.val();
-			if( ev ) { // if the user click request
-				if(this.timer) {
-					window.clearTimeout(this.timer); // stop any cron jobs
-				}
-				delete this.prevData; // remove data from previous cron runs
-				this.outEl.text(i18n.text("AnyRequest.Requesting"));
-				if( ! /\/$/.test( base_uri )) {
-					base_uri += "/";
-					this.base_uriEl.val( base_uri );
-				}
-				for(var i = 0; i < this.history.length; i++) {
-					if(this.history[i].path === path &&
-						this.history[i].type === type &&
-						this.history[i].query === query &&
-						this.history[i].transform === transform) {
-						this.history.splice(i, 1);
-					}
-				}
-				this.history.push({
-					path: path,
-					type: type,
-					query: query,
-					transform: transform
-				});
-				this.history.slice(250); // make sure history does not get too large
-				this.prefs.set( "anyRequest-history", this.history );
-				this.el.find("UL.uiAnyRequest-history")
-					.empty()
-					.append($( { tag: "UL", children: this.history.map(this._historyItem_template, this) }).children())
-					.children().find(":last-child").each(function(i, j) { j.scrollIntoView(false); }).end()
-					.scrollLeft(0);
-			}
-			this.config.cluster.request({
-				url: base_uri + path,
-				type: type,
-				data: query,
-				success: this._responseWriter_handler,
-				error: this._responseError_handler
-			});
-		},
-		_responseError_handler: function (response) {
-			var obj;
-			try {
-				obj = JSON.parse(response.responseText);
-				if (obj) {
-					this._responseWriter_handler(obj);
-				}
-			} catch (err) {
-			}
-		},
-		_responseWriter_handler: function(data) {
-			this.outEl.empty();
-			try {
-				data = (new Function("root", "prev", this.transformEl.val()))(data, this.prevData)
-			} catch(e) {
-				this.errEl.text(e.message);
-				return;
-			}
-			if(this.asGraphEl.attr("checked")) {
-				var w = this.outEl.width();
-				raphael(this.outEl[0], w - 10, 300)
-					.g.barchart(10, 10, w - 20, 280, [data]);
-			}
-			if(this.asTableEl.attr("checked")) {
-				try {
-					var store = new app.data.ResultDataSourceInterface();
-					this.outEl.append(new app.ui.ResultTable({
-						width: this.outEl.width() - 23,
-						store: store
-					} ) );
-					store.results(data);
-				} catch(e) {
-					this.errEl.text("Results Table Failed: " + e.message);
-				}
-			}
-			if(this.asJsonEl.attr("checked")) {
-				this.outEl.append(new ui.JsonPretty({ obj: data }));
-			}
-			if(this.cronEl.val() > 0) {
-				this.timer = window.setTimeout(function(){
-					this._request_handler();
-				}.bind(this), this.cronEl.val());
-			}
-			this.prevData = data;
-		},
-		_validateJson_handler: function( ev ) {
-			/* if the textarea is empty, we replace its value by an empty JSON object : "{}" and the request goes on as usual */
-			var jsonData = this.dataEl.val().trim();
-			var j;
-			if(jsonData === "") {
-				jsonData = "{}";
-				this.dataEl.val( jsonData );
-			}
-			try {
-				j = JSON.parse(jsonData);
-			} catch(e) {
-				this.errEl.text(e.message);
-				return false;
-			}
-			this.errEl.text("");
-			if(this.prettyEl.attr("checked")) {
-				this.dataEl.val(JSON.stringify(j, null, "  "));
-			}
-			return true;
-		},
-		_historyClick_handler: function( ev ) {
-			var item = $( ev.target ).closest( "LI" ).data( "item" );
-			this.setHistoryItem( item );
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: "anyRequest", children: [
-				{ tag: "DIV", cls: "uiAnyRequest-request", children: [
-					new app.ui.SidebarSection({
-						open: false,
-						title: i18n.text("AnyRequest.History"),
-						body: { tag: "UL", onclick: this._historyClick_handler, cls: "uiAnyRequest-history", children: this.history.map(this._historyItem_template, this)	}
-					}),
-					new app.ui.SidebarSection({
-						open: true,
-						title: i18n.text("AnyRequest.Query"),
-						body: { tag: "DIV", children: [
-							{ tag: "INPUT", type: "text", name: "base_uri", value: this.config.cluster.config.base_uri },
-							{ tag: "BR" },
-							{ tag: "INPUT", type: "text", name: "path", value: this.config.path },
-							{ tag: "SELECT", name: "method", children: ["POST", "GET", "PUT", "HEAD", "DELETE"].map(ut.option_template) },
-							{ tag: "TEXTAREA", name: "body", rows: 20, text: JSON.stringify(this.config.query) },
-							{ tag: "BUTTON", css: { cssFloat: "right" }, type: "button", children: [ { tag: "B", text: i18n.text("AnyRequest.Request") } ], onclick: this._request_handler },
-							{ tag: "BUTTON", type: "button", text: i18n.text("AnyRequest.ValidateJSON"), onclick: this._validateJson_handler },
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "pretty" }, i18n.text("AnyRequest.Pretty") ] },
-							{ tag: "DIV", cls: "uiAnyRequest-jsonErr" }
-						]}
-					}),
-					new app.ui.SidebarSection({
-						title: i18n.text("AnyRequest.Transformer"),
-						help: "AnyRequest.TransformerHelp",
-						body: { tag: "DIV", children: [
-							{ tag: "CODE", text: "function(root, prev) {" },
-							{ tag: "BR" },
-							{ tag: "TEXTAREA", name: "transform", rows: 5, text: this.config.transform },
-							{ tag: "BR" },
-							{ tag: "CODE", text: "}" }
-						] }
-					}),
-					new app.ui.SidebarSection({
-						title: i18n.text("AnyRequest.RepeatRequest"),
-						body: { tag: "DIV", children: [
-							i18n.text("AnyRequest.RepeatRequestSelect"), " ",
-							{ tag: "SELECT", name: "cron", children: [
-								{ value: 0, text: "do not repeat" },
-								{ value: 1000, text: "second" },
-								{ value: 1000 * 2, text: "2 seconds" },
-								{ value: 1000 * 5, text: "5 seconds" },
-								{ value: 1000 * 20, text: "20 seconds" },
-								{ value: 1000 * 60, text: "minute" },
-								{ value: 1000 * 60 * 10, text: "10 minutes" },
-								{ value: 1000 * 60 * 60, text: "hour" }
-							].map(function(op) { return $.extend({ tag: "OPTION"}, op); }) }
-						] }
-					}),
-					new app.ui.SidebarSection({
-						title: i18n.text("AnyRequest.DisplayOptions"),
-						help: "AnyRequest.DisplayOptionsHelp",
-						body: { tag: "DIV", children: [
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", checked: true, name: "asJson" }, i18n.text("AnyRequest.AsJson") ] },
-							{ tag: "BR" },
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asGraph" }, i18n.text("AnyRequest.AsGraph") ] },
-							{ tag: "BR" },
-							{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", name: "asTable" }, i18n.text("AnyRequest.AsTable") ] }
-						] }
-					})
-				] },
-				{ tag: "DIV", cls: "uiAnyRequest-out" }
-			] };
-		},
-		_historyItem_template: function(item) {
-			return { tag: "LI", cls: "booble", data: { item: item }, children: [
-				{ tag: "SPAN", text: item.path },
-				" ",
-				{ tag: "EM", text: item.query },
-				" ",
-				{ tag: "SPAN", text: item.transform }
-			] };
-		}
-	});
-	
-})( this.jQuery, this.app, this.i18n, this.Raphael );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css
deleted file mode 100644
index 66e2110..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.uiBrowser-filter {
-	float: left;
-}
-
-.uiBrowser-table {
-	margin-left: 365px;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js
deleted file mode 100644
index 329aa4d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/browser/browser.js
+++ /dev/null
@@ -1,58 +0,0 @@
-(function( $, app, i18n ){
-
-	var ui = app.ns("ui");
-	var data = app.ns("data");
-
-	ui.Browser = ui.Page.extend({
-		defaults: {
-			cluster: null  // (required) instanceof app.services.Cluster
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.query = new app.data.Query( { cluster: this.cluster } );
-			this._refreshButton = new ui.Button({
-				label: i18n.text("General.RefreshResults"),
-				onclick: function( btn ) {
-					this.query.query();
-				}.bind(this)
-			});
-			this.el = $(this._main_template());
-			new data.MetaDataFactory({
-				cluster: this.cluster,
-				onReady: function(metadata) {
-					this.metadata = metadata;
-					this.store = new data.QueryDataSourceInterface( { metadata: metadata, query: this.query } );
-					this.queryFilter = new ui.QueryFilter({ metadata: metadata, query: this.query });
-					this.queryFilter.attach(this.el.find("> .uiBrowser-filter") );
-					this.resultTable = new ui.ResultTable( {
-						onHeaderClick: this._changeSort_handler,
-						store: this.store
-					} );
-					this.resultTable.attach( this.el.find("> .uiBrowser-table") );
-					this.updateResults();
-				}.bind(this)
-			});
-		},
-		updateResults: function() {
-			this.query.query();
-		},
-		_changeSort_handler: function(table, wEv) {
-			this.query.setSort(wEv.column, wEv.dir === "desc");
-			this.query.setPage(1);
-			this.query.query();
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiBrowser", children: [
-				new ui.Toolbar({
-					label: i18n.text("Browser.Title"),
-					left: [ ],
-					right: [ this._refreshButton ]
-				}),
-				{ tag: "DIV", cls: "uiBrowser-filter" },
-				{ tag: "DIV", cls: "uiBrowser-table" }
-			] };
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.css
deleted file mode 100644
index 17123dc..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.css
+++ /dev/null
@@ -1,50 +0,0 @@
-.uiButton {
-	padding: 0;
-	border: 0;
-	margin: 3px;
-	width: auto;
-	overflow: visible;
-	cursor: pointer;
-	background: transparent;
-}
-
-.uiButton-content {
-	height: 20px;
-	border: 1px solid #668dc6;
-	border-radius: 2px;
-	background: #96c6eb;
-	background: -moz-linear-gradient(top, #96c6eb, #5296c7);
-	background: -webkit-linear-gradient(top, #96c6eb, #5296c7);
-	color: white;
-	font-weight: bold;
-}
-
-.moz .uiButton-content { margin: 0 -2px; }
-
-.uiButton-label {
-		padding: 2px 6px;
-		white-space: nowrap;
-}
-.uiButton:hover .uiButton-content {
-	background: #2777ba;
-	background: -moz-linear-gradient(top, #6aaadf, #2777ba);
-	background: -webkit-linear-gradient(top, #6aaadf, #2777ba);
-}
-.uiButton.active .uiButton-content,
-.uiButton:active .uiButton-content {
-	background: #2575b7;
-	background: -moz-linear-gradient(top, #2576b8, #2575b7);
-	background: -webkit-linear-gradient(top, #2576b8, #2575b7);
-}
-.uiButton.disabled .uiButton-content,
-.uiButton.disabled:active .uiButton-content {
-		border-color: #c6c6c6;
-		color: #999999;
-		background: #ddd;
-		background: -moz-linear-gradient(top, #ddd, #ddd);
-		background: -webkit-linear-gradient(top, #ddd, #ddd);
-}
-
-.uiButton.disabled {
-		cursor: default;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.js
deleted file mode 100644
index 57f83a0..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/button.js
+++ /dev/null
@@ -1,53 +0,0 @@
-(function( $, joey, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Button = ui.AbstractWidget.extend({
-		defaults : {
-			label: "",                 // the label text
-			disabled: false,           // create a disabled button
-			autoDisable: false         // automatically disable the button when clicked
-		},
-
-		_baseCls: "uiButton",
-
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this.button_template())
-				.bind("click", this.click_handler);
-			this.config.disabled && this.disable();
-			this.attach( parent );
-		},
-
-		click_handler: function(jEv) {
-			if(! this.disabled) {
-				this.fire("click", jEv, this);
-				this.config.autoDisable && this.disable();
-			}
-		},
-
-		enable: function() {
-			this.el.removeClass("disabled");
-			this.disabled = false;
-			return this;
-		},
-
-		disable: function(disable) {
-			if(disable === false) {
-					return this.enable();
-			}
-			this.el.addClass("disabled");
-			this.disabled = true;
-			return this;
-		},
-
-		button_template: function() { return (
-			{ tag: 'BUTTON', type: 'button', id: this.id(), cls: this._baseCls, children: [
-				{ tag: 'DIV', cls: 'uiButton-content', children: [
-					{ tag: 'DIV', cls: 'uiButton-label', text: this.config.label }
-				] }
-			] }
-		); }
-	});
-
-})( this.jQuery, this.joey, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js
deleted file mode 100644
index 060e8f6..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/button/buttonDemo.js
+++ /dev/null
@@ -1,9 +0,0 @@
-$( function() {
-
-	var ui = window.app.ns("ui");
-
-	window.builder = function() {
-		return new ui.Button({	label: "Default" });
-	}	;
-
-});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js
deleted file mode 100644
index d5f5012..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkField.js
+++ /dev/null
@@ -1,25 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.CheckField = ui.AbstractField.extend({
-		_main_template: function() { return (
-			{ tag: "DIV", id: this.id(), cls: "uiCheckField", children: [
-				{ tag: "INPUT", type: "checkbox", name: this.config.name, checked: !!this.config.value }
-			] }
-		); },
-		validate: function() {
-			return this.val() || ( ! this.require );
-		},
-		val: function( val ) {
-			if( val === undefined ) {
-				return !!this.field.attr( "checked" );
-			} else {
-				this.field.attr( "checked", !!val );
-			}
-		}
-	});
-
-})( this.app );
-
-
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js
deleted file mode 100644
index 9a3b3ca..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldDemo.js
+++ /dev/null
@@ -1,45 +0,0 @@
-$( function() {
-
-	var ui = window.app.ns("ui");
-	var ux = window.app.ns("ux");
-	var ut = window.app.ns("ut");
-
-	window.builder = function() {
-		var form = new ux.FieldCollection({
-			fields: [
-				new ui.CheckField({
-					label: "default",
-					name: "check_default"
-				}),
-				new ui.CheckField({
-					label: "checked",
-					name: "check_true",
-					value: true
-				}),
-				new ui.CheckField({
-					label: "unchecked",
-					name: "check_false",
-					value: false
-				}),
-				new ui.CheckField({
-					label: "required",
-					name: "check_required",
-					require: true
-				})
-			]
-		});
-
-		return (
-			{ tag: "DIV", children: form.fields.map( function( field ) {
-				return { tag: "LABEL", cls: "uiPanelForm-field", children: [
-					{ tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] },
-					field
-				]};
-			}).concat( new ui.Button({
-				label: "Evaluate Form",
-				onclick: function() { console.log( "valid=" + form.validate(), form.getData() ); }
-			})) }
-		);
-	};
-
-});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js
deleted file mode 100644
index 26ddc6f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/checkField/checkFieldSpec.js
+++ /dev/null
@@ -1,34 +0,0 @@
-describe("app.ui.CheckField", function() {
-
-	var CheckField = window.app.ui.CheckField;
-
-	it("should have a label", function() {
-		expect( ( new CheckField({ label: "foo" }) ).label ).toBe( "foo" );
-	});
-
-	it("should have a name", function() {
-		expect( ( new CheckField({ name: "foo" }) ).name ).toBe( "foo" );
-	});
-
-	it("should have a val that is false when then field is not checked", function() {
-		expect( ( new CheckField({ name: "foo", value: false }) ).val() ).toBe( false );
-	});
-
-	it("should have a val that is true when the field is checked", function() {
-		expect( ( new CheckField({ name: "foo", value: true }) ).val() ).toBe( true );
-	});
-
-	it("should be valid if the field value is true", function() {
-		expect( ( new CheckField({ name: "foo", value: true }) ).validate() ).toBe( true );
-	});
-
-	it("should be valid if require is false", function() {
-		expect( ( new CheckField({ name: "foo", require: false, value: true }) ).validate() ).toBe( true );
-		expect( ( new CheckField({ name: "foo", require: false, value: false }) ).validate() ).toBe( true );
-	});
-
-	it("should be invalid if require is true and value is false", function() {
-		expect( ( new CheckField({ name: "foo", require: true, value: false }) ).validate() ).toBe( false );
-	});
-
-});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css
deleted file mode 100644
index e5b8fb4..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.css
+++ /dev/null
@@ -1,3 +0,0 @@
-.uiClusterConnect-uri {
-	width: 280px;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js
deleted file mode 100644
index 63d0977..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnect.js
+++ /dev/null
@@ -1,43 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var services = app.ns("services");
-
-	ui.ClusterConnect = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null
-		},
-		init: function() {
-			this._super();
-			this.prefs = services.Preferences.instance();
-			this.cluster = this.config.cluster;
-			this.el = $.joey(this._main_template());
-			this.cluster.get( "", this._node_handler );
-		},
-		
-		_node_handler: function(data) {
-			if(data) {
-				this.prefs.set("app-base_uri", this.cluster.base_uri);
-			}
-		},
-		
-		_reconnect_handler: function() {
-			var base_uri = this.el.find(".uiClusterConnect-uri").val();
-			$("body").empty().append(new app.App("body", { id: "es", base_uri: base_uri }));
-		},
-		
-		_main_template: function() {
-			return { tag: "SPAN", cls: "uiClusterConnect", children: [
-				{ tag: "INPUT", type: "text", cls: "uiClusterConnect-uri", onkeyup: function( ev ) {
-					if(ev.which === 13) {
-						ev.preventDefault();
-						this._reconnect_handler();
-					}
-				}.bind(this), id: this.id("baseUri"), value: this.cluster.base_uri },
-				{ tag: "BUTTON", type: "button", text: i18n.text("Header.Connect"), onclick: this._reconnect_handler }
-			]};
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
-
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js
deleted file mode 100644
index 8b8be82..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterConnect/clusterConnectSpec.js
+++ /dev/null
@@ -1,38 +0,0 @@
-describe("clusterConnect", function() {
-
-	var ClusterConnect = window.app.ui.ClusterConnect;
-
-	describe("when created", function() {
-
-		var prefs, success_callback, cluster, clusterConnect;
-
-		beforeEach( function() {
-			prefs = {
-				set: jasmine.createSpy("set")
-			};
-			spyOn( window.app.services.Preferences, "instance" ).and.callFake( function() {
-				return prefs;
-			});
-			cluster = {
-				get: jasmine.createSpy("get").and.callFake( function(uri, success) {
-					success_callback = success;
-				})
-			};
-			clusterConnect = new ClusterConnect({
-				base_uri: "http://localhost:9200",
-				cluster: cluster
-			});
-		});
-
-		it("should test the connection to the cluster", function() {
-			expect( cluster.get ).toHaveBeenCalled();
-		});
-
-		it("should store successful connection in preferences", function() {
-			success_callback("fakePayload");
-			expect( prefs.set ).toHaveBeenCalled();
-		});
-
-	});
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css
deleted file mode 100644
index e69de29..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.css
+++ /dev/null
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js
deleted file mode 100644
index 745ab42..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/clusterOverview/clusterOverview.js
+++ /dev/null
@@ -1,302 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var services = app.ns("services");
-
-	// ( master ) master = true, data = true 
-	// ( coordinator ) master = true, data = false
-	// ( worker ) master = false, data = true;
-	// ( client ) master = false, data = false;
-	// http enabled ?
-
-	function nodeSort_name(a, b) {
-		if (!(a.cluster && b.cluster)) {
-			return 0;
-		}
-		return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
-	}
-
-	function nodeSort_addr( a, b ) {
-		if (!(a.cluster && b.cluster)) {
-			return 0;
-		}
-		return a.cluster.transport_address.toString().localeCompare( b.cluster.transport_address.toString() );
-	}
-
-	function nodeSort_type( a, b ) {
-		if (!(a.cluster && b.cluster)) {
-			return 0;
-		}
-		if( a.master_node ) {
-			return -1;
-		} else if( b.master_node ) {
-			return 1;
-		} else if( a.data_node && !b.data_node ) {
-			return -1;
-		} else if( b.data_node && !a.data_node ) {
-			return 1;
-		} else {
-			return a.cluster.name.toString().localeCompare( b.cluster.name.toString() );
-		}
-	}
-
-	var NODE_SORT_TYPES = {
-		"Sort.ByName": nodeSort_name,
-		"Sort.ByAddress": nodeSort_addr,
-		"Sort.ByType": nodeSort_type
-	};
-
-	function nodeFilter_none( a ) {
-		return true;
-	}
-
-	function nodeFilter_clients( a ) {
-		return (a.master_node || a.data_node );
-	}
-
-
-	ui.ClusterOverview = ui.Page.extend({
-		defaults: {
-			cluster: null // (reqired) an instanceof app.services.Cluster
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this.prefs = services.Preferences.instance();
-			this._clusterState = this.config.clusterState;
-			this._clusterState.on("data", this.draw_handler );
-			this._refreshButton = new ui.RefreshButton({
-				onRefresh: this.refresh.bind(this),
-				onChange: function( btn ) {
-					if( btn.value === -1 ) {
-						this.draw_handler();
-					}
-				}.bind( this )
-			});
-			var nodeSortPref = this.prefs.get("clusterOverview-nodeSort") || Object.keys(NODE_SORT_TYPES)[0];
-			this._nodeSort = NODE_SORT_TYPES[ nodeSortPref ];
-			this._nodeSortMenu = new ui.MenuButton({
-				label: i18n.text( "Preference.SortCluster" ),
-				menu: new ui.SelectMenuPanel({
-					value: nodeSortPref,
-					items: Object.keys( NODE_SORT_TYPES ).map( function( k ) {
-						return { text: i18n.text( k ), value: k };
-					}),
-					onSelect: function( panel, event ) {
-						this._nodeSort = NODE_SORT_TYPES[ event.value ];
-						this.prefs.set("clusterOverview-nodeSort", event.value );
-						this.draw_handler();
-					}.bind(this)
-				})
-			});
-			this._indicesSort = this.prefs.get( "clusterOverview-indicesSort") || "desc";
-			this._indicesSortMenu = new ui.MenuButton({
-				label: i18n.text( "Preference.SortIndices" ),
-				menu: new ui.SelectMenuPanel({
-					value: this._indicesSort,
-					items: [
-						{ value: "desc", text: i18n.text( "SortIndices.Descending" ) },
-						{ value: "asc", text: i18n.text( "SortIndices.Ascending" ) } ],
-					onSelect: function( panel, event ) {
-						this._indicesSort = event.value;
-						this.prefs.set( "clusterOverview-indicesSort", this._indicesSort );
-						this.draw_handler();
-					}.bind(this)
-				})
-			});
-			this._aliasRenderer = this.prefs.get( "clusterOverview-aliasRender" ) || "full";
-			this._aliasMenu = new ui.MenuButton({
-				label: i18n.text( "Preference.ViewAliases" ),
-				menu: new ui.SelectMenuPanel({
-					value: this._aliasRenderer,
-					items: [
-						{ value: "full", text: i18n.text( "ViewAliases.Grouped" ) },
-						{ value: "list", text: i18n.text( "ViewAliases.List" ) },
-						{ value: "none", text: i18n.text( "ViewAliases.None" ) } ],
-					onSelect: function( panel, event ) {
-						this._aliasRenderer = event.value;
-						this.prefs.set( "clusterOverview-aliasRender", this._aliasRenderer );
-						this.draw_handler();
-					}.bind(this)
-				})
-			});
-			this._indexFilter = new ui.TextField({
-				value: this.prefs.get("clusterOverview-indexFilter"),
-				placeholder: i18n.text( "Overview.IndexFilter" ),
-				onchange: function( indexFilter ) {
-					this.prefs.set("clusterOverview-indexFilter", indexFilter.val() );
-					this.draw_handler();
-				}.bind(this)
-			});
-			this.el = $(this._main_template());
-			this.tablEl = this.el.find(".uiClusterOverview-table");
-			this.refresh();
-		},
-		remove: function() {
-			this._clusterState.removeObserver( "data", this.draw_handler );
-		},
-		refresh: function() {
-			this._refreshButton.disable();
-			this._clusterState.refresh();
-		},
-		draw_handler: function() {
-			var data = this._clusterState;
-			var indexFilter;
-			try {
-				var indexFilterRe = new RegExp( this._indexFilter.val() );
-				indexFilter = function(s) { return indexFilterRe.test(s); };
-			} catch(e) {
-				indexFilter = function() { return true; };
-			}
-			var clusterState = data.clusterState;
-			var status = data.status;
-			var nodeStats = data.nodeStats;
-			var clusterNodes = data.clusterNodes;
-			var nodes = [];
-			var indices = [];
-			var cluster = {};
-			var nodeIndices = {};
-			var indexIndices = {}, indexIndicesIndex = 0;
-			function newNode(n) {
-				return {
-					name: n,
-					routings: [],
-					master_node: clusterState.master_node === n
-				};
-			}
-			function newIndex(i) {
-				return {
-					name: i,
-					replicas: []
-				};
-			}
-			function getIndexForNode(n) {
-				return nodeIndices[n] = (n in nodeIndices) ? nodeIndices[n] : nodes.push(newNode(n)) - 1;
-			}
-			function getIndexForIndex(routings, i) {
-				var index = indexIndices[i] = (i in indexIndices) ?
-						(routings[indexIndices[i]] = routings[indexIndices[i]] || newIndex(i)) && indexIndices[i]
-						: ( ( routings[indexIndicesIndex] = newIndex(i) )  && indexIndicesIndex++ );
-				indices[index] = i;
-				return index;
-			}
-			$.each(clusterNodes.nodes, function(name, node) {
-				getIndexForNode(name);
-			});
-
-			var indexNames = [];
-			$.each(clusterState.routing_table.indices, function(name, index){
-				indexNames.push(name);
-			});
-			indexNames.sort();
-			if (this._indicesSort === "desc") indexNames.reverse();
-			indexNames.filter( indexFilter ).forEach(function(name) {
-				var indexObject = clusterState.routing_table.indices[name];
-				$.each(indexObject.shards, function(name, shard) {
-					shard.forEach(function(replica){
-						var node = replica.node;
-						if(node === null) { node = "Unassigned"; }
-						var index = replica.index;
-						var shard = replica.shard;
-						var routings = nodes[getIndexForNode(node)].routings;
-						var indexIndex = getIndexForIndex(routings, index);
-						var replicas = routings[indexIndex].replicas;
-						if(node === "Unassigned" || !indexObject.shards[shard]) {
-							replicas.push({ replica: replica });
-						} else {
-							replicas[shard] = {
-								replica: replica,
-								status: indexObject.shards[shard].filter(function(replica) {
-									return replica.node === node;
-								})[0]
-							};
-						}
-					});
-				});
-			});
-			indices = indices.map(function(index){
-				return {
-					name: index,
-					state: "open",
-					metadata: clusterState.metadata.indices[index],
-					status: status.indices[index]
-				};
-			}, this);
-			$.each(clusterState.metadata.indices, function(name, index) {
-				if(index.state === "close" && indexFilter( name )) {
-					indices.push({
-						name: name,
-						state: "close",
-						metadata: index,
-						status: null
-					});
-				}
-			});
-			nodes.forEach(function(node) {
-				node.stats = nodeStats.nodes[node.name];
-				var cluster = clusterNodes.nodes[node.name];
-				node.cluster = cluster || { name: "<unknown>" };
-				node.data_node = !( cluster && cluster.attributes && cluster.attributes.data === "false" );
-				for(var i = 0; i < indices.length; i++) {
-					node.routings[i] = node.routings[i] || { name: indices[i].name, replicas: [] };
-					node.routings[i].max_number_of_shards = indices[i].metadata.settings["index.number_of_shards"];
-					node.routings[i].open = indices[i].state === "open";
-				}
-			});
-			var aliasesIndex = {};
-			var aliases = [];
-			var indexClone = indices.map(function() { return false; });
-			$.each(clusterState.metadata.indices, function(name, index) {
-				index.aliases.forEach(function(alias) {
-					var aliasIndex = aliasesIndex[alias] = (alias in aliasesIndex) ? aliasesIndex[alias] : aliases.push( { name: alias, max: -1, min: 999, indices: [].concat(indexClone) }) - 1;
-					var indexIndex = indexIndices[name];
-					var aliasRow = aliases[aliasIndex];
-					aliasRow.min = Math.min(aliasRow.min, indexIndex);
-					aliasRow.max = Math.max(aliasRow.max, indexIndex);
-					aliasRow.indices[indexIndex] = indices[indexIndex];
-				});
-			});
-			cluster.aliases = aliases;
-			cluster.nodes = nodes
-				.filter( nodeFilter_none )
-				.sort( this._nodeSort );
-			indices.unshift({ name: null });
-			this._drawNodesView( cluster, indices );
-			this._refreshButton.enable();
-		},
-		_drawNodesView: function( cluster, indices ) {
-			this._nodesView && this._nodesView.remove();
-			this._nodesView = new ui.NodesView({
-				onRedraw: function() {
-					this.refresh();
-				}.bind(this),
-				interactive: ( this._refreshButton.value === -1 ),
-				aliasRenderer: this._aliasRenderer,
-				cluster: this.cluster,
-				data: {
-					cluster: cluster,
-					indices: indices
-				}
-			});
-			this._nodesView.attach( this.tablEl );
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiClusterOverview", children: [
-				new ui.Toolbar({
-					label: i18n.text("Overview.PageTitle"),
-					left: [
-						this._nodeSortMenu,
-						this._indicesSortMenu,
-						this._aliasMenu,
-						this._indexFilter
-					],
-					right: [
-						this._refreshButton
-					]
-				}),
-				{ tag: "DIV", cls: "uiClusterOverview-table" }
-			] };
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js
deleted file mode 100644
index 2daaf5c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/csvTable/csvTable.js
+++ /dev/null
@@ -1,84 +0,0 @@
-( function( $, app, joey ) {
-
-	var ui = app.ns("ui");
-
-	var CELL_SEPARATOR = ",";
-	var CELL_QUOTE = '"';
-	var LINE_SEPARATOR = "\r\n";
-
-	ui.CSVTable = ui.AbstractWidget.extend({
-		defaults: {
-			results: null
-		},
-		_baseCls: "uiCSVTable",
-		init: function( parent ) {
-			this._super();
-			var results = this.config.results.hits.hits;
-			var columns = this._parseResults( results );
-			this._downloadButton = new ui.Button({
-				label: "Generate Download Link",
-				onclick: this._downloadLinkGenerator_handler
-			});
-			this._downloadLink = $.joey( { tag: "A", text: "download", });
-			this._downloadLink.hide();
-			this._csvText = this._csv_template( columns, results );
-			this.el = $.joey( this._main_template() );
-			this.attach( parent );
-		},
-		_downloadLinkGenerator_handler: function() {
-			var csvData = new Blob( [ this._csvText ], { type: 'text/csv' });
-			var csvURL = URL.createObjectURL( csvData );
-			this._downloadLink.attr( "href", csvURL );
-			this._downloadLink.show();
-		},
-		_parseResults: function( results ) {
-			var columnPaths = {};
-			(function parse( path, obj ) {
-				if( obj instanceof Array ) {
-					for( var i = 0; i < obj.length; i++ ) {
-						parse( path, obj[i] );
-					}
-				} else if( typeof obj === "object" ) {
-					for( var prop in obj ) {
-						parse( path + "." + prop, obj[ prop ] );
-					}
-				} else {
-					columnPaths[ path ] = true;
-				}
-			})( "root", results );
-			var columns = [];
-			for( var column in columnPaths ) {
-				columns.push( column.split(".").slice(1) );
-			}
-			return columns;
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: this._baseCls, id: this.id(), children: [
-				this._downloadButton,
-				this._downloadLink,
-				{ tag: "PRE", text: this._csvText }
-			] }
-		); },
-		_csv_template: function( columns, results ) {
-			return this._header_template( columns ) + LINE_SEPARATOR + this._results_template( columns, results );
-		},
-		_header_template: function( columns ) {
-			return columns.map( function( column ) {
-				return column.join(".");
-			}).join( CELL_SEPARATOR );
-		},
-		_results_template: function( columns, results ) {
-			return results.map( function( result ) {
-				return columns.map( function( column ) {
-					var l = 0,
-						ptr = result;
-					while( l !== column.length && ptr != null ) {
-						ptr = ptr[ column[ l++ ] ];
-					}
-					return ( ptr == null ) ? "" : ( CELL_QUOTE + ptr.toString().replace(/"/g, '""') + CELL_QUOTE );
-				}).join( CELL_SEPARATOR );
-			}).join( LINE_SEPARATOR );
-		}
-	});
-
-})( this.jQuery, this.app, this.joey );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js
deleted file mode 100644
index 7c750b6..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dateHistogram/dateHistogram.js
+++ /dev/null
@@ -1,104 +0,0 @@
-(function( app, i18n, raphael ) {
-
-	var ui = app.ns("ui");
-
-	ui.DateHistogram = ui.AbstractWidget.extend({
-		defaults: {
-			printEl: null, // (optional) if supplied, clicking on elements in the histogram changes the query
-			cluster: null, // (required)
-			query: null,   // (required) the current query
-			spec: null     // (required) // date field spec
-		},
-		init: function() {
-			this._super();
-			this.el = $(this._main_template());
-			this.query = this.config.query.clone();
-			// check if the index/types have changed and rebuild the histogram
-			this.config.query.on("results", function(query) {
-				if(this.queryChanged) {
-					this.buildHistogram(query);
-					this.queryChanged = false;
-				}
-			}.bind(this));
-			this.config.query.on("setIndex", function(query, params) {
-				this.query.setIndex(params.index, params.add);
-				this.queryChanged = true;
-			}.bind(this));
-			this.config.query.on("setType", function(query, params) {
-				this.query.setType(params.type, params.add);
-				this.queryChanged = true;
-			}.bind(this));
-			this.query.search.size = 0;
-			this.query.on("results", this._stat_handler);
-			this.query.on("results", this._aggs_handler);
-			this.buildHistogram();
-		},
-		buildHistogram: function(query) {
-			this.statAggs = this.query.addAggs({
-				stats: { field: this.config.spec.field_name }
-			});
-			this.query.query();
-			this.query.removeAggs(this.statAggs);
-		},
-		_stat_handler: function(query, results) {
-			if(! results.aggregations[this.statAggs]) { return; }
-			this.stats = results.aggregations[this.statAggs];
-			// here we are calculating the approximate range  that will give us less than 121 columns
-			var rangeNames = [ "year", "year", "month", "day", "hour", "minute" ];
-			var rangeFactors = [100000, 12, 30, 24, 60, 60000 ];
-			this.intervalRange = 1;
-			var range = this.stats.max - this.stats.min;
-			do {
-				this.intervalName = rangeNames.pop();
-				var factor = rangeFactors.pop();
-				this.intervalRange *= factor;
-				range = range / factor;
-			} while(range > 70);
-			this.dateAggs = this.query.addAggs({
-				date_histogram : {
-					field: this.config.spec.field_name,
-					interval: this.intervalName
-				}
-			});
-			this.query.query();
-			this.query.removeAggs(this.dateAggs);
-		},
-		_aggs_handler: function(query, results) {
-			if(! results.aggregations[this.dateAggs]) { return; }
-			var buckets = [], range = this.intervalRange;
-			var min = Math.floor(this.stats.min / range) * range;
-			var prec = [ "year", "month", "day", "hour", "minute", "second" ].indexOf(this.intervalName);
-			results.aggregations[this.dateAggs].buckets.forEach(function(entry) {
-				buckets[parseInt((entry.key - min) / range , 10)] = entry.doc_count;
-			}, this);
-			for(var i = 0; i < buckets.length; i++) {
-				buckets[i] = buckets[i] || 0;
-			}
-			this.el.removeClass("loading");
-			var el = this.el.empty();
-			var w = el.width(), h = el.height();
-			var r = raphael(el[0], w, h );
-			var printEl = this.config.printEl;
-			query = this.config.query;
-			r.g.barchart(0, 0, w, h, [buckets], { gutter: "0", vgutter: 0 }).hover(
-				function() {
-					this.flag = r.g.popup(this.bar.x, h - 5, this.value || "0").insertBefore(this);
-				}, function() {
-					this.flag.animate({opacity: 0}, 200, ">", function () {this.remove();});
-				}
-			).click(function() {
-				if(printEl) {
-					printEl.val(window.dateRangeParser.print(min + this.bar.index * range, prec));
-					printEl.trigger("keyup");
-					query.query();
-				}
-			});
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: "uiDateHistogram loading", css: { height: "50px" }, children: [
-				i18n.text("General.LoadingAggs")
-			] }
-		); }
-	});
-
-})( this.app, this.i18n, this.Raphael );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js
deleted file mode 100644
index 80176fd..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/dialogPanel/dialogPanel.js
+++ /dev/null
@@ -1,22 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.DialogPanel = ui.DraggablePanel.extend({
-		_commit_handler: function(jEv) {
-			this.fire("commit", this, { jEv: jEv });
-		},
-		_main_template: function() {
-			var t = this._super();
-			t.children.push(this._actionsBar_template());
-			return t;
-		},
-		_actionsBar_template: function() {
-			return { tag: "DIV", cls: "pull-right", children: [
-				new app.ui.Button({ label: "Cancel", onclick: this._close_handler }),
-				new app.ui.Button({ label: "OK", onclick: this._commit_handler })
-			]};
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js
deleted file mode 100644
index ee0a98a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/draggablePanel/draggablePanel.js
+++ /dev/null
@@ -1,42 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.DraggablePanel = ui.AbstractPanel.extend({
-		defaults: {
-	//		title: ""   // (required) text for the panel title
-		},
-
-		_baseCls: "uiPanel",
-
-		init: function() {
-			this._super();
-			this.body = $(this._body_template());
-			this.title = $(this._title_template());
-			this.el = $.joey( this._main_template() );
-			this.el.css( { width: this.config.width } );
-			this.dd = new app.ux.DragDrop({
-				pickupSelector: this.el.find(".uiPanel-titleBar"),
-				dragObj: this.el
-			});
-			// open the panel if set in configuration
-			this.config.open && this.open();
-		},
-
-		setBody: function(body) {
-				this.body.empty().append(body);
-		},
-		_body_template: function() { return { tag: "DIV", cls: "uiPanel-body", css: { height: this.config.height + (this.config.height === 'auto' ? "" : "px" ) }, children: [ this.config.body ] }; },
-		_title_template: function() { return { tag: "SPAN", cls: "uiPanel-title", text: this.config.title }; },
-		_main_template: function() { return (
-			{ tag: "DIV", id: this.id(), cls: this._baseCls, children: [
-				{ tag: "DIV", cls: "uiPanel-titleBar", children: [
-					{ tag: "DIV", cls: "uiPanel-close", onclick: this._close_handler, text: "x" },
-					this.title
-				]},
-				this.body
-			] }
-		); }
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css
deleted file mode 100644
index d9acccf..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.css
+++ /dev/null
@@ -1,9 +0,0 @@
-.uiFilterBrowser-row * {
-	margin-right: 0.4em;
-}
-
-.uiFilterBrowser-row BUTTON {
-	height: 22px;
-	position: relative;
-	top: 1px;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js
deleted file mode 100644
index ca03154..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/filterBrowser/filterBrowser.js
+++ /dev/null
@@ -1,205 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var data = app.ns("data");
-	var ut = app.ns("ut");
-
-	ui.FilterBrowser = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null,  // (required) instanceof app.services.Cluster
-			index: "" // (required) name of the index to query
-		},
-
-		init: function(parent) {
-			this._super();
-			this._cluster = this.config.cluster;
-			this.el = $(this._main_template());
-			this.filtersEl = this.el.find(".uiFilterBrowser-filters");
-			this.attach( parent );
-			new data.MetaDataFactory({ cluster: this._cluster, onReady: function(metadata, eventData) {
-				this.metadata = metadata;
-				this._createFilters_handler(eventData.originalData.metadata.indices);
-			}.bind(this) });
-		},
-
-		_createFilters_handler: function(data) {
-			var filters = [];
-			function scan_properties(path, obj) {
-				if (obj.properties) {
-					for (var prop in obj.properties) {
-						scan_properties(path.concat(prop), obj.properties[prop]);
-					}
-				} else {
-					// handle multi_field 
-					if (obj.fields) {
-						for (var subField in obj.fields) {
-							filters.push({ path: (path[path.length - 1] !== subField) ? path.concat(subField) : path, type: obj.fields[subField].type, meta: obj.fields[subField] });
-						}
-					} else {
-						filters.push({ path: path, type: obj.type, meta: obj });
-					}
-				}
-			}
-			for(var type in data[this.config.index].mappings) {
-				scan_properties([type], data[this.config.index].mappings[type]);
-			}
-
-			filters.sort( function(a, b) {
-				var x = a.path.join(".");
-				var y = b.path.join(".");
-				return (x < y) ? -1 : (x > y) ? 1 : 0;
-			});
-
-			this.filters = [
-				{ path: ["match_all"], type: "match_all", meta: {} },
-				{ path: ["_all"], type: "_all", meta: {}}
-			].concat(filters);
-
-			this._addFilterRow_handler();
-		},
-		
-		_addFilterRow_handler: function() {
-			this.filtersEl.append(this._filter_template());
-		},
-		
-		_removeFilterRow_handler: function(jEv) {
-			$(jEv.target).closest("DIV.uiFilterBrowser-row").remove();
-			if(this.filtersEl.children().length === 0) {
-				this._addFilterRow_handler();
-			}
-		},
-		
-		_search_handler: function() {
-			var search = new data.BoolQuery();
-			search.setSize( this.el.find(".uiFilterBrowser-outputSize").val() )
-			this.fire("startingSearch");
-			this.filtersEl.find(".uiFilterBrowser-row").each(function(i, row) {
-				row = $(row);
-				var bool = row.find(".bool").val();
-				var field = row.find(".field").val();
-				var op = row.find(".op").val();
-				var value = {};
-				if(field === "match_all") {
-					op = "match_all";
-				} else if(op === "range") {
-					var lowqual = row.find(".lowqual").val(),
-						highqual = row.find(".highqual").val();
-					if(lowqual.length) {
-						value[row.find(".lowop").val()] = lowqual;
-					}
-					if(highqual.length) {
-						value[row.find(".highop").val()] = highqual;
-					}
-				} else if(op === "fuzzy") {
-					var qual = row.find(".qual").val(),
-						fuzzyqual = row.find(".fuzzyqual").val();
-					if(qual.length) {
-						value["value"] = qual;
-					}
-					if(fuzzyqual.length) {
-						value[row.find(".fuzzyop").val()] = fuzzyqual;
-					}
-				} else {
-					value = row.find(".qual").val();
-				}
-				search.addClause(value, field, op, bool);
-			});
-			if(this.el.find(".uiFilterBrowser-showSrc").attr("checked")) {
-				this.fire("searchSource", search.search);
-			}
-			this._cluster.post( this.config.index + "/_search", search.getData(), this._results_handler );
-		},
-		
-		_results_handler: function( data ) {
-			var type = this.el.find(".uiFilterBrowser-outputFormat").val();
-			this.fire("results", this, { type: type, data: data, metadata: this.metadata });
-		},
-		
-		_changeQueryField_handler: function(jEv) {
-			var select = $(jEv.target);
-			var spec = select.children(":selected").data("spec");
-			select.siblings().remove(".op,.qual,.range,.fuzzy");
-			var ops = [];
-			if(spec.type === 'match_all') {
-			} else if(spec.type === '_all') {
-				ops = ["query_string"];
-			} else if(spec.type === 'string' || spec.type === 'text' || spec.type === 'keyword') {
-				ops = ["term", "wildcard", "prefix", "fuzzy", "range", "query_string", "text", "missing"];
-			} else if(spec.type === 'long' || spec.type === 'integer' || spec.type === 'float' ||
-					spec.type === 'byte' || spec.type === 'short' || spec.type === 'double') {
-				ops = ["term", "range", "fuzzy", "query_string", "missing"];
-			} else if(spec.type === 'date') {
-				ops = ["term", "range", "fuzzy", "query_string", "missing"];
-			} else if(spec.type === 'geo_point') {
-				ops = ["missing"];
-			} else if(spec.type === 'ip') {
-				ops = ["term", "range", "fuzzy", "query_string", "missing"];
-			} else if(spec.type === 'boolean') {
-				ops = ["term"]
-			}
-			select.after({ tag: "SELECT", cls: "op", onchange: this._changeQueryOp_handler, children: ops.map(ut.option_template) });
-			select.next().change();
-		},
-		
-		_changeQueryOp_handler: function(jEv) {
-			var op = $(jEv.target), opv = op.val();
-			op.siblings().remove(".qual,.range,.fuzzy");
-			if(opv === 'term' || opv === 'wildcard' || opv === 'prefix' || opv === "query_string" || opv === 'text') {
-				op.after({ tag: "INPUT", cls: "qual", type: "text" });
-			} else if(opv === 'range') {
-				op.after(this._range_template());
-			} else if(opv === 'fuzzy') {
-				op.after(this._fuzzy_template());
-			}
-		},
-		
-		_main_template: function() {
-			return { tag: "DIV", children: [
-				{ tag: "DIV", cls: "uiFilterBrowser-filters" },
-				{ tag: "BUTTON", type: "button", text: i18n.text("General.Search"), onclick: this._search_handler },
-				{ tag: "LABEL", children:
-					i18n.complex("FilterBrowser.OutputType", { tag: "SELECT", cls: "uiFilterBrowser-outputFormat", children: [
-						{ text: i18n.text("Output.Table"), value: "table" },
-						{ text: i18n.text("Output.JSON"), value: "json" },
-						{ text: i18n.text("Output.CSV"), value: "csv" }
-					].map(function( o ) { return $.extend({ tag: "OPTION" }, o ); } ) } )
-				},
-				{ tag: "LABEL", children:
-					i18n.complex("FilterBrowser.OutputSize", { tag: "SELECT", cls: "uiFilterBrowser-outputSize",
-						children: [ "10", "50", "250", "1000", "5000", "25000" ].map( ut.option_template )
-					} )
-				},
-				{ tag: "LABEL", children: [ { tag: "INPUT", type: "checkbox", cls: "uiFilterBrowser-showSrc" }, i18n.text("Output.ShowSource") ] }
-			]};
-		},
-		
-		_filter_template: function() {
-			return { tag: "DIV", cls: "uiFilterBrowser-row", children: [
-				{ tag: "SELECT", cls: "bool", children: ["must", "must_not", "should"].map(ut.option_template) },
-				{ tag: "SELECT", cls: "field", onchange: this._changeQueryField_handler, children: this.filters.map(function(f) {
-					return { tag: "OPTION", data: { spec: f }, value: f.path.join("."), text: f.path.join(".") };
-				})},
-				{ tag: "BUTTON", type: "button", text: "+", onclick: this._addFilterRow_handler },
-				{ tag: "BUTTON", type: "button", text: "-", onclick: this._removeFilterRow_handler }
-			]};
-		},
-		
-		_range_template: function() {
-			return { tag: "SPAN", cls: "range", children: [
-				{ tag: "SELECT", cls: "lowop", children: ["gt", "gte"].map(ut.option_template) },
-				{ tag: "INPUT", type: "text", cls: "lowqual" },
-				{ tag: "SELECT", cls: "highop", children: ["lt", "lte"].map(ut.option_template) },
-				{ tag: "INPUT", type: "text", cls: "highqual" }
-			]};
-		},
-
-		_fuzzy_template: function() {
-			return { tag: "SPAN", cls: "fuzzy", children: [
-				{ tag: "INPUT", cls: "qual", type: "text" },
-				{ tag: "SELECT", cls: "fuzzyop", children: ["max_expansions", "min_similarity"].map(ut.option_template) },
-				{ tag: "INPUT", cls: "fuzzyqual", type: "text" }
-			]};
-		}
-	});
-	
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.css
deleted file mode 100644
index b61badf..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.css
+++ /dev/null
@@ -1,10 +0,0 @@
-.uiHeader {
-	padding: 3px 10px;
-}
-
-.uiHeader-name, .uiHeader-status {
-	font-size: 1.2em;
-	font-weight: bold;
-	padding: 0 10px;
-}
-
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.js
deleted file mode 100644
index a6e1155..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/header/header.js
+++ /dev/null
@@ -1,73 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.Header = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null,
-			clusterState: null
-		},
-		_baseCls: "uiHeader",
-		init: function() {
-			this._clusterConnect = new ui.ClusterConnect({
-				cluster: this.config.cluster
-			});
-			var quicks = [
-				{ text: i18n.text("Nav.Info"), path: "" },
-				{ text: i18n.text("Nav.Status"), path: "_stats" },
-				{ text: i18n.text("Nav.NodeStats"), path: "_nodes/stats" },
-				{ text: i18n.text("Nav.ClusterNodes"), path: "_nodes" },
-				{ text: i18n.text("Nav.Plugins"), path: "_nodes/plugins" },
-				{ text: i18n.text("Nav.ClusterState"), path: "_cluster/state" },
-				{ text: i18n.text("Nav.ClusterHealth"), path: "_cluster/health" },
-				{ text: i18n.text("Nav.Templates"), path: "_template" }
-			];
-			var cluster = this.config.cluster;
-			var quickPanels = {};
-			var menuItems = quicks.map( function( item ) {
-				return { text: item.text, onclick: function() {
-					cluster.get( item.path, function( data ) {
-						quickPanels[ item.path ] && quickPanels[ item.path ].el && quickPanels[ item.path ].remove();
-						quickPanels[ item.path ] = new ui.JsonPanel({
-							title: item.text,
-							json: data
-						});
-					} );
-				} };
-			}, this );
-			this._quickMenu = new ui.MenuButton({
-				label: i18n.text("NodeInfoMenu.Title"),
-				menu: new ui.MenuPanel({
-					items: menuItems
-				})
-			});
-			this.el = $.joey( this._main_template() );
-			this.nameEl = this.el.find(".uiHeader-name");
-			this.statEl = this.el.find(".uiHeader-status");
-			this._clusterState = this.config.clusterState;
-			this._clusterState.on("data", function( state ) {
-				var shards = state.status._shards;
-				var colour = state.clusterHealth.status;
-				var name = state.clusterState.cluster_name;
-				this.nameEl.text( name );
-				this.statEl
-					.text( i18n.text("Header.ClusterHealth", colour, shards.successful, shards.total ) )
-					.css( "background", colour );
-			}.bind(this));
-			this.statEl.text( i18n.text("Header.ClusterNotConnected") ).css("background", "grey");
-			this._clusterState.refresh();
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: this._baseCls, children: [
-				this._clusterConnect,
-				{ tag: "SPAN", cls: "uiHeader-name" },
-				{ tag: "SPAN", cls: "uiHeader-status" },
-				{ tag: "H1", text: i18n.text("General.Elasticsearch") },
-				{ tag: "SPAN", cls: "pull-right", children: [
-					this._quickMenu
-				] }
-			] }
-		); }
-	} );
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js
deleted file mode 100644
index a76be2d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/helpPanel/helpPanel.js
+++ /dev/null
@@ -1,21 +0,0 @@
-(function( app ){
-
-	var ui = app.ns("ui");
-
-	ui.HelpPanel = ui.InfoPanel.extend({
-		defaults: {
-			ref: "",
-			open: true,
-			autoRemove: true,
-			modal: false,
-			width: 500,
-			height: 450,
-			title: i18n.text("General.Help")
-		},
-		init: function() {
-			this._super();
-			this.body.append(i18n.text(this.config.ref));
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js
deleted file mode 100644
index 3eab4f5..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexOverview/indexOverview.js
+++ /dev/null
@@ -1,115 +0,0 @@
-(function( $, app, i18n ) {
-	
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.IndexOverview = ui.Page.extend({
-		defaults: {
-			cluster: null
-		},
-		init: function() {
-			this._super();
-			this.cluster = this.config.cluster;
-			this._clusterState = this.config.clusterState;
-			this._clusterState.on("data", this._refresh_handler );
-			this.el = $(this._main_template());
-			this._refresh_handler();
-		},
-		remove: function() {
-			this._clusterState.removeObserver( "data", this._refresh_handler );
-		},
-		_refresh_handler: function() {
-			var state = this._clusterState;
-			var view = {
-				indices: acx.eachMap( state.status.indices, function( name, index ) {
-					return {
-						name: name,
-						state: index
-					};
-				}).sort( function( a, b ) {
-					return a.name < b.name ? -1 : 1;
-				})
-			};
-			this._indexViewEl && this._indexViewEl.remove();
-			this._indexViewEl = $( this._indexTable_template( view ) );
-			this.el.find(".uiIndexOverview-table").append( this._indexViewEl );
-		},
-		_newIndex_handler: function() {
-			var fields = new app.ux.FieldCollection({
-				fields: [
-					new ui.TextField({ label: i18n.text("ClusterOverView.IndexName"), name: "_name", require: true }),
-					new ui.TextField({
-						label: i18n.text("ClusterOverview.NumShards"),
-						name: "number_of_shards",
-						value: "5",
-						require: function( val ) { return parseInt( val, 10 ) >= 1; }
-					}),
-					new ui.TextField({
-						label: i18n.text("ClusterOverview.NumReplicas"),
-						name: "number_of_replicas",
-						value: "1",
-						require: function( val ) { return parseInt( val, 10 ) >= 0; }
-					})
-				]
-			});
-			var dialog = new ui.DialogPanel({
-				title: i18n.text("ClusterOverview.NewIndex"),
-				body: new ui.PanelForm({ fields: fields }),
-				onCommit: function(panel, args) {
-					if(fields.validate()) {
-						var data = fields.getData();
-						var name = data["_name"];
-						delete data["_name"];
-						this.config.cluster.put( encodeURIComponent( name ), JSON.stringify({ settings: { index: data } }), function(d) {
-							dialog.close();
-							alert(JSON.stringify(d));
-							this._clusterState.refresh();
-						}.bind(this) );
-					}
-				}.bind(this)
-			}).open();
-		},
-		_indexTable_template: function( view ) { return (
-			{ tag: "TABLE", cls: "table", children: [
-				{ tag: "THEAD", children: [
-					{ tag: "TR", children: [
-						{ tag: "TH" },
-						{ tag: "TH", children: [
-							{ tag: "H3", text: "Size" }
-						] },
-						{ tag: "TH", children: [
-							{ tag: "H3", text: "Docs" }
-						] }
-					] }
-				] },
-				{ tag: "TBODY", cls: "striped", children: view.indices.map( this._index_template, this ) }
-			] }
-		); },
-
-		_index_template: function( index ) { return (
-			{ tag: "TR", children: [
-				{ tag: "TD", children: [
-					{ tag: "H3", text: index.name }
-				] },
-				{ tag: "TD", text: ut.byteSize_template( index.state.primaries.store.size_in_bytes ) + "/" + ut.byteSize_template( index.state.total.store.size_in_bytes ) },
-				{ tag: "TD", text: ut.count_template( index.state.primaries.docs.count ) }
-			] }
-		); },
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiIndexOverview", children: [
-				new ui.Toolbar({
-					label: i18n.text("IndexOverview.PageTitle"),
-					left: [
-						new ui.Button({
-							label: i18n.text("ClusterOverview.NewIndex"),
-							onclick: this._newIndex_handler
-						}),
-					]
-				}),
-				{ tag: "DIV", cls: "uiIndexOverview-table", children: this._indexViewEl }
-			] };
-		}
-
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js
deleted file mode 100644
index 7f51d5f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/indexSelector/indexSelector.js
+++ /dev/null
@@ -1,45 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.IndexSelector = ui.AbstractWidget.extend({
-		init: function(parent) {
-			this._super();
-			this.el = $(this._main_template());
-			this.attach( parent );
-			this.cluster = this.config.cluster;
-			this.update();
-		},
-		update: function() {
-			this.cluster.get( "_stats", this._update_handler );
-		},
-		
-		_update_handler: function(data) {
-			var options = [];
-			var index_names = Object.keys(data.indices).sort();
-			for(var i=0; i < index_names.length; i++) { 
-				name = index_names[i];
-				options.push(this._option_template(name, data.indices[name])); 
-			}
-			this.el.find(".uiIndexSelector-select").empty().append(this._select_template(options));
-			this._indexChanged_handler();
-		},
-		
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiIndexSelector", children: i18n.complex( "IndexSelector.SearchIndexForDocs", { tag: "SPAN", cls: "uiIndexSelector-select" } ) };
-		},
-
-		_indexChanged_handler: function() {
-			this.fire("indexChanged", this.el.find("SELECT").val());
-		},
-
-		_select_template: function(options) {
-			return { tag: "SELECT", children: options, onChange: this._indexChanged_handler };
-		},
-		
-		_option_template: function(name, index) {
-			return  { tag: "OPTION", value: name, text: i18n.text("IndexSelector.NameWithDocs", name, index.primaries.docs.count ) };
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css
deleted file mode 100644
index 7d4a86c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.css
+++ /dev/null
@@ -1,38 +0,0 @@
-
-.uiInfoPanel {
-	background: rgba(0, 0, 0, 0.75);
-	color: white;
-	border-radius: 8px;
-	padding: 1px;
-}
-.uiInfoPanel .uiPanel-titleBar {
-	background: rgba(74, 74, 74, 0.75);
-	background: -moz-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
-	background: -webkit-linear-gradient(top, rgba(84, 84, 84, 0.75), rgba(54, 54, 54, 0.75), rgba(64, 64, 64, 0.75));
-	border-radius: 8px 8px 0 0;
-	padding: 1px 0 2px 0;
-	border-bottom: 0;
-}
-.uiInfoPanel .uiPanel-close {
-	border-radius: 6px;
-	height: 13px;
-	width: 13px;
-	background: #ccc;
-	left: 3px;
-	top: 1px;
-	color: #333;
-	text-shadow: #222 0 0 1px;
-	line-height: 11px;
-	border: 0;
-	padding: 0;
-}
-.uiInfoPanel .uiPanel-close:hover {
-	background: #eee;
-}
-
-.uiInfoPanel .uiPanel-body {
-	background: transparent;
-	padding: 20px;
-	border-radius: 0 0 8px 8px;
-	border: 1px solid #222;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js
deleted file mode 100644
index db24400..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/infoPanel/infoPanel.js
+++ /dev/null
@@ -1,9 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.InfoPanel = ui.DraggablePanel.extend({
-		_baseCls: "uiPanel uiInfoPanel"
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css
deleted file mode 100644
index 20aff88..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.css
+++ /dev/null
@@ -1,4 +0,0 @@
-.uiJsonPanel SPAN.uiJsonPretty-string { color: #6F6; }
-.uiJsonPanel SPAN.uiJsonPretty-number { color: #66F; }
-.uiJsonPanel SPAN.uiJsonPretty-null { color: #F66; }
-.uiJsonPanel SPAN.uiJsonPretty-boolean { color: #F6F; }
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js
deleted file mode 100644
index 4e83baa..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPanel/jsonPanel.js
+++ /dev/null
@@ -1,24 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.JsonPanel = ui.InfoPanel.extend({
-		defaults: {
-			json: null, // (required)
-			modal: false,
-			open: true,
-			autoRemove: true,
-			height: 500,
-			width: 600
-		},
-
-		_baseCls: "uiPanel uiInfoPanel uiJsonPanel",
-
-		_body_template: function() {
-			var body = this._super();
-			body.children = [ new ui.JsonPretty({ obj: this.config.json }) ];
-			return body;
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css
deleted file mode 100644
index 7a1a0ba..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.css
+++ /dev/null
@@ -1,22 +0,0 @@
-DIV.uiJsonPretty-object { font-size: 1.26em; font-family: monospace; }
-UL.uiJsonPretty-object,
-UL.uiJsonPretty-array { margin: 0; padding: 0 0 0 2em; list-style: none; }
-UL.uiJsonPretty-object LI,
-UL.uiJsonPretty-array LI { padding: 0; margin: 0; }
-.expando > SPAN.uiJsonPretty-name:before { content: "\25bc\a0"; color: #555; position: relative; top: 2px; }
-.expando.uiJsonPretty-minimised > SPAN.uiJsonPretty-name:before { content: "\25ba\a0"; top: 0; }
-.uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before,
-.expando .uiJsonPretty-minimised > UL SPAN.uiJsonPretty-name:before { content: ""; }
-SPAN.uiJsonPretty-string,
-SPAN.uiJsonPretty-string A { color: green; }
-SPAN.uiJsonPretty-string A { text-decoration: underline;}
-SPAN.uiJsonPretty-number { color: blue; }
-SPAN.uiJsonPretty-null { color: red; }
-SPAN.uiJsonPretty-boolean { color: purple; }
-.expando > .uiJsonPretty-name { cursor: pointer; }
-.expando > .uiJsonPretty-name:hover { text-decoration: underline; }
-.uiJsonPretty-minimised { white-space: nowrap; overflow: hidden; }
-.uiJsonPretty-minimised > UL { opacity: 0.6; }
-.uiJsonPretty-minimised .uiJsonPretty-minimised > UL { opacity: 1; }
-.uiJsonPretty-minimised UL, .uiJsonPretty-minimised LI { display: inline; padding: 0; }
-
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js
deleted file mode 100644
index 76820bb..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/jsonPretty/jsonPretty.js
+++ /dev/null
@@ -1,89 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.JsonPretty = ui.AbstractWidget.extend({
-		defaults: {
-			obj: null
-		},
-		init: function(parent) {
-			this._super();
-			this.el = $(this._main_template());
-			this.attach(parent);
-			this.el.click(this._click_handler);
-		},
-		
-		_click_handler: function(jEv) {
-			var t = $(jEv.target).closest(".uiJsonPretty-name").closest("LI");
-			if(t.length === 0 || t.parents(".uiJsonPretty-minimised").length > 0) { return; }
-			t.toggleClass("uiJsonPretty-minimised");
-			jEv.stopPropagation();
-		},
-		
-		_main_template: function() {
-			try {
-					return { tag: "DIV", cls: "uiJsonPretty", children: this.pretty.parse(this.config.obj) };
-			}	catch (error) {
-					throw "JsonPretty error: " + error.message;
-			}
-		},
-		
-		pretty: { // from https://github.com/RyanAmos/Pretty-JSON/blob/master/pretty_json.js
-			"expando" : function(value) {
-				return (value && (/array|object/i).test(value.constructor.name)) ? "expando" : "";
-			},
-			"parse": function (member) {
-				return this[(member == null) ? 'null' : member.constructor.name.toLowerCase()](member);
-			},
-			"null": function (value) {
-				return this['value']('null', 'null');
-			},
-			"array": function (value) {
-				var results = [];
-				var lastItem = value.length - 1;
-				value.forEach(function( v, i ) {
-					results.push({ tag: "LI", cls: this.expando(v), children: [ this['parse'](v) ] });
-					if( i !== lastItem ) {
-						results.push(",");
-					}
-				}, this);
-				return [ "[ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-array", children: results } : null), "]" ];
-			},
-			"object": function (value) {
-				var results = [];
-				var keys = Object.keys( value );
-				var lastItem = keys.length - 1;
-				keys.forEach( function( key, i ) {
-					var children = [ this['value']( 'name', '"' + key + '"' ), ": ", this['parse']( value[ key ]) ];
-					if( i !== lastItem ) {
-						children.push(",");
-					}
-					results.push( { tag: "LI", cls: this.expando( value[ key ] ), children: children } );
-				}, this);
-				return [ "{ ", ((results.length > 0) ? { tag: "UL", cls: "uiJsonPretty-object", children: results } : null ),  "}" ];
-			},
-			"number": function (value) {
-				return this['value']('number', value.toString());
-			},
-			"string": function (value) {
-				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
-					return this['link']( value );
-				} else {
-					return this['value']('string', '"' + value.toString() + '"');
-				}
-			},
-			"boolean": function (value) {
-				return this['value']('boolean', value.toString());
-			},
-			"link": function( value ) {
-					return this['value']("string", { tag: "A", href: value, target: "_blank", text: '"' + value + '"' } );
-			},
-			"value": function (type, value) {
-				if (/^(http|https|file):\/\/[^\s]+$/.test(value)) {
-				}
-				return { tag: "SPAN", cls: "uiJsonPretty-" + type, text: value };
-			}
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css
deleted file mode 100644
index 21c36bc..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.uiMenuButton {
-	display: inline-block;
-}
-
-.uiMenuButton .uiButton-label {
-	background-image: url('data:image/gif;base64,R0lGODlhDwAPAIABAP///////yH5BAEAAAEALAAAAAAPAA8AAAITjI+py+0P4wG0gmavq1HLD4ZiAQA7');
-	background-position: right 50%;
-	background-repeat: no-repeat;
-	padding-right: 17px;
-	text-align: left;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js
deleted file mode 100644
index aa7fc8a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuButton/menuButton.js
+++ /dev/null
@@ -1,22 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.MenuButton = app.ui.Button.extend({
-		defaults: {
-			menu: null
-		},
-		_baseCls: "uiButton uiMenuButton",
-		init: function(parent) {
-			this._super(parent);
-			this.menu = this.config.menu;
-			this.on("click", this.openMenu_handler);
-			this.menu.on("open", function() { this.el.addClass("active"); }.bind(this));
-			this.menu.on("close", function() { this.el.removeClass("active"); }.bind(this));
-		},
-		openMenu_handler: function(jEv) {
-			this.menu && this.menu.open(jEv);
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css
deleted file mode 100644
index 8236a85..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.css
+++ /dev/null
@@ -1,30 +0,0 @@
-.uiMenuPanel {
-	border: 1px solid #668dc6;
-	position: absolute;
-	background: #96c6eb;
-	color: white;
-}
-
-.uiMenuPanel LI {
-	list-style: none;
-	border-bottom: 1px solid #668dc6;
-}
-
-.uiMenuPanel LI:hover {
-	background: #2575b7;
-}
-
-.uiMenuPanel LI:last-child {
-	border-bottom: 0;
-} 
-
-.uiMenuPanel-label {
-	white-space: nowrap;
-	padding: 2px 10px 2px 10px;
-	cursor: pointer;
-}
-
-.disabled .uiMenuPanel-label {
-	cursor: auto;
-	color: #888;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js
deleted file mode 100644
index 631ea5b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/menuPanel/menuPanel.js
+++ /dev/null
@@ -1,43 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.MenuPanel = ui.AbstractPanel.extend({
-		defaults: {
-			items: [],		// (required) an array of menu items
-			modal: false
-		},
-		_baseCls: "uiMenuPanel",
-		init: function() {
-			this._super();
-			this.el = $(this._main_template());
-		},
-		open: function(jEv) {
-			this._super(jEv);
-			var cx = this; setTimeout(function() { $(document).bind("click", cx._close_handler); }, 50);
-		},
-		_getItems: function() {
-			return this.config.items;
-		},
-		_close_handler: function(jEv) {
-			this._super(jEv);
-			$(document).unbind("click", this._close_handler);
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: this._baseCls, children: this._getItems().map(this._menuItem_template, this) };
-		},
-		_menuItem_template: function(item) {
-			var dx = item.disabled ? { onclick: function() {} } : {};
-			return { tag: "LI", cls: "uiMenuPanel-item" + (item.disabled ? " disabled" : "") + (item.selected ? " selected" : ""), children: [ $.extend({ tag: "DIV", cls: "uiMenuPanel-label" }, item, dx ) ] };
-		},
-		_getPosition: function(jEv) {
-			var right = !! $(jEv.target).parents(".pull-right").length;
-			var parent = $(jEv.target).closest("BUTTON");
-			return parent.vOffset()
-				.addY(parent.vSize().y)
-				.addX( right ? parent.vSize().x - this.el.vOuterSize().x : 0 )
-				.asOffset();
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css
deleted file mode 100644
index e7a7778..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.css
+++ /dev/null
@@ -1,88 +0,0 @@
-.uiNodesView TH,
-.uiNodesView TD {
-	vertical-align: top;
-	padding: 2px 20px;
-}
-
-.uiNodesView TH.close,
-.uiNodesView TD.close {
-	color: #888;
-	background: #f2f2f2;
-}
-
-.uiNodesView .uiMenuButton .uiButton-content {
-	padding-right: 3px;
-	border-radius: 8px;
-	height: 14px;
-}
-
-.uiNodesView .uiMenuButton.active .uiButton-content,
-.uiNodesView .uiMenuButton:active .uiButton-content {
-	border-bottom-right-radius: 0px;
-	border-bottom-left-radius: 0px;
-}
-
-.uiNodesView .uiMenuButton .uiButton-label {
-	padding: 0px 17px 0px 7px;
-}
-
-.uiNodesView-hasAlias {
-	text-align: center;
-}
-.uiNodesView-hasAlias.max {
-	border-top-right-radius: 8px;
-	border-bottom-right-radius: 8px;
-}
-.uiNodesView-hasAlias.min {
-	border-top-left-radius: 8px;
-	border-bottom-left-radius: 8px;
-}
-.uiNodesView-hasAlias-remove {
-	float: right;
-	font-weight: bold;
-	cursor: pointer;
-}
-
-.uiNodesView TD.uiNodesView-icon {
-	padding: 20px 0px 15px 20px;
-}
-
-.uiNodesView-node:nth-child(odd) {
-	background: #eee;
-}
-
-.uiNodesView-routing {
-	position: relative;
-	min-width: 90px;
-}
-
-.uiNodesView-nullReplica,
-.uiNodesView-replica {
-	box-sizing: border-box;
-	cursor: pointer;
-	float: left;
-	height: 40px;
-	width: 35px;
-	margin: 4px;
-	border: 2px solid #444;
-	padding: 2px;
-	font-size: 32px;
-	line-height: 32px;
-	text-align: center;
-	letter-spacing: -5px;
-	text-indent: -7px;
-}
-
-.uiNodesView-replica.primary {
-	border-width: 4px;
-	line-height: 29px;
-}
-
-.uiNodesView-nullReplica {
-	border-color: transparent;
-}
-
-.uiNodesView-replica.state-UNASSIGNED { background: #eeeeee; color: #999; border-color: #666; float: none; display: inline-block; }
-.uiNodesView-replica.state-INITIALIZING { background: #dddc88; }
-.uiNodesView-replica.state-STARTED { background: #99dd88; }
-.uiNodesView-replica.state-RELOCATING { background: #dc88dd; }
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js
deleted file mode 100644
index 08ce1d3..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesView.js
+++ /dev/null
@@ -1,277 +0,0 @@
-(function( app, i18n, joey ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.NodesView = ui.AbstractWidget.extend({
-		defaults: {
-			interactive: true,
-			aliasRenderer: "list",
-			scaleReplicas: 1,
-			cluster: null,
-			data: null
-		},
-		init: function() {
-			this._super();
-			this.interactive = this.config.interactive;
-			this.cluster = this.config.cluster;
-			this._aliasRenderFunction = {
-				"none": this._aliasRender_template_none,
-				"list": this._aliasRender_template_list,
-				"full": this._aliasRender_template_full
-			}[ this.config.aliasRenderer ];
-			this._styleSheetEl = joey({ tag: "STYLE", text: ".uiNodesView-nullReplica, .uiNodesView-replica { zoom: " + this.config.scaleReplicas + " }" });
-			this.el = $( this._main_template( this.config.data.cluster, this.config.data.indices ) );
-		},
-
-		_newAliasAction_handler: function( index ) {
-			var fields = new app.ux.FieldCollection({
-				fields: [
-					new ui.TextField({ label: i18n.text("AliasForm.AliasName"), name: "alias", require: true })
-				]
-			});
-			var dialog = new ui.DialogPanel({
-				title: i18n.text("AliasForm.NewAliasForIndexName", index.name),
-				body: new ui.PanelForm({ fields: fields }),
-				onCommit: function(panel, args) {
-					if(fields.validate()) {
-						var data = fields.getData();
-						var command = {
-							"actions" : [
-								{ "add" : { "index" : index.name, "alias" : data["alias"] } }
-							]
-						};
-						this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
-							dialog.close();
-							alert(JSON.stringify(d));
-							this.fire("redraw");
-						}.bind(this) );
-					}
-				}.bind(this)
-			}).open();
-		},
-		_postIndexAction_handler: function(action, index, redraw) {
-			this.cluster.post(encodeURIComponent( index.name ) + "/" + encodeURIComponent( action ), null, function(r) {
-				alert(JSON.stringify(r));
-				redraw && this.fire("redraw");
-			}.bind(this));
-		},
-		_optimizeIndex_handler: function(index) {
-			var fields = new app.ux.FieldCollection({
-				fields: [
-					new ui.TextField({ label: i18n.text("OptimizeForm.MaxSegments"), name: "max_num_segments", value: "1", require: true }),
-					new ui.CheckField({ label: i18n.text("OptimizeForm.ExpungeDeletes"), name: "only_expunge_deletes", value: false }),
-					new ui.CheckField({ label: i18n.text("OptimizeForm.FlushAfter"), name: "flush", value: true }),
-					new ui.CheckField({ label: i18n.text("OptimizeForm.WaitForMerge"), name: "wait_for_merge", value: false })
-				]
-			});
-			var dialog = new ui.DialogPanel({
-				title: i18n.text("OptimizeForm.OptimizeIndex", index.name),
-				body: new ui.PanelForm({ fields: fields }),
-				onCommit: function( panel, args ) {
-					if(fields.validate()) {
-						this.cluster.post(encodeURIComponent( index.name ) + "/_optimize", fields.getData(), function(r) {
-							alert(JSON.stringify(r));
-						});
-						dialog.close();
-					}
-				}.bind(this)
-			}).open();
-		},
-		_testAnalyser_handler: function(index) {
-			this.cluster.get(encodeURIComponent( index.name ) + "/_analyze?text=" + encodeURIComponent( prompt( i18n.text("IndexCommand.TextToAnalyze") ) ), function(r) {
-				alert(JSON.stringify(r, true, "  "));
-			});
-		},
-		_deleteIndexAction_handler: function(index) {
-			if( prompt( i18n.text("AliasForm.DeleteAliasMessage", i18n.text("Command.DELETE"), index.name ) ) === i18n.text("Command.DELETE") ) {
-				this.cluster["delete"](encodeURIComponent( index.name ), null, function(r) {
-					alert(JSON.stringify(r));
-					this.fire("redraw");
-				}.bind(this) );
-			}
-		},
-		_shutdownNode_handler: function(node) {
-			if(prompt( i18n.text("IndexCommand.ShutdownMessage", i18n.text("Command.SHUTDOWN"), node.cluster.name ) ) === i18n.text("Command.SHUTDOWN") ) {
-				this.cluster.post( "_cluster/nodes/" + encodeURIComponent( node.name ) + "/_shutdown", null, function(r) {
-					alert(JSON.stringify(r));
-					this.fire("redraw");
-				}.bind(this));
-			}
-		},
-		_deleteAliasAction_handler: function( index, alias ) {
-			if( confirm( i18n.text("Command.DeleteAliasMessage" ) ) ) {
-				var command = {
-					"actions" : [
-						{ "remove" : { "index" : index.name, "alias" : alias.name } }
-					]
-				};
-				this.config.cluster.post('_aliases', JSON.stringify(command), function(d) {
-					alert(JSON.stringify(d));
-					this.fire("redraw");
-				}.bind(this) );
-			}
-		},
-
-		_replica_template: function(replica) {
-			var r = replica.replica;
-			return { tag: "DIV",
-				cls: "uiNodesView-replica" + (r.primary ? " primary" : "") + ( " state-" + r.state ),
-				text: r.shard.toString(),
-				onclick: function() { new ui.JsonPanel({
-					json: replica.status || r,
-					title: r.index + "/" + r.node + " [" + r.shard + "]" });
-				}
-			};
-		},
-		_routing_template: function(routing) {
-			var cell = { tag: "TD", cls: "uiNodesView-routing" + (routing.open ? "" : " close"), children: [] };
-			for(var i = 0; i < routing.replicas.length; i++) {
-				if(i % routing.max_number_of_shards === 0 && i > 0) {
-					cell.children.push({ tag: "BR" });
-				}
-				if( routing.replicas[i] ) {
-					cell.children.push(this._replica_template(routing.replicas[i]));
-				} else {
-					cell.children.push( { tag: "DIV", cls: "uiNodesView-nullReplica" } );
-				}
-			}
-			return cell;
-		},
-		_nodeControls_template: function( node ) { return (
-			{ tag: "DIV", cls: "uiNodesView-controls", children: [
-				new ui.MenuButton({
-					label: i18n.text("NodeInfoMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("NodeInfoMenu.ClusterNodeInfo"), onclick: function() { new ui.JsonPanel({ json: node.cluster, title: node.name });} },
-							{ text: i18n.text("NodeInfoMenu.NodeStats"), onclick: function() { new ui.JsonPanel({ json: node.stats, title: node.name });} }
-						]
-					})
-				}),
-				new ui.MenuButton({
-					label: i18n.text("NodeActionsMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("NodeActionsMenu.Shutdown"), onclick: function() { this._shutdownNode_handler(node); }.bind(this) }
-						]
-					})
-				})
-			] }
-		); },
-		_nodeIcon_template: function( node ) {
-			var icon, alt;
-			if( node.name === "Unassigned" ) {
-				icon = "fa-exclamation-triangle";
-				alt = i18n.text( "NodeType.Unassigned" );
-			} else if( node.cluster.settings && "tribe" in node.cluster.settings) {
-				icon = "fa-sitemap";
-				alt = i18n.text("NodeType.Tribe" );
-			} else {
-				icon = "fa-" + (node.master_node ? "star" : "circle") + (node.data_node ? "" : "-o" );
-				alt = i18n.text( node.master_node ? ( node.data_node ? "NodeType.Master" : "NodeType.Coord" ) : ( node.data_node ? "NodeType.Worker" : "NodeType.Client" ) );
-			}
-			return { tag: "TD", title: alt, cls: "uiNodesView-icon", children: [
-				{ tag: "SPAN", cls: "fa fa-2x " + icon }
-			] };
-		},
-		_node_template: function(node) {
-			return { tag: "TR", cls: "uiNodesView-node" + (node.master_node ? " master": ""), children: [
-				this._nodeIcon_template( node ),
-				{ tag: "TH", children: node.name === "Unassigned" ? [
-					{ tag: "H3", text: node.name }
-				] : [
-					{ tag: "H3", text: node.cluster.name },
-					{ tag: "DIV", text: node.cluster.hostname },
-					this.interactive ? this._nodeControls_template( node ) : null
-				] }
-			].concat(node.routings.map(this._routing_template, this))};
-		},
-		_indexHeaderControls_template: function( index ) { return (
-			{ tag: "DIV", cls: "uiNodesView-controls", children: [
-				new ui.MenuButton({
-					label: i18n.text("IndexInfoMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("IndexInfoMenu.Status"), onclick: function() { new ui.JsonPanel({ json: index.status, title: index.name }); } },
-							{ text: i18n.text("IndexInfoMenu.Metadata"), onclick: function() { new ui.JsonPanel({ json: index.metadata, title: index.name }); } }
-						]
-					})
-				}),
-				new ui.MenuButton({
-					label: i18n.text("IndexActionsMenu.Title"),
-					menu: new ui.MenuPanel({
-						items: [
-							{ text: i18n.text("IndexActionsMenu.NewAlias"), onclick: function() { this._newAliasAction_handler(index); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Refresh"), onclick: function() { this._postIndexAction_handler("_refresh", index, false); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Flush"), onclick: function() { this._postIndexAction_handler("_flush", index, false); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Optimize"), onclick: function () { this._optimizeIndex_handler(index); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Snapshot"), disabled: closed, onclick: function() { this._postIndexAction_handler("_gateway/snapshot", index, false); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Analyser"), onclick: function() { this._testAnalyser_handler(index); }.bind(this) },
-							{ text: (index.state === "close") ? i18n.text("IndexActionsMenu.Open") : i18n.text("IndexActionsMenu.Close"), onclick: function() { this._postIndexAction_handler((index.state === "close") ? "_open" : "_close", index, true); }.bind(this) },
-							{ text: i18n.text("IndexActionsMenu.Delete"), onclick: function() { this._deleteIndexAction_handler(index); }.bind(this) }
-						]
-					})
-				})
-			] }
-		); },
-		_indexHeader_template: function( index ) {
-			var closed = index.state === "close";
-			var line1 = closed ? "index: close" : ( "size: " + (index.status && index.status.primaries && index.status.total ? ut.byteSize_template( index.status.primaries.store.size_in_bytes ) + " (" + ut.byteSize_template( index.status.total.store.size_in_bytes ) + ")" : "unknown" ) );
-			var line2 = closed ? "\u00A0" : ( "docs: " + (index.status && index.status.primaries && index.status.primaries.docs && index.status.total && index.status.total.docs ? index.status.primaries.docs.count.toLocaleString() + " (" + (index.status.total.docs.count + index.status.total.docs.deleted).toLocaleString() + ")" : "unknown" ) );
-			return index.name ? { tag: "TH", cls: (closed ? "close" : ""), children: [
-				{ tag: "H3", text: index.name },
-				{ tag: "DIV", text: line1 },
-				{ tag: "DIV", text: line2 },
-				this.interactive ? this._indexHeaderControls_template( index ) : null
-			] } : [ { tag: "TD" }, { tag: "TH" } ];
-		},
-		_aliasRender_template_none: function( cluster, indices ) {
-			return null;
-		},
-		_aliasRender_template_list: function( cluster, indices ) {
-			return cluster.aliases.length && { tag: "TBODY", children: [
-				{ tag: "TR", children: [
-					{ tag: "TD" }
-				].concat( indices.map( function( index ) {
-					return { tag: "TD", children: index.metadata && index.metadata.aliases.map( function( alias ) {
-						return { tag: "LI", text: alias };
-					} ) };
-				})) }
-			] };
-		},
-		_aliasRender_template_full: function( cluster, indices ) {
-			return cluster.aliases.length && { tag: "TBODY", children: cluster.aliases.map( function(alias, row) {
-				return { tag: "TR", children: [ { tag: "TD" },{ tag: "TD" } ].concat(alias.indices.map(function(index, i) {
-					if (index) {
-						return {
-							tag: "TD",
-							css: { background: "#" + "9ce9c7fc9".substr((row+6)%7,3) },
-							cls: "uiNodesView-hasAlias" + ( alias.min === i ? " min" : "" ) + ( alias.max === i ? " max" : "" ),
-							text: alias.name,
-							children: this.interactive ? [
-								{	tag: 'SPAN',
-									text: i18n.text("General.CloseGlyph"),
-									cls: 'uiNodesView-hasAlias-remove',
-									onclick: this._deleteAliasAction_handler.bind( this, index, alias )
-								}
-							]: null
-						};
-					}	else {
-						return { tag: "TD" };
-					}
-				}, this ) ) };
-			}, this )	};
-		},
-		_main_template: function(cluster, indices) {
-			return { tag: "TABLE", cls: "table uiNodesView", children: [
-				this._styleSheetEl,
-				{ tag: "THEAD", children: [ { tag: "TR", children: indices.map(this._indexHeader_template, this) } ] },
-				this._aliasRenderFunction( cluster, indices ),
-				{ tag: "TBODY", children: cluster.nodes.map(this._node_template, this) }
-			] };
-		}
-
-	});
-
-})( this.app, this.i18n, this.joey );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js
deleted file mode 100644
index 9049163..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/nodesView/nodesViewDemo.js
+++ /dev/null
@@ -1,17 +0,0 @@
-$( function() {
-
-	var ui = window.app.ns("ui");
-
-	var data = {
-		"cluster":{"nodes":[{"name":"cqTmT9GLSlSWx-B7pvM--w","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":10328420,"max_doc":10329720,"deleted_docs":4},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346979,"name":"Elathan","transport_address":"inet[/127.0.0.1:9301]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"277b","size_in_bytes":277,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":0,"index_time":"0s","index_time_in_millis":0,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":6,"query_time":"19ms","query_time_in_millis":19,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":10,"total_time":"0s","total_time_in_millis":0},"flush":{"total":186,"total_time":"9.1s","total_time_in_millis":9191},"warmer":{"current":0,"total":3,"total_time":"6ms","total_time_in_millis":6},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346979,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4065169408,"used":"4.2gb","used_in_bytes":4524765184,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4426321920,"actual_used":"3.8gb","actual_used_in_bytes":4163612672},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346979,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":172614,"user":"2.3m","user_in_millis":142295,"total":"5.2m","total_in_millis":314909},"mem":{"resident":"21.6mb","resident_in_bytes":22728704,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3900530688}},"jvm":{"timestamp":1381790346980,"uptime":"4d","uptime_in_millis":349028405,"mem":{"heap_used":"31.3mb","heap_used_in_bytes":32851896,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"39.3mb","non_heap_used_in_bytes":41210896,"non_heap_committed":"63.7mb","non_heap_committed_in_bytes":66809856,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2120704,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2131520,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"24mb","used_in_bytes":25224136,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"816.5kb","used_in_bytes":836128,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"6.4mb","used_in_bytes":6791632,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"8.2mb","peak_used_in_bytes":8653824,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.2mb","used_in_bytes":39090192,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.2mb","peak_used_in_bytes":39090192,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":51,"peak_count":56},"gc":{"collection_count":43,"collection_time":"374ms","collection_time_in_millis":374,"collectors":{"ParNew":{"collection_count":41,"collection_time":"374ms","collection_time_in_millis":374},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":3,"completed":7505},"index":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"merge":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":16},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":188},"search":{"threads":6,"queue":0,"active":0,"rejected":0,"largest":6,"completed":6},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":1,"rejected":0,"largest":5,"completed":8593},"refresh":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438878,"out_segs":7330495,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790347004,"data":[{"path":"/var/elasticsearch/es2/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":155197,"rx_size":"6.9mb","rx_size_in_bytes":7339947,"tx_count":155195,"tx_size":"11.6mb","tx_size_in_bytes":12251491},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Elathan","transport_address":"inet[/127.0.0.1:9301]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9203]"}},{"name":"jw4owU-ZQgOYdM7ElauDTg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346963,"name":"Numinus","transport_address":"inet[/127.0.0.1:9303]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"178b","size_in_bytes":178,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"50ms","index_time_in_millis":50,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"32ms","query_time_in_millis":32,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"66ms","total_time_in_millis":66},"flush":{"total":218,"total_time":"5.6s","total_time_in_millis":5697},"warmer":{"current":0,"total":2,"total_time":"4ms","total_time_in_millis":4},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346963,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058091520,"used":"4.2gb","used_in_bytes":4531843072,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419244032,"actual_used":"3.8gb","actual_used_in_bytes":4170690560},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346963,"open_file_descriptors":264,"cpu":{"percent":0,"sys":"2.9m","sys_in_millis":174208,"user":"2.3m","user_in_millis":139440,"total":"5.2m","total_in_millis":313648},"mem":{"resident":"27.2mb","resident_in_bytes":28606464,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3903823872}},"jvm":{"timestamp":1381790346978,"uptime":"4d","uptime_in_millis":349026382,"mem":{"heap_used":"12.8mb","heap_used_in_bytes":13428352,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"39.8mb","non_heap_used_in_bytes":41791784,"non_heap_committed":"55.2mb","non_heap_committed_in_bytes":57950208,"pools":{"Code Cache":{"used":"1.9mb","used_in_bytes":2065280,"max":"48mb","max_in_bytes":50331648,"peak_used":"1.9mb","peak_used_in_bytes":2074880,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"2.4mb","used_in_bytes":2564176,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"646.5kb","used_in_bytes":662048,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2.8mb","peak_used_in_bytes":3029584,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"9.7mb","used_in_bytes":10202128,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"9.7mb","peak_used_in_bytes":10202128,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.8mb","used_in_bytes":39726504,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.8mb","peak_used_in_bytes":39726504,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":60,"peak_count":66},"gc":{"collection_count":42,"collection_time":"512ms","collection_time_in_millis":512,"collectors":{"ParNew":{"collection_count":40,"collection_time":"512ms","collection_time_in_millis":512},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":3,"completed":7490},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":18},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":221},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":12},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":3,"queue":0,"active":1,"rejected":0,"largest":5,"completed":8597},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438878,"out_segs":7330495,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346992,"data":[{"path":"/var/elasticsearch/es4/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":155179,"rx_size":"7mb","rx_size_in_bytes":7341687,"tx_count":155177,"tx_size":"11.6mb","tx_size_in_bytes":12249878},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Numinus","transport_address":"inet[/127.0.0.1:9303]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9202]"}},{"name":"SwCmq0QKQuShZcJAbuW8OQ","routings":[{"name":"_river","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"status":{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"1.6s","total_time_in_millis":1632}}}],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,null,{"replica":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346944,"name":"Ameridroid","transport_address":"inet[/127.0.0.1:9305]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"257b","size_in_bytes":257,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":6,"index_time":"64ms","index_time_in_millis":64,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"27ms","query_time_in_millis":27,"query_current":0,"fetch_total":0,"fetch_time":"0s","fetch_time_in_millis":0,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":10,"total_time":"113ms","total_time_in_millis":113},"flush":{"total":241,"total_time":"5.5s","total_time_in_millis":5553},"warmer":{"current":0,"total":3,"total_time":"4ms","total_time_in_millis":4},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346944,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4059074560,"used":"4.2gb","used_in_bytes":4530860032,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419702784,"actual_used":"3.8gb","actual_used_in_bytes":4170231808},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346944,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":171912,"user":"2.3m","user_in_millis":143905,"total":"5.2m","total_in_millis":315817},"mem":{"resident":"30.4mb","resident_in_bytes":31936512,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3905077248}},"jvm":{"timestamp":1381790346944,"uptime":"4d","uptime_in_millis":349024271,"mem":{"heap_used":"16.6mb","heap_used_in_bytes":17485968,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"39.7mb","non_heap_used_in_bytes":41733256,"non_heap_committed":"40.4mb","non_heap_committed_in_bytes":42405888,"pools":{"Code Cache":{"used":"1.9mb","used_in_bytes":2018624,"max":"48mb","max_in_bytes":50331648,"peak_used":"1.9mb","peak_used_in_bytes":2029504,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"5.9mb","used_in_bytes":6242912,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"489.7kb","used_in_bytes":501496,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"10.2mb","used_in_bytes":10741560,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"10.2mb","peak_used_in_bytes":10741560,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.8mb","used_in_bytes":39714632,"max":"82mb","max_in_bytes":85983232,"peak_used":"37.8mb","peak_used_in_bytes":39714632,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":63,"peak_count":70},"gc":{"collection_count":61,"collection_time":"533ms","collection_time_in_millis":533,"collectors":{"ParNew":{"collection_count":61,"collection_time":"533ms","collection_time_in_millis":533},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7504},"index":{"threads":4,"queue":0,"active":0,"rejected":0,"largest":4,"completed":6},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":23},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":241},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":12},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":4,"queue":0,"active":1,"rejected":0,"largest":5,"completed":10284},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":4}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438844,"out_segs":7330461,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346959,"data":[{"path":"/var/elasticsearch/es6/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231240040448,"available":"215.1gb","available_in_bytes":230977896448,"disk_reads":2641849,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593058816,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156880,"rx_size":"7mb","rx_size_in_bytes":7431874,"tx_count":156877,"tx_size":"11.9mb","tx_size_in_bytes":12480678},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Ameridroid","transport_address":"inet[/127.0.0.1:9305]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9205]"}},{"name":"aBuoaKR5QVCfUZHgrJEfVg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"status":{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}}],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,null,{"replica":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346945,"name":"Immortus","transport_address":"inet[/127.0.0.1:9302]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"277b","size_in_bytes":277,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"59ms","index_time_in_millis":59,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"27ms","query_time_in_millis":27,"query_current":0,"fetch_total":1,"fetch_time":"9ms","fetch_time_in_millis":9,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"72ms","total_time_in_millis":72},"flush":{"total":239,"total_time":"6.3s","total_time_in_millis":6363},"warmer":{"current":0,"total":3,"total_time":"8ms","total_time_in_millis":8},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346963,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058099712,"used":"4.2gb","used_in_bytes":4531834880,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419252224,"actual_used":"3.8gb","actual_used_in_bytes":4170682368},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346963,"open_file_descriptors":266,"cpu":{"percent":0,"sys":"2.9m","sys_in_millis":174105,"user":"2.4m","user_in_millis":145373,"total":"5.3m","total_in_millis":319478},"mem":{"resident":"29mb","resident_in_bytes":30453760,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3912540160}},"jvm":{"timestamp":1381790346963,"uptime":"4d","uptime_in_millis":349027381,"mem":{"heap_used":"28.5mb","heap_used_in_bytes":29980664,"heap_committed":"265.5mb","heap_committed_in_bytes":278462464,"non_heap_used":"40mb","non_heap_used_in_bytes":42021480,"non_heap_committed":"65.6mb","non_heap_committed_in_bytes":68853760,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2183808,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2193408,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"23.8mb","used_in_bytes":25026800,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"27mb","peak_used_in_bytes":28311552,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"464.1kb","used_in_bytes":475296,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"4.2mb","used_in_bytes":4478568,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"12.4mb","peak_used_in_bytes":13054208,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"37.9mb","used_in_bytes":39837672,"max":"82mb","max_in_bytes":85983232,"peak_used":"38.2mb","peak_used_in_bytes":40134632,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":62,"peak_count":67},"gc":{"collection_count":80,"collection_time":"561ms","collection_time_in_millis":561,"collectors":{"ParNew":{"collection_count":78,"collection_time":"557ms","collection_time_in_millis":557},"ConcurrentMarkSweep":{"collection_count":2,"collection_time":"4ms","collection_time_in_millis":4}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7528},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":26},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":242},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":13},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":2,"rejected":0,"largest":5,"completed":10288},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438862,"out_segs":7330479,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346977,"data":[{"path":"/var/elasticsearch/es3/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241089024,"available":"215.1gb","available_in_bytes":230978945024,"disk_reads":2641854,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593402880,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156920,"rx_size":"7.1mb","rx_size_in_bytes":7451979,"tx_count":156915,"tx_size":"11.9mb","tx_size_in_bytes":12499329},"http":{"current_open":0,"total_opened":0}},"cluster":{"name":"Immortus","transport_address":"inet[/127.0.0.1:9302]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9201]"}},{"name":"3Rbfod0sS9eZ6VrOkY0JKw","routings":[{"name":"_river","replicas":[{"replica":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"status":{"routing":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"833ms","total_time_in_millis":833}}}],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[{"replica":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":true,"stats":{"timestamp":1381790346938,"name":"Steel Serpent","transport_address":"inet[server/127.0.0.1:9300]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"237b","size_in_bytes":237,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":2,"index_time":"59ms","index_time_in_millis":59,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":12,"query_time":"32ms","query_time_in_millis":32,"query_current":0,"fetch_total":3,"fetch_time":"5ms","fetch_time_in_millis":5,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":6,"total_time":"58ms","total_time_in_millis":58},"flush":{"total":240,"total_time":"4.3s","total_time_in_millis":4339},"warmer":{"current":0,"total":3,"total_time":"8ms","total_time_in_millis":8},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346938,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4062093312,"used":"4.2gb","used_in_bytes":4527841280,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4422721536,"actual_used":"3.8gb","actual_used_in_bytes":4167213056},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346938,"open_file_descriptors":272,"cpu":{"percent":0,"sys":"3.3m","sys_in_millis":200578,"user":"3.2m","user_in_millis":192613,"total":"6.5m","total_in_millis":393191},"mem":{"resident":"43.8mb","resident_in_bytes":46018560,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3910467584}},"jvm":{"timestamp":1381790346938,"uptime":"4d","uptime_in_millis":349029191,"mem":{"heap_used":"28.9mb","heap_used_in_bytes":30381984,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"42.9mb","non_heap_used_in_bytes":45068896,"non_heap_committed":"43.3mb","non_heap_committed_in_bytes":45420544,"pools":{"Code Cache":{"used":"3.3mb","used_in_bytes":3534656,"max":"48mb","max_in_bytes":50331648,"peak_used":"3.3mb","peak_used_in_bytes":3545408,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"15.6mb","used_in_bytes":16402808,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"44.9kb","used_in_bytes":46016,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"13.2mb","used_in_bytes":13933160,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"13.2mb","peak_used_in_bytes":13933160,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"39.6mb","used_in_bytes":41534240,"max":"82mb","max_in_bytes":85983232,"peak_used":"39.6mb","peak_used_in_bytes":41534240,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":64,"peak_count":68},"gc":{"collection_count":272,"collection_time":"967ms","collection_time_in_millis":967,"collectors":{"ParNew":{"collection_count":272,"collection_time":"967ms","collection_time_in_millis":967},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":4,"completed":9499},"index":{"threads":2,"queue":0,"active":0,"rejected":0,"largest":2,"completed":2},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":21},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":241},"search":{"threads":12,"queue":0,"active":0,"rejected":0,"largest":12,"completed":15},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":5,"queue":0,"active":1,"rejected":0,"largest":5,"completed":15207},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438818,"out_segs":7330435,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790346956,"data":[{"path":"/var/elasticsearch/es1/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231240040448,"available":"215.1gb","available_in_bytes":230977896448,"disk_reads":2641849,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593058816,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":780551,"rx_size":"59mb","rx_size_in_bytes":61929023,"tx_count":780563,"tx_size":"35.2mb","tx_size_in_bytes":36961925},"http":{"current_open":6,"total_opened":201}},"cluster":{"name":"Steel Serpent","transport_address":"inet[server/127.0.0.1:9300]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9200]"}},{"name":"PO1wHIidQo-w7sGHaYHvjg","routings":[{"name":"_river","replicas":[],"max_number_of_shards":"1","open":true},{"name":"ag_01","replicas":[],"max_number_of_shards":"2","open":true},{"name":"ag_02","replicas":[null,{"replica":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"status":{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}}],"max_number_of_shards":"3","open":true},{"name":"ag_03","replicas":[null,{"replica":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"status":{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}}],"max_number_of_shards":"2","open":true},{"name":"twitter_river","replicas":[],"max_number_of_shards":"5","open":false}],"master_node":false,"stats":{"timestamp":1381790346964,"name":"Thumbelina","transport_address":"inet[/127.0.0.1:9304]","hostname":"server","indices":{"docs":{"count":0,"deleted":0},"store":{"size":"178b","size_in_bytes":178,"throttle_time":"0s","throttle_time_in_millis":0},"indexing":{"index_total":4,"index_time":"55ms","index_time_in_millis":55,"index_current":0,"delete_total":0,"delete_time":"0s","delete_time_in_millis":0,"delete_current":0},"get":{"total":0,"get_time":"0s","time_in_millis":0,"exists_total":0,"exists_time":"0s","exists_time_in_millis":0,"missing_total":0,"missing_time":"0s","missing_time_in_millis":0,"current":0},"search":{"open_contexts":0,"query_total":6,"query_time":"21ms","query_time_in_millis":21,"query_current":0,"fetch_total":2,"fetch_time":"10ms","fetch_time_in_millis":10,"fetch_current":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":9,"total_time":"81ms","total_time_in_millis":81},"flush":{"total":198,"total_time":"3.6s","total_time_in_millis":3662},"warmer":{"current":0,"total":2,"total_time":"3ms","total_time_in_millis":3},"filter_cache":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"id_cache":{"memory_size":"0b","memory_size_in_bytes":0},"fielddata":{"memory_size":"0b","memory_size_in_bytes":0,"evictions":0},"completion":{"size":"0b","size_in_bytes":0}},"os":{"timestamp":1381790346964,"uptime":"15.5m","uptime_in_millis":932146,"load_average":[1.79736328125,1.95166015625,1.904296875],"cpu":{"sys":22,"user":6,"idle":70,"stolen":0},"mem":{"free":"3.7gb","free_in_bytes":4058308608,"used":"4.2gb","used_in_bytes":4531625984,"free_percent":51,"used_percent":48,"actual_free":"4.1gb","actual_free_in_bytes":4419461120,"actual_used":"3.8gb","actual_used_in_bytes":4170473472},"swap":{"used":"2.8gb","used_in_bytes":3025272832,"free":"1.1gb","free_in_bytes":1269694464}},"process":{"timestamp":1381790346964,"open_file_descriptors":264,"cpu":{"percent":0,"sys":"2.8m","sys_in_millis":172378,"user":"2.3m","user_in_millis":140227,"total":"5.2m","total_in_millis":312605},"mem":{"resident":"28.5mb","resident_in_bytes":29892608,"share":"-1b","share_in_bytes":-1,"total_virtual":"3.6gb","total_virtual_in_bytes":3904798720}},"jvm":{"timestamp":1381790346976,"uptime":"4d","uptime_in_millis":349025339,"mem":{"heap_used":"20.8mb","heap_used_in_bytes":21889120,"heap_committed":"253.9mb","heap_committed_in_bytes":266272768,"non_heap_used":"40.2mb","non_heap_used_in_bytes":42232320,"non_heap_committed":"40.8mb","non_heap_committed_in_bytes":42799104,"pools":{"Code Cache":{"used":"2mb","used_in_bytes":2125312,"max":"48mb","max_in_bytes":50331648,"peak_used":"2mb","peak_used_in_bytes":2134912,"peak_max":"48mb","peak_max_in_bytes":50331648},"Par Eden Space":{"used":"8.4mb","used_in_bytes":8836504,"max":"66.5mb","max_in_bytes":69795840,"peak_used":"16.6mb","peak_used_in_bytes":17432576,"peak_max":"66.5mb","peak_max_in_bytes":69795840},"Par Survivor Space":{"used":"659.3kb","used_in_bytes":675192,"max":"8.3mb","max_in_bytes":8716288,"peak_used":"2mb","peak_used_in_bytes":2162688,"peak_max":"8.3mb","peak_max_in_bytes":8716288},"CMS Old Gen":{"used":"11.8mb","used_in_bytes":12377424,"max":"940.8mb","max_in_bytes":986513408,"peak_used":"11.8mb","peak_used_in_bytes":12377424,"peak_max":"940.8mb","peak_max_in_bytes":986513408},"CMS Perm Gen":{"used":"38.2mb","used_in_bytes":40107008,"max":"82mb","max_in_bytes":85983232,"peak_used":"38.2mb","peak_used_in_bytes":40107008,"peak_max":"82mb","peak_max_in_bytes":85983232}}},"threads":{"count":59,"peak_count":65},"gc":{"collection_count":61,"collection_time":"632ms","collection_time_in_millis":632,"collectors":{"ParNew":{"collection_count":61,"collection_time":"632ms","collection_time_in_millis":632},"ConcurrentMarkSweep":{"collection_count":0,"collection_time":"0s","collection_time_in_millis":0}}}},"thread_pool":{"generic":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":4,"completed":7515},"index":{"threads":4,"queue":0,"active":0,"rejected":0,"largest":4,"completed":4},"get":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"snapshot":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"merge":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2},"suggest":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"bulk":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"optimize":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"warmer":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":22},"flush":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":2,"completed":198},"search":{"threads":8,"queue":0,"active":0,"rejected":0,"largest":8,"completed":8},"percolate":{"threads":0,"queue":0,"active":0,"rejected":0,"largest":0,"completed":0},"management":{"threads":4,"queue":0,"active":1,"rejected":0,"largest":5,"completed":10266},"refresh":{"threads":1,"queue":0,"active":0,"rejected":0,"largest":1,"completed":2}},"network":{"tcp":{"active_opens":91033,"passive_opens":3206,"curr_estab":824,"in_segs":9438872,"out_segs":7330489,"retrans_segs":10420,"estab_resets":4179,"attempt_fails":2304,"in_errs":15,"out_rsts":-1}},"fs":{"timestamp":1381790347016,"data":[{"path":"/var/elasticsearch/es5/data/elasticsearch/nodes/0","mount":"/","dev":"/dev/disk0s2","total":"465.1gb","total_in_bytes":499418034176,"free":"215.3gb","free_in_bytes":231241613312,"available":"215.1gb","available_in_bytes":230979469312,"disk_reads":2641856,"disk_writes":3231915,"disk_read_size":"75.9gb","disk_read_size_in_bytes":81593427456,"disk_write_size":"76.2gb","disk_write_size_in_bytes":81856144384}]},"transport":{"server_open":60,"rx_count":156869,"rx_size":"7mb","rx_size_in_bytes":7444733,"tx_count":156866,"tx_size":"11.9mb","tx_size_in_bytes":12497730},"http":{"current_open":0,"total_opened":2}},"cluster":{"name":"Thumbelina","transport_address":"inet[/127.0.0.1:9304]","hostname":"server","version":"0.90.5","http_address":"inet[server/127.0.0.1:9204]"}}],"aliases":[{"name":"search","max":3,"min":1,"indices":[false,{"name":"ag_01","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"1.4s","total_time_in_millis":1435},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}},{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}},{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}]}}},{"name":"ag_02","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"3","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"297b","primary_size_in_bytes":297,"size":"534b","size_in_bytes":534},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":3,"total_time":"0s","total_time_in_millis":0},"flush":{"total":20,"total_time":"340ms","total_time_in_millis":340},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}],"1":[{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}},{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}],"2":[{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}},{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}]}}},{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},false]},{"name":"live","max":3,"min":3,"indices":[false,false,false,{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},false]}]},
-		"indices":[{"name":null},{"name":"_river","state":"open","metadata":{"state":"open","settings":{"index.version.created":"900599","index.number_of_replicas":"1","index.number_of_shards":"1"},"mappings":{},"aliases":[]},"status":{"index":{"primary_size":"79b","primary_size_in_bytes":79,"size":"158b","size_in_bytes":158},"translog":{"operations":0},"docs":{"num_docs":1,"max_doc":1,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":124,"total_time":"2.4s","total_time_in_millis":2465},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":187162420,"max_doc":187171320,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"1.6s","total_time_in_millis":1632}},{"routing":{"state":"STARTED","primary":true,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"_river"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1380240228838,"operations":0},"docs":{"num_docs":187162420,"max_doc":187171320,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":62,"total_time":"833ms","total_time_in_millis":833}}]}}},{"name":"ag_01","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":18716242,"max_doc":18717132,"deleted_docs":9},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"1.4s","total_time_in_millis":1435},"shards":{"0":[{"routing":{"state":"STARTED","primary":false,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"216ms","total_time_in_millis":216}},{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712651,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"382ms","total_time_in_millis":382}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"643ms","total_time_in_millis":643}},{"routing":{"state":"STARTED","primary":false,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":1,"index":"ag_01"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731712637,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"194ms","total_time_in_millis":194}}]}}},{"name":"ag_02","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"3","index.version.created":"900599"},"mappings":{},"aliases":["search"]},"status":{"index":{"primary_size":"297b","primary_size_in_bytes":297,"size":"534b","size_in_bytes":534},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":3,"total_time":"0s","total_time_in_millis":0},"flush":{"total":20,"total_time":"340ms","total_time_in_millis":340},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"jw4owU-ZQgOYdM7ElauDTg","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"107ms","total_time_in_millis":107}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663369,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"4ms","total_time_in_millis":4}}],"1":[{"routing":{"state":"STARTED","primary":false,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"75ms","total_time_in_millis":75}},{"routing":{"state":"STARTED","primary":true,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663385,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"122ms","total_time_in_millis":122}}],"2":[{"routing":{"state":"STARTED","primary":true,"node":"SwCmq0QKQuShZcJAbuW8OQ","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":4,"total_time":"17ms","total_time_in_millis":17}},{"routing":{"state":"STARTED","primary":false,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":2,"index":"ag_02"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381749663407,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":3,"total_time":"15ms","total_time_in_millis":15}}]}}},{"name":"ag_03","state":"open","metadata":{"state":"open","settings":{"index.number_of_replicas":"1","index.number_of_shards":"2","index.version.created":"900599"},"mappings":{},"aliases":["search","live"]},"status":{"index":{"primary_size":"198b","primary_size_in_bytes":198,"size":"356b","size_in_bytes":356},"translog":{"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":2,"total_time":"0s","total_time_in_millis":0},"flush":{"total":27,"total_time":"598ms","total_time_in_millis":598},"shards":{"0":[{"routing":{"state":"STARTED","primary":true,"node":"aBuoaKR5QVCfUZHgrJEfVg","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":6,"total_time":"101ms","total_time_in_millis":101}},{"routing":{"state":"STARTED","primary":false,"node":"3Rbfod0sS9eZ6VrOkY0JKw","relocating_node":null,"shard":0,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770063,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"274ms","total_time_in_millis":274}}],"1":[{"routing":{"state":"STARTED","primary":true,"node":"cqTmT9GLSlSWx-B7pvM--w","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"99b","size_in_bytes":99},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":1,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"86ms","total_time_in_millis":86}},{"routing":{"state":"STARTED","primary":false,"node":"PO1wHIidQo-w7sGHaYHvjg","relocating_node":null,"shard":1,"index":"ag_03"},"state":"STARTED","index":{"size":"79b","size_in_bytes":79},"translog":{"id":1381731770058,"operations":0},"docs":{"num_docs":0,"max_doc":0,"deleted_docs":0},"merges":{"current":0,"current_docs":0,"current_size":"0b","current_size_in_bytes":0,"total":0,"total_time":"0s","total_time_in_millis":0,"total_docs":0,"total_size":"0b","total_size_in_bytes":0},"refresh":{"total":0,"total_time":"0s","total_time_in_millis":0},"flush":{"total":7,"total_time":"137ms","total_time_in_millis":137}}]}}},{"name":"twitter_river","state":"close","metadata":{"state":"close","settings":{"index.number_of_replicas":"1","index.version.created":"900599","index.number_of_shards":"5"},"mappings":{"status":{"properties":{"text":{"type":"string"},"location":{"properties":{"lon":{"type":"double"},"lat":{"type":"double"}}},"link":{"properties":{"start":{"type":"long"},"expand_url":{"type":"string"},"display_url":{"type":"string"},"url":{"type":"string"},"end":{"type":"long"}}},"hashtag":{"properties":{"text":{"type":"string"},"start":{"type":"long"},"end":{"type":"long"}}},"truncated":{"type":"boolean"},"source":{"type":"string"},"retweet":{"properties":{"id":{"type":"long"},"user_screen_name":{"type":"string"},"retweet_count":{"type":"long"},"user_id":{"type":"long"}}},"created_at":{"format":"dateOptionalTime","type":"date"},"retweet_count":{"type":"long"},"in_reply":{"properties":{"user_screen_name":{"type":"string"},"status":{"type":"long"},"user_id":{"type":"long"}}},"mention":{"properties":{"id":{"type":"long"},"start":{"type":"long"},"name":{"type":"string"},"screen_name":{"type":"string"},"end":{"type":"long"}}},"place":{"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"country_code":{"type":"string"},"url":{"type":"string"},"full_name":{"type":"string"},"country":{"type":"string"}}},"user":{"properties":{"id":{"type":"long"},"profile_image_url_https":{"type":"string"},"location":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"screen_name":{"type":"string"},"profile_image_url":{"type":"string"}}}}}},"aliases":[]},"status":null}]
-	};
-
-	window.builder = function() {
-		return new ui.NodesView({
-			interactive: true,
-			data: data
-		});
-	};
-
-});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/page/page.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/page/page.js
deleted file mode 100644
index 8c5eb70..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/page/page.js
+++ /dev/null
@@ -1,14 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Page = ui.AbstractWidget.extend({
-		show: function() {
-			this.el.show();
-		},
-		hide: function() {
-			this.el.hide();
-		}
-	});
-
-})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css
deleted file mode 100644
index cd4138e..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.css
+++ /dev/null
@@ -1,12 +0,0 @@
-.uiPanelForm-field {
-	display: block;
-	padding: 2px 0;
-	clear: both;
-}
-
-.uiPanelForm-label {
-	float: left;
-	width: 200px;
-	padding: 3px 7px;
-	text-align: right;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js
deleted file mode 100644
index 8ed4fe7..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/panelForm/panelForm.js
+++ /dev/null
@@ -1,26 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.PanelForm = ui.AbstractWidget.extend({
-		defaults: {
-			fields: null	// (required) instanceof app.ux.FieldCollection
-		},
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this._main_template());
-			this.attach( parent );
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiPanelForm", children: this.config.fields.fields.map(this._field_template, this) };
-		},
-		_field_template: function(field) {
-			return { tag: "LABEL", cls: "uiPanelForm-field", children: [
-				{ tag: "DIV", cls: "uiPanelForm-label", children: [ field.label, ut.require_template(field) ] },
-				field
-			]};
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css
deleted file mode 100644
index dfe055c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.css
+++ /dev/null
@@ -1,62 +0,0 @@
-.uiQueryFilter {
-	width: 350px;
-	padding: 5px;
-	background: #d8e7ff;
-	background: -moz-linear-gradient(left, #d8e7ff, #e8f1ff);
-	background: -webkit-linear-gradient(left, #d8e7ff, #e8f1ff);
-}
-
-.uiQueryFilter DIV.uiQueryFilter-section {
-	margin-bottom: 5px;
-}
-
-.uiQueryFilter HEADER {
-	display: block;
-	font-variant: small-caps;
-	font-weight: bold;
-	margin: 5px 0;
-}
-
-.uiQueryFilter-aliases SELECT {
-	width: 100%;
-}
-
-.uiQueryFilter-booble {
-	cursor: pointer;
-	background: #e8f1ff;
-	border: 1px solid #e8f1ff;
-	border-radius: 5px;
-	padding: 1px 4px;
-	margin-bottom: 1px;
-	overflow: hidden;
-	white-space: nowrap;
-}
-
-.uiQueryFilter-booble.selected {
-	background: #dae3f0;
-	border-top: 1px solid #c8d4e6;
-	border-left: 1px solid #c8d4e6;
-	border-bottom: 1px solid #ffffff;
-	border-right: 1px solid #ffffff;
-}
-
-.uiQueryFilter-filterName {
-	background-color: #cbdfff;
-	margin-bottom: 4px;
-	padding: 3px;
-	cursor: pointer;
-}
-
-.uiQueryFilter-filters INPUT  {
-	width: 300px;
-}
-
-.uiQueryFilter-subMultiFields {
-	padding-left: 10px;
-}
-
-.uiQueryFilter-rangeHintFrom,
-.uiQueryFilter-rangeHintTo {
-	margin: 0;
-	opacity: 0.75;
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js
deleted file mode 100644
index bd449a0..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/queryFilter/queryFilter.js
+++ /dev/null
@@ -1,277 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var ut = app.ns("ut");
-
-	ui.QueryFilter = ui.AbstractWidget.extend({
-		defaults: {
-			metadata: null,   // (required) instanceof app.data.MetaData
-			query: null       // (required) instanceof app.data.Query that the filters will act apon
-		},
-		init: function() {
-			this._super();
-			this.metadata = this.config.metadata;
-			this.query = this.config.query;
-			this.el = $(this._main_template());
-		},
-		helpTypeMap: {
-			"date" : "QueryFilter.DateRangeHelp"
-		},
-		requestUpdate: function(jEv) {
-			if(jEv && jEv.originalEvent) { // we only want to update on real user interaction not generated events
-				this.query.setPage(1);
-				this.query.query();
-			}
-		},
-		getSpec: function(fieldName) {
-			return this.metadata.fields[fieldName];
-		},
-		_selectAlias_handler: function(jEv) {
-			var indices = (jEv.target.selectedIndex === 0) ? [] : this.metadata.getIndices($(jEv.target).val());
-			$(".uiQueryFilter-index").each(function(i, el) {
-				var jEl = $(el);
-				if(indices.contains(jEl.text()) !== jEl.hasClass("selected")) {
-					jEl.click();
-				}
-			});
-			this.requestUpdate(jEv);
-		},
-		_selectIndex_handler: function(jEv) {
-			var jEl = $(jEv.target).closest(".uiQueryFilter-index");
-			jEl.toggleClass("selected");
-			var selected = jEl.hasClass("selected");
-			this.query.setIndex(jEl.text(), selected);
-			if(selected) {
-				var types = this.metadata.getTypes(this.query.indices);
-				this.el.find("DIV.uiQueryFilter-type.selected").each(function(n, el) {
-					if(! types.contains($(el).text())) {
-						$(el).click();
-					}
-				});
-			}
-			this.requestUpdate(jEv);
-		},
-		_selectType_handler: function(jEv) {
-			var jEl = $(jEv.target).closest(".uiQueryFilter-type");
-			jEl.toggleClass("selected");
-			var type = jEl.text(), selected = jEl.hasClass("selected");
-			this.query.setType(type, selected);
-			if(selected) {
-				var indices = this.metadata.types[type].indices;
-				// es throws a 500 if searching an index for a type it does not contain - so we prevent that
-				this.el.find("DIV.uiQueryFilter-index.selected").each(function(n, el) {
-					if(! indices.contains($(el).text())) {
-						$(el).click();
-					}
-				});
-				// es throws a 500 if you specify types from different indices with _all
-				jEl.siblings(".uiQueryFilter-type.selected").forEach(function(el) {
-					if(this.metadata.types[$(el).text()].indices.intersection(indices).length === 0) {
-						$(el).click();
-					}
-				}, this);
-			}
-			this.requestUpdate(jEv);
-		},
-		_openFilter_handler: function(section) {
-			var field_name = section.config.title;
-			if(! section.loaded) {
-				var spec = this.getSpec(field_name);
-				if(spec.core_type === "string") {
-					section.body.append(this._textFilter_template(spec));
-				} else if(spec.core_type === "date") {
-					section.body.append(this._dateFilter_template(spec));
-					section.body.append(new ui.DateHistogram({ printEl: section.body.find("INPUT"), cluster: this.cluster, query: this.query, spec: spec }));
-				} else if(spec.core_type === "number") {
-					section.body.append(this._numericFilter_template(spec));
-				} else if(spec.core_type === 'boolean') {
-					section.body.append(this._booleanFilter_template(spec));
-				} else if (spec.core_type === 'multi_field') {
-					section.body.append(this._multiFieldFilter_template(section, spec));
-				} 
-				section.loaded = true;
-			}
-			section.on("animComplete", function(section) { section.body.find("INPUT").focus(); });
-		},
-		_textFilterChange_handler: function(jEv) {
-			var jEl = $(jEv.target).closest("INPUT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqids = jEl.data("uqids") || [];
-			uqids.forEach(function(uqid) {
-				uqid && this.query.removeClause(uqid);
-			}, this);
-			if(val.length) {
-				if(jEl[0] === document.activeElement && jEl[0].selectionStart === jEl[0].selectionEnd) {
-					val = val.replace(new RegExp("(.{"+jEl[0].selectionStart+"})"), "$&*");
-				}
-				uqids = val.split(/\s+/).map(function(term) {
-					// Figure out the actual field name - needed for multi_field, because
-					// querying for "field.field" will not work. Simply "field" must be used
-					// if nothing is aliased.
-					var fieldNameParts = spec.field_name.split('.');
-					var part = fieldNameParts.length - 1;
-					var name = fieldNameParts[part];
-					while (part >= 1) {
-						if (fieldNameParts[part] !== fieldNameParts[part - 1]) {
-							name = fieldNameParts[part - 1] + "." + name;
-						}
-						part--;
-					}
-					return term && this.query.addClause(term, name, "wildcard", "must");
-				}, this);
-			}
-			jEl.data("uqids", uqids);
-			this.requestUpdate(jEv);
-		},
-		_dateFilterChange_handler: function(jEv) {
-			var jEl = $(jEv.target).closest("INPUT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqid = jEl.data("uqid") || null;
-			var range = window.dateRangeParser.parse(val);
-			var lastRange = jEl.data("lastRange");
-			if(!range || (lastRange && lastRange.start === range.start && lastRange.end === range.end)) {
-				return;
-			}
-			uqid && this.query.removeClause(uqid);
-			if((range.start && range.end) === null) {
-				uqid = null;
-			} else {
-				var value = {};
-				if( range.start ) {
-					value["gte"] = range.start;
-				}
-				if( range.end ) {
-					value["lte"] = range.end;
-				}
-				uqid = this.query.addClause( value, spec.field_name, "range", "must");
-			}
-			jEl.data("lastRange", range);
-			jEl.siblings(".uiQueryFilter-rangeHintFrom")
-				.text(i18n.text("QueryFilter.DateRangeHint.from", range.start && new Date(range.start).toUTCString()));
-			jEl.siblings(".uiQueryFilter-rangeHintTo")
-				.text(i18n.text("QueryFilter.DateRangeHint.to", range.end && new Date(range.end).toUTCString()));
-			jEl.data("uqid", uqid);
-			this.requestUpdate(jEv);
-		},
-		_numericFilterChange_handler: function(jEv) {
-			var jEl = $(jEv.target).closest("INPUT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqid = jEl.data("uqid") || null;
-			var lastRange = jEl.data("lastRange");
-			var range = (function(val) {
-				var ops = val.split(/->|<>|</).map( function(v) { return parseInt(v.trim(), 10); });
-				if(/<>/.test(val)) {
-					return { gte: (ops[0] - ops[1]), lte: (ops[0] + ops[1]) };
-				} else if(/->|</.test(val)) {
-					return { gte: ops[0], lte: ops[1] };
-				} else {
-					return { gte: ops[0], lte: ops[0] };
-				}
-			})(val || "");
-			if(!range || (lastRange && lastRange.lte === range.lte && lastRange.gte === range.gte)) {
-				return;
-			}
-			jEl.data("lastRange", range);
-			uqid && this.query.removeClause(uqid);
-			uqid = this.query.addClause( range, spec.field_name, "range", "must");
-			jEl.data("uqid", uqid);
-			this.requestUpdate(jEv);
-		},
-		_booleanFilterChange_handler: function( jEv ) {
-			var jEl = $(jEv.target).closest("SELECT");
-			var val = jEl.val();
-			var spec = jEl.data("spec");
-			var uqid = jEl.data("uqid") || null;
-			uqid && this.query.removeClause(uqid);
-			if(val === "true" || val === "false") {
-				jEl.data("uqid", this.query.addClause(val, spec.field_name, "term", "must") );
-			}
-			this.requestUpdate(jEv);
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiQueryFilter", children: [
-				this._aliasSelector_template(),
-				this._indexSelector_template(),
-				this._typesSelector_template(),
-				this._filters_template()
-			] };
-		},
-		_aliasSelector_template: function() {
-			var aliases = Object.keys(this.metadata.aliases).sort();
-			aliases.unshift( i18n.text("QueryFilter.AllIndices") );
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-aliases", children: [
-				{ tag: "SELECT", onChange: this._selectAlias_handler, children: aliases.map(ut.option_template) }
-			] };
-		},
-		_indexSelector_template: function() {
-			var indices = Object.keys( this.metadata.indices ).sort();
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-indices", children: [
-				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Indices") },
-				{ tag: "DIV", onClick: this._selectIndex_handler, children: indices.map( function( name ) {
-					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-index", text: name };
-				})}
-			] };
-		},
-		_typesSelector_template: function() {
-			var types = Object.keys( this.metadata.types ).sort();
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-types", children: [
-				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Types") },
-				{ tag: "DIV", onClick: this._selectType_handler, children: types.map( function( name ) {
-					return { tag: "DIV", cls: "uiQueryFilter-booble uiQueryFilter-type", text: name };
-				})}
-			] };
-		},
-		_filters_template: function() {
-			var _metadataFields = this.metadata.fields;
-			var fields = Object.keys( _metadataFields ).sort()
-				.filter(function(d) { return (_metadataFields[d].core_type !== undefined); });
-			return { tag: "DIV", cls: "uiQueryFilter-section uiQueryFilter-filters", children: [
-				{ tag: "HEADER", text: i18n.text("QueryFilter-Header-Fields") },
-				{ tag: "DIV", children: fields.map( function(name ) {
-					return new app.ui.SidebarSection({
-						title: name,
-						help: this.helpTypeMap[this.metadata.fields[ name ].type],
-						onShow: this._openFilter_handler
-					});
-				}, this ) }
-			] };
-		},
-		_textFilter_template: function(spec) {
-			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._textFilterChange_handler };
-		},
-		_dateFilter_template: function(spec) {
-			return { tag: "DIV", children: [
-				{ tag: "INPUT", data: { spec: spec }, onKeyup: this._dateFilterChange_handler },
-				{ tag: "PRE", cls: "uiQueryFilter-rangeHintFrom", text: i18n.text("QueryFilter.DateRangeHint.from", "")},
-				{ tag: "PRE", cls: "uiQueryFilter-rangeHintTo", text: i18n.text("QueryFilter.DateRangeHint.to", "") }
-			]};
-		},
-		_numericFilter_template: function(spec) {
-			return { tag: "INPUT", data: { spec: spec }, onKeyup: this._numericFilterChange_handler };
-		},
-		_booleanFilter_template: function(spec) {
-			return { tag: "SELECT", data: { spec: spec }, onChange: this._booleanFilterChange_handler,
-				children: [ i18n.text("QueryFilter.AnyValue"), "true", "false" ].map( function( val ) {
-					return { tag: "OPTION", value: val, text: val };
-				})
-			};
-		},
-		_multiFieldFilter_template: function(section, spec) {
-			return {
-				tag : "DIV", cls : "uiQueryFilter-subMultiFields", children : acx.eachMap(spec.fields, function(name, data) {
-					if (name === spec.field_name) {
-						section.config.title = spec.field_name + "." + name;
-						return this._openFilter_handler(section);
-					}
-					return new app.ui.SidebarSection({
-						title : data.field_name, help : this.helpTypeMap[data.type], onShow : this._openFilter_handler
-					});
-				}, this)
-			};
-		}	
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButton.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButton.js
deleted file mode 100644
index a776e21..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButton.js
+++ /dev/null
@@ -1,41 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.RefreshButton = ui.SplitButton.extend({
-		defaults: {
-			timer: -1
-		},
-		init: function( parent ) {
-			this.config.label = i18n.text("General.RefreshResults");
-			this._super( parent );
-			this.set( this.config.timer );
-		},
-		set: function( value ) {
-			this.value = value;
-			window.clearInterval( this._timer );
-			if( this.value > 0 ) {
-				this._timer = window.setInterval( this._refresh_handler, this.value );
-			}
-		},
-		_click_handler: function() {
-			this._refresh_handler();
-		},
-		_select_handler: function( el, event ) {
-			this.set( event.value );
-			this.fire("change", this );
-		},
-		_refresh_handler: function() {
-			this.fire("refresh", this );
-		},
-		_getItems: function() {
-			return [
-				{ text: i18n.text("General.ManualRefresh"), value: -1 },
-				{ text: i18n.text("General.RefreshQuickly"), value: 100 },
-				{ text: i18n.text("General.Refresh5seconds"), value: 5000 },
-				{ text: i18n.text("General.Refresh1minute"), value: 60000 }
-			];
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js
deleted file mode 100644
index c37df9c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonDemo.js
+++ /dev/null
@@ -1,12 +0,0 @@
-$( function() {
-
-	var ui = window.app.ns("ui");
-
-	window.builder = function() {
-		return new ui.RefreshButton({
-			onRefresh: function() { console.log("-> refresh", arguments ); },
-			onChange: function() { console.log("-> change", arguments ); }
-		});
-	};
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js
deleted file mode 100644
index 8cc325f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/refreshButton/refreshButtonSpec.js
+++ /dev/null
@@ -1,92 +0,0 @@
-describe("app.ui.RefreshButton", function() {
-
-	var RefreshButton = window.app.ui.RefreshButton;
-
-	var r, refresh_handler, change_handler;
-
-	function openMenuPanel( button, label ) {
-		button.el.find("BUTTON").eq(1).click();
-		$(".uiMenuPanel-label:contains(" + label + ")").click();
-		test.clock.tick(); // menuPanel -> bind _close_handler
-	}
-
-
-	beforeEach( function() {
-		test.clock.steal();
-		refresh_handler = jasmine.createSpy("refresh_handler");
-		change_handler = jasmine.createSpy("change_handler");
-		r = new RefreshButton({
-			onRefresh: refresh_handler,
-			onChange: change_handler
-		});
-		r.attach( document.body );
-	});
-
-	afterEach( function() {
-		r.remove();
-		test.clock.restore();
-	});
-
-	it("should have an initial default value", function() {
-		expect( r.value ).toBe( -1 );
-	});
-
-	it("should fire a refresh event after clicking the refresh button ", function() {
-		r.el.find("BUTTON").eq(0).click();
-
-		expect( refresh_handler ).toHaveBeenCalled();
-	});
-
-	it("should change the refresh rate when set it called", function() {
-		r.set( 100 );
-		expect( r.value ).toBe( 100 );
-	});
-
-	it("should set an interval when rate is set to a positive value", function() {
-		r.set( 100 );
-		test.clock.tick();
-		expect( refresh_handler.calls.count() ).toBe( 1 );
-	});
-
-	it("should not set an interval when rate is set to a non positive value", function() {
-		r.set( -1 );
-		test.clock.tick();
-		expect( refresh_handler.calls.count() ).toBe( 0 );
-	});
-
-	it("should fire a refresh event on intervals if refresh menu item is set to quickly", function() {
-		openMenuPanel( r, "quickly" );
-
-		expect( refresh_handler.calls.count() ).toBe( 0 );
-		test.clock.tick();
-		expect( refresh_handler.calls.count() ).toBe( 1 );
-		test.clock.tick();
-		expect( refresh_handler.calls.count() ).toBe( 2 );
-	});
-
-	it("should not fire refresh events when user selects Manual", function() {
-
-		openMenuPanel( r, "quickly" );
-
-		expect( refresh_handler.calls.count() ).toBe( 0 );
-		test.clock.tick();
-		expect( refresh_handler.calls.count() ).toBe( 1 );
-
-		openMenuPanel( r, "Manual" );
-
-		test.clock.tick();
-		expect( refresh_handler.calls.count() ).toBe( 1 );
-		test.clock.tick();
-		expect( refresh_handler.calls.count() ).toBe( 1 );
-	});
-
-	it("should fire a change event when a new refresh rate is selected", function() {
-		openMenuPanel( r, "quickly" );
-		expect( change_handler.calls.count() ).toBe( 1 );
-		expect( r.value ).toBe( 100 );
-		openMenuPanel( r, "Manual" );
-		expect( change_handler.calls.count() ).toBe( 2 );
-		expect( r.value ).toBe( -1 );
-	});
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js
deleted file mode 100644
index 6c7cf55..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/resultTable/resultTable.js
+++ /dev/null
@@ -1,55 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.ResultTable = ui.Table.extend({
-		defaults: {
-			width: 500,
-			height: 400
-		},
-
-		init: function() {
-			this._super();
-			this.on("rowClick", this._showPreview_handler);
-			this.selectedRow = null;
-			$(document).bind("keydown", this._nav_handler);
-		},
-		remove: function() {
-			$(document).unbind("keydown", this._nav_handler);
-			this._super();
-		},
-		attach: function(parent) {
-			if(parent) {
-				var height = parent.height() || ( $(document).height() - parent.offset().top - 41 ); // 41 = height in px of .uiTable-tools + uiTable-header
-				var width = parent.width();
-				this.el.width( width );
-				this.body.width( width ).height( height );
-			}
-			this._super(parent);
-		},
-		showPreview: function(row) {
-			row.addClass("selected");
-			this.preview = new app.ui.JsonPanel({
-				title: i18n.text("Browser.ResultSourcePanelTitle"),
-				json: row.data("row")._source,
-				onClose: function() { row.removeClass("selected"); }
-			});
-		},
-		_nav_handler: function(jEv) {
-			if(jEv.keyCode !== 40 && jEv.keyCode !== 38) {
-				return;
-			}
-			this.selectedRow && this.preview && this.preview.remove();
-			if(jEv.keyCode === 40) { // up arrow
-				this.selectedRow = this.selectedRow ? this.selectedRow.next("TR") : this.body.find("TR:first");
-			} else if(jEv.keyCode === 38) { // down arrow
-				this.selectedRow = this.selectedRow ? this.selectedRow.prev("TR") : this.body.find("TR:last");
-			}
-			this.selectedRow && this.showPreview(this.selectedRow);
-		},
-		_showPreview_handler: function(obj, data) {
-			this.showPreview(this.selectedRow = data.row);
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css
deleted file mode 100644
index 7315527..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.css
+++ /dev/null
@@ -1,11 +0,0 @@
-.uiSelectMenuPanel .uiMenuPanel-label {
-	margin-left: 1em;
-	padding-left: 4px;
-}
-
-.uiSelectMenuPanel .uiMenuPanel-item.selected .uiMenuPanel-label:before {
-	content: "\2713";
-	width: 12px;
-	margin-left: -12px;
-	display: inline-block;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js
deleted file mode 100644
index 8cbecc5..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/selectMenuPanel/selectMenuPanel.js
+++ /dev/null
@@ -1,33 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.SelectMenuPanel = ui.MenuPanel.extend({
-		defaults: {
-			items: [],		// (required) an array of menu items
-			value: null
-		},
-		_baseCls: "uiSelectMenuPanel uiMenuPanel",
-		init: function() {
-			this.value = this.config.value;
-			this._super();
-		},
-		_getItems: function() {
-			return this.config.items.map( function( item ) {
-				return {
-					text: item.text,
-					selected: this.value === item.value,
-					onclick: function( jEv ) {
-						var el = $( jEv.target ).closest("LI");
-						el.parent().children().removeClass("selected");
-						el.addClass("selected");
-						this.fire( "select", this, { value: item.value } );
-						this.value = item.value;
-					}.bind(this)
-				};
-			}, this );
-
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css
deleted file mode 100644
index 654389f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.css
+++ /dev/null
@@ -1,28 +0,0 @@
-.uiSidebarSection-head {
-	background-color: #b9cfff;
-	background-image: url('data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAcCAMAAABifa5OAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAMAUExURQUCFf///wICAgMDAwQEBAUFBQYGBgcHBwgICAkJCQoKCgsLCwwMDA0NDQ4ODg8PDxAQEBERERISEhMTExQUFBUVFRYWFhcXFxgYGBkZGRoaGhsbGxwcHB0dHR4eHh8fHyAgICEhISIiIiMjIyQkJCUlJSYmJicnJygoKCkpKSoqKisrKywsLC0tLS4uLi8vLzAwMDExMTIyMjMzMzQ0NDU1NTY2Njc3Nzg4ODk5OTo6Ojs7Ozw8PD09PT4+Pj8/P0BAQEFBQUJCQkNDQ0REREVFRUZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFFRUVJSUlNTU1RUVFVVVVZWVldXV1hYWFlZWVpaWltbW1xcXF1dXV5eXl9fX2BgYGFhYWJiYmNjY2RkZGVlZWZmZmdnZ2hoaGlpaWpqamtra2xsbG1tbW5ubm9vb3BwcHFxcXJycnNzc3R0dHV1dXZ2dnd3d3h4eHl5eXp6ent7e3x8fH19fX5+fn9/f4CAgIGBgYKCgoODg4SEhIWFhYaGhoeHh4iIiImJiYqKiouLi4yMjI2NjY6Ojo+Pj5CQkJGRkZKSkpOTk5SUlJWVlZaWlpeXl5iYmJmZmZqampubm5ycnJ2dnZ6enp+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq6ysrK2tra6urq+vr7CwsLGxsbKysrOzs7S0tLW1tba2tre3t7i4uLm5ubq6uru7u7y8vL29vb6+vr+/v8DAwMHBwcLCwsPDw8TExMXFxcbGxsfHx8jIyMnJycrKysvLy8zMzM3Nzc7Ozs/Pz9DQ0NHR0dLS0tPT09TU1NXV1dbW1tfX19jY2NnZ2dra2tvb29zc3N3d3d7e3t/f3+Dg4OHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///2Oyy/cAAAACdFJOU/8A5bcwSgAAADxJREFUeNq8zzkOACAMA8Hd/3+agiuRcIsrRopIjArOoLK1QAMNNBCRPkhLyzkn35Bjfd7JR1Nr09NoDACnvgDl1zlzoQAAAABJRU5ErkJggg==');
-	background-repeat: no-repeat;
-	background-position: 2px 5px;
-	margin-bottom: 1px;
-	padding: 3px 3px 3px 17px;
-	cursor: pointer;
-}
-
-.shown > .uiSidebarSection-head {
-	background-position: 2px -13px;
-}
-
-.uiSidebarSection-body {
-	margin-bottom: 3px;
-	display: none;
-}
-
-.uiSidebarSection-help {
-	text-shadow: #228 1px 1px 2px;
-	color: blue;
-	cursor: pointer;
-}
-
-.uiSidebarSection-help:hover {
-	text-decoration: underline;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js
deleted file mode 100644
index d5ab984..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/sidebarSection/sidebarSection.js
+++ /dev/null
@@ -1,41 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-
-	ui.SidebarSection = ui.AbstractWidget.extend({
-		defaults: {
-			title: "",
-			help: null,
-			body: null,
-			open: false
-		},
-		init: function() {
-			this._super();
-			this.el = $.joey( this._main_template() );
-			this.body = this.el.children(".uiSidebarSection-body");
-			this.config.open && ( this.el.addClass("shown") && this.body.css("display", "block") );
-		},
-		_showSection_handler: function( ev ) {
-			var shown = $( ev.target ).closest(".uiSidebarSection")
-				.toggleClass("shown")
-					.children(".uiSidebarSection-body").slideToggle(200, function() { this.fire("animComplete", this); }.bind(this))
-				.end()
-				.hasClass("shown");
-			this.fire(shown ? "show" : "hide", this);
-		},
-		_showHelp_handler: function( ev ) {
-			new ui.HelpPanel({ref: this.config.help});
-			ev.stopPropagation();
-		},
-		_main_template: function() { return (
-			{ tag: "DIV", cls: "uiSidebarSection", children: [
-				(this.config.title && { tag: "DIV", cls: "uiSidebarSection-head", onclick: this._showSection_handler, children: [
-					this.config.title,
-					( this.config.help && { tag: "SPAN", cls: "uiSidebarSection-help pull-right", onclick: this._showHelp_handler, text: i18n.text("General.HelpGlyph") } )
-				] }),
-				{ tag: "DIV", cls: "uiSidebarSection-body", children: [ this.config.body ] }
-			] }
-		); }
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css
deleted file mode 100644
index e8d2752..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.css
+++ /dev/null
@@ -1,33 +0,0 @@
-.uiSplitButton {
-	white-space: nowrap;
-}
-
-.uiSplitButton .uiButton:first-child {
-	margin-right: 0;
-	display: inline-block;
-}
-
-.uiSplitButton .uiButton:first-child .uiButton-content {
-	border-right-width: 1;
-	border-right-color: #5296c7;
-	border-top-right-radius: 0;
-	border-bottom-right-radius: 0;
-}
-
-.uiSplitButton .uiMenuButton {
-	margin-left: 0;
-}
-
-.uiSplitButton .uiButton:last-child .uiButton-content {
-	border-radius: 2px;
-	border-left-width: 1;
-	border-left-color: #96c6eb;
-	border-top-left-radius: 0;
-	border-bottom-left-radius: 0;
-	height: 20px;
-}
-
-.uiSplitButton .uiButton:last-child .uiButton-label {
-	padding: 2px 17px 2px 6px;
-	margin-left: -8px;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js
deleted file mode 100644
index 8785b99..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButton.js
+++ /dev/null
@@ -1,54 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.SplitButton = ui.AbstractWidget.extend({
-		defaults: {
-			items: [],
-			label: ""
-		},
-		_baseCls: "uiSplitButton",
-		init: function( parent ) {
-			this._super( parent );
-			this.value = null;
-			this.button = new ui.Button({
-				label: this.config.label,
-				onclick: this._click_handler
-			});
-			this.menu = new ui.SelectMenuPanel({
-				value: this.config.value,
-				items: this._getItems(),
-				onSelect: this._select_handler
-			});
-			this.menuButton = new ui.MenuButton({
-				label: "\u00a0",
-				menu: this.menu
-			});
-			this.el = $.joey(this._main_template());
-		},
-		remove: function() {
-			this.menu.remove();
-		},
-		disable: function() {
-			this.button.disable();
-		},
-		enable: function() {
-			this.button.enable();
-		},
-		_click_handler: function() {
-			this.fire("click", this, { value: this.value } );
-		},
-		_select_handler: function( panel, event ) {
-			this.fire( "select", this, event );
-		},
-		_getItems: function() {
-			return this.config.items;
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: this._baseCls, children: [
-				this.button, this.menuButton
-			] };
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js
deleted file mode 100644
index 76b6fa2..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/splitButton/splitButtonDemo.js
+++ /dev/null
@@ -1,16 +0,0 @@
-$( function() {
-
-	var ui = window.app.ns("ui");
-
-	window.builder = function() {
-		return new ui.SplitButton({
-			label: "Default",
-			items: [
-				{ label: "Action" },
-				{ label: "Another Action" },
-				{ label: "Selected", selected: true }
-			]
-		});
-	};
-
-});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css
deleted file mode 100644
index 5022045..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.css
+++ /dev/null
@@ -1,7 +0,0 @@
-.uiStructuredQuery {
-	padding: 10px;
-}
-
-.uiStructuredQuery-out {
-	min-height: 30px;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js
deleted file mode 100644
index aeb4b6b..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/structuredQuery/structuredQuery.js
+++ /dev/null
@@ -1,95 +0,0 @@
-(function( $, app, i18n ) {
-
-	var ui = app.ns("ui");
-	var data = app.ns("data");
-
-	var StructuredQuery = ui.AbstractWidget.extend({
-		defaults: {
-			cluster: null  // (required) instanceof app.services.Cluster
-		},
-		_baseCls: "uiStructuredQuery",
-		init: function(parent) {
-			this._super();
-			this.selector = new ui.IndexSelector({
-				onIndexChanged: this._indexChanged_handler,
-				cluster: this.config.cluster
-			});
-			this.el = $(this._main_template());
-			this.out = this.el.find("DIV.uiStructuredQuery-out");
-			this.attach( parent );
-		},
-		
-		_indexChanged_handler: function( index ) {
-			this.filter && this.filter.remove();
-			this.filter = new ui.FilterBrowser({
-				cluster: this.config.cluster,
-				index: index,
-				onStartingSearch: function() { this.el.find("DIV.uiStructuredQuery-out").text( i18n.text("General.Searching") ); this.el.find("DIV.uiStructuredQuery-src").hide(); }.bind(this),
-				onSearchSource: this._searchSource_handler,
-				onResults: this._results_handler
-			});
-			this.el.find(".uiStructuredQuery-body").append(this.filter);
-		},
-		
-		_results_handler: function( filter, event ) {
-			var typeMap = {
-				"json": this._jsonResults_handler,
-				"table": this._tableResults_handler,
-				"csv": this._csvResults_handler
-			};
-			typeMap[ event.type ].call( this, event.data, event.metadata );
-		},
-		_jsonResults_handler: function( results ) {
-			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.JsonPretty({ obj: results }));
-		},
-		_csvResults_handler: function( results ) {
-			this.el.find("DIV.uiStructuredQuery-out").empty().append( new ui.CSVTable({ results: results }));
-		},
-		_tableResults_handler: function( results, metadata ) {
-			// hack up a QueryDataSourceInterface so that StructuredQuery keeps working without using a Query object
-			var qdi = new data.QueryDataSourceInterface({ metadata: metadata, query: new data.Query() });
-			var tab = new ui.Table( {
-				store: qdi,
-				height: 400,
-				width: this.out.innerWidth()
-			} ).attach(this.out.empty());
-			qdi._results_handler(qdi.config.query, results);
-		},
-		
-		_showRawJSON : function() {
-			if($("#rawJsonText").length === 0) {
-				var hiddenButton = $("#showRawJSON");
-				var jsonText = $({tag: "P", type: "p", id: "rawJsonText"});
-				jsonText.text(hiddenButton[0].value);
-				hiddenButton.parent().append(jsonText);
-			}
-		},
-		
-		_searchSource_handler: function(src) {
-			var searchSourceDiv = this.el.find("DIV.uiStructuredQuery-src");
-			searchSourceDiv.empty().append(new app.ui.JsonPretty({ obj: src }));
-			if(typeof JSON !== "undefined") {
-				var showRawJSON = $({ tag: "BUTTON", type: "button", text: i18n.text("StructuredQuery.ShowRawJson"), id: "showRawJSON", value: JSON.stringify(src), onclick: this._showRawJSON });
-				searchSourceDiv.append(showRawJSON);
-			}
-			searchSourceDiv.show();
-		},
-		
-		_main_template: function() {
-			return { tag: "DIV", cls: this._baseCls, children: [
-				this.selector,
-				{ tag: "DIV", cls: "uiStructuredQuery-body" },
-				{ tag: "DIV", cls: "uiStructuredQuery-src", css: { display: "none" } },
-				{ tag: "DIV", cls: "uiStructuredQuery-out" }
-			]};
-		}
-	});
-
-	ui.StructuredQuery = ui.Page.extend({
-		init: function() {
-			this.q = new StructuredQuery( this.config );
-			this.el = this.q.el;
-		}
-	});
-
-})( this.jQuery, this.app, this.i18n );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.css
deleted file mode 100644
index ea8e0cf..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.css
+++ /dev/null
@@ -1,92 +0,0 @@
-.uiTable TABLE {
-	border-collapse: collapse;
-}
-
-.uiTable-body {
-	overflow-y: scroll;
-	overflow-x: auto;
-}
-
-.uiTable-headers {
-	overflow-x: hidden;
-}
-
-.uiTable-body TD {
-	white-space: nowrap;
-}
-
-.uiTable-body .uiTable-header-row TH,
-.uiTable-body .uiTable-header-row TH DIV {
-	padding-top: 0;
-	padding-bottom: 0;
-}
-
-.uiTable-body .uiTable-header-cell > DIV {
-	height: 0;
-	overflow: hidden;
-}
-
-.uiTable-headercell-menu {
-	float: right;
-}
-
-.uiTable-tools {
-	padding: 3px 4px;
-	height: 14px;
-}
-
-.uiTable-header-row {
-	background: #ddd;
-	background: -moz-linear-gradient(top, #eee, #ccc);
-	background: -webkit-linear-gradient(top, #eee, #ccc);
-}
-
-.uiTable-headercell-text {
-	margin-right: 20px;
-}
-
-.uiTable-headercell-menu {
-	display: none;
-}
-
-.uiTable-header-row TH {
-	border-right: 1px solid #bbb;
-	padding: 0;
-	text-align: left;
-}
-
-.uiTable-header-row TH > DIV {
-	padding: 3px 4px;
-	border-right: 1px solid #eee;
-}
-
-.uiTable-headerEndCap > DIV {
-	width: 19px;
-}
-
-.uiTable-header-row .uiTable-sort {
-	background: #ccc;
-	background: -moz-linear-gradient(top, #bebebe, #ccc);
-	background: -webkit-linear-gradient(top, #bebebe, #ccc);
-}
-.uiTable-header-row TH.uiTable-sort > DIV {
-	border-right: 1px solid #ccc;
-}
-
-.uiTable-sort .uiTable-headercell-menu {
-	display: block;
-}
-
-.uiTable TABLE TD {
-	border-right: 1px solid transparent;
-	padding: 3px 4px;
-}
-
-.uiTable-body TABLE TR:nth-child(even) {
-	background: #f3f3f3;
-}
-
-.uiTable-body TABLE TR.selected {
-	color: white;
-	background: #6060f1;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.js
deleted file mode 100644
index eb847a0..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/table/table.js
+++ /dev/null
@@ -1,102 +0,0 @@
-( function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Table = ui.AbstractWidget.extend({
-		defaults: {
-			store: null, // (required) implements interface app.data.DataSourceInterface
-			height: 0,
-			width: 0
-		},
-		_baseCls: "uiTable",
-		init: function(parent) {
-			this._super();
-			this.initElements(parent);
-			this.config.store.on("data", this._data_handler);
-		},
-		attach: function(parent) {
-			if(parent) {
-				this._super(parent);
-				this._reflow();
-			}
-		},
-		initElements: function(parent) {
-			this.el = $.joey(this._main_template());
-			this.body = this.el.find(".uiTable-body");
-			this.headers = this.el.find(".uiTable-headers");
-			this.tools = this.el.find(".uiTable-tools");
-			this.attach( parent );
-		},
-		_data_handler: function(store) {
-			this.tools.text(store.summary);
-			this.headers.empty().append(this._header_template(store.columns));
-			this.body.empty().append(this._body_template(store.data, store.columns));
-			this._reflow();
-		},
-		_reflow: function() {
-			var firstCol = this.body.find("TR:first TH.uiTable-header-cell > DIV"),
-					headers = this.headers.find("TR:first TH.uiTable-header-cell > DIV");
-			for(var i = 0; i < headers.length; i++) {
-				$(headers[i]).width( $(firstCol[i]).width() );
-			}
-			this._scroll_handler();
-		},
-		_scroll_handler: function(ev) {
-			this.el.find(".uiTable-headers").scrollLeft(this.body.scrollLeft());
-		},
-		_dataClick_handler: function(ev) {
-			var row = $(ev.target).closest("TR");
-			if(row.length) {
-				this.fire("rowClick", this, { row: row } );
-			}
-		},
-		_headerClick_handler: function(ev) {
-			var header = $(ev.target).closest("TH.uiTable-header-cell");
-			if(header.length) {
-				this.fire("headerClick", this, { header: header, column: header.data("column"), dir: header.data("dir") });
-			}
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), css: { width: this.config.width + "px" }, cls: this._baseCls, children: [
-				{ tag: "DIV", cls: "uiTable-tools" },
-				{ tag: "DIV", cls: "uiTable-headers", onclick: this._headerClick_handler },
-				{ tag: "DIV", cls: "uiTable-body",
-					onclick: this._dataClick_handler,
-					onscroll: this._scroll_handler,
-					css: { height: this.config.height + "px", width: this.config.width + "px" }
-				}
-			] };
-		},
-		_header_template: function(columns) {
-			var ret = { tag: "TABLE", children: [ this._headerRow_template(columns) ] };
-			ret.children[0].children.push(this._headerEndCap_template());
-			return ret;
-		},
-		_headerRow_template: function(columns) {
-			return { tag: "TR", cls: "uiTable-header-row", children: columns.map(function(column) {
-				var dir = ((this.config.store.sort.column === column) && this.config.store.sort.dir) || "none";
-				return { tag: "TH", data: { column: column, dir: dir }, cls: "uiTable-header-cell" + ((dir !== "none") ? " uiTable-sort" : ""), children: [
-					{ tag: "DIV", children: [
-						{ tag: "DIV", cls: "uiTable-headercell-menu", text: dir === "asc" ? "\u25b2" : "\u25bc" },
-						{ tag: "DIV", cls: "uiTable-headercell-text", text: column }
-					]}
-				]};
-			}, this)};
-		},
-		_headerEndCap_template: function() {
-			return { tag: "TH", cls: "uiTable-headerEndCap", children: [ { tag: "DIV" } ] };
-		},
-		_body_template: function(data, columns) {
-			return { tag: "TABLE", children: []
-				.concat(this._headerRow_template(columns))
-				.concat(data.map(function(row) {
-					return { tag: "TR", data: { row: row }, cls: "uiTable-row", children: columns.map(function(column){
-						return { tag: "TD", cls: "uiTable-cell", children: [ { tag: "DIV", text: (row[column] || "").toString() } ] };
-					})};
-				}))
-			};
-		}
-
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js
deleted file mode 100644
index c734896..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textField.js
+++ /dev/null
@@ -1,24 +0,0 @@
-(function( app ) {
-
-	var ui = app.ns("ui");
-
-	ui.TextField = ui.AbstractField.extend({
-		init: function() {
-			this._super();
-		},
-		_keyup_handler: function() {
-			this.fire("change", this );
-		},
-		_main_template: function() {
-			return { tag: "DIV", id: this.id(), cls: "uiField uiTextField", children: [
-				{ tag: "INPUT",
-					type: "text",
-					name: this.config.name,
-					placeholder: this.config.placeholder,
-					onkeyup: this._keyup_handler
-				}
-			]};
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js
deleted file mode 100644
index 25790d4..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/textField/textFieldDemo.js
+++ /dev/null
@@ -1,13 +0,0 @@
-$( function() {
-
-	var ui = window.app.ns("ui");
-
-	window.builder = function() { return (
-		{ tag: "DIV", children: [
-			new ui.TextField({}),
-			new ui.TextField({ placeholder: "placeholder" }),
-			new ui.TextField({ onchange: function( tf ) { console.log( tf.val() ); } })
-		] }
-	); };
-
-});
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css
deleted file mode 100644
index e5cf72f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.css
+++ /dev/null
@@ -1,24 +0,0 @@
-.uiToolbar {
-	height: 28px;
-	background: #fdfefe;
-	background: -moz-linear-gradient(top, #fdfefe, #eaedef);
-	background: -webkit-linear-gradient(top, #fdfefe, #eaedef);
-	border-bottom: 1px solid #d2d5d7;
-	padding: 3px 10px;
-}
-
-.uiToolbar H2 {
-	display: inline-block;
-	font-size: 120%;
-	margin: 0;
-	padding: 5px 20px 5px 0;
-}
-
-.uiToolbar .uiTextField {
-	display: inline-block;
-}
-
-.uiToolbar .uiTextField INPUT {
-	padding-top: 2px;
-	padding-bottom: 5px;
-}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js
deleted file mode 100644
index d64eefe..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ui/toolbar/toolbar.js
+++ /dev/null
@@ -1,25 +0,0 @@
-(function( $, app ) {
-
-	var ui = app.ns("ui");
-
-	ui.Toolbar = ui.AbstractWidget.extend({
-		defaults: {
-			label: "",
-			left: [],
-			right: []
-		},
-		init: function(parent) {
-			this._super();
-			this.el = $.joey(this._main_template());
-		},
-		_main_template: function() {
-			return { tag: "DIV", cls: "uiToolbar", children: [
-				{ tag: "DIV", cls: "pull-left", children: [
-					{ tag: "H2", text: this.config.label }
-				].concat(this.config.left) },
-				{ tag: "DIV", cls: "pull-right", children: this.config.right }
-			]};
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/class.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/class.js
deleted file mode 100644
index 8014263..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/class.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * base class for creating inheritable classes
- * based on resigs 'Simple Javascript Inheritance Class' (based on base2 and prototypejs)
- * modified with static super and auto config
- * @name Class
- * @constructor
- */
-(function( $, app ){
-
-	var ux = app.ns("ux");
-
-	var initializing = false, fnTest = /\b_super\b/;
-
-	ux.Class = function(){};
-
-	ux.Class.extend = function(prop) {
-		function Class() {
-			if(!initializing) {
-				var args = Array.prototype.slice.call(arguments);
-				this.config = $.extend( function(t) { // automatically construct a config object based on defaults and last item passed into the constructor
-					return $.extend(t._proto && t._proto() && arguments.callee(t._proto()) || {}, t.defaults);
-				} (this) , args.pop() );
-				this.init && this.init.apply(this, args); // automatically run the init function when class created
-			}
-		}
-
-		initializing = true;
-		var prototype = new this();
-		initializing = false;
-		
-		var _super = this.prototype;
-		prototype._proto = function() {
-			return _super;
-		};
-
-		for(var name in prop) {
-			prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function" && fnTest.test(prop[name]) ?
-				(function(name, fn){
-					return function() { this._super = _super[name]; return fn.apply(this, arguments); };
-				})(name, prop[name]) : prop[name];
-		}
-
-		Class.prototype = prototype;
-		Class.constructor = Class;
-
-		Class.extend = arguments.callee; // make class extendable
-
-		return Class;
-	};
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js
deleted file mode 100644
index 17ca9be..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/dragdrop.js
+++ /dev/null
@@ -1,124 +0,0 @@
-(function( $, app ) {
-
-	var ux = app.ns("ux");
-
-	/**
-	 * Provides drag and drop functionality<br>
-	 * a DragDrop instance is created for each usage pattern and then used over and over again<br>
-	 * first a dragObj is defined - this is the jquery node that will be dragged around<br>
-	 * second, the event callbacks are defined - these allow you control the ui during dragging and run functions when successfully dropping<br>
-	 * thirdly drop targets are defined - this is a list of DOM nodes, the constructor works in one of two modes:
-	 * <li>without targets - objects can be picked up and dragged around, dragStart and dragStop events fire</li>
-	 * <li>with targets - as objects are dragged over targets dragOver, dragOut and DragDrop events fire
-	 * to start dragging call the DragDrop.pickup_handler() function, dragging stops when the mouse is released.
-	 * @constructor
-	 * The following options are supported
-	 * <dt>targetSelector</dt>
-	 *   <dd>an argument passed directly to jquery to create a list of targets, as such it can be a CSS style selector, or an array of DOM nodes<br>if target selector is null the DragDrop does Drag only and will not fire dragOver dragOut and dragDrop events</dd>
-	 * <dt>pickupSelector</dt>
-	 *   <dd>a jquery selector. The pickup_handler is automatically bound to matched elements (eg clicking on these elements starts the drag). if pickupSelector is null, the pickup_handler must be manually bound <code>$(el).bind("mousedown", dragdrop.pickup_handler)</code></dd>
-	 * <dt>dragObj</dt>
-	 *   <dd>the jQuery element to drag around when pickup is called. If not defined, dragObj must be set in onDragStart</dd>
-	 * <dt>draggingClass</dt>
-	 *   <dd>the class(es) added to items when they are being dragged</dd>
-	 * The following observables are supported
-	 * <dt>dragStart</dt>
-	 *   <dd>a callback when start to drag<br><code>function(jEv)</code></dd>
-	 * <dt>dragOver</dt>
-	 *   <dd>a callback when we drag into a target<br><code>function(jEl)</code></dd>
-	 * <dt>dragOut</dt>
-	 *   <dd>a callback when we drag out of a target, or when we drop over a target<br><code>function(jEl)</code></dd>
-	 * <dt>dragDrop</dt>
-	 *   <dd>a callback when we drop on a target<br><code>function(jEl)</code></dd>
-	 * <dt>dragStop</dt>
-	 *   <dd>a callback when we stop dragging<br><code>function(jEv)</code></dd>
-	 */
-	ux.DragDrop = ux.Observable.extend({
-		defaults : {
-			targetsSelector : null,
-			pickupSelector:   null,
-			dragObj :         null,
-			draggingClass :   "dragging"
-		},
-
-		init: function(options) {
-			this._super(); // call the class initialiser
-		
-			this.drag_handler = this.drag.bind(this);
-			this.drop_handler = this.drop.bind(this);
-			this.pickup_handler = this.pickup.bind(this);
-			this.targets = [];
-			this.dragObj = null;
-			this.dragObjOffset = null;
-			this.currentTarget = null;
-			if(this.config.pickupSelector) {
-				$(this.config.pickupSelector).bind("mousedown", this.pickup_handler);
-			}
-		},
-
-		drag : function(jEv) {
-			jEv.preventDefault();
-			var mloc = acx.vector( this.lockX || jEv.pageX, this.lockY || jEv.pageY );
-			this.dragObj.css(mloc.add(this.dragObjOffset).asOffset());
-			if(this.targets.length === 0) {
-				return;
-			}
-			if(this.currentTarget !== null && mloc.within(this.currentTarget[1], this.currentTarget[2])) {
-				return;
-			}
-			if(this.currentTarget !== null) {
-				this.fire('dragOut', this.currentTarget[0]);
-				this.currentTarget = null;
-			}
-			for(var i = 0; i < this.targets.length; i++) {
-				if(mloc.within(this.targets[i][1], this.targets[i][2])) {
-					this.currentTarget = this.targets[i];
-					break;
-				}
-			}
-			if(this.currentTarget !== null) {
-				this.fire('dragOver', this.currentTarget[0]);
-			}
-		},
-		
-		drop : function(jEv) {
-			$(document).unbind("mousemove", this.drag_handler);
-			$(document).unbind("mouseup", this.drop_handler);
-			this.dragObj.removeClass(this.config.draggingClass);
-			if(this.currentTarget !== null) {
-				this.fire('dragOut', this.currentTarget[0]);
-				this.fire('dragDrop', this.currentTarget[0]);
-			}
-			this.fire('dragStop', jEv);
-			this.dragObj = null;
-		},
-		
-		pickup : function(jEv, opts) {
-			$.extend(this.config, opts);
-			this.fire('dragStart', jEv);
-			this.dragObj = this.dragObj || this.config.dragObj;
-			this.dragObjOffset = this.config.dragObjOffset || acx.vector(this.dragObj.offset()).sub(jEv.pageX, jEv.pageY);
-			this.lockX = this.config.lockX ? jEv.pageX : 0;
-			this.lockY = this.config.lockY ? jEv.pageY : 0;
-			this.dragObj.addClass(this.config.draggingClass);
-			if(!this.dragObj.get(0).parentNode || this.dragObj.get(0).parentNode.nodeType === 11) { // 11 = document fragment
-				$(document.body).append(this.dragObj);
-			}
-			if(this.config.targetsSelector) {
-				this.currentTarget = null;
-				var targets = ( this.targets = [] );
-				// create an array of elements optimised for rapid collision detection calculation
-				$(this.config.targetsSelector).each(function(i, el) {
-					var jEl = $(el);
-					var tl = acx.vector(jEl.offset());
-					var br = tl.add(jEl.width(), jEl.height());
-					targets.push([jEl, tl, br]);
-				});
-			}
-			$(document).bind("mousemove", this.drag_handler);
-			$(document).bind("mouseup", this.drop_handler);
-			this.drag_handler(jEv);
-		}
-	});
-
-})( this.jQuery, this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js
deleted file mode 100644
index ce4064f..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/fieldCollection.js
+++ /dev/null
@@ -1,25 +0,0 @@
-(function( app ) {
-
-	var ux = app.ns("ux");
-
-	ux.FieldCollection = ux.Observable.extend({
-		defaults: {
-			fields: []	// the collection of fields
-		},
-		init: function() {
-			this._super();
-			this.fields = this.config.fields;
-		},
-		validate: function() {
-			return this.fields.reduce(function(r, field) {
-				return r && field.validate();
-			}, true);
-		},
-		getData: function(type) {
-			return this.fields.reduce(function(r, field) {
-				r[field.name] = field.val(); return r;
-			}, {});
-		}
-	});
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/observable.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/observable.js
deleted file mode 100644
index 0130397..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/observable.js
+++ /dev/null
@@ -1,46 +0,0 @@
-(function( app ) {
-
-	var ux = app.ns("ux");
-
-	ux.Observable = ux.Class.extend((function() {
-		return {
-			init: function() {
-				this.observers = {};
-				for( var opt in this.config ) { // automatically install observers that are defined in the configuration
-					if( opt.indexOf( 'on' ) === 0 ) {
-						this.on( opt.substring(2) , this.config[ opt ] );
-					}
-				}
-			},
-			_getObs: function( type ) {
-				return ( this.observers[ type.toLowerCase() ] || ( this.observers[ type.toLowerCase() ] = [] ) );
-			},
-			on: function( type, fn, params, thisp ) {
-				this._getObs( type ).push( { "cb" : fn, "args" : params || [] , "cx" : thisp || this } );
-				return this;
-			},
-			fire: function( type ) {
-				var params = Array.prototype.slice.call( arguments, 1 );
-				this._getObs( type ).slice().forEach( function( ob ) {
-					ob["cb"].apply( ob["cx"], ob["args"].concat( params ) );
-				} );
-				return this;
-			},
-			removeAllObservers: function() {
-				this.observers = {};
-			},
-			removeObserver: function( type, fn ) {
-				var obs = this._getObs( type ),
-					index = obs.reduce( function(p, t, i) { return (t.cb === fn) ? i : p; }, -1 );
-				if(index !== -1) {
-					obs.splice( index, 1 );
-				}
-				return this; // make observable functions chainable
-			},
-			hasObserver: function( type ) {
-				return !! this._getObs( type ).length;
-			}
-		};
-	})());
-
-})( this.app );
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singleton.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singleton.js
deleted file mode 100644
index 953e4a0..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singleton.js
+++ /dev/null
@@ -1,21 +0,0 @@
-(function( app ) {
-
-	var ux = app.ns("ux");
-
-	var extend = ux.Observable.extend;
-	var instance = function() {
-		if( ! ("me" in this) ) {
-			this.me = new this();
-		}
-		return this.me;
-	};
-
-	ux.Singleton = ux.Observable.extend({});
-
-	ux.Singleton.extend = function() {
-		var Self = extend.apply( this, arguments );
-		Self.instance = instance;
-		return Self;
-	};
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js
deleted file mode 100644
index 96ef6a2..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/singletonSpec.js
+++ /dev/null
@@ -1,41 +0,0 @@
-describe("app.ux.singleton", function(){
-
-var Singleton = window.app.ux.Singleton;
-
-	describe("creating a singleton", function() {
-		var X = Singleton.extend({
-			foo: function() {
-				return "bar";
-			}
-		});
-
-		var Y = Singleton.extend({
-			bar: function() {
-				return "baz";
-			}
-		});
-
-		it("should have properties like a normal class", function() {
-			var a = X.instance();
-
-			expect( a instanceof X ).toBe( true );
-			expect( a.foo() ).toBe( "bar" );
-		});
-
-		it("should return single instance each time instance() is called", function() {
-			var a = X.instance();
-			var b = X.instance();
-
-			expect( a ).toBe( b );
-		});
-
-		it("should not share instances with different singletons", function() {
-			var a = X.instance();
-			var c = Y.instance();
-
-			expect( a ).not.toBe( c );
-		});
-
-	});
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/table.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/table.css
deleted file mode 100644
index 7d829c4..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/table.css
+++ /dev/null
@@ -1,20 +0,0 @@
-TABLE.table {
-	border-collapse: collapse;
-}
-
-
-TABLE.table TH {
-	font-weight: normal;
-	text-align: left;
-	vertical-align: middle;
-}
-
-TABLE.table TBODY.striped TR:nth-child(odd) {
-	background: #eee;
-}
-
-TABLE.table H3 {
-	margin: 0;
-	font-weight: bold;
-	font-size: 140%;
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js
deleted file mode 100644
index db76b13..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templateSpec.js
+++ /dev/null
@@ -1,81 +0,0 @@
-describe("app.ut.byteSize_template", function() {
-
-	describe("byteSize_template()", function() {
-		var byteSize_template = window.app.ut.byteSize_template;
-
-		it("should postfix with a B and have not decimal for number less than 1000", function() {
-			expect( byteSize_template( 0 ) ).toBe( "0B" );
-			expect( byteSize_template( 1 ) ).toBe( "1B" );
-			expect( byteSize_template( 10 ) ).toBe( "10B" );
-			expect( byteSize_template( 100 ) ).toBe( "100B" );
-			expect( byteSize_template( 999 ) ).toBe( "999B" );
-		});
-
-		it("should have 0.xxX for values between 1000 and 1023", function() {
-			expect( byteSize_template( 1000  ) ).toBe( "0.98ki" );
-			expect( byteSize_template( 1024 * 1000 ) ).toBe( "0.98Mi" );
-		});
-
-		it("should always have three significant digits", function() {
-			expect( byteSize_template( 1023  ) ).toBe( "1.00ki" );
-			expect( byteSize_template( 1024  ) ).toBe( "1.00ki" );
-			expect( byteSize_template( 1025  ) ).toBe( "1.00ki" );
-			expect( byteSize_template( 1024 * 5 ) ).toBe( "5.00ki" );
-			expect( byteSize_template( 1024 * 55 ) ).toBe( "55.0ki" );
-			expect( byteSize_template( 1024 * 555 ) ).toBe( "555ki" );
-		});
-
-		it("should have the correct postfix", function() {
-			expect( byteSize_template( 3 * Math.pow( 1024, 1) ) ).toBe( "3.00ki" );
-			expect( byteSize_template( 3 * Math.pow( 1024, 2) ) ).toBe( "3.00Mi" );
-			expect( byteSize_template( 3 * Math.pow( 1024, 3) ) ).toBe( "3.00Gi" );
-			expect( byteSize_template( 3 * Math.pow( 1024, 4) ) ).toBe( "3.00Ti" );
-			expect( byteSize_template( 3 * Math.pow( 1024, 5) ) ).toBe( "3.00Pi" );
-			expect( byteSize_template( 3 * Math.pow( 1024, 6) ) ).toBe( "3.00Ei" );
-			expect( byteSize_template( 3 * Math.pow( 1024, 7) ) ).toBe( "3.00Zi" );
-			expect( byteSize_template( 3 * Math.pow( 1024, 8) ) ).toBe( "3.00Yi" );
-		});
-
-		it("should show an overflow for stupidly big numbers", function() {
-			expect( byteSize_template( 3 * Math.pow( 1024, 10) ) ).toBe( "3.00..E" );
-		});
-	});
-
-	describe("count_template()", function() {
-		var count_template = window.app.ut.count_template;
-
-		it("should not postfix and not decimal for number less than 1000", function() {
-			expect( count_template( 0 ) ).toBe( "0" );
-			expect( count_template( 1 ) ).toBe( "1" );
-			expect( count_template( 10 ) ).toBe( "10" );
-			expect( count_template( 100 ) ).toBe( "100" );
-			expect( count_template( 999 ) ).toBe( "999" );
-		});
-
-		it("should always have three significant digits", function() {
-			expect( count_template( 1000  ) ).toBe( "1.00k" );
-			expect( count_template( 1005  ) ).toBe( "1.00k" );
-			expect( count_template( 1055  ) ).toBe( "1.05k" );
-			expect( count_template( 1000 * 5 ) ).toBe( "5.00k" );
-			expect( count_template( 1000 * 55 ) ).toBe( "55.0k" );
-			expect( count_template( 1000 * 555 ) ).toBe( "555k" );
-		});
-
-		it("should have the correct postfix", function() {
-			expect( count_template( 3 * Math.pow( 1000, 1) ) ).toBe( "3.00k" );
-			expect( count_template( 3 * Math.pow( 1000, 2) ) ).toBe( "3.00M" );
-			expect( count_template( 3 * Math.pow( 1000, 3) ) ).toBe( "3.00G" );
-			expect( count_template( 3 * Math.pow( 1000, 4) ) ).toBe( "3.00T" );
-			expect( count_template( 3 * Math.pow( 1000, 5) ) ).toBe( "3.00P" );
-			expect( count_template( 3 * Math.pow( 1000, 6) ) ).toBe( "3.00E" );
-			expect( count_template( 3 * Math.pow( 1000, 7) ) ).toBe( "3.00Z" );
-			expect( count_template( 3 * Math.pow( 1000, 8) ) ).toBe( "3.00Y" );
-		});
-
-		it("should show an overflow for stupidly big numbers", function() {
-			expect( count_template( 3 * Math.pow( 1000, 10) ) ).toBe( "3.00..E" );
-		});
-	});
-
-
-});
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js
deleted file mode 100644
index 3fdb508..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/app/ux/templates/templates.js
+++ /dev/null
@@ -1,32 +0,0 @@
-(function( app ) {
-
-	var ut = app.ns("ut");
-
-	ut.option_template = function(v) { return { tag: "OPTION", value: v, text: v }; };
-
-	ut.require_template = function(f) { return f.require ? { tag: "SPAN", cls: "require", text: "*" } : null; };
-
-
-	var sib_prefix = ['B','ki','Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];
-
-	ut.byteSize_template = function(n) {
-		var i = 0;
-		while( n >= 1000 ) {
-			i++;
-			n /= 1024;
-		}
-		return (i === 0 ? n.toString() : n.toFixed( 3 - parseInt(n,10).toString().length )) + ( sib_prefix[ i ] || "..E" );
-	};
-
-	var sid_prefix = ['','k','M', 'G', 'T', 'P', 'E', 'Z', 'Y'];
-
-	ut.count_template = function(n) {
-		var i = 0;
-		while( n >= 1000 ) {
-			i++;
-			n /= 1000;
-		}
-		return i === 0 ? n.toString() : ( n.toFixed( 3 - parseInt(n,10).toString().length ) + ( sid_prefix[ i ] || "..E" ) );
-	};
-
-})( this.app );
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js
deleted file mode 100644
index b8095fd..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/dateRangeParser/date-range-parser.js
+++ /dev/null
@@ -1,203 +0,0 @@
-/*!
- * date-range-parser.js
- * Contributed to the Apache Software Foundation by:
- *    Ben Birch - Aconex
- * fork me at https://github.com/mobz/date-range-parser
-
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-
-*/
-
-(function() {
-
-	var drp = window.dateRangeParser = {};
-
-	drp.defaultRange = 1000 * 60 * 60 * 24;
-
-	drp.now = null; // set a different value for now than the time at function invocation
-
-	drp.parse = function(v) {
-		try {
-			var r = drp._parse(v);
-			r.end && r.end--; // remove 1 millisecond from the final end range
-		} catch(e) {
-			r = null;
-		}
-		return r;
-	};
-
-	drp.print = function(t, p) {
-		var format = ["", "-", "-", " ", ":", ":", "."];
-		var da = makeArray(t);
-		var str = "";
-		for(var i = 0; i <= p; i++) {
-			str += format[i] + (da[i] < 10 ? "0" : "") + da[i];
-		}
-		return str;
-	};
-
-	(function() {
-		drp._relTokens = {};
-
-		var values = {
-			"yr"  : 365*24*60*60*1000,
-			"mon" : 31*24*60*60*1000,
-			"day" : 24*60*60*1000,
-			"hr"  : 60*60*1000,
-			"min" : 60*1000,
-			"sec" : 1000
-		};
-
-		var alias_lu = {
-			"yr" : "y,yr,yrs,year,years",
-			"mon" : "mo,mon,mos,mons,month,months",
-			"day" : "d,dy,dys,day,days",
-			"hr" : "h,hr,hrs,hour,hours",
-			"min" : "m,min,mins,minute,minutes",
-			"sec" : "s,sec,secs,second,seconds"
-		};
-
-		for(var key in alias_lu) {
-			if(alias_lu.hasOwnProperty(key)) {
-				var aliases = alias_lu[key].split(",");
-				for(var i = 0; i < aliases.length; i++) {
-					drp._relTokens[aliases[i]] = values[key];
-				}
-			}
-		}
-	})();
-
-	function makeArray(d) {
-		var da = new Date(d);
-		return [ da.getUTCFullYear(), da.getUTCMonth()+1, da.getUTCDate(), da.getUTCHours(), da.getUTCMinutes(), da.getUTCSeconds(), da.getUTCMilliseconds() ];
-	}
-
-	function fromArray(a) {
-		var d = [].concat(a); d[1]--;
-		return Date.UTC.apply(null, d);
-	}
-
-	drp._parse = function parse(v) {
-		var now = this.now || new Date().getTime();
-
-		function precArray(d, p, offset) {
-			var tn = makeArray(d);
-			tn[p] += offset || 0;
-			for(var i = p+1; i < 7; i++) {
-				tn[i] = i < 3 ? 1 : 0;
-			}
-			return tn;
-		}
-		function makePrecRange(dt, p, r) {
-			var ret = { };
-			ret.start = fromArray(dt);
-			dt[p] += r || 1;
-			ret.end = fromArray(dt);
-			return ret;
-		}
-		function procTerm(term) {
-			var m = term.replace(/\s/g, "").toLowerCase().match(/^([a-z ]+)$|^([ 0-9:-]+)$|^(\d+[a-z]+)$/);
-			if(m[1]) {	// matches ([a-z ]+)
-				function dra(p, o, r) {
-					var dt = precArray(now, p, o);
-					if(r) {
-						dt[2] -= new Date(fromArray(dt)).getUTCDay();
-					}
-					return makePrecRange(dt, p, r);
-				}
-				switch( m[1]) {
-					case "now" : return { start: now, end: now, now: now };
-					case "today" : return dra( 2, 0 );
-					case "thisweek" : return dra( 2, 0, 7 );
-					case "thismonth" : return dra( 1, 0 );
-					case "thisyear" : return dra( 0, 0 );
-					case "yesterday" : return dra( 2, -1 );
-					case "lastweek" : return dra( 2, -7, 7 );
-					case "lastmonth" : return dra( 1, -1 );
-					case "lastyear" : return dra( 0, -1 );
-					case "tomorrow" : return dra( 2, 1 );
-					case "nextweek" : return dra( 2, 7, 7 );
-					case "nextmonth" : return dra( 1, 1 );
-					case "nextyear" : return dra(0, 1 );
-				}
-				throw "unknown token " +  m[1];
-			} else if(m[2]) { // matches ([ 0-9:-]+)
-				dn = makeArray(now);
-				var dt = m[2].match(/^(?:(\d{4})(?:\-(\d\d))?(?:\-(\d\d))?)? ?(?:(\d{1,2})(?:\:(\d\d)(?:\:(\d\d))?)?)?$/);
-				dt.shift();
-				for(var p = 0, z = false, i = 0; i < 7; i++) {
-					if(dt[i]) {
-						dn[i] = parseInt(dt[i], 10);
-						p = i;
-						z = true;
-					} else {
-						if(z)
-							dn[i] = i < 3 ? 1 : 0;
-					}
-				}
-				return makePrecRange(dn, p);
-			} else if(m[3]) { // matches (\d+[a-z]{1,4})
-				var dr = m[3].match(/(\d+)\s*([a-z]+)/i);
-				var n = parseInt(dr[1], 10);
-				return { rel: n * drp._relTokens[dr[2]] };
-			}
-			throw "unknown term " + term;
-		}
-
-		if(!v) {
-			return { start: null, end: null };
-		}
-		var terms = v.split(/\s*([^<>]*[^<>-])?\s*(->|<>|<)?\s*([^<>]+)?\s*/);
-
-		var term1 = terms[1] ? procTerm(terms[1]) : null;
-		var op = terms[2] || "";
-		var term2 = terms[3] ? procTerm(terms[3]) : null;
-
-		if(op === "<" || op === "->" ) {
-			if(term1 && !term2) {
-				return { start: term1.start, end: null };
-			} else if(!term1 && term2) {
-				return { start: null, end: term2.end };
-			} else {
-				if(term2.rel) {
-					return { start: term1.start, end: term1.end + term2.rel };
-				} else if(term1.rel) {
-					return { start: term2.start - term1.rel, end: term2.end };
-				} else {
-					return { start: term1.start, end: term2.end };
-				}
-			}
-		} else if(op === "<>") {
-			if(!term2) {
-				return { start: term1.start - drp.defaultRange, end: term1.end + drp.defaultRange }
-			} else {
-				if(! ("rel" in term2)) throw "second term did not hav a range";
-				return { start: term1.start - term2.rel, end: term1.end + term2.rel };
-			}
-		} else {
-			if(term1.rel) {
-				return { start: now - term1.rel, end: now + term1.rel };
-			} else if(term1.now) {
-				return { start: term1.now - drp.defaultRange, end: term1.now + drp.defaultRange };
-			} else {
-				return { start: term1.start, end: term1.end };
-			}
-		}
-		throw "could not process value " + v;
-	};
-})();
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css
deleted file mode 100644
index be7e15c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.css
+++ /dev/null
@@ -1,1338 +0,0 @@
-/*!
- *  Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */
-/* FONT PATH
- * -------------------------- */
-@font-face {
-  font-family: 'FontAwesome';
-  src: url('fonts/fontawesome-webfont.eot?v=4.0.3');
-  src: url('fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'), url('fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'), url('fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'), url('fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');
-  font-weight: normal;
-  font-style: normal;
-}
-.fa {
-  display: inline-block;
-  font-family: FontAwesome;
-  font-style: normal;
-  font-weight: normal;
-  line-height: 1;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-}
-/* makes the font 33% larger relative to the icon container */
-.fa-lg {
-  font-size: 1.3333333333333333em;
-  line-height: 0.75em;
-  vertical-align: -15%;
-}
-.fa-2x {
-  font-size: 2em;
-}
-.fa-3x {
-  font-size: 3em;
-}
-.fa-4x {
-  font-size: 4em;
-}
-.fa-5x {
-  font-size: 5em;
-}
-.fa-fw {
-  width: 1.2857142857142858em;
-  text-align: center;
-}
-.fa-ul {
-  padding-left: 0;
-  margin-left: 2.142857142857143em;
-  list-style-type: none;
-}
-.fa-ul > li {
-  position: relative;
-}
-.fa-li {
-  position: absolute;
-  left: -2.142857142857143em;
-  width: 2.142857142857143em;
-  top: 0.14285714285714285em;
-  text-align: center;
-}
-.fa-li.fa-lg {
-  left: -1.8571428571428572em;
-}
-.fa-border {
-  padding: .2em .25em .15em;
-  border: solid 0.08em #eeeeee;
-  border-radius: .1em;
-}
-.pull-right {
-  float: right;
-}
-.pull-left {
-  float: left;
-}
-.fa.pull-left {
-  margin-right: .3em;
-}
-.fa.pull-right {
-  margin-left: .3em;
-}
-.fa-spin {
-  -webkit-animation: spin 2s infinite linear;
-  -moz-animation: spin 2s infinite linear;
-  -o-animation: spin 2s infinite linear;
-  animation: spin 2s infinite linear;
-}
-@-moz-keyframes spin {
-  0% {
-    -moz-transform: rotate(0deg);
-  }
-  100% {
-    -moz-transform: rotate(359deg);
-  }
-}
-@-webkit-keyframes spin {
-  0% {
-    -webkit-transform: rotate(0deg);
-  }
-  100% {
-    -webkit-transform: rotate(359deg);
-  }
-}
-@-o-keyframes spin {
-  0% {
-    -o-transform: rotate(0deg);
-  }
-  100% {
-    -o-transform: rotate(359deg);
-  }
-}
-@-ms-keyframes spin {
-  0% {
-    -ms-transform: rotate(0deg);
-  }
-  100% {
-    -ms-transform: rotate(359deg);
-  }
-}
-@keyframes spin {
-  0% {
-    transform: rotate(0deg);
-  }
-  100% {
-    transform: rotate(359deg);
-  }
-}
-.fa-rotate-90 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
-  -webkit-transform: rotate(90deg);
-  -moz-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  -o-transform: rotate(90deg);
-  transform: rotate(90deg);
-}
-.fa-rotate-180 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
-  -webkit-transform: rotate(180deg);
-  -moz-transform: rotate(180deg);
-  -ms-transform: rotate(180deg);
-  -o-transform: rotate(180deg);
-  transform: rotate(180deg);
-}
-.fa-rotate-270 {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
-  -webkit-transform: rotate(270deg);
-  -moz-transform: rotate(270deg);
-  -ms-transform: rotate(270deg);
-  -o-transform: rotate(270deg);
-  transform: rotate(270deg);
-}
-.fa-flip-horizontal {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
-  -webkit-transform: scale(-1, 1);
-  -moz-transform: scale(-1, 1);
-  -ms-transform: scale(-1, 1);
-  -o-transform: scale(-1, 1);
-  transform: scale(-1, 1);
-}
-.fa-flip-vertical {
-  filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
-  -webkit-transform: scale(1, -1);
-  -moz-transform: scale(1, -1);
-  -ms-transform: scale(1, -1);
-  -o-transform: scale(1, -1);
-  transform: scale(1, -1);
-}
-.fa-stack {
-  position: relative;
-  display: inline-block;
-  width: 2em;
-  height: 2em;
-  line-height: 2em;
-  vertical-align: middle;
-}
-.fa-stack-1x,
-.fa-stack-2x {
-  position: absolute;
-  left: 0;
-  width: 100%;
-  text-align: center;
-}
-.fa-stack-1x {
-  line-height: inherit;
-}
-.fa-stack-2x {
-  font-size: 2em;
-}
-.fa-inverse {
-  color: #ffffff;
-}
-/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
-   readers do not read off random characters that represent icons */
-.fa-glass:before {
-  content: "\f000";
-}
-.fa-music:before {
-  content: "\f001";
-}
-.fa-search:before {
-  content: "\f002";
-}
-.fa-envelope-o:before {
-  content: "\f003";
-}
-.fa-heart:before {
-  content: "\f004";
-}
-.fa-star:before {
-  content: "\f005";
-}
-.fa-star-o:before {
-  content: "\f006";
-}
-.fa-user:before {
-  content: "\f007";
-}
-.fa-film:before {
-  content: "\f008";
-}
-.fa-th-large:before {
-  content: "\f009";
-}
-.fa-th:before {
-  content: "\f00a";
-}
-.fa-th-list:before {
-  content: "\f00b";
-}
-.fa-check:before {
-  content: "\f00c";
-}
-.fa-times:before {
-  content: "\f00d";
-}
-.fa-search-plus:before {
-  content: "\f00e";
-}
-.fa-search-minus:before {
-  content: "\f010";
-}
-.fa-power-off:before {
-  content: "\f011";
-}
-.fa-signal:before {
-  content: "\f012";
-}
-.fa-gear:before,
-.fa-cog:before {
-  content: "\f013";
-}
-.fa-trash-o:before {
-  content: "\f014";
-}
-.fa-home:before {
-  content: "\f015";
-}
-.fa-file-o:before {
-  content: "\f016";
-}
-.fa-clock-o:before {
-  content: "\f017";
-}
-.fa-road:before {
-  content: "\f018";
-}
-.fa-download:before {
-  content: "\f019";
-}
-.fa-arrow-circle-o-down:before {
-  content: "\f01a";
-}
-.fa-arrow-circle-o-up:before {
-  content: "\f01b";
-}
-.fa-inbox:before {
-  content: "\f01c";
-}
-.fa-play-circle-o:before {
-  content: "\f01d";
-}
-.fa-rotate-right:before,
-.fa-repeat:before {
-  content: "\f01e";
-}
-.fa-refresh:before {
-  content: "\f021";
-}
-.fa-list-alt:before {
-  content: "\f022";
-}
-.fa-lock:before {
-  content: "\f023";
-}
-.fa-flag:before {
-  content: "\f024";
-}
-.fa-headphones:before {
-  content: "\f025";
-}
-.fa-volume-off:before {
-  content: "\f026";
-}
-.fa-volume-down:before {
-  content: "\f027";
-}
-.fa-volume-up:before {
-  content: "\f028";
-}
-.fa-qrcode:before {
-  content: "\f029";
-}
-.fa-barcode:before {
-  content: "\f02a";
-}
-.fa-tag:before {
-  content: "\f02b";
-}
-.fa-tags:before {
-  content: "\f02c";
-}
-.fa-book:before {
-  content: "\f02d";
-}
-.fa-bookmark:before {
-  content: "\f02e";
-}
-.fa-print:before {
-  content: "\f02f";
-}
-.fa-camera:before {
-  content: "\f030";
-}
-.fa-font:before {
-  content: "\f031";
-}
-.fa-bold:before {
-  content: "\f032";
-}
-.fa-italic:before {
-  content: "\f033";
-}
-.fa-text-height:before {
-  content: "\f034";
-}
-.fa-text-width:before {
-  content: "\f035";
-}
-.fa-align-left:before {
-  content: "\f036";
-}
-.fa-align-center:before {
-  content: "\f037";
-}
-.fa-align-right:before {
-  content: "\f038";
-}
-.fa-align-justify:before {
-  content: "\f039";
-}
-.fa-list:before {
-  content: "\f03a";
-}
-.fa-dedent:before,
-.fa-outdent:before {
-  content: "\f03b";
-}
-.fa-indent:before {
-  content: "\f03c";
-}
-.fa-video-camera:before {
-  content: "\f03d";
-}
-.fa-picture-o:before {
-  content: "\f03e";
-}
-.fa-pencil:before {
-  content: "\f040";
-}
-.fa-map-marker:before {
-  content: "\f041";
-}
-.fa-adjust:before {
-  content: "\f042";
-}
-.fa-tint:before {
-  content: "\f043";
-}
-.fa-edit:before,
-.fa-pencil-square-o:before {
-  content: "\f044";
-}
-.fa-share-square-o:before {
-  content: "\f045";
-}
-.fa-check-square-o:before {
-  content: "\f046";
-}
-.fa-arrows:before {
-  content: "\f047";
-}
-.fa-step-backward:before {
-  content: "\f048";
-}
-.fa-fast-backward:before {
-  content: "\f049";
-}
-.fa-backward:before {
-  content: "\f04a";
-}
-.fa-play:before {
-  content: "\f04b";
-}
-.fa-pause:before {
-  content: "\f04c";
-}
-.fa-stop:before {
-  content: "\f04d";
-}
-.fa-forward:before {
-  content: "\f04e";
-}
-.fa-fast-forward:before {
-  content: "\f050";
-}
-.fa-step-forward:before {
-  content: "\f051";
-}
-.fa-eject:before {
-  content: "\f052";
-}
-.fa-chevron-left:before {
-  content: "\f053";
-}
-.fa-chevron-right:before {
-  content: "\f054";
-}
-.fa-plus-circle:before {
-  content: "\f055";
-}
-.fa-minus-circle:before {
-  content: "\f056";
-}
-.fa-times-circle:before {
-  content: "\f057";
-}
-.fa-check-circle:before {
-  content: "\f058";
-}
-.fa-question-circle:before {
-  content: "\f059";
-}
-.fa-info-circle:before {
-  content: "\f05a";
-}
-.fa-crosshairs:before {
-  content: "\f05b";
-}
-.fa-times-circle-o:before {
-  content: "\f05c";
-}
-.fa-check-circle-o:before {
-  content: "\f05d";
-}
-.fa-ban:before {
-  content: "\f05e";
-}
-.fa-arrow-left:before {
-  content: "\f060";
-}
-.fa-arrow-right:before {
-  content: "\f061";
-}
-.fa-arrow-up:before {
-  content: "\f062";
-}
-.fa-arrow-down:before {
-  content: "\f063";
-}
-.fa-mail-forward:before,
-.fa-share:before {
-  content: "\f064";
-}
-.fa-expand:before {
-  content: "\f065";
-}
-.fa-compress:before {
-  content: "\f066";
-}
-.fa-plus:before {
-  content: "\f067";
-}
-.fa-minus:before {
-  content: "\f068";
-}
-.fa-asterisk:before {
-  content: "\f069";
-}
-.fa-exclamation-circle:before {
-  content: "\f06a";
-}
-.fa-gift:before {
-  content: "\f06b";
-}
-.fa-leaf:before {
-  content: "\f06c";
-}
-.fa-fire:before {
-  content: "\f06d";
-}
-.fa-eye:before {
-  content: "\f06e";
-}
-.fa-eye-slash:before {
-  content: "\f070";
-}
-.fa-warning:before,
-.fa-exclamation-triangle:before {
-  content: "\f071";
-}
-.fa-plane:before {
-  content: "\f072";
-}
-.fa-calendar:before {
-  content: "\f073";
-}
-.fa-random:before {
-  content: "\f074";
-}
-.fa-comment:before {
-  content: "\f075";
-}
-.fa-magnet:before {
-  content: "\f076";
-}
-.fa-chevron-up:before {
-  content: "\f077";
-}
-.fa-chevron-down:before {
-  content: "\f078";
-}
-.fa-retweet:before {
-  content: "\f079";
-}
-.fa-shopping-cart:before {
-  content: "\f07a";
-}
-.fa-folder:before {
-  content: "\f07b";
-}
-.fa-folder-open:before {
-  content: "\f07c";
-}
-.fa-arrows-v:before {
-  content: "\f07d";
-}
-.fa-arrows-h:before {
-  content: "\f07e";
-}
-.fa-bar-chart-o:before {
-  content: "\f080";
-}
-.fa-twitter-square:before {
-  content: "\f081";
-}
-.fa-facebook-square:before {
-  content: "\f082";
-}
-.fa-camera-retro:before {
-  content: "\f083";
-}
-.fa-key:before {
-  content: "\f084";
-}
-.fa-gears:before,
-.fa-cogs:before {
-  content: "\f085";
-}
-.fa-comments:before {
-  content: "\f086";
-}
-.fa-thumbs-o-up:before {
-  content: "\f087";
-}
-.fa-thumbs-o-down:before {
-  content: "\f088";
-}
-.fa-star-half:before {
-  content: "\f089";
-}
-.fa-heart-o:before {
-  content: "\f08a";
-}
-.fa-sign-out:before {
-  content: "\f08b";
-}
-.fa-linkedin-square:before {
-  content: "\f08c";
-}
-.fa-thumb-tack:before {
-  content: "\f08d";
-}
-.fa-external-link:before {
-  content: "\f08e";
-}
-.fa-sign-in:before {
-  content: "\f090";
-}
-.fa-trophy:before {
-  content: "\f091";
-}
-.fa-github-square:before {
-  content: "\f092";
-}
-.fa-upload:before {
-  content: "\f093";
-}
-.fa-lemon-o:before {
-  content: "\f094";
-}
-.fa-phone:before {
-  content: "\f095";
-}
-.fa-square-o:before {
-  content: "\f096";
-}
-.fa-bookmark-o:before {
-  content: "\f097";
-}
-.fa-phone-square:before {
-  content: "\f098";
-}
-.fa-twitter:before {
-  content: "\f099";
-}
-.fa-facebook:before {
-  content: "\f09a";
-}
-.fa-github:before {
-  content: "\f09b";
-}
-.fa-unlock:before {
-  content: "\f09c";
-}
-.fa-credit-card:before {
-  content: "\f09d";
-}
-.fa-rss:before {
-  content: "\f09e";
-}
-.fa-hdd-o:before {
-  content: "\f0a0";
-}
-.fa-bullhorn:before {
-  content: "\f0a1";
-}
-.fa-bell:before {
-  content: "\f0f3";
-}
-.fa-certificate:before {
-  content: "\f0a3";
-}
-.fa-hand-o-right:before {
-  content: "\f0a4";
-}
-.fa-hand-o-left:before {
-  content: "\f0a5";
-}
-.fa-hand-o-up:before {
-  content: "\f0a6";
-}
-.fa-hand-o-down:before {
-  content: "\f0a7";
-}
-.fa-arrow-circle-left:before {
-  content: "\f0a8";
-}
-.fa-arrow-circle-right:before {
-  content: "\f0a9";
-}
-.fa-arrow-circle-up:before {
-  content: "\f0aa";
-}
-.fa-arrow-circle-down:before {
-  content: "\f0ab";
-}
-.fa-globe:before {
-  content: "\f0ac";
-}
-.fa-wrench:before {
-  content: "\f0ad";
-}
-.fa-tasks:before {
-  content: "\f0ae";
-}
-.fa-filter:before {
-  content: "\f0b0";
-}
-.fa-briefcase:before {
-  content: "\f0b1";
-}
-.fa-arrows-alt:before {
-  content: "\f0b2";
-}
-.fa-group:before,
-.fa-users:before {
-  content: "\f0c0";
-}
-.fa-chain:before,
-.fa-link:before {
-  content: "\f0c1";
-}
-.fa-cloud:before {
-  content: "\f0c2";
-}
-.fa-flask:before {
-  content: "\f0c3";
-}
-.fa-cut:before,
-.fa-scissors:before {
-  content: "\f0c4";
-}
-.fa-copy:before,
-.fa-files-o:before {
-  content: "\f0c5";
-}
-.fa-paperclip:before {
-  content: "\f0c6";
-}
-.fa-save:before,
-.fa-floppy-o:before {
-  content: "\f0c7";
-}
-.fa-square:before {
-  content: "\f0c8";
-}
-.fa-bars:before {
-  content: "\f0c9";
-}
-.fa-list-ul:before {
-  content: "\f0ca";
-}
-.fa-list-ol:before {
-  content: "\f0cb";
-}
-.fa-strikethrough:before {
-  content: "\f0cc";
-}
-.fa-underline:before {
-  content: "\f0cd";
-}
-.fa-table:before {
-  content: "\f0ce";
-}
-.fa-magic:before {
-  content: "\f0d0";
-}
-.fa-truck:before {
-  content: "\f0d1";
-}
-.fa-pinterest:before {
-  content: "\f0d2";
-}
-.fa-pinterest-square:before {
-  content: "\f0d3";
-}
-.fa-google-plus-square:before {
-  content: "\f0d4";
-}
-.fa-google-plus:before {
-  content: "\f0d5";
-}
-.fa-money:before {
-  content: "\f0d6";
-}
-.fa-caret-down:before {
-  content: "\f0d7";
-}
-.fa-caret-up:before {
-  content: "\f0d8";
-}
-.fa-caret-left:before {
-  content: "\f0d9";
-}
-.fa-caret-right:before {
-  content: "\f0da";
-}
-.fa-columns:before {
-  content: "\f0db";
-}
-.fa-unsorted:before,
-.fa-sort:before {
-  content: "\f0dc";
-}
-.fa-sort-down:before,
-.fa-sort-asc:before {
-  content: "\f0dd";
-}
-.fa-sort-up:before,
-.fa-sort-desc:before {
-  content: "\f0de";
-}
-.fa-envelope:before {
-  content: "\f0e0";
-}
-.fa-linkedin:before {
-  content: "\f0e1";
-}
-.fa-rotate-left:before,
-.fa-undo:before {
-  content: "\f0e2";
-}
-.fa-legal:before,
-.fa-gavel:before {
-  content: "\f0e3";
-}
-.fa-dashboard:before,
-.fa-tachometer:before {
-  content: "\f0e4";
-}
-.fa-comment-o:before {
-  content: "\f0e5";
-}
-.fa-comments-o:before {
-  content: "\f0e6";
-}
-.fa-flash:before,
-.fa-bolt:before {
-  content: "\f0e7";
-}
-.fa-sitemap:before {
-  content: "\f0e8";
-}
-.fa-umbrella:before {
-  content: "\f0e9";
-}
-.fa-paste:before,
-.fa-clipboard:before {
-  content: "\f0ea";
-}
-.fa-lightbulb-o:before {
-  content: "\f0eb";
-}
-.fa-exchange:before {
-  content: "\f0ec";
-}
-.fa-cloud-download:before {
-  content: "\f0ed";
-}
-.fa-cloud-upload:before {
-  content: "\f0ee";
-}
-.fa-user-md:before {
-  content: "\f0f0";
-}
-.fa-stethoscope:before {
-  content: "\f0f1";
-}
-.fa-suitcase:before {
-  content: "\f0f2";
-}
-.fa-bell-o:before {
-  content: "\f0a2";
-}
-.fa-coffee:before {
-  content: "\f0f4";
-}
-.fa-cutlery:before {
-  content: "\f0f5";
-}
-.fa-file-text-o:before {
-  content: "\f0f6";
-}
-.fa-building-o:before {
-  content: "\f0f7";
-}
-.fa-hospital-o:before {
-  content: "\f0f8";
-}
-.fa-ambulance:before {
-  content: "\f0f9";
-}
-.fa-medkit:before {
-  content: "\f0fa";
-}
-.fa-fighter-jet:before {
-  content: "\f0fb";
-}
-.fa-beer:before {
-  content: "\f0fc";
-}
-.fa-h-square:before {
-  content: "\f0fd";
-}
-.fa-plus-square:before {
-  content: "\f0fe";
-}
-.fa-angle-double-left:before {
-  content: "\f100";
-}
-.fa-angle-double-right:before {
-  content: "\f101";
-}
-.fa-angle-double-up:before {
-  content: "\f102";
-}
-.fa-angle-double-down:before {
-  content: "\f103";
-}
-.fa-angle-left:before {
-  content: "\f104";
-}
-.fa-angle-right:before {
-  content: "\f105";
-}
-.fa-angle-up:before {
-  content: "\f106";
-}
-.fa-angle-down:before {
-  content: "\f107";
-}
-.fa-desktop:before {
-  content: "\f108";
-}
-.fa-laptop:before {
-  content: "\f109";
-}
-.fa-tablet:before {
-  content: "\f10a";
-}
-.fa-mobile-phone:before,
-.fa-mobile:before {
-  content: "\f10b";
-}
-.fa-circle-o:before {
-  content: "\f10c";
-}
-.fa-quote-left:before {
-  content: "\f10d";
-}
-.fa-quote-right:before {
-  content: "\f10e";
-}
-.fa-spinner:before {
-  content: "\f110";
-}
-.fa-circle:before {
-  content: "\f111";
-}
-.fa-mail-reply:before,
-.fa-reply:before {
-  content: "\f112";
-}
-.fa-github-alt:before {
-  content: "\f113";
-}
-.fa-folder-o:before {
-  content: "\f114";
-}
-.fa-folder-open-o:before {
-  content: "\f115";
-}
-.fa-smile-o:before {
-  content: "\f118";
-}
-.fa-frown-o:before {
-  content: "\f119";
-}
-.fa-meh-o:before {
-  content: "\f11a";
-}
-.fa-gamepad:before {
-  content: "\f11b";
-}
-.fa-keyboard-o:before {
-  content: "\f11c";
-}
-.fa-flag-o:before {
-  content: "\f11d";
-}
-.fa-flag-checkered:before {
-  content: "\f11e";
-}
-.fa-terminal:before {
-  content: "\f120";
-}
-.fa-code:before {
-  content: "\f121";
-}
-.fa-reply-all:before {
-  content: "\f122";
-}
-.fa-mail-reply-all:before {
-  content: "\f122";
-}
-.fa-star-half-empty:before,
-.fa-star-half-full:before,
-.fa-star-half-o:before {
-  content: "\f123";
-}
-.fa-location-arrow:before {
-  content: "\f124";
-}
-.fa-crop:before {
-  content: "\f125";
-}
-.fa-code-fork:before {
-  content: "\f126";
-}
-.fa-unlink:before,
-.fa-chain-broken:before {
-  content: "\f127";
-}
-.fa-question:before {
-  content: "\f128";
-}
-.fa-info:before {
-  content: "\f129";
-}
-.fa-exclamation:before {
-  content: "\f12a";
-}
-.fa-superscript:before {
-  content: "\f12b";
-}
-.fa-subscript:before {
-  content: "\f12c";
-}
-.fa-eraser:before {
-  content: "\f12d";
-}
-.fa-puzzle-piece:before {
-  content: "\f12e";
-}
-.fa-microphone:before {
-  content: "\f130";
-}
-.fa-microphone-slash:before {
-  content: "\f131";
-}
-.fa-shield:before {
-  content: "\f132";
-}
-.fa-calendar-o:before {
-  content: "\f133";
-}
-.fa-fire-extinguisher:before {
-  content: "\f134";
-}
-.fa-rocket:before {
-  content: "\f135";
-}
-.fa-maxcdn:before {
-  content: "\f136";
-}
-.fa-chevron-circle-left:before {
-  content: "\f137";
-}
-.fa-chevron-circle-right:before {
-  content: "\f138";
-}
-.fa-chevron-circle-up:before {
-  content: "\f139";
-}
-.fa-chevron-circle-down:before {
-  content: "\f13a";
-}
-.fa-html5:before {
-  content: "\f13b";
-}
-.fa-css3:before {
-  content: "\f13c";
-}
-.fa-anchor:before {
-  content: "\f13d";
-}
-.fa-unlock-alt:before {
-  content: "\f13e";
-}
-.fa-bullseye:before {
-  content: "\f140";
-}
-.fa-ellipsis-h:before {
-  content: "\f141";
-}
-.fa-ellipsis-v:before {
-  content: "\f142";
-}
-.fa-rss-square:before {
-  content: "\f143";
-}
-.fa-play-circle:before {
-  content: "\f144";
-}
-.fa-ticket:before {
-  content: "\f145";
-}
-.fa-minus-square:before {
-  content: "\f146";
-}
-.fa-minus-square-o:before {
-  content: "\f147";
-}
-.fa-level-up:before {
-  content: "\f148";
-}
-.fa-level-down:before {
-  content: "\f149";
-}
-.fa-check-square:before {
-  content: "\f14a";
-}
-.fa-pencil-square:before {
-  content: "\f14b";
-}
-.fa-external-link-square:before {
-  content: "\f14c";
-}
-.fa-share-square:before {
-  content: "\f14d";
-}
-.fa-compass:before {
-  content: "\f14e";
-}
-.fa-toggle-down:before,
-.fa-caret-square-o-down:before {
-  content: "\f150";
-}
-.fa-toggle-up:before,
-.fa-caret-square-o-up:before {
-  content: "\f151";
-}
-.fa-toggle-right:before,
-.fa-caret-square-o-right:before {
-  content: "\f152";
-}
-.fa-euro:before,
-.fa-eur:before {
-  content: "\f153";
-}
-.fa-gbp:before {
-  content: "\f154";
-}
-.fa-dollar:before,
-.fa-usd:before {
-  content: "\f155";
-}
-.fa-rupee:before,
-.fa-inr:before {
-  content: "\f156";
-}
-.fa-cny:before,
-.fa-rmb:before,
-.fa-yen:before,
-.fa-jpy:before {
-  content: "\f157";
-}
-.fa-ruble:before,
-.fa-rouble:before,
-.fa-rub:before {
-  content: "\f158";
-}
-.fa-won:before,
-.fa-krw:before {
-  content: "\f159";
-}
-.fa-bitcoin:before,
-.fa-btc:before {
-  content: "\f15a";
-}
-.fa-file:before {
-  content: "\f15b";
-}
-.fa-file-text:before {
-  content: "\f15c";
-}
-.fa-sort-alpha-asc:before {
-  content: "\f15d";
-}
-.fa-sort-alpha-desc:before {
-  content: "\f15e";
-}
-.fa-sort-amount-asc:before {
-  content: "\f160";
-}
-.fa-sort-amount-desc:before {
-  content: "\f161";
-}
-.fa-sort-numeric-asc:before {
-  content: "\f162";
-}
-.fa-sort-numeric-desc:before {
-  content: "\f163";
-}
-.fa-thumbs-up:before {
-  content: "\f164";
-}
-.fa-thumbs-down:before {
-  content: "\f165";
-}
-.fa-youtube-square:before {
-  content: "\f166";
-}
-.fa-youtube:before {
-  content: "\f167";
-}
-.fa-xing:before {
-  content: "\f168";
-}
-.fa-xing-square:before {
-  content: "\f169";
-}
-.fa-youtube-play:before {
-  content: "\f16a";
-}
-.fa-dropbox:before {
-  content: "\f16b";
-}
-.fa-stack-overflow:before {
-  content: "\f16c";
-}
-.fa-instagram:before {
-  content: "\f16d";
-}
-.fa-flickr:before {
-  content: "\f16e";
-}
-.fa-adn:before {
-  content: "\f170";
-}
-.fa-bitbucket:before {
-  content: "\f171";
-}
-.fa-bitbucket-square:before {
-  content: "\f172";
-}
-.fa-tumblr:before {
-  content: "\f173";
-}
-.fa-tumblr-square:before {
-  content: "\f174";
-}
-.fa-long-arrow-down:before {
-  content: "\f175";
-}
-.fa-long-arrow-up:before {
-  content: "\f176";
-}
-.fa-long-arrow-left:before {
-  content: "\f177";
-}
-.fa-long-arrow-right:before {
-  content: "\f178";
-}
-.fa-apple:before {
-  content: "\f179";
-}
-.fa-windows:before {
-  content: "\f17a";
-}
-.fa-android:before {
-  content: "\f17b";
-}
-.fa-linux:before {
-  content: "\f17c";
-}
-.fa-dribbble:before {
-  content: "\f17d";
-}
-.fa-skype:before {
-  content: "\f17e";
-}
-.fa-foursquare:before {
-  content: "\f180";
-}
-.fa-trello:before {
-  content: "\f181";
-}
-.fa-female:before {
-  content: "\f182";
-}
-.fa-male:before {
-  content: "\f183";
-}
-.fa-gittip:before {
-  content: "\f184";
-}
-.fa-sun-o:before {
-  content: "\f185";
-}
-.fa-moon-o:before {
-  content: "\f186";
-}
-.fa-archive:before {
-  content: "\f187";
-}
-.fa-bug:before {
-  content: "\f188";
-}
-.fa-vk:before {
-  content: "\f189";
-}
-.fa-weibo:before {
-  content: "\f18a";
-}
-.fa-renren:before {
-  content: "\f18b";
-}
-.fa-pagelines:before {
-  content: "\f18c";
-}
-.fa-stack-exchange:before {
-  content: "\f18d";
-}
-.fa-arrow-circle-o-right:before {
-  content: "\f18e";
-}
-.fa-arrow-circle-o-left:before {
-  content: "\f190";
-}
-.fa-toggle-left:before,
-.fa-caret-square-o-left:before {
-  content: "\f191";
-}
-.fa-dot-circle-o:before {
-  content: "\f192";
-}
-.fa-wheelchair:before {
-  content: "\f193";
-}
-.fa-vimeo-square:before {
-  content: "\f194";
-}
-.fa-turkish-lira:before,
-.fa-try:before {
-  content: "\f195";
-}
-.fa-plus-square-o:before {
-  content: "\f196";
-}
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css
deleted file mode 100644
index 449d6ac..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/css/font-awesome.min.css
+++ /dev/null
@@ -1,4 +0,0 @@
-/*!
- *  Font Awesome 4.0.3 by @davegandy - http://fontawesome.io - @fontawesome
- *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
- */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.0.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff?v=4.0.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.0.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857142858em;text-align:center}.fa-ul{padding-left:0;margin-left:2.142857142857143em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.142857142857143em;width:2.142857142857143em;top:.14285714285714285em;text-align:center}.fa-li.fa-lg{left:-1.8571428571428572em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:spin 2s infinite linear;-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;animation:spin 2s infinite linear}@-moz-keyframes spin{0%{-moz-transform:rotate(0deg)}100%{-moz-transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg)}}@-o-keyframes spin{0%{-o-transform:rotate(0deg)}100%{-o-transform:rotate(359deg)}}@-ms-keyframes spin{0%{-ms-transform:rotate(0deg)}100%{-ms-transform:rotate(359deg)}}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0,mirror=1);-webkit-transform:scale(-1,1);-moz-transform:scale(-1,1);-ms-transform:scale(-1,1);-o-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2,mirror=1);-webkit-transform:scale(1,-1);-moz-transform:scale(1,-1);-ms-transform:scale(1,-1);-o-transform:scale(1,-1);transform:scale(1,-1)}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-asc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-desc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-reply-all:before{content:"\f122"}.fa-mail-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf
deleted file mode 100644
index 8b0f54e..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/FontAwesome.otf
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot
deleted file mode 100755
index 7c79c6a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg
deleted file mode 100755
index 45fdf33..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.svg
+++ /dev/null
@@ -1,414 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata></metadata>
-<defs>
-<font id="fontawesomeregular" horiz-adv-x="1536" >
-<font-face units-per-em="1792" ascent="1536" descent="-256" />
-<missing-glyph horiz-adv-x="448" />
-<glyph unicode=" "  horiz-adv-x="448" />
-<glyph unicode="&#x09;" horiz-adv-x="448" />
-<glyph unicode="&#xa0;" horiz-adv-x="448" />
-<glyph unicode="&#xa8;" horiz-adv-x="1792" />
-<glyph unicode="&#xa9;" horiz-adv-x="1792" />
-<glyph unicode="&#xae;" horiz-adv-x="1792" />
-<glyph unicode="&#xb4;" horiz-adv-x="1792" />
-<glyph unicode="&#xc6;" horiz-adv-x="1792" />
-<glyph unicode="&#x2000;" horiz-adv-x="768" />
-<glyph unicode="&#x2001;" />
-<glyph unicode="&#x2002;" horiz-adv-x="768" />
-<glyph unicode="&#x2003;" />
-<glyph unicode="&#x2004;" horiz-adv-x="512" />
-<glyph unicode="&#x2005;" horiz-adv-x="384" />
-<glyph unicode="&#x2006;" horiz-adv-x="256" />
-<glyph unicode="&#x2007;" horiz-adv-x="256" />
-<glyph unicode="&#x2008;" horiz-adv-x="192" />
-<glyph unicode="&#x2009;" horiz-adv-x="307" />
-<glyph unicode="&#x200a;" horiz-adv-x="85" />
-<glyph unicode="&#x202f;" horiz-adv-x="307" />
-<glyph unicode="&#x205f;" horiz-adv-x="384" />
-<glyph unicode="&#x2122;" horiz-adv-x="1792" />
-<glyph unicode="&#x221e;" horiz-adv-x="1792" />
-<glyph unicode="&#x2260;" horiz-adv-x="1792" />
-<glyph unicode="&#xe000;" horiz-adv-x="500" d="M0 0z" />
-<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
-<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
-<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
-<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
-<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
-<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
-<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
-<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
-<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
-<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
-<glyph unicode="&#xf016;" horiz-adv-x="1280" d="M128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280zM768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z " />
-<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
-<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
-<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
-<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
-<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
-<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
-<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
-<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
-<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
-<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
-<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
-<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
-<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
-<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
-<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q73 -1 153.5 -2t119 -1.5t52.5 -0.5l29 2q-32 95 -92 241q-53 132 -92 211zM21 -128h-21l2 79q22 7 80 18q89 16 110 31q20 16 48 68l237 616l280 724h75h53l11 -21l205 -480q103 -242 124 -297q39 -102 96 -235q26 -58 65 -164q24 -67 65 -149 q22 -49 35 -57q22 -19 69 -23q47 -6 103 -27q6 -39 6 -57q0 -14 -1 -26q-80 0 -192 8q-93 8 -189 8q-79 0 -135 -2l-200 -11l-58 -2q0 45 4 78l131 28q56 13 68 23q12 12 12 27t-6 32l-47 114l-92 228l-450 2q-29 -65 -104 -274q-23 -64 -23 -84q0 -31 17 -43 q26 -21 103 -32q3 0 13.5 -2t30 -5t40.5 -6q1 -28 1 -58q0 -17 -2 -27q-66 0 -349 20l-48 -8q-81 -14 -167 -14z" />
-<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q76 -32 140 -32q131 0 216 41t122 113q38 70 38 181q0 114 -41 180q-58 94 -141 126q-80 32 -247 32q-74 0 -101 -10v-144l-1 -173l3 -270q0 -15 12 -44zM541 761q43 -7 109 -7q175 0 264 65t89 224q0 112 -85 187q-84 75 -255 75q-52 0 -130 -13q0 -44 2 -77 q7 -122 6 -279l-1 -98q0 -43 1 -77zM0 -128l2 94q45 9 68 12q77 12 123 31q17 27 21 51q9 66 9 194l-2 497q-5 256 -9 404q-1 87 -11 109q-1 4 -12 12q-18 12 -69 15q-30 2 -114 13l-4 83l260 6l380 13l45 1q5 0 14 0.5t14 0.5q1 0 21.5 -0.5t40.5 -0.5h74q88 0 191 -27 q43 -13 96 -39q57 -29 102 -76q44 -47 65 -104t21 -122q0 -70 -32 -128t-95 -105q-26 -20 -150 -77q177 -41 267 -146q92 -106 92 -236q0 -76 -29 -161q-21 -62 -71 -117q-66 -72 -140 -108q-73 -36 -203 -60q-82 -15 -198 -11l-197 4q-84 2 -298 -11q-33 -3 -272 -11z" />
-<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q4 1 77 20q76 19 116 39q29 37 41 101l27 139l56 268l12 64q8 44 17 84.5t16 67t12.5 46.5t9 30.5t3.5 11.5l29 157l16 63l22 135l8 50v38q-41 22 -144 28q-28 2 -38 4l19 103l317 -14q39 -2 73 -2q66 0 214 9q33 2 68 4.5t36 2.5q-2 -19 -6 -38 q-7 -29 -13 -51q-55 -19 -109 -31q-64 -16 -101 -31q-12 -31 -24 -88q-9 -44 -13 -82q-44 -199 -66 -306l-61 -311l-38 -158l-43 -235l-12 -45q-2 -7 1 -27q64 -15 119 -21q36 -5 66 -10q-1 -29 -7 -58q-7 -31 -9 -41q-18 0 -23 -1q-24 -2 -42 -2q-9 0 -28 3q-19 4 -145 17 l-198 2q-41 1 -174 -11q-74 -7 -98 -9z" />
-<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l215 -1h293l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -42.5 2t-103.5 -1t-111 -1 q-34 0 -67 -5q-10 -97 -8 -136l1 -152v-332l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-88 0 -233 -14q-48 -4 -70 -4q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q8 192 6 433l-5 428q-1 62 -0.5 118.5t0.5 102.5t-2 57t-6 15q-6 5 -14 6q-38 6 -148 6q-43 0 -100 -13.5t-73 -24.5q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1744 128q33 0 42 -18.5t-11 -44.5 l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80z" />
-<glyph unicode="&#xf035;" d="M81 1407l54 -27q20 -5 211 -5h130l19 3l115 1l446 -1h318l34 -2q14 -1 28 7t21 16l7 8l42 1q15 0 28 -1v-104.5t1 -131.5l1 -100l-1 -58q0 -32 -4 -51q-39 -15 -68 -18q-25 43 -54 128q-8 24 -15.5 62.5t-11.5 65.5t-6 29q-13 15 -27 19q-7 2 -58.5 2t-138.5 -1t-128 -1 q-94 0 -127 -5q-10 -97 -8 -136l1 -152v52l3 -359l-1 -147q-1 -46 11 -85q49 -25 89 -32q2 0 18 -5t44 -13t43 -12q30 -8 50 -18q5 -45 5 -50q0 -10 -3 -29q-14 -1 -34 -1q-110 0 -187 10q-72 8 -238 8q-82 0 -233 -13q-45 -5 -70 -5q-2 22 -2 26l-1 26v9q21 33 79 49 q139 38 159 50q9 21 12 56q6 137 6 433l-5 44q0 265 -2 278q-2 11 -6 15q-6 5 -14 6q-38 6 -148 6q-50 0 -168.5 -14t-132.5 -24q-13 -9 -22 -33t-22 -75t-24 -84q-6 -19 -19.5 -32t-20.5 -13q-44 27 -56 44v297v86zM1505 113q26 -20 26 -49t-26 -49l-162 -126 q-26 -20 -44.5 -11t-18.5 42v80h-1024v-80q0 -33 -18.5 -42t-44.5 11l-162 126q-26 20 -26 49t26 49l162 126q26 20 44.5 11t18.5 -42v-80h1024v80q0 33 18.5 42t44.5 -11z" />
-<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
-<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
-<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
-<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
-<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
-<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
-<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
-<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
-<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
-<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
-<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
-<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
-<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
-<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
-<glyph unicode="&#xf053;" horiz-adv-x="1152" d="M742 -37l-652 651q-37 37 -37 90.5t37 90.5l652 651q37 37 90.5 37t90.5 -37l75 -75q37 -37 37 -90.5t-37 -90.5l-486 -486l486 -485q37 -38 37 -91t-37 -90l-75 -75q-37 -37 -90.5 -37t-90.5 37z" />
-<glyph unicode="&#xf054;" horiz-adv-x="1152" d="M1099 704q0 -52 -37 -91l-652 -651q-37 -37 -90 -37t-90 37l-76 75q-37 39 -37 91q0 53 37 90l486 486l-486 485q-37 39 -37 91q0 53 37 90l76 75q36 38 90 38t90 -38l652 -651q37 -37 37 -90z" />
-<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
-<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
-<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
-<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
-<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
-<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
-<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
-<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
-<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
-<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
-<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
-<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
-<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
-<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
-<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
-<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf077;" horiz-adv-x="1664" d="M1611 320q0 -53 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-486 485l-486 -485q-36 -38 -90 -38t-90 38l-75 75q-38 36 -38 90q0 53 38 91l651 651q37 37 90 37q52 0 91 -37l650 -651q38 -38 38 -91z" />
-<glyph unicode="&#xf078;" horiz-adv-x="1664" d="M1611 832q0 -53 -37 -90l-651 -651q-38 -38 -91 -38q-54 0 -90 38l-651 651q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l486 -486l486 486q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
-<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
-<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5 l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5 t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
-<glyph unicode="&#xf080;" horiz-adv-x="1920" d="M512 512v-384h-256v384h256zM896 1024v-896h-256v896h256zM1280 768v-640h-256v640h256zM1664 1152v-1024h-256v1024h256zM1792 32v1216q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5z M1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf082;" d="M1307 618l23 219h-198v109q0 49 15.5 68.5t71.5 19.5h110v219h-175q-152 0 -218 -72t-66 -213v-131h-131v-219h131v-635h262v635h175zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
-<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
-<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
-<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
-<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
-<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
-<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
-<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
-<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
-<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
-<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
-<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
-<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
-<glyph unicode="&#xf09a;" horiz-adv-x="768" d="M511 980h257l-30 -284h-227v-824h-341v824h-170v284h170v171q0 182 86 275.5t283 93.5h227v-284h-142q-39 0 -62.5 -6.5t-34 -23.5t-13.5 -34.5t-3 -49.5v-142z" />
-<glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
-<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
-<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
-<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
-<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
-<glyph unicode="&#xf0a2;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM183 128h1298q-164 181 -246.5 411.5t-82.5 484.5q0 256 -320 256t-320 -256q0 -254 -82.5 -484.5t-246.5 -411.5zM1664 128q0 -52 -38 -90t-90 -38 h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
-<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
-<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
-<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
-<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
-<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
-<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
-<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
-<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
-<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
-<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
-<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
-<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
-<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
-<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
-<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
-<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
-<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
-<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
-<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
-<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
-<glyph unicode="&#xf0d4;" d="M678 -57q0 -38 -10 -71h-380q-95 0 -171.5 56.5t-103.5 147.5q24 45 69 77.5t100 49.5t107 24t107 7q32 0 49 -2q6 -4 30.5 -21t33 -23t31 -23t32 -25.5t27.5 -25.5t26.5 -29.5t21 -30.5t17.5 -34.5t9.5 -36t4.5 -40.5zM385 294q-234 -7 -385 -85v433q103 -118 273 -118 q32 0 70 5q-21 -61 -21 -86q0 -67 63 -149zM558 805q0 -100 -43.5 -160.5t-140.5 -60.5q-51 0 -97 26t-78 67.5t-56 93.5t-35.5 104t-11.5 99q0 96 51.5 165t144.5 69q66 0 119 -41t84 -104t47 -130t16 -128zM1536 896v-736q0 -119 -84.5 -203.5t-203.5 -84.5h-468 q39 73 39 157q0 66 -22 122.5t-55.5 93t-72 71t-72 59.5t-55.5 54.5t-22 59.5q0 36 23 68t56 61.5t65.5 64.5t55.5 93t23 131t-26.5 145.5t-75.5 118.5q-6 6 -14 11t-12.5 7.5t-10 9.5t-10.5 17h135l135 64h-437q-138 0 -244.5 -38.5t-182.5 -133.5q0 126 81 213t207 87h960 q119 0 203.5 -84.5t84.5 -203.5v-96h-256v256h-128v-256h-256v-128h256v-256h128v256h256z" />
-<glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M876 71q0 21 -4.5 40.5t-9.5 36t-17.5 34.5t-21 30.5t-26.5 29.5t-27.5 25.5t-32 25.5t-31 23t-33 23t-30.5 21q-17 2 -50 2q-54 0 -106 -7t-108 -25t-98 -46t-69 -75t-27 -107q0 -68 35.5 -121.5t93 -84t120.5 -45.5t127 -15q59 0 112.5 12.5t100.5 39t74.5 73.5 t27.5 110zM756 933q0 60 -16.5 127.5t-47 130.5t-84 104t-119.5 41q-93 0 -144 -69t-51 -165q0 -47 11.5 -99t35.5 -104t56 -93.5t78 -67.5t97 -26q97 0 140.5 60.5t43.5 160.5zM625 1408h437l-135 -79h-135q71 -45 110 -126t39 -169q0 -74 -23 -131.5t-56 -92.5t-66 -64.5 t-56 -61t-23 -67.5q0 -26 16.5 -51t43 -48t58.5 -48t64 -55.5t58.5 -66t43 -85t16.5 -106.5q0 -160 -140 -282q-152 -131 -420 -131q-59 0 -119.5 10t-122 33.5t-108.5 58t-77 89t-30 121.5q0 61 37 135q32 64 96 110.5t145 71t155 36t150 13.5q-64 83 -64 149q0 12 2 23.5 t5 19.5t8 21.5t7 21.5q-40 -5 -70 -5q-149 0 -255.5 98t-106.5 246q0 140 95 250.5t234 141.5q94 20 187 20zM1664 1152v-128h-256v-256h-128v256h-256v128h256v256h128v-256h256z" />
-<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
-<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
-<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
-<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
-<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
-<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
-<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
-<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
-<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
-<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
-<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
-<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
-<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
-<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
-<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
-<glyph unicode="&#xf0f3;" horiz-adv-x="1664" d="M848 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1664 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q190 161 287 397.5t97 498.5 q0 165 96 262t264 117q-8 18 -8 37q0 40 28 68t68 28t68 -28t28 -68q0 -19 -8 -37q168 -20 264 -117t96 -262q0 -262 97 -498.5t287 -397.5z" />
-<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
-<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f6;" horiz-adv-x="1280" d="M1024 352v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM1024 608v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704q14 0 23 -9t9 -23zM128 0h1024v768h-416q-40 0 -68 28t-28 68v416h-512v-1280z M768 896h376q-10 29 -22 41l-313 313q-12 12 -41 22v-376zM1280 864v-896q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h640q40 0 88 -20t76 -48l312 -312q28 -28 48 -76t20 -88z" />
-<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
-<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
-<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
-<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
-<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
-<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
-<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
-<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
-<glyph unicode="&#xf110;" horiz-adv-x="1568" d="M496 192q0 -60 -42.5 -102t-101.5 -42q-60 0 -102 42t-42 102t42 102t102 42q59 0 101.5 -42t42.5 -102zM928 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -66 -47 -113t-113 -47t-113 47t-47 113 t47 113t113 47t113 -47t47 -113zM1360 192q0 -46 -33 -79t-79 -33t-79 33t-33 79t33 79t79 33t79 -33t33 -79zM528 1088q0 -73 -51.5 -124.5t-124.5 -51.5t-124.5 51.5t-51.5 124.5t51.5 124.5t124.5 51.5t124.5 -51.5t51.5 -124.5zM992 1280q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1536 640q0 -40 -28 -68t-68 -28t-68 28t-28 68t28 68t68 28t68 -28t28 -68zM1328 1088q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5z" />
-<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
-<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
-<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
-<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
-<glyph unicode="&#xf116;" horiz-adv-x="1792" />
-<glyph unicode="&#xf117;" horiz-adv-x="1792" />
-<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
-<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
-<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
-<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
-<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
-<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
-<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
-<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
-<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
-<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
-<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
-<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
-<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
-<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
-<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
-<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
-<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
-<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
-<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
-<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
-<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
-<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
-<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
-<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
-<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
-<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
-<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
-<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
-<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
-<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
-<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
-<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
-<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
-<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
-<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
-<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
-<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
-<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15c;" horiz-adv-x="1280" d="M1024 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1024 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28 t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
-<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
-<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
-<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
-<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
-<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
-<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
-<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
-<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
-<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
-<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
-<glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
-<glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
-<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
-<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
-<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M390 1408h219v-388h364v-241h-364v-394q0 -136 14 -172q13 -37 52 -60q50 -31 117 -31q117 0 232 76v-242q-102 -48 -178 -65q-77 -19 -173 -19q-105 0 -186 27q-78 25 -138 75q-58 51 -79 105q-22 54 -22 161v539h-170v217q91 30 155 84q64 55 103 132q39 78 54 196z " />
-<glyph unicode="&#xf174;" d="M1123 127v181q-88 -56 -174 -56q-51 0 -88 23q-29 17 -39 45q-11 30 -11 129v295h274v181h-274v291h-164q-11 -90 -40 -147t-78 -99q-48 -40 -116 -63v-163h127v-404q0 -78 17 -121q17 -42 59 -78q43 -37 104 -57q62 -20 140 -20q67 0 129 14q57 13 134 49zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
-<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
-<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
-<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
-<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
-<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
-<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
-<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
-<glyph unicode="&#xf180;" horiz-adv-x="1664" d="M1483 512l-587 -587q-52 -53 -127.5 -53t-128.5 53l-587 587q-53 53 -53 128t53 128l587 587q53 53 128 53t128 -53l265 -265l-398 -399l-188 188q-42 42 -99 42q-59 0 -100 -41l-120 -121q-42 -40 -42 -99q0 -58 42 -100l406 -408q30 -28 67 -37l6 -4h28q60 0 99 41 l619 619l2 -3q53 -53 53 -128t-53 -128zM1406 1138l120 -120q14 -15 14 -36t-14 -36l-730 -730q-17 -15 -37 -15v0q-4 0 -6 1q-18 2 -30 14l-407 408q-14 15 -14 36t14 35l121 120q13 15 35 15t36 -15l252 -252l574 575q15 15 36 15t36 -15z" />
-<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
-<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
-<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
-<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
-<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
-<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
-<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
-<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
-<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
-<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
-<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
-<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
-<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
-<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
-<glyph unicode="&#xf197;" horiz-adv-x="1792" />
-<glyph unicode="&#xf198;" horiz-adv-x="1792" />
-<glyph unicode="&#xf199;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19a;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19b;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19c;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19d;" horiz-adv-x="1792" />
-<glyph unicode="&#xf19e;" horiz-adv-x="1792" />
-<glyph unicode="&#xf500;" horiz-adv-x="1792" />
-</font>
-</defs></svg> 
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf
deleted file mode 100755
index e89738d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff
deleted file mode 100755
index 8c1748a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/font-awesome/fonts/fontawesome-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js
deleted file mode 100644
index 2568aa0..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/graphael/g.raphael.standalone.js
+++ /dev/null
@@ -1,5205 +0,0 @@
-/*!
- * Raphael 1.5.2 - JavaScript Vector Library
- *
- * Copyright (c) 2010 Dmitry Baranovskiy (http://raphaeljs.com)
- * Licensed under the MIT (http://raphaeljs.com/license.html) license.
- * from fork at git@github.com:mobz/g.raphael.git
- */
-(function () {
-    function R() {
-        if (R.is(arguments[0], array)) {
-            var a = arguments[0],
-                cnv = create[apply](R, a.splice(0, 3 + R.is(a[0], nu))),
-                res = cnv.set();
-            for (var i = 0, ii = a[length]; i < ii; i++) {
-                var j = a[i] || {};
-                elements[has](j.type) && res[push](cnv[j.type]().attr(j));
-            }
-            return res;
-        }
-        return create[apply](R, arguments);
-    }
-    R.version = "1.5.2";
-    var separator = /[, ]+/,
-        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},
-        formatrg = /\{(\d+)\}/g,
-        proto = "prototype",
-        has = "hasOwnProperty",
-        doc = document,
-        win = window,
-        oldRaphael = {
-            was: Object[proto][has].call(win, "Raphael"),
-            is: win.Raphael
-        },
-        Paper = function () {
-            this.customAttributes = {};
-        },
-        paperproto,
-        appendChild = "appendChild",
-        apply = "apply",
-        concat = "concat",
-        supportsTouch = "createTouch" in doc,
-        E = "",
-        S = " ",
-        Str = String,
-        split = "split",
-        events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend orientationchange touchcancel gesturestart gesturechange gestureend"[split](S),
-        touchMap = {
-            mousedown: "touchstart",
-            mousemove: "touchmove",
-            mouseup: "touchend"
-        },
-        join = "join",
-        length = "length",
-        lowerCase = Str[proto].toLowerCase,
-        math = Math,
-        mmax = math.max,
-        mmin = math.min,
-        abs = math.abs,
-        pow = math.pow,
-        PI = math.PI,
-        nu = "number",
-        string = "string",
-        array = "array",
-        toString = "toString",
-        fillString = "fill",
-        objectToString = Object[proto][toString],
-        paper = {},
-        push = "push",
-        ISURL = /^url\(['"]?([^\)]+?)['"]?\)$/i,
-        colourRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,
-        isnan = {"NaN": 1, "Infinity": 1, "-Infinity": 1},
-        bezierrg = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,
-        round = math.round,
-        setAttribute = "setAttribute",
-        toFloat = parseFloat,
-        toInt = parseInt,
-        ms = " progid:DXImageTransform.Microsoft",
-        upperCase = Str[proto].toUpperCase,
-        availableAttrs = {blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", opacity: 1, path: "M0,0", r: 0, rotation: 0, rx: 0, ry: 0, scale: "1 1", src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", translation: "0 0", width: 0, x: 0, y: 0},
-        availableAnimAttrs = {along: "along", blur: nu, "clip-rect": "csv", cx: nu, cy: nu, fill: "colour", "fill-opacity": nu, "font-size": nu, height: nu, opacity: nu, path: "path", r: nu, rotation: "csv", rx: nu, ry: nu, scale: "csv", stroke: "colour", "stroke-opacity": nu, "stroke-width": nu, translation: "csv", width: nu, x: nu, y: nu},
-        rp = "replace",
-        animKeyFrames= /^(from|to|\d+%?)$/,
-        commaSpaces = /\s*,\s*/,
-        hsrg = {hs: 1, rg: 1},
-        p2s = /,?([achlmqrstvxz]),?/gi,
-        pathCommand = /([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,
-        pathValues = /(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,
-        radial_gradient = /^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,
-        sortByKey = function (a, b) {
-            return a.key - b.key;
-        };
-
-    R.type = (win.SVGAngle || doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML");
-    if (R.type == "VML") {
-        var d = doc.createElement("div"),
-            b;
-        d.innerHTML = '<v:shape adj="1"/>';
-        b = d.firstChild;
-        b.style.behavior = "url(#default#VML)";
-        if (!(b && typeof b.adj == "object")) {
-            return R.type = null;
-        }
-        d = null;
-    }
-    R.svg = !(R.vml = R.type == "VML");
-    Paper[proto] = R[proto];
-    paperproto = Paper[proto];
-    R._id = 0;
-    R._oid = 0;
-    R.fn = {};
-    R.is = function (o, type) {
-        type = lowerCase.call(type);
-        if (type == "finite") {
-            return !isnan[has](+o);
-        }
-        return  (type == "null" && o === null) ||
-                (type == typeof o) ||
-                (type == "object" && o === Object(o)) ||
-                (type == "array" && Array.isArray && Array.isArray(o)) ||
-                objectToString.call(o).slice(8, -1).toLowerCase() == type;
-    };
-    R.angle = function (x1, y1, x2, y2, x3, y3) {
-        if (x3 == null) {
-            var x = x1 - x2,
-                y = y1 - y2;
-            if (!x && !y) {
-                return 0;
-            }
-            return ((x < 0) * 180 + math.atan(-y / -x) * 180 / PI + 360) % 360;
-        } else {
-            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);
-        }
-    };
-    R.rad = function (deg) {
-        return deg % 360 * PI / 180;
-    };
-    R.deg = function (rad) {
-        return rad * 180 / PI % 360;
-    };
-    R.snapTo = function (values, value, tolerance) {
-        tolerance = R.is(tolerance, "finite") ? tolerance : 10;
-        if (R.is(values, array)) {
-            var i = values.length;
-            while (i--) if (abs(values[i] - value) <= tolerance) {
-                return values[i];
-            }
-        } else {
-            values = +values;
-            var rem = value % values;
-            if (rem < tolerance) {
-                return value - rem;
-            }
-            if (rem > values - tolerance) {
-                return value - rem + values;
-            }
-        }
-        return value;
-    };
-    function createUUID() {
-        // http://www.ietf.org/rfc/rfc4122.txt
-        var s = [],
-            i = 0;
-        for (; i < 32; i++) {
-            s[i] = (~~(math.random() * 16))[toString](16);
-        }
-        s[12] = 4;  // bits 12-15 of the time_hi_and_version field to 0010
-        s[16] = ((s[16] & 3) | 8)[toString](16);  // bits 6-7 of the clock_seq_hi_and_reserved to 01
-        return "r-" + s[join]("");
-    }
-
-    R.setWindow = function (newwin) {
-        win = newwin;
-        doc = win.document;
-    };
-    // colour utilities
-    var toHex = function (color) {
-        if (R.vml) {
-            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/
-            var trim = /^\s+|\s+$/g;
-            var bod;
-            try {
-                var docum = new ActiveXObject("htmlfile");
-                docum.write("<body>");
-                docum.close();
-                bod = docum.body;
-            } catch(e) {
-                bod = createPopup().document.body;
-            }
-            var range = bod.createTextRange();
-            toHex = cacher(function (color) {
-                try {
-                    bod.style.color = Str(color)[rp](trim, E);
-                    var value = range.queryCommandValue("ForeColor");
-                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);
-                    return "#" + ("000000" + value[toString](16)).slice(-6);
-                } catch(e) {
-                    return "none";
-                }
-            });
-        } else {
-            var i = doc.createElement("i");
-            i.title = "Rapha\xebl Colour Picker";
-            i.style.display = "none";
-            doc.body[appendChild](i);
-            toHex = cacher(function (color) {
-                i.style.color = color;
-                return doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
-            });
-        }
-        return toHex(color);
-    },
-    hsbtoString = function () {
-        return "hsb(" + [this.h, this.s, this.b] + ")";
-    },
-    hsltoString = function () {
-        return "hsl(" + [this.h, this.s, this.l] + ")";
-    },
-    rgbtoString = function () {
-        return this.hex;
-    };
-    R.hsb2rgb = function (h, s, b, o) {
-        if (R.is(h, "object") && "h" in h && "s" in h && "b" in h) {
-            b = h.b;
-            s = h.s;
-            h = h.h;
-            o = h.o;
-        }
-        return R.hsl2rgb(h, s, b / 2, o);
-    };
-    R.hsl2rgb = function (h, s, l, o) {
-        if (R.is(h, "object") && "h" in h && "s" in h && "l" in h) {
-            l = h.l;
-            s = h.s;
-            h = h.h;
-        }
-        if (h > 1 || s > 1 || l > 1) {
-            h /= 360;
-            s /= 100;
-            l /= 100;
-        }
-        var rgb = {},
-            channels = ["r", "g", "b"],
-            t2, t1, t3, r, g, b;
-        if (!s) {
-            rgb = {
-                r: l,
-                g: l,
-                b: l
-            };
-        } else {
-            if (l < .5) {
-                t2 = l * (1 + s);
-            } else {
-                t2 = l + s - l * s;
-            }
-            t1 = 2 * l - t2;
-            for (var i = 0; i < 3; i++) {
-                t3 = h + 1 / 3 * -(i - 1);
-                t3 < 0 && t3++;
-                t3 > 1 && t3--;
-                if (t3 * 6 < 1) {
-                    rgb[channels[i]] = t1 + (t2 - t1) * 6 * t3;
-                } else if (t3 * 2 < 1) {
-                    rgb[channels[i]] = t2;
-                } else if (t3 * 3 < 2) {
-                    rgb[channels[i]] = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
-                } else {
-                    rgb[channels[i]] = t1;
-                }
-            }
-        }
-        rgb.r *= 255;
-        rgb.g *= 255;
-        rgb.b *= 255;
-        rgb.hex = "#" + (16777216 | rgb.b | (rgb.g << 8) | (rgb.r << 16)).toString(16).slice(1);
-        R.is(o, "finite") && (rgb.opacity = o);
-        rgb.toString = rgbtoString;
-        return rgb;
-    };
-    R.rgb2hsb = function (red, green, blue) {
-        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
-            blue = red.b;
-            green = red.g;
-            red = red.r;
-        }
-        if (green == null && R.is(red, string)) {
-            var clr = R.getRGB(red);
-            red = clr.r;
-            green = clr.g;
-            blue = clr.b;
-        }
-        if (red > 1 || green > 1 || blue > 1) {
-            red /= 255;
-            green /= 255;
-            blue /= 255;
-        }
-        var max = mmax(red, green, blue),
-            min = mmin(red, green, blue),
-            hue,
-            saturation,
-            brightness = max;
-        if (min == max) {
-            return {h: 0, s: 0, b: max, toString: hsbtoString};
-        } else {
-            var delta = (max - min);
-            saturation = delta / max;
-            if (red == max) {
-                hue = (green - blue) / delta;
-            } else if (green == max) {
-                hue = 2 + ((blue - red) / delta);
-            } else {
-                hue = 4 + ((red - green) / delta);
-            }
-            hue /= 6;
-            hue < 0 && hue++;
-            hue > 1 && hue--;
-        }
-        return {h: hue, s: saturation, b: brightness, toString: hsbtoString};
-    };
-    R.rgb2hsl = function (red, green, blue) {
-        if (green == null && R.is(red, "object") && "r" in red && "g" in red && "b" in red) {
-            blue = red.b;
-            green = red.g;
-            red = red.r;
-        }
-        if (green == null && R.is(red, string)) {
-            var clr = R.getRGB(red);
-            red = clr.r;
-            green = clr.g;
-            blue = clr.b;
-        }
-        if (red > 1 || green > 1 || blue > 1) {
-            red /= 255;
-            green /= 255;
-            blue /= 255;
-        }
-        var max = mmax(red, green, blue),
-            min = mmin(red, green, blue),
-            h,
-            s,
-            l = (max + min) / 2,
-            hsl;
-        if (min == max) {
-            hsl =  {h: 0, s: 0, l: l};
-        } else {
-            var delta = max - min;
-            s = l < .5 ? delta / (max + min) : delta / (2 - max - min);
-            if (red == max) {
-                h = (green - blue) / delta;
-            } else if (green == max) {
-                h = 2 + (blue - red) / delta;
-            } else {
-                h = 4 + (red - green) / delta;
-            }
-            h /= 6;
-            h < 0 && h++;
-            h > 1 && h--;
-            hsl = {h: h, s: s, l: l};
-        }
-        hsl.toString = hsltoString;
-        return hsl;
-    };
-    R._path2string = function () {
-        return this.join(",")[rp](p2s, "$1");
-    };
-    function cacher(f, scope, postprocessor) {
-        function newf() {
-            var arg = Array[proto].slice.call(arguments, 0),
-                args = arg[join]("\u25ba"),
-                cache = newf.cache = newf.cache || {},
-                count = newf.count = newf.count || [];
-            if (cache[has](args)) {
-                return postprocessor ? postprocessor(cache[args]) : cache[args];
-            }
-            count[length] >= 1e3 && delete cache[count.shift()];
-            count[push](args);
-            cache[args] = f[apply](scope, arg);
-            return postprocessor ? postprocessor(cache[args]) : cache[args];
-        }
-        return newf;
-    }
- 
-    R.getRGB = cacher(function (colour) {
-        if (!colour || !!((colour = Str(colour)).indexOf("-") + 1)) {
-            return {r: -1, g: -1, b: -1, hex: "none", error: 1};
-        }
-        if (colour == "none") {
-            return {r: -1, g: -1, b: -1, hex: "none"};
-        }
-        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
-        var res,
-            red,
-            green,
-            blue,
-            opacity,
-            t,
-            values,
-            rgb = colour.match(colourRegExp);
-        if (rgb) {
-            if (rgb[2]) {
-                blue = toInt(rgb[2].substring(5), 16);
-                green = toInt(rgb[2].substring(3, 5), 16);
-                red = toInt(rgb[2].substring(1, 3), 16);
-            }
-            if (rgb[3]) {
-                blue = toInt((t = rgb[3].charAt(3)) + t, 16);
-                green = toInt((t = rgb[3].charAt(2)) + t, 16);
-                red = toInt((t = rgb[3].charAt(1)) + t, 16);
-            }
-            if (rgb[4]) {
-                values = rgb[4][split](commaSpaces);
-                red = toFloat(values[0]);
-                values[0].slice(-1) == "%" && (red *= 2.55);
-                green = toFloat(values[1]);
-                values[1].slice(-1) == "%" && (green *= 2.55);
-                blue = toFloat(values[2]);
-                values[2].slice(-1) == "%" && (blue *= 2.55);
-                rgb[1].toLowerCase().slice(0, 4) == "rgba" && (opacity = toFloat(values[3]));
-                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
-            }
-            if (rgb[5]) {
-                values = rgb[5][split](commaSpaces);
-                red = toFloat(values[0]);
-                values[0].slice(-1) == "%" && (red *= 2.55);
-                green = toFloat(values[1]);
-                values[1].slice(-1) == "%" && (green *= 2.55);
-                blue = toFloat(values[2]);
-                values[2].slice(-1) == "%" && (blue *= 2.55);
-                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
-                rgb[1].toLowerCase().slice(0, 4) == "hsba" && (opacity = toFloat(values[3]));
-                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
-                return R.hsb2rgb(red, green, blue, opacity);
-            }
-            if (rgb[6]) {
-                values = rgb[6][split](commaSpaces);
-                red = toFloat(values[0]);
-                values[0].slice(-1) == "%" && (red *= 2.55);
-                green = toFloat(values[1]);
-                values[1].slice(-1) == "%" && (green *= 2.55);
-                blue = toFloat(values[2]);
-                values[2].slice(-1) == "%" && (blue *= 2.55);
-                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
-                rgb[1].toLowerCase().slice(0, 4) == "hsla" && (opacity = toFloat(values[3]));
-                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
-                return R.hsl2rgb(red, green, blue, opacity);
-            }
-            rgb = {r: red, g: green, b: blue};
-            rgb.hex = "#" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);
-            R.is(opacity, "finite") && (rgb.opacity = opacity);
-            return rgb;
-        }
-        return {r: -1, g: -1, b: -1, hex: "none", error: 1};
-    }, R);
-    R.getColor = function (value) {
-        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},
-            rgb = this.hsb2rgb(start.h, start.s, start.b);
-        start.h += .075;
-        if (start.h > 1) {
-            start.h = 0;
-            start.s -= .2;
-            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});
-        }
-        return rgb.hex;
-    };
-    R.getColor.reset = function () {
-        delete this.start;
-    };
-    // path utilities
-    R.parsePathString = cacher(function (pathString) {
-        if (!pathString) {
-            return null;
-        }
-        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, q: 4, s: 4, t: 2, v: 1, z: 0},
-            data = [];
-        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption
-            data = pathClone(pathString);
-        }
-        if (!data[length]) {
-            Str(pathString)[rp](pathCommand, function (a, b, c) {
-                var params = [],
-                    name = lowerCase.call(b);
-                c[rp](pathValues, function (a, b) {
-                    b && params[push](+b);
-                });
-                if (name == "m" && params[length] > 2) {
-                    data[push]([b][concat](params.splice(0, 2)));
-                    name = "l";
-                    b = b == "m" ? "l" : "L";
-                }
-                while (params[length] >= paramCounts[name]) {
-                    data[push]([b][concat](params.splice(0, paramCounts[name])));
-                    if (!paramCounts[name]) {
-                        break;
-                    }
-                }
-            });
-        }
-        data[toString] = R._path2string;
-        return data;
-    });
-    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
-        var t1 = 1 - t,
-            x = pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
-            y = pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y,
-            mx = p1x + 2 * t * (c1x - p1x) + t * t * (c2x - 2 * c1x + p1x),
-            my = p1y + 2 * t * (c1y - p1y) + t * t * (c2y - 2 * c1y + p1y),
-            nx = c1x + 2 * t * (c2x - c1x) + t * t * (p2x - 2 * c2x + c1x),
-            ny = c1y + 2 * t * (c2y - c1y) + t * t * (p2y - 2 * c2y + c1y),
-            ax = (1 - t) * p1x + t * c1x,
-            ay = (1 - t) * p1y + t * c1y,
-            cx = (1 - t) * c2x + t * p2x,
-            cy = (1 - t) * c2y + t * p2y,
-            alpha = (90 - math.atan((mx - nx) / (my - ny)) * 180 / PI);
-        (mx > nx || my < ny) && (alpha += 180);
-        return {x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha};
-    };
-    var pathDimensions = cacher(function (path) {
-        if (!path) {
-            return {x: 0, y: 0, width: 0, height: 0};
-        }
-        path = path2curve(path);
-        var x = 0, 
-            y = 0,
-            X = [],
-            Y = [],
-            p;
-        for (var i = 0, ii = path[length]; i < ii; i++) {
-            p = path[i];
-            if (p[0] == "M") {
-                x = p[1];
-                y = p[2];
-                X[push](x);
-                Y[push](y);
-            } else {
-                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
-                X = X[concat](dim.min.x, dim.max.x);
-                Y = Y[concat](dim.min.y, dim.max.y);
-                x = p[5];
-                y = p[6];
-            }
-        }
-        var xmin = mmin[apply](0, X),
-            ymin = mmin[apply](0, Y);
-        return {
-            x: xmin,
-            y: ymin,
-            width: mmax[apply](0, X) - xmin,
-            height: mmax[apply](0, Y) - ymin
-        };
-    }),
-        pathClone = function (pathArray) {
-            var res = [];
-            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
-                pathArray = R.parsePathString(pathArray);
-            }
-            for (var i = 0, ii = pathArray[length]; i < ii; i++) {
-                res[i] = [];
-                for (var j = 0, jj = pathArray[i][length]; j < jj; j++) {
-                    res[i][j] = pathArray[i][j];
-                }
-            }
-            res[toString] = R._path2string;
-            return res;
-        },
-        pathToRelative = cacher(function (pathArray) {
-            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
-                pathArray = R.parsePathString(pathArray);
-            }
-            var res = [],
-                x = 0,
-                y = 0,
-                mx = 0,
-                my = 0,
-                start = 0;
-            if (pathArray[0][0] == "M") {
-                x = pathArray[0][1];
-                y = pathArray[0][2];
-                mx = x;
-                my = y;
-                start++;
-                res[push](["M", x, y]);
-            }
-            for (var i = start, ii = pathArray[length]; i < ii; i++) {
-                var r = res[i] = [],
-                    pa = pathArray[i];
-                if (pa[0] != lowerCase.call(pa[0])) {
-                    r[0] = lowerCase.call(pa[0]);
-                    switch (r[0]) {
-                        case "a":
-                            r[1] = pa[1];
-                            r[2] = pa[2];
-                            r[3] = pa[3];
-                            r[4] = pa[4];
-                            r[5] = pa[5];
-                            r[6] = +(pa[6] - x).toFixed(3);
-                            r[7] = +(pa[7] - y).toFixed(3);
-                            break;
-                        case "v":
-                            r[1] = +(pa[1] - y).toFixed(3);
-                            break;
-                        case "m":
-                            mx = pa[1];
-                            my = pa[2];
-                        default:
-                            for (var j = 1, jj = pa[length]; j < jj; j++) {
-                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);
-                            }
-                    }
-                } else {
-                    r = res[i] = [];
-                    if (pa[0] == "m") {
-                        mx = pa[1] + x;
-                        my = pa[2] + y;
-                    }
-                    for (var k = 0, kk = pa[length]; k < kk; k++) {
-                        res[i][k] = pa[k];
-                    }
-                }
-                var len = res[i][length];
-                switch (res[i][0]) {
-                    case "z":
-                        x = mx;
-                        y = my;
-                        break;
-                    case "h":
-                        x += +res[i][len - 1];
-                        break;
-                    case "v":
-                        y += +res[i][len - 1];
-                        break;
-                    default:
-                        x += +res[i][len - 2];
-                        y += +res[i][len - 1];
-                }
-            }
-            res[toString] = R._path2string;
-            return res;
-        }, 0, pathClone),
-        pathToAbsolute = cacher(function (pathArray) {
-            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
-                pathArray = R.parsePathString(pathArray);
-            }
-            var res = [],
-                x = 0,
-                y = 0,
-                mx = 0,
-                my = 0,
-                start = 0;
-            if (pathArray[0][0] == "M") {
-                x = +pathArray[0][1];
-                y = +pathArray[0][2];
-                mx = x;
-                my = y;
-                start++;
-                res[0] = ["M", x, y];
-            }
-            for (var i = start, ii = pathArray[length]; i < ii; i++) {
-                var r = res[i] = [],
-                    pa = pathArray[i];
-                if (pa[0] != upperCase.call(pa[0])) {
-                    r[0] = upperCase.call(pa[0]);
-                    switch (r[0]) {
-                        case "A":
-                            r[1] = pa[1];
-                            r[2] = pa[2];
-                            r[3] = pa[3];
-                            r[4] = pa[4];
-                            r[5] = pa[5];
-                            r[6] = +(pa[6] + x);
-                            r[7] = +(pa[7] + y);
-                            break;
-                        case "V":
-                            r[1] = +pa[1] + y;
-                            break;
-                        case "H":
-                            r[1] = +pa[1] + x;
-                            break;
-                        case "M":
-                            mx = +pa[1] + x;
-                            my = +pa[2] + y;
-                        default:
-                            for (var j = 1, jj = pa[length]; j < jj; j++) {
-                                r[j] = +pa[j] + ((j % 2) ? x : y);
-                            }
-                    }
-                } else {
-                    for (var k = 0, kk = pa[length]; k < kk; k++) {
-                        res[i][k] = pa[k];
-                    }
-                }
-                switch (r[0]) {
-                    case "Z":
-                        x = mx;
-                        y = my;
-                        break;
-                    case "H":
-                        x = r[1];
-                        break;
-                    case "V":
-                        y = r[1];
-                        break;
-                    case "M":
-                        mx = res[i][res[i][length] - 2];
-                        my = res[i][res[i][length] - 1];
-                    default:
-                        x = res[i][res[i][length] - 2];
-                        y = res[i][res[i][length] - 1];
-                }
-            }
-            res[toString] = R._path2string;
-            return res;
-        }, null, pathClone),
-        l2c = function (x1, y1, x2, y2) {
-            return [x1, y1, x2, y2, x2, y2];
-        },
-        q2c = function (x1, y1, ax, ay, x2, y2) {
-            var _13 = 1 / 3,
-                _23 = 2 / 3;
-            return [
-                    _13 * x1 + _23 * ax,
-                    _13 * y1 + _23 * ay,
-                    _13 * x2 + _23 * ax,
-                    _13 * y2 + _23 * ay,
-                    x2,
-                    y2
-                ];
-        },
-        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
-            // for more information of where this math came from visit:
-            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
-            var _120 = PI * 120 / 180,
-                rad = PI / 180 * (+angle || 0),
-                res = [],
-                xy,
-                rotate = cacher(function (x, y, rad) {
-                    var X = x * math.cos(rad) - y * math.sin(rad),
-                        Y = x * math.sin(rad) + y * math.cos(rad);
-                    return {x: X, y: Y};
-                });
-            if (!recursive) {
-                xy = rotate(x1, y1, -rad);
-                x1 = xy.x;
-                y1 = xy.y;
-                xy = rotate(x2, y2, -rad);
-                x2 = xy.x;
-                y2 = xy.y;
-                var cos = math.cos(PI / 180 * angle),
-                    sin = math.sin(PI / 180 * angle),
-                    x = (x1 - x2) / 2,
-                    y = (y1 - y2) / 2;
-                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);
-                if (h > 1) {
-                    h = math.sqrt(h);
-                    rx = h * rx;
-                    ry = h * ry;
-                }
-                var rx2 = rx * rx,
-                    ry2 = ry * ry,
-                    k = (large_arc_flag == sweep_flag ? -1 : 1) *
-                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),
-                    cx = k * rx * y / ry + (x1 + x2) / 2,
-                    cy = k * -ry * x / rx + (y1 + y2) / 2,
-                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),
-                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));
-
-                f1 = x1 < cx ? PI - f1 : f1;
-                f2 = x2 < cx ? PI - f2 : f2;
-                f1 < 0 && (f1 = PI * 2 + f1);
-                f2 < 0 && (f2 = PI * 2 + f2);
-                if (sweep_flag && f1 > f2) {
-                    f1 = f1 - PI * 2;
-                }
-                if (!sweep_flag && f2 > f1) {
-                    f2 = f2 - PI * 2;
-                }
-            } else {
-                f1 = recursive[0];
-                f2 = recursive[1];
-                cx = recursive[2];
-                cy = recursive[3];
-            }
-            var df = f2 - f1;
-            if (abs(df) > _120) {
-                var f2old = f2,
-                    x2old = x2,
-                    y2old = y2;
-                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);
-                x2 = cx + rx * math.cos(f2);
-                y2 = cy + ry * math.sin(f2);
-                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);
-            }
-            df = f2 - f1;
-            var c1 = math.cos(f1),
-                s1 = math.sin(f1),
-                c2 = math.cos(f2),
-                s2 = math.sin(f2),
-                t = math.tan(df / 4),
-                hx = 4 / 3 * rx * t,
-                hy = 4 / 3 * ry * t,
-                m1 = [x1, y1],
-                m2 = [x1 + hx * s1, y1 - hy * c1],
-                m3 = [x2 + hx * s2, y2 - hy * c2],
-                m4 = [x2, y2];
-            m2[0] = 2 * m1[0] - m2[0];
-            m2[1] = 2 * m1[1] - m2[1];
-            if (recursive) {
-                return [m2, m3, m4][concat](res);
-            } else {
-                res = [m2, m3, m4][concat](res)[join]()[split](",");
-                var newres = [];
-                for (var i = 0, ii = res[length]; i < ii; i++) {
-                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;
-                }
-                return newres;
-            }
-        },
-        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
-            var t1 = 1 - t;
-            return {
-                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
-                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y
-            };
-        },
-        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
-            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),
-                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),
-                c = p1x - c1x,
-                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,
-                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,
-                y = [p1y, p2y],
-                x = [p1x, p2x],
-                dot;
-            abs(t1) > "1e12" && (t1 = .5);
-            abs(t2) > "1e12" && (t2 = .5);
-            if (t1 > 0 && t1 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            if (t2 > 0 && t2 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);
-            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);
-            c = p1y - c1y;
-            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;
-            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;
-            abs(t1) > "1e12" && (t1 = .5);
-            abs(t2) > "1e12" && (t2 = .5);
-            if (t1 > 0 && t1 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            if (t2 > 0 && t2 < 1) {
-                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
-                x[push](dot.x);
-                y[push](dot.y);
-            }
-            return {
-                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},
-                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}
-            };
-        }),
-        path2curve = cacher(function (path, path2) {
-            var p = pathToAbsolute(path),
-                p2 = path2 && pathToAbsolute(path2),
-                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
-                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
-                processPath = function (path, d) {
-                    var nx, ny;
-                    if (!path) {
-                        return ["C", d.x, d.y, d.x, d.y, d.x, d.y];
-                    }
-                    !(path[0] in {T:1, Q:1}) && (d.qx = d.qy = null);
-                    switch (path[0]) {
-                        case "M":
-                            d.X = path[1];
-                            d.Y = path[2];
-                            break;
-                        case "A":
-                            path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));
-                            break;
-                        case "S":
-                            nx = d.x + (d.x - (d.bx || d.x));
-                            ny = d.y + (d.y - (d.by || d.y));
-                            path = ["C", nx, ny][concat](path.slice(1));
-                            break;
-                        case "T":
-                            d.qx = d.x + (d.x - (d.qx || d.x));
-                            d.qy = d.y + (d.y - (d.qy || d.y));
-                            path = ["C"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));
-                            break;
-                        case "Q":
-                            d.qx = path[1];
-                            d.qy = path[2];
-                            path = ["C"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));
-                            break;
-                        case "L":
-                            path = ["C"][concat](l2c(d.x, d.y, path[1], path[2]));
-                            break;
-                        case "H":
-                            path = ["C"][concat](l2c(d.x, d.y, path[1], d.y));
-                            break;
-                        case "V":
-                            path = ["C"][concat](l2c(d.x, d.y, d.x, path[1]));
-                            break;
-                        case "Z":
-                            path = ["C"][concat](l2c(d.x, d.y, d.X, d.Y));
-                            break;
-                    }
-                    return path;
-                },
-                fixArc = function (pp, i) {
-                    if (pp[i][length] > 7) {
-                        pp[i].shift();
-                        var pi = pp[i];
-                        while (pi[length]) {
-                            pp.splice(i++, 0, ["C"][concat](pi.splice(0, 6)));
-                        }
-                        pp.splice(i, 1);
-                        ii = mmax(p[length], p2 && p2[length] || 0);
-                    }
-                },
-                fixM = function (path1, path2, a1, a2, i) {
-                    if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") {
-                        path2.splice(i, 0, ["M", a2.x, a2.y]);
-                        a1.bx = 0;
-                        a1.by = 0;
-                        a1.x = path1[i][1];
-                        a1.y = path1[i][2];
-                        ii = mmax(p[length], p2 && p2[length] || 0);
-                    }
-                };
-            for (var i = 0, ii = mmax(p[length], p2 && p2[length] || 0); i < ii; i++) {
-                p[i] = processPath(p[i], attrs);
-                fixArc(p, i);
-                p2 && (p2[i] = processPath(p2[i], attrs2));
-                p2 && fixArc(p2, i);
-                fixM(p, p2, attrs, attrs2, i);
-                fixM(p2, p, attrs2, attrs, i);
-                var seg = p[i],
-                    seg2 = p2 && p2[i],
-                    seglen = seg[length],
-                    seg2len = p2 && seg2[length];
-                attrs.x = seg[seglen - 2];
-                attrs.y = seg[seglen - 1];
-                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;
-                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;
-                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);
-                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);
-                attrs2.x = p2 && seg2[seg2len - 2];
-                attrs2.y = p2 && seg2[seg2len - 1];
-            }
-            return p2 ? [p, p2] : p;
-        }, null, pathClone),
-        parseDots = cacher(function (gradient) {
-            var dots = [];
-            for (var i = 0, ii = gradient[length]; i < ii; i++) {
-                var dot = {},
-                    par = gradient[i].match(/^([^:]*):?([\d\.]*)/);
-                dot.color = R.getRGB(par[1]);
-                if (dot.color.error) {
-                    return null;
-                }
-                dot.color = dot.color.hex;
-                par[2] && (dot.offset = par[2] + "%");
-                dots[push](dot);
-            }
-            for (i = 1, ii = dots[length] - 1; i < ii; i++) {
-                if (!dots[i].offset) {
-                    var start = toFloat(dots[i - 1].offset || 0),
-                        end = 0;
-                    for (var j = i + 1; j < ii; j++) {
-                        if (dots[j].offset) {
-                            end = dots[j].offset;
-                            break;
-                        }
-                    }
-                    if (!end) {
-                        end = 100;
-                        j = ii;
-                    }
-                    end = toFloat(end);
-                    var d = (end - start) / (j - i + 1);
-                    for (; i < j; i++) {
-                        start += d;
-                        dots[i].offset = start + "%";
-                    }
-                }
-            }
-            return dots;
-        }),
-        getContainer = function (x, y, w, h) {
-            var container;
-            if (R.is(x, string) || R.is(x, "object")) {
-                container = R.is(x, string) ? doc.getElementById(x) : x;
-                if (container.tagName) {
-                    if (y == null) {
-                        return {
-                            container: container,
-                            width: container.style.pixelWidth || container.offsetWidth,
-                            height: container.style.pixelHeight || container.offsetHeight
-                        };
-                    } else {
-                        return {container: container, width: y, height: w};
-                    }
-                }
-            } else {
-                return {container: 1, x: x, y: y, width: w, height: h};
-            }
-        },
-        plugins = function (con, add) {
-            var that = this;
-            for (var prop in add) {
-                if (add[has](prop) && !(prop in con)) {
-                    switch (typeof add[prop]) {
-                        case "function":
-                            (function (f) {
-                                con[prop] = con === that ? f : function () { return f[apply](that, arguments); };
-                            })(add[prop]);
-                        break;
-                        case "object":
-                            con[prop] = con[prop] || {};
-                            plugins.call(this, con[prop], add[prop]);
-                        break;
-                        default:
-                            con[prop] = add[prop];
-                        break;
-                    }
-                }
-            }
-        },
-        tear = function (el, paper) {
-            el == paper.top && (paper.top = el.prev);
-            el == paper.bottom && (paper.bottom = el.next);
-            el.next && (el.next.prev = el.prev);
-            el.prev && (el.prev.next = el.next);
-        },
-        tofront = function (el, paper) {
-            if (paper.top === el) {
-                return;
-            }
-            tear(el, paper);
-            el.next = null;
-            el.prev = paper.top;
-            paper.top.next = el;
-            paper.top = el;
-        },
-        toback = function (el, paper) {
-            if (paper.bottom === el) {
-                return;
-            }
-            tear(el, paper);
-            el.next = paper.bottom;
-            el.prev = null;
-            paper.bottom.prev = el;
-            paper.bottom = el;
-        },
-        insertafter = function (el, el2, paper) {
-            tear(el, paper);
-            el2 == paper.top && (paper.top = el);
-            el2.next && (el2.next.prev = el);
-            el.next = el2.next;
-            el.prev = el2;
-            el2.next = el;
-        },
-        insertbefore = function (el, el2, paper) {
-            tear(el, paper);
-            el2 == paper.bottom && (paper.bottom = el);
-            el2.prev && (el2.prev.next = el);
-            el.prev = el2.prev;
-            el2.prev = el;
-            el.next = el2;
-        },
-        removed = function (methodname) {
-            return function () {
-                throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object");
-            };
-        };
-    R.pathToRelative = pathToRelative;
-    // SVG
-    if (R.svg) {
-        paperproto.svgns = "http://www.w3.org/2000/svg";
-        paperproto.xlink = "http://www.w3.org/1999/xlink";
-        round = function (num) {
-            return +num + (~~num === num) * .5;
-        };
-        var $ = function (el, attr) {
-            if (attr) {
-                for (var key in attr) {
-                    if (attr[has](key)) {
-                        el[setAttribute](key, Str(attr[key]));
-                    }
-                }
-            } else {
-                el = doc.createElementNS(paperproto.svgns, el);
-                el.style.webkitTapHighlightColor = "rgba(0,0,0,0)";
-                return el;
-            }
-        };
-        R[toString] = function () {
-            return  "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version;
-        };
-        var thePath = function (pathString, SVG) {
-            var el = $("path");
-            SVG.canvas && SVG.canvas[appendChild](el);
-            var p = new Element(el, SVG);
-            p.type = "path";
-            setFillAndStroke(p, {fill: "none", stroke: "#000", path: pathString});
-            return p;
-        };
-        var addGradientFill = function (o, gradient, SVG) {
-            var type = "linear",
-                fx = .5, fy = .5,
-                s = o.style;
-            gradient = Str(gradient)[rp](radial_gradient, function (all, _fx, _fy) {
-                type = "radial";
-                if (_fx && _fy) {
-                    fx = toFloat(_fx);
-                    fy = toFloat(_fy);
-                    var dir = ((fy > .5) * 2 - 1);
-                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&
-                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&
-                        fy != .5 &&
-                        (fy = fy.toFixed(5) - 1e-5 * dir);
-                }
-                return E;
-            });
-            gradient = gradient[split](/\s*\-\s*/);
-            if (type == "linear") {
-                var angle = gradient.shift();
-                angle = -toFloat(angle);
-                if (isNaN(angle)) {
-                    return null;
-                }
-                var vector = [0, 0, math.cos(angle * PI / 180), math.sin(angle * PI / 180)],
-                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);
-                vector[2] *= max;
-                vector[3] *= max;
-                if (vector[2] < 0) {
-                    vector[0] = -vector[2];
-                    vector[2] = 0;
-                }
-                if (vector[3] < 0) {
-                    vector[1] = -vector[3];
-                    vector[3] = 0;
-                }
-            }
-            var dots = parseDots(gradient);
-            if (!dots) {
-                return null;
-            }
-            var id = o.getAttribute(fillString);
-            id = id.match(/^url\(#(.*)\)$/);
-            id && SVG.defs.removeChild(doc.getElementById(id[1]));
-
-            var el = $(type + "Gradient");
-            el.id = createUUID();
-            $(el, type == "radial" ? {fx: fx, fy: fy} : {x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3]});
-            SVG.defs[appendChild](el);
-            for (var i = 0, ii = dots[length]; i < ii; i++) {
-                var stop = $("stop");
-                $(stop, {
-                    offset: dots[i].offset ? dots[i].offset : !i ? "0%" : "100%",
-                    "stop-color": dots[i].color || "#fff"
-                });
-                el[appendChild](stop);
-            }
-            $(o, {
-                fill: "url(#" + el.id + ")",
-                opacity: 1,
-                "fill-opacity": 1
-            });
-            s.fill = E;
-            s.opacity = 1;
-            s.fillOpacity = 1;
-            return 1;
-        };
-        var updatePosition = function (o) {
-            var bbox = o.getBBox();
-            $(o.pattern, {patternTransform: R.format("translate({0},{1})", bbox.x, bbox.y)});
-        };
-        var setFillAndStroke = function (o, params) {
-            var dasharray = {
-                    "": [0],
-                    "none": [0],
-                    "-": [3, 1],
-                    ".": [1, 1],
-                    "-.": [3, 1, 1, 1],
-                    "-..": [3, 1, 1, 1, 1, 1],
-                    ". ": [1, 3],
-                    "- ": [4, 3],
-                    "--": [8, 3],
-                    "- .": [4, 3, 1, 3],
-                    "--.": [8, 3, 1, 3],
-                    "--..": [8, 3, 1, 3, 1, 3]
-                },
-                node = o.node,
-                attrs = o.attrs,
-                rot = o.rotate(),
-                addDashes = function (o, value) {
-                    value = dasharray[lowerCase.call(value)];
-                    if (value) {
-                        var width = o.attrs["stroke-width"] || "1",
-                            butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0,
-                            dashes = [];
-                        var i = value[length];
-                        while (i--) {
-                            dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;
-                        }
-                        $(node, {"stroke-dasharray": dashes[join](",")});
-                    }
-                };
-            params[has]("rotation") && (rot = params.rotation);
-            var rotxy = Str(rot)[split](separator);
-            if (!(rotxy.length - 1)) {
-                rotxy = null;
-            } else {
-                rotxy[1] = +rotxy[1];
-                rotxy[2] = +rotxy[2];
-            }
-            toFloat(rot) && o.rotate(0, true);
-            for (var att in params) {
-                if (params[has](att)) {
-                    if (!availableAttrs[has](att)) {
-                        continue;
-                    }
-                    var value = params[att];
-                    attrs[att] = value;
-                    switch (att) {
-                        case "blur":
-                            o.blur(value);
-                            break;
-                        case "rotation":
-                            o.rotate(value, true);
-                            break;
-                        case "href":
-                        case "title":
-                        case "target":
-                            var pn = node.parentNode;
-                            if (lowerCase.call(pn.tagName) != "a") {
-                                var hl = $("a");
-                                pn.insertBefore(hl, node);
-                                hl[appendChild](node);
-                                pn = hl;
-                            }
-                            if (att == "target" && value == "blank") {
-                                pn.setAttributeNS(o.paper.xlink, "show", "new");
-                            } else {
-                                pn.setAttributeNS(o.paper.xlink, att, value);
-                            }
-                            break;
-                        case "cursor":
-                            node.style.cursor = value;
-                            break;
-                        case "clip-rect":
-                            var rect = Str(value)[split](separator);
-                            if (rect[length] == 4) {
-                                o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);
-                                var el = $("clipPath"),
-                                    rc = $("rect");
-                                el.id = createUUID();
-                                $(rc, {
-                                    x: rect[0],
-                                    y: rect[1],
-                                    width: rect[2],
-                                    height: rect[3]
-                                });
-                                el[appendChild](rc);
-                                o.paper.defs[appendChild](el);
-                                $(node, {"clip-path": "url(#" + el.id + ")"});
-                                o.clip = rc;
-                            }
-                            if (!value) {
-                                var clip = doc.getElementById(node.getAttribute("clip-path")[rp](/(^url\(#|\)$)/g, E));
-                                clip && clip.parentNode.removeChild(clip);
-                                $(node, {"clip-path": E});
-                                delete o.clip;
-                            }
-                        break;
-                        case "path":
-                            if (o.type == "path") {
-                                $(node, {d: value ? attrs.path = pathToAbsolute(value) : "M0,0"});
-                            }
-                            break;
-                        case "width":
-                            node[setAttribute](att, value);
-                            if (attrs.fx) {
-                                att = "x";
-                                value = attrs.x;
-                            } else {
-                                break;
-                            }
-                        case "x":
-                            if (attrs.fx) {
-                                value = -attrs.x - (attrs.width || 0);
-                            }
-                        case "rx":
-                            if (att == "rx" && o.type == "rect") {
-                                break;
-                            }
-                        case "cx":
-                            rotxy && (att == "x" || att == "cx") && (rotxy[1] += value - attrs[att]);
-                            node[setAttribute](att, value);
-                            o.pattern && updatePosition(o);
-                            break;
-                        case "height":
-                            node[setAttribute](att, value);
-                            if (attrs.fy) {
-                                att = "y";
-                                value = attrs.y;
-                            } else {
-                                break;
-                            }
-                        case "y":
-                            if (attrs.fy) {
-                                value = -attrs.y - (attrs.height || 0);
-                            }
-                        case "ry":
-                            if (att == "ry" && o.type == "rect") {
-                                break;
-                            }
-                        case "cy":
-                            rotxy && (att == "y" || att == "cy") && (rotxy[2] += value - attrs[att]);
-                            node[setAttribute](att, value);
-                            o.pattern && updatePosition(o);
-                            break;
-                        case "r":
-                            if (o.type == "rect") {
-                                $(node, {rx: value, ry: value});
-                            } else {
-                                node[setAttribute](att, value);
-                            }
-                            break;
-                        case "src":
-                            if (o.type == "image") {
-                                node.setAttributeNS(o.paper.xlink, "href", value);
-                            }
-                            break;
-                        case "stroke-width":
-                            node.style.strokeWidth = value;
-                            // Need following line for Firefox
-                            node[setAttribute](att, value);
-                            if (attrs["stroke-dasharray"]) {
-                                addDashes(o, attrs["stroke-dasharray"]);
-                            }
-                            break;
-                        case "stroke-dasharray":
-                            addDashes(o, value);
-                            break;
-                        case "translation":
-                            var xy = Str(value)[split](separator);
-                            xy[0] = +xy[0] || 0;
-                            xy[1] = +xy[1] || 0;
-                            if (rotxy) {
-                                rotxy[1] += xy[0];
-                                rotxy[2] += xy[1];
-                            }
-                            translate.call(o, xy[0], xy[1]);
-                            break;
-                        case "scale":
-                            xy = Str(value)[split](separator);
-                            o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, isNaN(toFloat(xy[2])) ? null : +xy[2], isNaN(toFloat(xy[3])) ? null : +xy[3]);
-                            break;
-                        case fillString:
-                            var isURL = Str(value).match(ISURL);
-                            if (isURL) {
-                                el = $("pattern");
-                                var ig = $("image");
-                                el.id = createUUID();
-                                $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1});
-                                $(ig, {x: 0, y: 0});
-                                ig.setAttributeNS(o.paper.xlink, "href", isURL[1]);
-                                el[appendChild](ig);
- 
-                                var img = doc.createElement("img");
-                                img.style.cssText = "position:absolute;left:-9999em;top-9999em";
-                                img.onload = function () {
-                                    $(el, {width: this.offsetWidth, height: this.offsetHeight});
-                                    $(ig, {width: this.offsetWidth, height: this.offsetHeight});
-                                    doc.body.removeChild(this);
-                                    o.paper.safari();
-                                };
-                                doc.body[appendChild](img);
-                                img.src = isURL[1];
-                                o.paper.defs[appendChild](el);
-                                node.style.fill = "url(#" + el.id + ")";
-                                $(node, {fill: "url(#" + el.id + ")"});
-                                o.pattern = el;
-                                o.pattern && updatePosition(o);
-                                break;
-                            }
-                            var clr = R.getRGB(value);
-                            if (!clr.error) {
-                                delete params.gradient;
-                                delete attrs.gradient;
-                                !R.is(attrs.opacity, "undefined") &&
-                                    R.is(params.opacity, "undefined") &&
-                                    $(node, {opacity: attrs.opacity});
-                                !R.is(attrs["fill-opacity"], "undefined") &&
-                                    R.is(params["fill-opacity"], "undefined") &&
-                                    $(node, {"fill-opacity": attrs["fill-opacity"]});
-                            } else if ((({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper)) {
-                                attrs.gradient = value;
-                                attrs.fill = "none";
-                                break;
-                            }
-                            clr[has]("opacity") && $(node, {"fill-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
-                        case "stroke":
-                            clr = R.getRGB(value);
-                            node[setAttribute](att, clr.hex);
-                            att == "stroke" && clr[has]("opacity") && $(node, {"stroke-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
-                            break;
-                        case "gradient":
-                            (({circle: 1, ellipse: 1})[has](o.type) || Str(value).charAt() != "r") && addGradientFill(node, value, o.paper);
-                            break;
-                        case "opacity":
-                            if (attrs.gradient && !attrs[has]("stroke-opacity")) {
-                                $(node, {"stroke-opacity": value > 1 ? value / 100 : value});
-                            }
-                            // fall
-                        case "fill-opacity":
-                            if (attrs.gradient) {
-                                var gradient = doc.getElementById(node.getAttribute(fillString)[rp](/^url\(#|\)$/g, E));
-                                if (gradient) {
-                                    var stops = gradient.getElementsByTagName("stop");
-                                    stops[stops[length] - 1][setAttribute]("stop-opacity", value);
-                                }
-                                break;
-                            }
-                        default:
-                            att == "font-size" && (value = toInt(value, 10) + "px");
-                            var cssrule = att[rp](/(\-.)/g, function (w) {
-                                return upperCase.call(w.substring(1));
-                            });
-                            node.style[cssrule] = value;
-                            // Need following line for Firefox
-                            node[setAttribute](att, value);
-                            break;
-                    }
-                }
-            }
-            
-            tuneText(o, params);
-            if (rotxy) {
-                o.rotate(rotxy.join(S));
-            } else {
-                toFloat(rot) && o.rotate(rot, true);
-            }
-        };
-        var leading = 1.2,
-        tuneText = function (el, params) {
-            if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) {
-                return;
-            }
-            var a = el.attrs,
-                node = el.node,
-                fontSize = node.firstChild ? toInt(doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10;
- 
-            if (params[has]("text")) {
-                a.text = params.text;
-                while (node.firstChild) {
-                    node.removeChild(node.firstChild);
-                }
-                var texts = Str(params.text)[split]("\n");
-                for (var i = 0, ii = texts[length]; i < ii; i++) if (texts[i]) {
-                    var tspan = $("tspan");
-                    i && $(tspan, {dy: fontSize * leading, x: a.x});
-                    tspan[appendChild](doc.createTextNode(texts[i]));
-                    node[appendChild](tspan);
-                }
-            } else {
-                texts = node.getElementsByTagName("tspan");
-                for (i = 0, ii = texts[length]; i < ii; i++) {
-                    i && $(texts[i], {dy: fontSize * leading, x: a.x});
-                }
-            }
-            $(node, {y: a.y});
-            var bb = el.getBBox(),
-                dif = a.y - (bb.y + bb.height / 2);
-            dif && R.is(dif, "finite") && $(node, {y: a.y + dif});
-        },
-        Element = function (node, svg) {
-            var X = 0,
-                Y = 0;
-            this[0] = node;
-            this.id = R._oid++;
-            this.node = node;
-            node.raphael = this;
-            this.paper = svg;
-            this.attrs = this.attrs || {};
-            this.transformations = []; // rotate, translate, scale
-            this._ = {
-                tx: 0,
-                ty: 0,
-                rt: {deg: 0, cx: 0, cy: 0},
-                sx: 1,
-                sy: 1
-            };
-            !svg.bottom && (svg.bottom = this);
-            this.prev = svg.top;
-            svg.top && (svg.top.next = this);
-            svg.top = this;
-            this.next = null;
-        };
-        var elproto = Element[proto];
-        Element[proto].rotate = function (deg, cx, cy) {
-            if (this.removed) {
-                return this;
-            }
-            if (deg == null) {
-                if (this._.rt.cx) {
-                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
-                }
-                return this._.rt.deg;
-            }
-            var bbox = this.getBBox();
-            deg = Str(deg)[split](separator);
-            if (deg[length] - 1) {
-                cx = toFloat(deg[1]);
-                cy = toFloat(deg[2]);
-            }
-            deg = toFloat(deg[0]);
-            if (cx != null && cx !== false) {
-                this._.rt.deg = deg;
-            } else {
-                this._.rt.deg += deg;
-            }
-            (cy == null) && (cx = null);
-            this._.rt.cx = cx;
-            this._.rt.cy = cy;
-            cx = cx == null ? bbox.x + bbox.width / 2 : cx;
-            cy = cy == null ? bbox.y + bbox.height / 2 : cy;
-            if (this._.rt.deg) {
-                this.transformations[0] = R.format("rotate({0} {1} {2})", this._.rt.deg, cx, cy);
-                this.clip && $(this.clip, {transform: R.format("rotate({0} {1} {2})", -this._.rt.deg, cx, cy)});
-            } else {
-                this.transformations[0] = E;
-                this.clip && $(this.clip, {transform: E});
-            }
-            $(this.node, {transform: this.transformations[join](S)});
-            return this;
-        };
-        Element[proto].hide = function () {
-            !this.removed && (this.node.style.display = "none");
-            return this;
-        };
-        Element[proto].show = function () {
-            !this.removed && (this.node.style.display = "");
-            return this;
-        };
-        Element[proto].remove = function () {
-            if (this.removed) {
-                return;
-            }
-            tear(this, this.paper);
-            this.node.parentNode.removeChild(this.node);
-            for (var i in this) {
-                delete this[i];
-            }
-            this.removed = true;
-        };
-        Element[proto].getBBox = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (this.type == "path") {
-                return pathDimensions(this.attrs.path);
-            }
-            if (this.node.style.display == "none") {
-                this.show();
-                var hide = true;
-            }
-            var bbox = {};
-            try {
-                bbox = this.node.getBBox();
-            } catch(e) {
-                // Firefox 3.0.x plays badly here
-            } finally {
-                bbox = bbox || {};
-            }
-            if (this.type == "text") {
-                bbox = {x: bbox.x, y: Infinity, width: 0, height: 0};
-                for (var i = 0, ii = this.node.getNumberOfChars(); i < ii; i++) {
-                    var bb = this.node.getExtentOfChar(i);
-                    (bb.y < bbox.y) && (bbox.y = bb.y);
-                    (bb.y + bb.height - bbox.y > bbox.height) && (bbox.height = bb.y + bb.height - bbox.y);
-                    (bb.x + bb.width - bbox.x > bbox.width) && (bbox.width = bb.x + bb.width - bbox.x);
-                }
-            }
-            hide && this.hide();
-            return bbox;
-        };
-        Element[proto].attr = function (name, value) {
-            if (this.removed) {
-                return this;
-            }
-            if (name == null) {
-                var res = {};
-                for (var i in this.attrs) if (this.attrs[has](i)) {
-                    res[i] = this.attrs[i];
-                }
-                this._.rt.deg && (res.rotation = this.rotate());
-                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
-                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
-                return res;
-            }
-            if (value == null && R.is(name, string)) {
-                if (name == "translation") {
-                    return translate.call(this);
-                }
-                if (name == "rotation") {
-                    return this.rotate();
-                }
-                if (name == "scale") {
-                    return this.scale();
-                }
-                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
-                    return this.attrs.gradient;
-                }
-                return this.attrs[name];
-            }
-            if (value == null && R.is(name, array)) {
-                var values = {};
-                for (var j = 0, jj = name.length; j < jj; j++) {
-                    values[name[j]] = this.attr(name[j]);
-                }
-                return values;
-            }
-            if (value != null) {
-                var params = {};
-                params[name] = value;
-            } else if (name != null && R.is(name, "object")) {
-                params = name;
-            }
-            for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
-                var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
-                this.attrs[key] = params[key];
-                for (var subkey in par) if (par[has](subkey)) {
-                    params[subkey] = par[subkey];
-                }
-            }
-            setFillAndStroke(this, params);
-            return this;
-        };
-        Element[proto].toFront = function () {
-            if (this.removed) {
-                return this;
-            }
-            this.node.parentNode[appendChild](this.node);
-            var svg = this.paper;
-            svg.top != this && tofront(this, svg);
-            return this;
-        };
-        Element[proto].toBack = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (this.node.parentNode.firstChild != this.node) {
-                this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
-                toback(this, this.paper);
-                var svg = this.paper;
-            }
-            return this;
-        };
-        Element[proto].insertAfter = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            var node = element.node || element[element.length - 1].node;
-            if (node.nextSibling) {
-                node.parentNode.insertBefore(this.node, node.nextSibling);
-            } else {
-                node.parentNode[appendChild](this.node);
-            }
-            insertafter(this, element, this.paper);
-            return this;
-        };
-        Element[proto].insertBefore = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            var node = element.node || element[0].node;
-            node.parentNode.insertBefore(this.node, node);
-            insertbefore(this, element, this.paper);
-            return this;
-        };
-        Element[proto].blur = function (size) {
-            // Experimental. No Safari support. Use it on your own risk.
-            var t = this;
-            if (+size !== 0) {
-                var fltr = $("filter"),
-                    blur = $("feGaussianBlur");
-                t.attrs.blur = size;
-                fltr.id = createUUID();
-                $(blur, {stdDeviation: +size || 1.5});
-                fltr.appendChild(blur);
-                t.paper.defs.appendChild(fltr);
-                t._blur = fltr;
-                $(t.node, {filter: "url(#" + fltr.id + ")"});
-            } else {
-                if (t._blur) {
-                    t._blur.parentNode.removeChild(t._blur);
-                    delete t._blur;
-                    delete t.attrs.blur;
-                }
-                t.node.removeAttribute("filter");
-            }
-        };
-        var theCircle = function (svg, x, y, r) {
-            var el = $("circle");
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {cx: x, cy: y, r: r, fill: "none", stroke: "#000"};
-            res.type = "circle";
-            $(el, res.attrs);
-            return res;
-        },
-        theRect = function (svg, x, y, w, h, r) {
-            var el = $("rect");
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000"};
-            res.type = "rect";
-            $(el, res.attrs);
-            return res;
-        },
-        theEllipse = function (svg, x, y, rx, ry) {
-            var el = $("ellipse");
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: "none", stroke: "#000"};
-            res.type = "ellipse";
-            $(el, res.attrs);
-            return res;
-        },
-        theImage = function (svg, src, x, y, w, h) {
-            var el = $("image");
-            $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: "none"});
-            el.setAttributeNS(svg.xlink, "href", src);
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {x: x, y: y, width: w, height: h, src: src};
-            res.type = "image";
-            return res;
-        },
-        theText = function (svg, x, y, text) {
-            var el = $("text");
-            $(el, {x: x, y: y, "text-anchor": "middle"});
-            svg.canvas && svg.canvas[appendChild](el);
-            var res = new Element(el, svg);
-            res.attrs = {x: x, y: y, "text-anchor": "middle", text: text, font: availableAttrs.font, stroke: "none", fill: "#000"};
-            res.type = "text";
-            setFillAndStroke(res, res.attrs);
-            return res;
-        },
-        setSize = function (width, height) {
-            this.width = width || this.width;
-            this.height = height || this.height;
-            this.canvas[setAttribute]("width", this.width);
-            this.canvas[setAttribute]("height", this.height);
-            return this;
-        },
-        create = function () {
-            var con = getContainer[apply](0, arguments),
-                container = con && con.container,
-                x = con.x,
-                y = con.y,
-                width = con.width,
-                height = con.height;
-            if (!container) {
-                throw new Error("SVG container not found.");
-            }
-            var cnvs = $("svg");
-            x = x || 0;
-            y = y || 0;
-            width = width || 512;
-            height = height || 342;
-            $(cnvs, {
-                xmlns: "http://www.w3.org/2000/svg",
-                version: 1.1,
-                width: width,
-                height: height
-            });
-            if (container == 1) {
-                cnvs.style.cssText = "position:absolute;left:" + x + "px;top:" + y + "px";
-                doc.body[appendChild](cnvs);
-            } else {
-                if (container.firstChild) {
-                    container.insertBefore(cnvs, container.firstChild);
-                } else {
-                    container[appendChild](cnvs);
-                }
-            }
-            container = new Paper;
-            container.width = width;
-            container.height = height;
-            container.canvas = cnvs;
-            plugins.call(container, container, R.fn);
-            container.clear();
-            return container;
-        };
-        paperproto.clear = function () {
-            var c = this.canvas;
-            while (c.firstChild) {
-                c.removeChild(c.firstChild);
-            }
-            this.bottom = this.top = null;
-            (this.desc = $("desc"))[appendChild](doc.createTextNode("Created with Rapha\xebl"));
-            c[appendChild](this.desc);
-            c[appendChild](this.defs = $("defs"));
-        };
-        paperproto.remove = function () {
-            this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);
-            for (var i in this) {
-                this[i] = removed(i);
-            }
-        };
-    }
-
-    // VML
-    if (R.vml) {
-        var map = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"},
-            bites = /([clmz]),?([^clmz]*)/gi,
-            blurregexp = / progid:\S+Blur\([^\)]+\)/g,
-            val = /-?[^,\s-]+/g,
-            coordsize = 1e3 + S + 1e3,
-            zoom = 10,
-            pathlike = {path: 1, rect: 1},
-            path2vml = function (path) {
-                var total =  /[ahqstv]/ig,
-                    command = pathToAbsolute;
-                Str(path).match(total) && (command = path2curve);
-                total = /[clmz]/g;
-                if (command == pathToAbsolute && !Str(path).match(total)) {
-                    var res = Str(path)[rp](bites, function (all, command, args) {
-                        var vals = [],
-                            isMove = lowerCase.call(command) == "m",
-                            res = map[command];
-                        args[rp](val, function (value) {
-                            if (isMove && vals[length] == 2) {
-                                res += vals + map[command == "m" ? "l" : "L"];
-                                vals = [];
-                            }
-                            vals[push](round(value * zoom));
-                        });
-                        return res + vals;
-                    });
-                    return res;
-                }
-                var pa = command(path), p, r;
-                res = [];
-                for (var i = 0, ii = pa[length]; i < ii; i++) {
-                    p = pa[i];
-                    r = lowerCase.call(pa[i][0]);
-                    r == "z" && (r = "x");
-                    for (var j = 1, jj = p[length]; j < jj; j++) {
-                        r += round(p[j] * zoom) + (j != jj - 1 ? "," : E);
-                    }
-                    res[push](r);
-                }
-                return res[join](S);
-            };
-        
-        R[toString] = function () {
-            return  "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version;
-        };
-        thePath = function (pathString, vml) {
-            var g = createNode("group");
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = vml.coordsize;
-            g.coordorigin = vml.coordorigin;
-            var el = createNode("shape"), ol = el.style;
-            ol.width = vml.width + "px";
-            ol.height = vml.height + "px";
-            el.coordsize = coordsize;
-            el.coordorigin = vml.coordorigin;
-            g[appendChild](el);
-            var p = new Element(el, g, vml),
-                attr = {fill: "none", stroke: "#000"};
-            pathString && (attr.path = pathString);
-            p.type = "path";
-            p.path = [];
-            p.Path = E;
-            setFillAndStroke(p, attr);
-            vml.canvas[appendChild](g);
-            return p;
-        };
-        setFillAndStroke = function (o, params) {
-            o.attrs = o.attrs || {};
-            var node = o.node,
-                a = o.attrs,
-                s = node.style,
-                xy,
-                newpath = (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.r != a.r) && o.type == "rect",
-                res = o;
-
-            for (var par in params) if (params[has](par)) {
-                a[par] = params[par];
-            }
-            if (newpath) {
-                a.path = rectPath(a.x, a.y, a.width, a.height, a.r);
-                o.X = a.x;
-                o.Y = a.y;
-                o.W = a.width;
-                o.H = a.height;
-            }
-            params.href && (node.href = params.href);
-            params.title && (node.title = params.title);
-            params.target && (node.target = params.target);
-            params.cursor && (s.cursor = params.cursor);
-            "blur" in params && o.blur(params.blur);
-            if (params.path && o.type == "path" || newpath) {
-                node.path = path2vml(a.path);
-            }
-            if (params.rotation != null) {
-                o.rotate(params.rotation, true);
-            }
-            if (params.translation) {
-                xy = Str(params.translation)[split](separator);
-                translate.call(o, xy[0], xy[1]);
-                if (o._.rt.cx != null) {
-                    o._.rt.cx +=+ xy[0];
-                    o._.rt.cy +=+ xy[1];
-                    o.setBox(o.attrs, xy[0], xy[1]);
-                }
-            }
-            if (params.scale) {
-                xy = Str(params.scale)[split](separator);
-                o.scale(+xy[0] || 1, +xy[1] || +xy[0] || 1, +xy[2] || null, +xy[3] || null);
-            }
-            if ("clip-rect" in params) {
-                var rect = Str(params["clip-rect"])[split](separator);
-                if (rect[length] == 4) {
-                    rect[2] = +rect[2] + (+rect[0]);
-                    rect[3] = +rect[3] + (+rect[1]);
-                    var div = node.clipRect || doc.createElement("div"),
-                        dstyle = div.style,
-                        group = node.parentNode;
-                    dstyle.clip = R.format("rect({1}px {2}px {3}px {0}px)", rect);
-                    if (!node.clipRect) {
-                        dstyle.position = "absolute";
-                        dstyle.top = 0;
-                        dstyle.left = 0;
-                        dstyle.width = o.paper.width + "px";
-                        dstyle.height = o.paper.height + "px";
-                        group.parentNode.insertBefore(div, group);
-                        div[appendChild](group);
-                        node.clipRect = div;
-                    }
-                }
-                if (!params["clip-rect"]) {
-                    node.clipRect && (node.clipRect.style.clip = E);
-                }
-            }
-            if (o.type == "image" && params.src) {
-                node.src = params.src;
-            }
-            if (o.type == "image" && params.opacity) {
-                node.filterOpacity = ms + ".Alpha(opacity=" + (params.opacity * 100) + ")";
-                s.filter = (node.filterMatrix || E) + (node.filterOpacity || E);
-            }
-            params.font && (s.font = params.font);
-            params["font-family"] && (s.fontFamily = '"' + params["font-family"][split](",")[0][rp](/^['"]+|['"]+$/g, E) + '"');
-            params["font-size"] && (s.fontSize = params["font-size"]);
-            params["font-weight"] && (s.fontWeight = params["font-weight"]);
-            params["font-style"] && (s.fontStyle = params["font-style"]);
-            if (params.opacity != null || 
-                params["stroke-width"] != null ||
-                params.fill != null ||
-                params.stroke != null ||
-                params["stroke-width"] != null ||
-                params["stroke-opacity"] != null ||
-                params["fill-opacity"] != null ||
-                params["stroke-dasharray"] != null ||
-                params["stroke-miterlimit"] != null ||
-                params["stroke-linejoin"] != null ||
-                params["stroke-linecap"] != null) {
-                node = o.shape || node;
-                var fill = (node.getElementsByTagName(fillString) && node.getElementsByTagName(fillString)[0]),
-                    newfill = false;
-                !fill && (newfill = fill = createNode(fillString));
-                if ("fill-opacity" in params || "opacity" in params) {
-                    var opacity = ((+a["fill-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);
-                    opacity = mmin(mmax(opacity, 0), 1);
-                    fill.opacity = opacity;
-                }
-                params.fill && (fill.on = true);
-                if (fill.on == null || params.fill == "none") {
-                    fill.on = false;
-                }
-                if (fill.on && params.fill) {
-                    var isURL = params.fill.match(ISURL);
-                    if (isURL) {
-                        fill.src = isURL[1];
-                        fill.type = "tile";
-                    } else {
-                        fill.color = R.getRGB(params.fill).hex;
-                        fill.src = E;
-                        fill.type = "solid";
-                        if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != "r") && addGradientFill(res, params.fill)) {
-                            a.fill = "none";
-                            a.gradient = params.fill;
-                        }
-                    }
-                }
-                newfill && node[appendChild](fill);
-                var stroke = (node.getElementsByTagName("stroke") && node.getElementsByTagName("stroke")[0]),
-                newstroke = false;
-                !stroke && (newstroke = stroke = createNode("stroke"));
-                if ((params.stroke && params.stroke != "none") ||
-                    params["stroke-width"] ||
-                    params["stroke-opacity"] != null ||
-                    params["stroke-dasharray"] ||
-                    params["stroke-miterlimit"] ||
-                    params["stroke-linejoin"] ||
-                    params["stroke-linecap"]) {
-                    stroke.on = true;
-                }
-                (params.stroke == "none" || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false);
-                var strokeColor = R.getRGB(params.stroke);
-                stroke.on && params.stroke && (stroke.color = strokeColor.hex);
-                opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);
-                var width = (toFloat(params["stroke-width"]) || 1) * .75;
-                opacity = mmin(mmax(opacity, 0), 1);
-                params["stroke-width"] == null && (width = a["stroke-width"]);
-                params["stroke-width"] && (stroke.weight = width);
-                width && width < 1 && (opacity *= width) && (stroke.weight = 1);
-                stroke.opacity = opacity;
-                
-                params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter");
-                stroke.miterlimit = params["stroke-miterlimit"] || 8;
-                params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round");
-                if (params["stroke-dasharray"]) {
-                    var dasharray = {
-                        "-": "shortdash",
-                        ".": "shortdot",
-                        "-.": "shortdashdot",
-                        "-..": "shortdashdotdot",
-                        ". ": "dot",
-                        "- ": "dash",
-                        "--": "longdash",
-                        "- .": "dashdot",
-                        "--.": "longdashdot",
-                        "--..": "longdashdotdot"
-                    };
-                    stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E;
-                }
-                newstroke && node[appendChild](stroke);
-            }
-            if (res.type == "text") {
-                s = res.paper.span.style;
-                a.font && (s.font = a.font);
-                a["font-family"] && (s.fontFamily = a["font-family"]);
-                a["font-size"] && (s.fontSize = a["font-size"]);
-                a["font-weight"] && (s.fontWeight = a["font-weight"]);
-                a["font-style"] && (s.fontStyle = a["font-style"]);
-                res.node.string && (res.paper.span.innerHTML = Str(res.node.string)[rp](/</g, "&#60;")[rp](/&/g, "&#38;")[rp](/\n/g, "<br>"));
-                res.W = a.w = res.paper.span.offsetWidth;
-                res.H = a.h = res.paper.span.offsetHeight;
-                res.X = a.x;
-                res.Y = a.y + round(res.H / 2);
- 
-                // text-anchor emulationm
-                switch (a["text-anchor"]) {
-                    case "start":
-                        res.node.style["v-text-align"] = "left";
-                        res.bbx = round(res.W / 2);
-                    break;
-                    case "end":
-                        res.node.style["v-text-align"] = "right";
-                        res.bbx = -round(res.W / 2);
-                    break;
-                    default:
-                        res.node.style["v-text-align"] = "center";
-                    break;
-                }
-            }
-        };
-        addGradientFill = function (o, gradient) {
-            o.attrs = o.attrs || {};
-            var attrs = o.attrs,
-                fill,
-                type = "linear",
-                fxfy = ".5 .5";
-            o.attrs.gradient = gradient;
-            gradient = Str(gradient)[rp](radial_gradient, function (all, fx, fy) {
-                type = "radial";
-                if (fx && fy) {
-                    fx = toFloat(fx);
-                    fy = toFloat(fy);
-                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);
-                    fxfy = fx + S + fy;
-                }
-                return E;
-            });
-            gradient = gradient[split](/\s*\-\s*/);
-            if (type == "linear") {
-                var angle = gradient.shift();
-                angle = -toFloat(angle);
-                if (isNaN(angle)) {
-                    return null;
-                }
-            }
-            var dots = parseDots(gradient);
-            if (!dots) {
-                return null;
-            }
-            o = o.shape || o.node;
-            fill = o.getElementsByTagName(fillString)[0] || createNode(fillString);
-            !fill.parentNode && o.appendChild(fill);
-            if (dots[length]) {
-                fill.on = true;
-                fill.method = "none";
-                fill.color = dots[0].color;
-                fill.color2 = dots[dots[length] - 1].color;
-                var clrs = [];
-                for (var i = 0, ii = dots[length]; i < ii; i++) {
-                    dots[i].offset && clrs[push](dots[i].offset + S + dots[i].color);
-                }
-                fill.colors && (fill.colors.value = clrs[length] ? clrs[join]() : "0% " + fill.color);
-                if (type == "radial") {
-                    fill.type = "gradientradial";
-                    fill.focus = "100%";
-                    fill.focussize = fxfy;
-                    fill.focusposition = fxfy;
-                } else {
-                    fill.type = "gradient";
-                    fill.angle = (270 - angle) % 360;
-                }
-            }
-            return 1;
-        };
-        Element = function (node, group, vml) {
-            var Rotation = 0,
-                RotX = 0,
-                RotY = 0,
-                Scale = 1;
-            this[0] = node;
-            this.id = R._oid++;
-            this.node = node;
-            node.raphael = this;
-            this.X = 0;
-            this.Y = 0;
-            this.attrs = {};
-            this.Group = group;
-            this.paper = vml;
-            this._ = {
-                tx: 0,
-                ty: 0,
-                rt: {deg:0},
-                sx: 1,
-                sy: 1
-            };
-            !vml.bottom && (vml.bottom = this);
-            this.prev = vml.top;
-            vml.top && (vml.top.next = this);
-            vml.top = this;
-            this.next = null;
-        };
-        elproto = Element[proto];
-        elproto.rotate = function (deg, cx, cy) {
-            if (this.removed) {
-                return this;
-            }
-            if (deg == null) {
-                if (this._.rt.cx) {
-                    return [this._.rt.deg, this._.rt.cx, this._.rt.cy][join](S);
-                }
-                return this._.rt.deg;
-            }
-            deg = Str(deg)[split](separator);
-            if (deg[length] - 1) {
-                cx = toFloat(deg[1]);
-                cy = toFloat(deg[2]);
-            }
-            deg = toFloat(deg[0]);
-            if (cx != null) {
-                this._.rt.deg = deg;
-            } else {
-                this._.rt.deg += deg;
-            }
-            cy == null && (cx = null);
-            this._.rt.cx = cx;
-            this._.rt.cy = cy;
-            this.setBox(this.attrs, cx, cy);
-            this.Group.style.rotation = this._.rt.deg;
-            // gradient fix for rotation. TODO
-            // var fill = (this.shape || this.node).getElementsByTagName(fillString);
-            // fill = fill[0] || {};
-            // var b = ((360 - this._.rt.deg) - 270) % 360;
-            // !R.is(fill.angle, "undefined") && (fill.angle = b);
-            return this;
-        };
-        elproto.setBox = function (params, cx, cy) {
-            if (this.removed) {
-                return this;
-            }
-            var gs = this.Group.style,
-                os = (this.shape && this.shape.style) || this.node.style;
-            params = params || {};
-            for (var i in params) if (params[has](i)) {
-                this.attrs[i] = params[i];
-            }
-            cx = cx || this._.rt.cx;
-            cy = cy || this._.rt.cy;
-            var attr = this.attrs,
-                x,
-                y,
-                w,
-                h;
-            switch (this.type) {
-                case "circle":
-                    x = attr.cx - attr.r;
-                    y = attr.cy - attr.r;
-                    w = h = attr.r * 2;
-                    break;
-                case "ellipse":
-                    x = attr.cx - attr.rx;
-                    y = attr.cy - attr.ry;
-                    w = attr.rx * 2;
-                    h = attr.ry * 2;
-                    break;
-                case "image":
-                    x = +attr.x;
-                    y = +attr.y;
-                    w = attr.width || 0;
-                    h = attr.height || 0;
-                    break;
-                case "text":
-                    this.textpath.v = ["m", round(attr.x), ", ", round(attr.y - 2), "l", round(attr.x) + 1, ", ", round(attr.y - 2)][join](E);
-                    x = attr.x - round(this.W / 2);
-                    y = attr.y - this.H / 2;
-                    w = this.W;
-                    h = this.H;
-                    break;
-                case "rect":
-                case "path":
-                    if (!this.attrs.path) {
-                        x = 0;
-                        y = 0;
-                        w = this.paper.width;
-                        h = this.paper.height;
-                    } else {
-                        var dim = pathDimensions(this.attrs.path);
-                        x = dim.x;
-                        y = dim.y;
-                        w = dim.width;
-                        h = dim.height;
-                    }
-                    break;
-                default:
-                    x = 0;
-                    y = 0;
-                    w = this.paper.width;
-                    h = this.paper.height;
-                    break;
-            }
-            cx = (cx == null) ? x + w / 2 : cx;
-            cy = (cy == null) ? y + h / 2 : cy;
-            var left = cx - this.paper.width / 2,
-                top = cy - this.paper.height / 2, t;
-            gs.left != (t = left + "px") && (gs.left = t);
-            gs.top != (t = top + "px") && (gs.top = t);
-            this.X = pathlike[has](this.type) ? -left : x;
-            this.Y = pathlike[has](this.type) ? -top : y;
-            this.W = w;
-            this.H = h;
-            if (pathlike[has](this.type)) {
-                os.left != (t = -left * zoom + "px") && (os.left = t);
-                os.top != (t = -top * zoom + "px") && (os.top = t);
-            } else if (this.type == "text") {
-                os.left != (t = -left + "px") && (os.left = t);
-                os.top != (t = -top + "px") && (os.top = t);
-            } else {
-                gs.width != (t = this.paper.width + "px") && (gs.width = t);
-                gs.height != (t = this.paper.height + "px") && (gs.height = t);
-                os.left != (t = x - left + "px") && (os.left = t);
-                os.top != (t = y - top + "px") && (os.top = t);
-                os.width != (t = w + "px") && (os.width = t);
-                os.height != (t = h + "px") && (os.height = t);
-            }
-        };
-        elproto.hide = function () {
-            !this.removed && (this.Group.style.display = "none");
-            return this;
-        };
-        elproto.show = function () {
-            !this.removed && (this.Group.style.display = "block");
-            return this;
-        };
-        elproto.getBBox = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (pathlike[has](this.type)) {
-                return pathDimensions(this.attrs.path);
-            }
-            return {
-                x: this.X + (this.bbx || 0),
-                y: this.Y,
-                width: this.W,
-                height: this.H
-            };
-        };
-        elproto.remove = function () {
-            if (this.removed) {
-                return;
-            }
-            tear(this, this.paper);
-            this.node.parentNode.removeChild(this.node);
-            this.Group.parentNode.removeChild(this.Group);
-            this.shape && this.shape.parentNode.removeChild(this.shape);
-            for (var i in this) {
-                delete this[i];
-            }
-            this.removed = true;
-        };
-        elproto.attr = function (name, value) {
-            if (this.removed) {
-                return this;
-            }
-            if (name == null) {
-                var res = {};
-                for (var i in this.attrs) if (this.attrs[has](i)) {
-                    res[i] = this.attrs[i];
-                }
-                this._.rt.deg && (res.rotation = this.rotate());
-                (this._.sx != 1 || this._.sy != 1) && (res.scale = this.scale());
-                res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
-                return res;
-            }
-            if (value == null && R.is(name, "string")) {
-                if (name == "translation") {
-                    return translate.call(this);
-                }
-                if (name == "rotation") {
-                    return this.rotate();
-                }
-                if (name == "scale") {
-                    return this.scale();
-                }
-                if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
-                    return this.attrs.gradient;
-                }
-                return this.attrs[name];
-            }
-            if (this.attrs && value == null && R.is(name, array)) {
-                var ii, values = {};
-                for (i = 0, ii = name[length]; i < ii; i++) {
-                    values[name[i]] = this.attr(name[i]);
-                }
-                return values;
-            }
-            var params;
-            if (value != null) {
-                params = {};
-                params[name] = value;
-            }
-            value == null && R.is(name, "object") && (params = name);
-            if (params) {
-                for (var key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
-                    var par = this.paper.customAttributes[key].apply(this, [][concat](params[key]));
-                    this.attrs[key] = params[key];
-                    for (var subkey in par) if (par[has](subkey)) {
-                        params[subkey] = par[subkey];
-                    }
-                }
-                if (params.text && this.type == "text") {
-                    this.node.string = params.text;
-                }
-                setFillAndStroke(this, params);
-                if (params.gradient && (({circle: 1, ellipse: 1})[has](this.type) || Str(params.gradient).charAt() != "r")) {
-                    addGradientFill(this, params.gradient);
-                }
-                (!pathlike[has](this.type) || this._.rt.deg) && this.setBox(this.attrs);
-            }
-            return this;
-        };
-        elproto.toFront = function () {
-            !this.removed && this.Group.parentNode[appendChild](this.Group);
-            this.paper.top != this && tofront(this, this.paper);
-            return this;
-        };
-        elproto.toBack = function () {
-            if (this.removed) {
-                return this;
-            }
-            if (this.Group.parentNode.firstChild != this.Group) {
-                this.Group.parentNode.insertBefore(this.Group, this.Group.parentNode.firstChild);
-                toback(this, this.paper);
-            }
-            return this;
-        };
-        elproto.insertAfter = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            if (element.constructor == Set) {
-                element = element[element.length - 1];
-            }
-            if (element.Group.nextSibling) {
-                element.Group.parentNode.insertBefore(this.Group, element.Group.nextSibling);
-            } else {
-                element.Group.parentNode[appendChild](this.Group);
-            }
-            insertafter(this, element, this.paper);
-            return this;
-        };
-        elproto.insertBefore = function (element) {
-            if (this.removed) {
-                return this;
-            }
-            if (element.constructor == Set) {
-                element = element[0];
-            }
-            element.Group.parentNode.insertBefore(this.Group, element.Group);
-            insertbefore(this, element, this.paper);
-            return this;
-        };
-        elproto.blur = function (size) {
-            var s = this.node.runtimeStyle,
-                f = s.filter;
-            f = f.replace(blurregexp, E);
-            if (+size !== 0) {
-                this.attrs.blur = size;
-                s.filter = f + S + ms + ".Blur(pixelradius=" + (+size || 1.5) + ")";
-                s.margin = R.format("-{0}px 0 0 -{0}px", round(+size || 1.5));
-            } else {
-                s.filter = f;
-                s.margin = 0;
-                delete this.attrs.blur;
-            }
-        };
- 
-        theCircle = function (vml, x, y, r) {
-            var g = createNode("group"),
-                o = createNode("oval"),
-                ol = o.style;
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            g[appendChild](o);
-            var res = new Element(o, g, vml);
-            res.type = "circle";
-            setFillAndStroke(res, {stroke: "#000", fill: "none"});
-            res.attrs.cx = x;
-            res.attrs.cy = y;
-            res.attrs.r = r;
-            res.setBox({x: x - r, y: y - r, width: r * 2, height: r * 2});
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        function rectPath(x, y, w, h, r) {
-            if (r) {
-                return R.format("M{0},{1}l{2},0a{3},{3},0,0,1,{3},{3}l0,{5}a{3},{3},0,0,1,{4},{3}l{6},0a{3},{3},0,0,1,{4},{4}l0,{7}a{3},{3},0,0,1,{3},{4}z", x + r, y, w - r * 2, r, -r, h - r * 2, r * 2 - w, r * 2 - h);
-            } else {
-                return R.format("M{0},{1}l{2},0,0,{3},{4},0z", x, y, w, h, -w);
-            }
-        }
-        theRect = function (vml, x, y, w, h, r) {
-            var path = rectPath(x, y, w, h, r),
-                res = vml.path(path),
-                a = res.attrs;
-            res.X = a.x = x;
-            res.Y = a.y = y;
-            res.W = a.width = w;
-            res.H = a.height = h;
-            a.r = r;
-            a.path = path;
-            res.type = "rect";
-            return res;
-        };
-        theEllipse = function (vml, x, y, rx, ry) {
-            var g = createNode("group"),
-                o = createNode("oval"),
-                ol = o.style;
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            g[appendChild](o);
-            var res = new Element(o, g, vml);
-            res.type = "ellipse";
-            setFillAndStroke(res, {stroke: "#000"});
-            res.attrs.cx = x;
-            res.attrs.cy = y;
-            res.attrs.rx = rx;
-            res.attrs.ry = ry;
-            res.setBox({x: x - rx, y: y - ry, width: rx * 2, height: ry * 2});
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        theImage = function (vml, src, x, y, w, h) {
-            var g = createNode("group"),
-                o = createNode("image");
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            o.src = src;
-            g[appendChild](o);
-            var res = new Element(o, g, vml);
-            res.type = "image";
-            res.attrs.src = src;
-            res.attrs.x = x;
-            res.attrs.y = y;
-            res.attrs.w = w;
-            res.attrs.h = h;
-            res.setBox({x: x, y: y, width: w, height: h});
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        theText = function (vml, x, y, text) {
-            var g = createNode("group"),
-                el = createNode("shape"),
-                ol = el.style,
-                path = createNode("path"),
-                ps = path.style,
-                o = createNode("textpath");
-            g.style.cssText = "position:absolute;left:0;top:0;width:" + vml.width + "px;height:" + vml.height + "px";
-            g.coordsize = coordsize;
-            g.coordorigin = vml.coordorigin;
-            path.v = R.format("m{0},{1}l{2},{1}", round(x * 10), round(y * 10), round(x * 10) + 1);
-            path.textpathok = true;
-            ol.width = vml.width;
-            ol.height = vml.height;
-            o.string = Str(text);
-            o.on = true;
-            el[appendChild](o);
-            el[appendChild](path);
-            g[appendChild](el);
-            var res = new Element(o, g, vml);
-            res.shape = el;
-            res.textpath = path;
-            res.type = "text";
-            res.attrs.text = text;
-            res.attrs.x = x;
-            res.attrs.y = y;
-            res.attrs.w = 1;
-            res.attrs.h = 1;
-            setFillAndStroke(res, {font: availableAttrs.font, stroke: "none", fill: "#000"});
-            res.setBox();
-            vml.canvas[appendChild](g);
-            return res;
-        };
-        setSize = function (width, height) {
-            var cs = this.canvas.style;
-            width == +width && (width += "px");
-            height == +height && (height += "px");
-            cs.width = width;
-            cs.height = height;
-            cs.clip = "rect(0 " + width + " " + height + " 0)";
-            return this;
-        };
-        var createNode;
-        doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
-        try {
-            !doc.namespaces.rvml && doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
-            createNode = function (tagName) {
-                return doc.createElement('<rvml:' + tagName + ' class="rvml">');
-            };
-        } catch (e) {
-            createNode = function (tagName) {
-                return doc.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
-            };
-        }
-        create = function () {
-            var con = getContainer[apply](0, arguments),
-                container = con.container,
-                height = con.height,
-                s,
-                width = con.width,
-                x = con.x,
-                y = con.y;
-            if (!container) {
-                throw new Error("VML container not found.");
-            }
-            var res = new Paper,
-                c = res.canvas = doc.createElement("div"),
-                cs = c.style;
-            x = x || 0;
-            y = y || 0;
-            width = width || 512;
-            height = height || 342;
-            width == +width && (width += "px");
-            height == +height && (height += "px");
-            res.width = 1e3;
-            res.height = 1e3;
-            res.coordsize = zoom * 1e3 + S + zoom * 1e3;
-            res.coordorigin = "0 0";
-            res.span = doc.createElement("span");
-            res.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
-            c[appendChild](res.span);
-            cs.cssText = R.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", width, height);
-            if (container == 1) {
-                doc.body[appendChild](c);
-                cs.left = x + "px";
-                cs.top = y + "px";
-                cs.position = "absolute";
-            } else {
-                if (container.firstChild) {
-                    container.insertBefore(c, container.firstChild);
-                } else {
-                    container[appendChild](c);
-                }
-            }
-            plugins.call(res, res, R.fn);
-            return res;
-        };
-        paperproto.clear = function () {
-            this.canvas.innerHTML = E;
-            this.span = doc.createElement("span");
-            this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
-            this.canvas[appendChild](this.span);
-            this.bottom = this.top = null;
-        };
-        paperproto.remove = function () {
-            this.canvas.parentNode.removeChild(this.canvas);
-            for (var i in this) {
-                this[i] = removed(i);
-            }
-            return true;
-        };
-    }
- 
-    // rest
-    // WebKit rendering bug workaround method
-    var version = navigator.userAgent.match(/Version\/(.*?)\s/);
-    if ((navigator.vendor == "Apple Computer, Inc.") && (version && version[1] < 4 || navigator.platform.slice(0, 2) == "iP")) {
-        paperproto.safari = function () {
-            var rect = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: "none"});
-            win.setTimeout(function () {rect.remove();});
-        };
-    } else {
-        paperproto.safari = function () {};
-    }
- 
-    // Events
-    var preventDefault = function () {
-        this.returnValue = false;
-    },
-    preventTouch = function () {
-        return this.originalEvent.preventDefault();
-    },
-    stopPropagation = function () {
-        this.cancelBubble = true;
-    },
-    stopTouch = function () {
-        return this.originalEvent.stopPropagation();
-    },
-    addEvent = (function () {
-        if (doc.addEventListener) {
-            return function (obj, type, fn, element) {
-                var realName = supportsTouch && touchMap[type] ? touchMap[type] : type;
-                var f = function (e) {
-                    if (supportsTouch && touchMap[has](type)) {
-                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {
-                            if (e.targetTouches[i].target == obj) {
-                                var olde = e;
-                                e = e.targetTouches[i];
-                                e.originalEvent = olde;
-                                e.preventDefault = preventTouch;
-                                e.stopPropagation = stopTouch;
-                                break;
-                            }
-                        }
-                    }
-                    return fn.call(element, e);
-                };
-                obj.addEventListener(realName, f, false);
-                return function () {
-                    obj.removeEventListener(realName, f, false);
-                    return true;
-                };
-            };
-        } else if (doc.attachEvent) {
-            return function (obj, type, fn, element) {
-                var f = function (e) {
-                    e = e || win.event;
-                    e.preventDefault = e.preventDefault || preventDefault;
-                    e.stopPropagation = e.stopPropagation || stopPropagation;
-                    return fn.call(element, e);
-                };
-                obj.attachEvent("on" + type, f);
-                var detacher = function () {
-                    obj.detachEvent("on" + type, f);
-                    return true;
-                };
-                return detacher;
-            };
-        }
-    })(),
-    drag = [],
-    dragMove = function (e) {
-        var x = e.clientX,
-            y = e.clientY,
-            scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
-            scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft,
-            dragi,
-            j = drag.length;
-        while (j--) {
-            dragi = drag[j];
-            if (supportsTouch) {
-                var i = e.touches.length,
-                    touch;
-                while (i--) {
-                    touch = e.touches[i];
-                    if (touch.identifier == dragi.el._drag.id) {
-                        x = touch.clientX;
-                        y = touch.clientY;
-                        (e.originalEvent ? e.originalEvent : e).preventDefault();
-                        break;
-                    }
-                }
-            } else {
-                e.preventDefault();
-            }
-            x += scrollX;
-            y += scrollY;
-            dragi.move && dragi.move.call(dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);
-        }
-    },
-    dragUp = function (e) {
-        R.unmousemove(dragMove).unmouseup(dragUp);
-        var i = drag.length,
-            dragi;
-        while (i--) {
-            dragi = drag[i];
-            dragi.el._drag = {};
-            dragi.end && dragi.end.call(dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);
-        }
-        drag = [];
-    };
-    for (var i = events[length]; i--;) {
-        (function (eventName) {
-            R[eventName] = Element[proto][eventName] = function (fn, scope) {
-                if (R.is(fn, "function")) {
-                    this.events = this.events || [];
-                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || doc, eventName, fn, scope || this)});
-                }
-                return this;
-            };
-            R["un" + eventName] = Element[proto]["un" + eventName] = function (fn) {
-                var events = this.events,
-                    l = events[length];
-                while (l--) if (events[l].name == eventName && events[l].f == fn) {
-                    events[l].unbind();
-                    events.splice(l, 1);
-                    !events.length && delete this.events;
-                    return this;
-                }
-                return this;
-            };
-        })(events[i]);
-    }
-    elproto.hover = function (f_in, f_out, scope_in, scope_out) {
-        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);
-    };
-    elproto.unhover = function (f_in, f_out) {
-        return this.unmouseover(f_in).unmouseout(f_out);
-    };
-    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {
-        this._drag = {};
-        this.mousedown(function (e) {
-            (e.originalEvent || e).preventDefault();
-            var scrollY = doc.documentElement.scrollTop || doc.body.scrollTop,
-                scrollX = doc.documentElement.scrollLeft || doc.body.scrollLeft;
-            this._drag.x = e.clientX + scrollX;
-            this._drag.y = e.clientY + scrollY;
-            this._drag.id = e.identifier;
-            onstart && onstart.call(start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);
-            !drag.length && R.mousemove(dragMove).mouseup(dragUp);
-            drag.push({el: this, move: onmove, end: onend, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});
-        });
-        return this;
-    };
-    elproto.undrag = function (onmove, onstart, onend) {
-        var i = drag.length;
-        while (i--) {
-            drag[i].el == this && (drag[i].move == onmove && drag[i].end == onend) && drag.splice(i++, 1);
-        }
-        !drag.length && R.unmousemove(dragMove).unmouseup(dragUp);
-    };
-    paperproto.circle = function (x, y, r) {
-        return theCircle(this, x || 0, y || 0, r || 0);
-    };
-    paperproto.rect = function (x, y, w, h, r) {
-        return theRect(this, x || 0, y || 0, w || 0, h || 0, r || 0);
-    };
-    paperproto.ellipse = function (x, y, rx, ry) {
-        return theEllipse(this, x || 0, y || 0, rx || 0, ry || 0);
-    };
-    paperproto.path = function (pathString) {
-        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);
-        return thePath(R.format[apply](R, arguments), this);
-    };
-    paperproto.image = function (src, x, y, w, h) {
-        return theImage(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0);
-    };
-    paperproto.text = function (x, y, text) {
-        return theText(this, x || 0, y || 0, Str(text));
-    };
-    paperproto.set = function (itemsArray) {
-        arguments[length] > 1 && (itemsArray = Array[proto].splice.call(arguments, 0, arguments[length]));
-        return new Set(itemsArray);
-    };
-    paperproto.setSize = setSize;
-    paperproto.top = paperproto.bottom = null;
-    paperproto.raphael = R;
-    function x_y() {
-        return this.x + S + this.y;
-    }
-    elproto.resetScale = function () {
-        if (this.removed) {
-            return this;
-        }
-        this._.sx = 1;
-        this._.sy = 1;
-        this.attrs.scale = "1 1";
-    };
-    elproto.scale = function (x, y, cx, cy) {
-        if (this.removed) {
-            return this;
-        }
-        if (x == null && y == null) {
-            return {
-                x: this._.sx,
-                y: this._.sy,
-                toString: x_y
-            };
-        }
-        y = y || x;
-        !+y && (y = x);
-        var dx,
-            dy,
-            dcx,
-            dcy,
-            a = this.attrs;
-        if (x != 0) {
-            var bb = this.getBBox(),
-                rcx = bb.x + bb.width / 2,
-                rcy = bb.y + bb.height / 2,
-                kx = abs(x / this._.sx),
-                ky = abs(y / this._.sy);
-            cx = (+cx || cx == 0) ? cx : rcx;
-            cy = (+cy || cy == 0) ? cy : rcy;
-            var posx = this._.sx > 0,
-                posy = this._.sy > 0,
-                dirx = ~~(x / abs(x)),
-                diry = ~~(y / abs(y)),
-                dkx = kx * dirx,
-                dky = ky * diry,
-                s = this.node.style,
-                ncx = cx + abs(rcx - cx) * dkx * (rcx > cx == posx ? 1 : -1),
-                ncy = cy + abs(rcy - cy) * dky * (rcy > cy == posy ? 1 : -1),
-                fr = (x * dirx > y * diry ? ky : kx);
-            switch (this.type) {
-                case "rect":
-                case "image":
-                    var neww = a.width * kx,
-                        newh = a.height * ky;
-                    this.attr({
-                        height: newh,
-                        r: a.r * fr,
-                        width: neww,
-                        x: ncx - neww / 2,
-                        y: ncy - newh / 2
-                    });
-                    break;
-                case "circle":
-                case "ellipse":
-                    this.attr({
-                        rx: a.rx * kx,
-                        ry: a.ry * ky,
-                        r: a.r * fr,
-                        cx: ncx,
-                        cy: ncy
-                    });
-                    break;
-                case "text":
-                    this.attr({
-                        x: ncx,
-                        y: ncy
-                    });
-                    break;
-                case "path":
-                    var path = pathToRelative(a.path),
-                        skip = true,
-                        fx = posx ? dkx : kx,
-                        fy = posy ? dky : ky;
-                    for (var i = 0, ii = path[length]; i < ii; i++) {
-                        var p = path[i],
-                            P0 = upperCase.call(p[0]);
-                        if (P0 == "M" && skip) {
-                            continue;
-                        } else {
-                            skip = false;
-                        }
-                        if (P0 == "A") {
-                            p[path[i][length] - 2] *= fx;
-                            p[path[i][length] - 1] *= fy;
-                            p[1] *= kx;
-                            p[2] *= ky;
-                            p[5] = +(dirx + diry ? !!+p[5] : !+p[5]);
-                        } else if (P0 == "H") {
-                            for (var j = 1, jj = p[length]; j < jj; j++) {
-                                p[j] *= fx;
-                            }
-                        } else if (P0 == "V") {
-                            for (j = 1, jj = p[length]; j < jj; j++) {
-                                p[j] *= fy;
-                            }
-                         } else {
-                            for (j = 1, jj = p[length]; j < jj; j++) {
-                                p[j] *= (j % 2) ? fx : fy;
-                            }
-                        }
-                    }
-                    var dim2 = pathDimensions(path);
-                    dx = ncx - dim2.x - dim2.width / 2;
-                    dy = ncy - dim2.y - dim2.height / 2;
-                    path[0][1] += dx;
-                    path[0][2] += dy;
-                    this.attr({path: path});
-                break;
-            }
-            if (this.type in {text: 1, image:1} && (dirx != 1 || diry != 1)) {
-                if (this.transformations) {
-                    this.transformations[2] = "scale("[concat](dirx, ",", diry, ")");
-                    this.node[setAttribute]("transform", this.transformations[join](S));
-                    dx = (dirx == -1) ? -a.x - (neww || 0) : a.x;
-                    dy = (diry == -1) ? -a.y - (newh || 0) : a.y;
-                    this.attr({x: dx, y: dy});
-                    a.fx = dirx - 1;
-                    a.fy = diry - 1;
-                } else {
-                    this.node.filterMatrix = ms + ".Matrix(M11="[concat](dirx,
-                        ", M12=0, M21=0, M22=", diry,
-                        ", Dx=0, Dy=0, sizingmethod='auto expand', filtertype='bilinear')");
-                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
-                }
-            } else {
-                if (this.transformations) {
-                    this.transformations[2] = E;
-                    this.node[setAttribute]("transform", this.transformations[join](S));
-                    a.fx = 0;
-                    a.fy = 0;
-                } else {
-                    this.node.filterMatrix = E;
-                    s.filter = (this.node.filterMatrix || E) + (this.node.filterOpacity || E);
-                }
-            }
-            a.scale = [x, y, cx, cy][join](S);
-            this._.sx = x;
-            this._.sy = y;
-        }
-        return this;
-    };
-    elproto.clone = function () {
-        if (this.removed) {
-            return null;
-        }
-        var attr = this.attr();
-        delete attr.scale;
-        delete attr.translation;
-        return this.paper[this.type]().attr(attr);
-    };
-    var curveslengths = {},
-    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {
-        var len = 0,
-            precision = 100,
-            name = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y].join(),
-            cache = curveslengths[name],
-            old, dot;
-        !cache && (curveslengths[name] = cache = {data: []});
-        cache.timer && clearTimeout(cache.timer);
-        cache.timer = setTimeout(function () {delete curveslengths[name];}, 2000);
-        if (length != null) {
-            var total = getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);
-            precision = ~~total * 10;
-        }
-        for (var i = 0; i < precision + 1; i++) {
-            if (cache.data[length] > i) {
-                dot = cache.data[i * precision];
-            } else {
-                dot = R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, i / precision);
-                cache.data[i] = dot;
-            }
-            i && (len += pow(pow(old.x - dot.x, 2) + pow(old.y - dot.y, 2), .5));
-            if (length != null && len >= length) {
-                return dot;
-            }
-            old = dot;
-        }
-        if (length == null) {
-            return len;
-        }
-    },
-    getLengthFactory = function (istotal, subpath) {
-        return function (path, length, onlystart) {
-            path = path2curve(path);
-            var x, y, p, l, sp = "", subpaths = {}, point,
-                len = 0;
-            for (var i = 0, ii = path.length; i < ii; i++) {
-                p = path[i];
-                if (p[0] == "M") {
-                    x = +p[1];
-                    y = +p[2];
-                } else {
-                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
-                    if (len + l > length) {
-                        if (subpath && !subpaths.start) {
-                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
-                            sp += ["C", point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];
-                            if (onlystart) {return sp;}
-                            subpaths.start = sp;
-                            sp = ["M", point.x, point.y + "C", point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]][join]();
-                            len += l;
-                            x = +p[5];
-                            y = +p[6];
-                            continue;
-                        }
-                        if (!istotal && !subpath) {
-                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
-                            return {x: point.x, y: point.y, alpha: point.alpha};
-                        }
-                    }
-                    len += l;
-                    x = +p[5];
-                    y = +p[6];
-                }
-                sp += p;
-            }
-            subpaths.end = sp;
-            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[1], p[2], p[3], p[4], p[5], p[6], 1);
-            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});
-            return point;
-        };
-    };
-    var getTotalLength = getLengthFactory(1),
-        getPointAtLength = getLengthFactory(),
-        getSubpathsAtLength = getLengthFactory(0, 1);
-    elproto.getTotalLength = function () {
-        if (this.type != "path") {return;}
-        if (this.node.getTotalLength) {
-            return this.node.getTotalLength();
-        }
-        return getTotalLength(this.attrs.path);
-    };
-    elproto.getPointAtLength = function (length) {
-        if (this.type != "path") {return;}
-        return getPointAtLength(this.attrs.path, length);
-    };
-    elproto.getSubpath = function (from, to) {
-        if (this.type != "path") {return;}
-        if (abs(this.getTotalLength() - to) < "1e-6") {
-            return getSubpathsAtLength(this.attrs.path, from).end;
-        }
-        var a = getSubpathsAtLength(this.attrs.path, to, 1);
-        return from ? getSubpathsAtLength(a, from).end : a;
-    };
-
-    // animation easing formulas
-    R.easing_formulas = {
-        linear: function (n) {
-            return n;
-        },
-        "<": function (n) {
-            return pow(n, 3);
-        },
-        ">": function (n) {
-            return pow(n - 1, 3) + 1;
-        },
-        "<>": function (n) {
-            n = n * 2;
-            if (n < 1) {
-                return pow(n, 3) / 2;
-            }
-            n -= 2;
-            return (pow(n, 3) + 2) / 2;
-        },
-        backIn: function (n) {
-            var s = 1.70158;
-            return n * n * ((s + 1) * n - s);
-        },
-        backOut: function (n) {
-            n = n - 1;
-            var s = 1.70158;
-            return n * n * ((s + 1) * n + s) + 1;
-        },
-        elastic: function (n) {
-            if (n == 0 || n == 1) {
-                return n;
-            }
-            var p = .3,
-                s = p / 4;
-            return pow(2, -10 * n) * math.sin((n - s) * (2 * PI) / p) + 1;
-        },
-        bounce: function (n) {
-            var s = 7.5625,
-                p = 2.75,
-                l;
-            if (n < (1 / p)) {
-                l = s * n * n;
-            } else {
-                if (n < (2 / p)) {
-                    n -= (1.5 / p);
-                    l = s * n * n + .75;
-                } else {
-                    if (n < (2.5 / p)) {
-                        n -= (2.25 / p);
-                        l = s * n * n + .9375;
-                    } else {
-                        n -= (2.625 / p);
-                        l = s * n * n + .984375;
-                    }
-                }
-            }
-            return l;
-        }
-    };
-
-    var animationElements = [],
-        animation = function () {
-            var Now = +new Date;
-            for (var l = 0; l < animationElements[length]; l++) {
-                var e = animationElements[l];
-                if (e.stop || e.el.removed) {
-                    continue;
-                }
-                var time = Now - e.start,
-                    ms = e.ms,
-                    easing = e.easing,
-                    from = e.from,
-                    diff = e.diff,
-                    to = e.to,
-                    t = e.t,
-                    that = e.el,
-                    set = {},
-                    now;
-                if (time < ms) {
-                    var pos = easing(time / ms);
-                    for (var attr in from) if (from[has](attr)) {
-                        switch (availableAnimAttrs[attr]) {
-                            case "along":
-                                now = pos * ms * diff[attr];
-                                to.back && (now = to.len - now);
-                                var point = getPointAtLength(to[attr], now);
-                                that.translate(diff.sx - diff.x || 0, diff.sy - diff.y || 0);
-                                diff.x = point.x;
-                                diff.y = point.y;
-                                that.translate(point.x - diff.sx, point.y - diff.sy);
-                                to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
-                                break;
-                            case nu:
-                                now = +from[attr] + pos * ms * diff[attr];
-                                break;
-                            case "colour":
-                                now = "rgb(" + [
-                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),
-                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),
-                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))
-                                ][join](",") + ")";
-                                break;
-                            case "path":
-                                now = [];
-                                for (var i = 0, ii = from[attr][length]; i < ii; i++) {
-                                    now[i] = [from[attr][i][0]];
-                                    for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
-                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];
-                                    }
-                                    now[i] = now[i][join](S);
-                                }
-                                now = now[join](S);
-                                break;
-                            case "csv":
-                                switch (attr) {
-                                    case "translation":
-                                        var x = pos * ms * diff[attr][0] - t.x,
-                                            y = pos * ms * diff[attr][1] - t.y;
-                                        t.x += x;
-                                        t.y += y;
-                                        now = x + S + y;
-                                    break;
-                                    case "rotation":
-                                        now = +from[attr][0] + pos * ms * diff[attr][0];
-                                        from[attr][1] && (now += "," + from[attr][1] + "," + from[attr][2]);
-                                    break;
-                                    case "scale":
-                                        now = [+from[attr][0] + pos * ms * diff[attr][0], +from[attr][1] + pos * ms * diff[attr][1], (2 in to[attr] ? to[attr][2] : E), (3 in to[attr] ? to[attr][3] : E)][join](S);
-                                    break;
-                                    case "clip-rect":
-                                        now = [];
-                                        i = 4;
-                                        while (i--) {
-                                            now[i] = +from[attr][i] + pos * ms * diff[attr][i];
-                                        }
-                                    break;
-                                }
-                                break;
-                            default:
-                              var from2 = [].concat(from[attr]);
-                                now = [];
-                                i = that.paper.customAttributes[attr].length;
-                                while (i--) {
-                                    now[i] = +from2[i] + pos * ms * diff[attr][i];
-                                }
-                                break;
-                        }
-                        set[attr] = now;
-                    }
-                    that.attr(set);
-                    that._run && that._run.call(that);
-                } else {
-                    if (to.along) {
-                        point = getPointAtLength(to.along, to.len * !to.back);
-                        that.translate(diff.sx - (diff.x || 0) + point.x - diff.sx, diff.sy - (diff.y || 0) + point.y - diff.sy);
-                        to.rot && that.rotate(diff.r + point.alpha, point.x, point.y);
-                    }
-                    (t.x || t.y) && that.translate(-t.x, -t.y);
-                    to.scale && (to.scale += E);
-                    that.attr(to);
-                    animationElements.splice(l--, 1);
-                }
-            }
-            R.svg && that && that.paper && that.paper.safari();
-            animationElements[length] && setTimeout(animation);
-        },
-        keyframesRun = function (attr, element, time, prev, prevcallback) {
-            var dif = time - prev;
-            element.timeouts.push(setTimeout(function () {
-                R.is(prevcallback, "function") && prevcallback.call(element);
-                element.animate(attr, dif, attr.easing);
-            }, prev));
-        },
-        upto255 = function (color) {
-            return mmax(mmin(color, 255), 0);
-        },
-        translate = function (x, y) {
-            if (x == null) {
-                return {x: this._.tx, y: this._.ty, toString: x_y};
-            }
-            this._.tx += +x;
-            this._.ty += +y;
-            switch (this.type) {
-                case "circle":
-                case "ellipse":
-                    this.attr({cx: +x + this.attrs.cx, cy: +y + this.attrs.cy});
-                    break;
-                case "rect":
-                case "image":
-                case "text":
-                    this.attr({x: +x + this.attrs.x, y: +y + this.attrs.y});
-                    break;
-                case "path":
-                    var path = pathToRelative(this.attrs.path);
-                    path[0][1] += +x;
-                    path[0][2] += +y;
-                    this.attr({path: path});
-                break;
-            }
-            return this;
-        };
-    elproto.animateWith = function (element, params, ms, easing, callback) {
-        for (var i = 0, ii = animationElements.length; i < ii; i++) {
-            if (animationElements[i].el.id == element.id) {
-                params.start = animationElements[i].start;
-            }
-        }
-        return this.animate(params, ms, easing, callback);
-    };
-    elproto.animateAlong = along();
-    elproto.animateAlongBack = along(1);
-    function along(isBack) {
-        return function (path, ms, rotate, callback) {
-            var params = {back: isBack};
-            R.is(rotate, "function") ? (callback = rotate) : (params.rot = rotate);
-            path && path.constructor == Element && (path = path.attrs.path);
-            path && (params.along = path);
-            return this.animate(params, ms, callback);
-        };
-    }
-    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {
-        var cx = 3 * p1x,
-            bx = 3 * (p2x - p1x) - cx,
-            ax = 1 - cx - bx,
-            cy = 3 * p1y,
-            by = 3 * (p2y - p1y) - cy,
-            ay = 1 - cy - by;
-        function sampleCurveX(t) {
-            return ((ax * t + bx) * t + cx) * t;
-        }
-        function solve(x, epsilon) {
-            var t = solveCurveX(x, epsilon);
-            return ((ay * t + by) * t + cy) * t;
-        }
-        function solveCurveX(x, epsilon) {
-            var t0, t1, t2, x2, d2, i;
-            for(t2 = x, i = 0; i < 8; i++) {
-                x2 = sampleCurveX(t2) - x;
-                if (abs(x2) < epsilon) {
-                    return t2;
-                }
-                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
-                if (abs(d2) < 1e-6) {
-                    break;
-                }
-                t2 = t2 - x2 / d2;
-            }
-            t0 = 0;
-            t1 = 1;
-            t2 = x;
-            if (t2 < t0) {
-                return t0;
-            }
-            if (t2 > t1) {
-                return t1;
-            }
-            while (t0 < t1) {
-                x2 = sampleCurveX(t2);
-                if (abs(x2 - x) < epsilon) {
-                    return t2;
-                }
-                if (x > x2) {
-                    t0 = t2;
-                } else {
-                    t1 = t2;
-                }
-                t2 = (t1 - t0) / 2 + t0;
-            }
-            return t2;
-        }
-        return solve(t, 1 / (200 * duration));
-    }
-    elproto.onAnimation = function (f) {
-        this._run = f || 0;
-        return this;
-    };
-    elproto.animate = function (params, ms, easing, callback) {
-        var element = this;
-        element.timeouts = element.timeouts || [];
-        if (R.is(easing, "function") || !easing) {
-            callback = easing || null;
-        }
-        if (element.removed) {
-            callback && callback.call(element);
-            return element;
-        }
-        var from = {},
-            to = {},
-            animateable = false,
-            diff = {};
-        for (var attr in params) if (params[has](attr)) {
-            if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {
-                animateable = true;
-                from[attr] = element.attr(attr);
-                (from[attr] == null) && (from[attr] = availableAttrs[attr]);
-                to[attr] = params[attr];
-                switch (availableAnimAttrs[attr]) {
-                    case "along":
-                        var len = getTotalLength(params[attr]);
-                        var point = getPointAtLength(params[attr], len * !!params.back);
-                        var bb = element.getBBox();
-                        diff[attr] = len / ms;
-                        diff.tx = bb.x;
-                        diff.ty = bb.y;
-                        diff.sx = point.x;
-                        diff.sy = point.y;
-                        to.rot = params.rot;
-                        to.back = params.back;
-                        to.len = len;
-                        params.rot && (diff.r = toFloat(element.rotate()) || 0);
-                        break;
-                    case nu:
-                        diff[attr] = (to[attr] - from[attr]) / ms;
-                        break;
-                    case "colour":
-                        from[attr] = R.getRGB(from[attr]);
-                        var toColour = R.getRGB(to[attr]);
-                        diff[attr] = {
-                            r: (toColour.r - from[attr].r) / ms,
-                            g: (toColour.g - from[attr].g) / ms,
-                            b: (toColour.b - from[attr].b) / ms
-                        };
-                        break;
-                    case "path":
-                        var pathes = path2curve(from[attr], to[attr]);
-                        from[attr] = pathes[0];
-                        var toPath = pathes[1];
-                        diff[attr] = [];
-                        for (var i = 0, ii = from[attr][length]; i < ii; i++) {
-                            diff[attr][i] = [0];
-                            for (var j = 1, jj = from[attr][i][length]; j < jj; j++) {
-                                diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;
-                            }
-                        }
-                        break;
-                    case "csv":
-                        var values = Str(params[attr])[split](separator),
-                            from2 = Str(from[attr])[split](separator);
-                        switch (attr) {
-                            case "translation":
-                                from[attr] = [0, 0];
-                                diff[attr] = [values[0] / ms, values[1] / ms];
-                            break;
-                            case "rotation":
-                                from[attr] = (from2[1] == values[1] && from2[2] == values[2]) ? from2 : [0, values[1], values[2]];
-                                diff[attr] = [(values[0] - from[attr][0]) / ms, 0, 0];
-                            break;
-                            case "scale":
-                                params[attr] = values;
-                                from[attr] = Str(from[attr])[split](separator);
-                                diff[attr] = [(values[0] - from[attr][0]) / ms, (values[1] - from[attr][1]) / ms, 0, 0];
-                            break;
-                            case "clip-rect":
-                                from[attr] = Str(from[attr])[split](separator);
-                                diff[attr] = [];
-                                i = 4;
-                                while (i--) {
-                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;
-                                }
-                            break;
-                        }
-                        to[attr] = values;
-                        break;
-                    default:
-                        values = [].concat(params[attr]);
-                        from2 = [].concat(from[attr]);
-                        diff[attr] = [];
-                        i = element.paper.customAttributes[attr][length];
-                        while (i--) {
-                            diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;
-                        }
-                        break;
-                }
-            }
-        }
-        if (!animateable) {
-            var attrs = [],
-                lastcall;
-            for (var key in params) if (params[has](key) && animKeyFrames.test(key)) {
-                attr = {value: params[key]};
-                key == "from" && (key = 0);
-                key == "to" && (key = 100);
-                attr.key = toInt(key, 10);
-                attrs.push(attr);
-            }
-            attrs.sort(sortByKey);
-            if (attrs[0].key) {
-                attrs.unshift({key: 0, value: element.attrs});
-            }
-            for (i = 0, ii = attrs[length]; i < ii; i++) {
-                keyframesRun(attrs[i].value, element, ms / 100 * attrs[i].key, ms / 100 * (attrs[i - 1] && attrs[i - 1].key || 0), attrs[i - 1] && attrs[i - 1].value.callback);
-            }
-            lastcall = attrs[attrs[length] - 1].value.callback;
-            if (lastcall) {
-                element.timeouts.push(setTimeout(function () {lastcall.call(element);}, ms));
-            }
-        } else {
-            var easyeasy = R.easing_formulas[easing];
-            if (!easyeasy) {
-                easyeasy = Str(easing).match(bezierrg);
-                if (easyeasy && easyeasy[length] == 5) {
-                    var curve = easyeasy;
-                    easyeasy = function (t) {
-                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);
-                    };
-                } else {
-                    easyeasy = function (t) {
-                        return t;
-                    };
-                }
-            }
-            animationElements.push({
-                start: params.start || +new Date,
-                ms: ms,
-                easing: easyeasy,
-                from: from,
-                diff: diff,
-                to: to,
-                el: element,
-                t: {x: 0, y: 0}
-            });
-            R.is(callback, "function") && (element._ac = setTimeout(function () {
-                callback.call(element);
-            }, ms));
-            animationElements[length] == 1 && setTimeout(animation);
-        }
-        return this;
-    };
-    elproto.stop = function () {
-        for (var i = 0; i < animationElements.length; i++) {
-            animationElements[i].el.id == this.id && animationElements.splice(i--, 1);
-        }
-        for (i = 0, ii = this.timeouts && this.timeouts.length; i < ii; i++) {
-            clearTimeout(this.timeouts[i]);
-        }
-        this.timeouts = [];
-        clearTimeout(this._ac);
-        delete this._ac;
-        return this;
-    };
-    elproto.translate = function (x, y) {
-        return this.attr({translation: x + " " + y});
-    };
-    elproto[toString] = function () {
-        return "Rapha\xebl\u2019s object";
-    };
-    R.ae = animationElements;
- 
-    // Set
-    var Set = function (items) {
-        this.items = [];
-        this[length] = 0;
-        this.type = "set";
-        if (items) {
-            for (var i = 0, ii = items[length]; i < ii; i++) {
-                if (items[i] && (items[i].constructor == Element || items[i].constructor == Set)) {
-                    this[this.items[length]] = this.items[this.items[length]] = items[i];
-                    this[length]++;
-                }
-            }
-        }
-    };
-    Set[proto][push] = function () {
-        var item,
-            len;
-        for (var i = 0, ii = arguments[length]; i < ii; i++) {
-            item = arguments[i];
-            if (item && (item.constructor == Element || item.constructor == Set)) {
-                len = this.items[length];
-                this[len] = this.items[len] = item;
-                this[length]++;
-            }
-        }
-        return this;
-    };
-    Set[proto].pop = function () {
-        delete this[this[length]--];
-        return this.items.pop();
-    };
-    for (var method in elproto) if (elproto[has](method)) {
-        Set[proto][method] = (function (methodname) {
-            return function () {
-                for (var i = 0, ii = this.items[length]; i < ii; i++) {
-                    this.items[i][methodname][apply](this.items[i], arguments);
-                }
-                return this;
-            };
-        })(method);
-    }
-    Set[proto].attr = function (name, value) {
-        if (name && R.is(name, array) && R.is(name[0], "object")) {
-            for (var j = 0, jj = name[length]; j < jj; j++) {
-                this.items[j].attr(name[j]);
-            }
-        } else {
-            for (var i = 0, ii = this.items[length]; i < ii; i++) {
-                this.items[i].attr(name, value);
-            }
-        }
-        return this;
-    };
-    Set[proto].animate = function (params, ms, easing, callback) {
-        (R.is(easing, "function") || !easing) && (callback = easing || null);
-        var len = this.items[length],
-            i = len,
-            item,
-            set = this,
-            collector;
-        callback && (collector = function () {
-            !--len && callback.call(set);
-        });
-        easing = R.is(easing, string) ? easing : collector;
-        item = this.items[--i].animate(params, ms, easing, collector);
-        while (i--) {
-            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, params, ms, easing, collector);
-        }
-        return this;
-    };
-    Set[proto].insertAfter = function (el) {
-        var i = this.items[length];
-        while (i--) {
-            this.items[i].insertAfter(el);
-        }
-        return this;
-    };
-    Set[proto].getBBox = function () {
-        var x = [],
-            y = [],
-            w = [],
-            h = [];
-        for (var i = this.items[length]; i--;) {
-            var box = this.items[i].getBBox();
-            x[push](box.x);
-            y[push](box.y);
-            w[push](box.x + box.width);
-            h[push](box.y + box.height);
-        }
-        x = mmin[apply](0, x);
-        y = mmin[apply](0, y);
-        return {
-            x: x,
-            y: y,
-            width: mmax[apply](0, w) - x,
-            height: mmax[apply](0, h) - y
-        };
-    };
-    Set[proto].clone = function (s) {
-        s = new Set;
-        for (var i = 0, ii = this.items[length]; i < ii; i++) {
-            s[push](this.items[i].clone());
-        }
-        return s;
-    };
-
-    R.registerFont = function (font) {
-        if (!font.face) {
-            return font;
-        }
-        this.fonts = this.fonts || {};
-        var fontcopy = {
-                w: font.w,
-                face: {},
-                glyphs: {}
-            },
-            family = font.face["font-family"];
-        for (var prop in font.face) if (font.face[has](prop)) {
-            fontcopy.face[prop] = font.face[prop];
-        }
-        if (this.fonts[family]) {
-            this.fonts[family][push](fontcopy);
-        } else {
-            this.fonts[family] = [fontcopy];
-        }
-        if (!font.svg) {
-            fontcopy.face["units-per-em"] = toInt(font.face["units-per-em"], 10);
-            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {
-                var path = font.glyphs[glyph];
-                fontcopy.glyphs[glyph] = {
-                    w: path.w,
-                    k: {},
-                    d: path.d && "M" + path.d[rp](/[mlcxtrv]/g, function (command) {
-                            return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[command] || "M";
-                        }) + "z"
-                };
-                if (path.k) {
-                    for (var k in path.k) if (path[has](k)) {
-                        fontcopy.glyphs[glyph].k[k] = path.k[k];
-                    }
-                }
-            }
-        }
-        return font;
-    };
-    paperproto.getFont = function (family, weight, style, stretch) {
-        stretch = stretch || "normal";
-        style = style || "normal";
-        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;
-        if (!R.fonts) {
-            return;
-        }
-        var font = R.fonts[family];
-        if (!font) {
-            var name = new RegExp("(^|\\s)" + family[rp](/[^\w\d\s+!~.:_-]/g, E) + "(\\s|$)", "i");
-            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {
-                if (name.test(fontName)) {
-                    font = R.fonts[fontName];
-                    break;
-                }
-            }
-        }
-        var thefont;
-        if (font) {
-            for (var i = 0, ii = font[length]; i < ii; i++) {
-                thefont = font[i];
-                if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) {
-                    break;
-                }
-            }
-        }
-        return thefont;
-    };
-    paperproto.print = function (x, y, string, font, size, origin, letter_spacing) {
-        origin = origin || "middle"; // baseline|middle
-        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);
-        var out = this.set(),
-            letters = Str(string)[split](E),
-            shift = 0,
-            path = E,
-            scale;
-        R.is(font, string) && (font = this.getFont(font));
-        if (font) {
-            scale = (size || 16) / font.face["units-per-em"];
-            var bb = font.face.bbox.split(separator),
-                top = +bb[0],
-                height = +bb[1] + (origin == "baseline" ? bb[3] - bb[1] + (+font.face.descent) : (bb[3] - bb[1]) / 2);
-            for (var i = 0, ii = letters[length]; i < ii; i++) {
-                var prev = i && font.glyphs[letters[i - 1]] || {},
-                    curr = font.glyphs[letters[i]];
-                shift += i ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;
-                curr && curr.d && out[push](this.path(curr.d).attr({fill: "#000", stroke: "none", translation: [shift, 0]}));
-            }
-            out.scale(scale, scale, top, height).translate(x - top, y - height);
-        }
-        return out;
-    };
-
-    R.format = function (token, params) {
-        var args = R.is(params, array) ? [0][concat](params) : arguments;
-        token && R.is(token, string) && args[length] - 1 && (token = token[rp](formatrg, function (str, i) {
-            return args[++i] == null ? E : args[i];
-        }));
-        return token || E;
-    };
-    R.ninja = function () {
-        oldRaphael.was ? (win.Raphael = oldRaphael.is) : delete Raphael;
-        return R;
-    };
-    R.el = elproto;
-    R.st = Set[proto];
-
-    oldRaphael.was ? (win.Raphael = R) : (Raphael = R);
-})();/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
- 
- 
-(function () {
-    var mmax = Math.max,
-        mmin = Math.min;
-    Raphael.fn.g = Raphael.fn.g || {};
-    Raphael.fn.g.markers = {
-        disc: "disc",
-        o: "disc",
-        flower: "flower",
-        f: "flower",
-        diamond: "diamond",
-        d: "diamond",
-        square: "square",
-        s: "square",
-        triangle: "triangle",
-        t: "triangle",
-        star: "star",
-        "*": "star",
-        cross: "cross",
-        x: "cross",
-        plus: "plus",
-        "+": "plus",
-        arrow: "arrow",
-        "->": "arrow"
-    };
-    Raphael.fn.g.shim = {stroke: "none", fill: "#000", "fill-opacity": 0};
-    Raphael.fn.g.txtattr = {font: "12px Arial, sans-serif"};
-    Raphael.fn.g.colors = [];
-    var hues = [.6, .2, .05, .1333, .75, 0];
-    for (var i = 0; i < 10; i++) {
-        if (i < hues.length) {
-            Raphael.fn.g.colors.push("hsb(" + hues[i] + ", .75, .75)");
-        } else {
-            Raphael.fn.g.colors.push("hsb(" + hues[i - hues.length] + ", 1, .5)");
-        }
-    }
-    Raphael.fn.g.text = function (x, y, text) {
-        return this.text(x, y, text).attr(this.g.txtattr);
-    };
-    Raphael.fn.g.labelise = function (label, val, total) {
-        if (label) {
-            return (label + "").replace(/(##+(?:\.#+)?)|(%%+(?:\.%+)?)/g, function (all, value, percent) {
-                if (value) {
-                    return (+val).toFixed(value.replace(/^#+\.?/g, "").length);
-                }
-                if (percent) {
-                    return (val * 100 / total).toFixed(percent.replace(/^%+\.?/g, "").length) + "%";
-                }
-            });
-        } else {
-            return (+val).toFixed(0);
-        }
-    };
-
-    Raphael.fn.g.finger = function (x, y, width, height, dir, ending, isPath) {
-        // dir 0 for horisontal and 1 for vertical
-        if ((dir && !height) || (!dir && !width)) {
-            return isPath ? "" : this.path();
-        }
-        ending = {square: "square", sharp: "sharp", soft: "soft"}[ending] || "round";
-        var path;
-        height = Math.round(height);
-        width = Math.round(width);
-        x = Math.round(x);
-        y = Math.round(y);
-        switch (ending) {
-            case "round":
-            if (!dir) {
-                var r = ~~(height / 2);
-                if (width < r) {
-                    r = width;
-                    path = ["M", x + .5, y + .5 - ~~(height / 2), "l", 0, 0, "a", r, ~~(height / 2), 0, 0, 1, 0, height, "l", 0, 0, "z"];
-                } else {
-                    path = ["M", x + .5, y + .5 - r, "l", width - r, 0, "a", r, r, 0, 1, 1, 0, height, "l", r - width, 0, "z"];
-                }
-            } else {
-                r = ~~(width / 2);
-                if (height < r) {
-                    r = height;
-                    path = ["M", x - ~~(width / 2), y, "l", 0, 0, "a", ~~(width / 2), r, 0, 0, 1, width, 0, "l", 0, 0, "z"];
-                } else {
-                    path = ["M", x - r, y, "l", 0, r - height, "a", r, r, 0, 1, 1, width, 0, "l", 0, height - r, "z"];
-                }
-            }
-            break;
-            case "sharp":
-            if (!dir) {
-                var half = ~~(height / 2);
-                path = ["M", x, y + half, "l", 0, -height, mmax(width - half, 0), 0, mmin(half, width), half, -mmin(half, width), half + (half * 2 < height), "z"];
-            } else {
-                half = ~~(width / 2);
-                path = ["M", x + half, y, "l", -width, 0, 0, -mmax(height - half, 0), half, -mmin(half, height), half, mmin(half, height), half, "z"];
-            }
-            break;
-            case "square":
-            if (!dir) {
-                path = ["M", x, y + ~~(height / 2), "l", 0, -height, width, 0, 0, height, "z"];
-            } else {
-                path = ["M", x + ~~(width / 2), y, "l", 1 - width, 0, 0, -height, width - 1, 0, "z"];
-            }
-            break;
-            case "soft":
-            if (!dir) {
-                r = mmin(width, Math.round(height / 5));
-                path = ["M", x + .5, y + .5 - ~~(height / 2), "l", width - r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r * 2, "a", r, r, 0, 0, 1, -r, r, "l", r - width, 0, "z"];
-            } else {
-                r = mmin(Math.round(width / 5), height);
-                path = ["M", x - ~~(width / 2), y, "l", 0, r - height, "a", r, r, 0, 0, 1, r, -r, "l", width - 2 * r, 0, "a", r, r, 0, 0, 1, r, r, "l", 0, height - r, "z"];
-            }
-        }
-        if (isPath) {
-            return path.join(",");
-        } else {
-            return this.path(path);
-        }
-    };
-
-    // Symbols
-    Raphael.fn.g.disc = function (cx, cy, r) {
-        return this.circle(cx, cy, r);
-    };
-    Raphael.fn.g.line = function (cx, cy, r) {
-        return this.rect(cx - r, cy - r / 5, 2 * r, 2 * r / 5);
-    };
-    Raphael.fn.g.square = function (cx, cy, r) {
-        r = r * .7;
-        return this.rect(cx - r, cy - r, 2 * r, 2 * r);
-    };
-    Raphael.fn.g.triangle = function (cx, cy, r) {
-        r *= 1.75;
-        return this.path("M".concat(cx, ",", cy, "m0-", r * .58, "l", r * .5, ",", r * .87, "-", r, ",0z"));
-    };
-    Raphael.fn.g.diamond = function (cx, cy, r) {
-        return this.path(["M", cx, cy - r, "l", r, r, -r, r, -r, -r, r, -r, "z"]);
-    };
-    Raphael.fn.g.flower = function (cx, cy, r, n) {
-        r = r * 1.25;
-        var rout = r,
-            rin = rout * .5;
-        n = +n < 3 || !n ? 5 : n;
-        var points = ["M", cx, cy + rin, "Q"],
-            R;
-        for (var i = 1; i < n * 2 + 1; i++) {
-            R = i % 2 ? rout : rin;
-            points = points.concat([+(cx + R * Math.sin(i * Math.PI / n)).toFixed(3), +(cy + R * Math.cos(i * Math.PI / n)).toFixed(3)]);
-        }
-        points.push("z");
-        return this.path(points.join(","));
-    };
-    Raphael.fn.g.star = function (cx, cy, r, r2, rays) {
-        r2 = r2 || r * .382;
-        rays = rays || 5;
-        var points = ["M", cx, cy + r2, "L"],
-            R;
-        for (var i = 1; i < rays * 2; i++) {
-            R = i % 2 ? r : r2;
-            points = points.concat([(cx + R * Math.sin(i * Math.PI / rays)), (cy + R * Math.cos(i * Math.PI / rays))]);
-        }
-        points.push("z");
-        return this.path(points.join(","));
-    };
-    Raphael.fn.g.cross = function (cx, cy, r) {
-        r = r / 2.5;
-        return this.path("M".concat(cx - r, ",", cy, "l", [-r, -r, r, -r, r, r, r, -r, r, r, -r, r, r, r, -r, r, -r, -r, -r, r, -r, -r, "z"]));
-    };
-    Raphael.fn.g.plus = function (cx, cy, r) {
-        r = r / 2;
-        return this.path("M".concat(cx - r / 2, ",", cy - r / 2, "l", [0, -r, r, 0, 0, r, r, 0, 0, r, -r, 0, 0, r, -r, 0, 0, -r, -r, 0, 0, -r, "z"]));
-    };
-    Raphael.fn.g.arrow = function (cx, cy, r) {
-        return this.path("M".concat(cx - r * .7, ",", cy - r * .4, "l", [r * .6, 0, 0, -r * .4, r, r * .8, -r, r * .8, 0, -r * .4, -r * .6, 0], "z"));
-    };
-
-    // Tooltips
-    Raphael.fn.g.tag = function (x, y, text, angle, r) {
-        angle = angle || 0;
-        r = r == null ? 5 : r;
-        text = text == null ? "$9.99" : text;
-        var R = .5522 * r,
-            res = this.set(),
-            d = 3;
-        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
-        res.update = function () {
-            this.rotate(0, x, y);
-            var bb = this[1].getBBox();
-            if (bb.height >= r * 2) {
-                this[0].attr({path: ["M", x, y + r, "a", r, r, 0, 1, 1, 0, -r * 2, r, r, 0, 1, 1, 0, r * 2, "m", 0, -r * 2 -d, "a", r + d, r + d, 0, 1, 0, 0, (r + d) * 2, "L", x + r + d, y + bb.height / 2 + d, "l", bb.width + 2 * d, 0, 0, -bb.height - 2 * d, -bb.width - 2 * d, 0, "L", x, y - r - d].join(",")});
-            } else {
-                var dx = Math.sqrt(Math.pow(r + d, 2) - Math.pow(bb.height / 2 + d, 2));
-                this[0].attr({path: ["M", x, y + r, "c", -R, 0, -r, R - r, -r, -r, 0, -R, r - R, -r, r, -r, R, 0, r, r - R, r, r, 0, R, R - r, r, -r, r, "M", x + dx, y - bb.height / 2 - d, "a", r + d, r + d, 0, 1, 0, 0, bb.height + 2 * d, "l", r + d - dx + bb.width + 2 * d, 0, 0, -bb.height - 2 * d, "L", x + dx, y - bb.height / 2 - d].join(",")});
-            }
-            this[1].attr({x: x + r + d + bb.width / 2, y: y});
-            angle = (360 - angle) % 360;
-            this.rotate(angle, x, y);
-            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
-            return this;
-        };
-        res.update();
-        return res;
-    };
-    Raphael.fn.g.popupit = function (x, y, set, dir, size) {
-        dir = dir == null ? 2 : dir;
-        size = size || 5;
-        x = Math.round(x);
-        y = Math.round(y);
-        var bb = set.getBBox(),
-            w = Math.round(bb.width / 2),
-            h = Math.round(bb.height / 2),
-            dx = [0, w + size * 2, 0, -w - size * 2],
-            dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
-            p = ["M", x - dx[dir], y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
-                "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
-                "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
-                "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
-                "l", -mmax(w - size, 0), 0, "z"].join(","),
-            xy = [{x: x, y: y + size * 2 + h}, {x: x - size * 2 - w, y: y}, {x: x, y: y - size * 2 - h}, {x: x + size * 2 + w, y: y}][dir];
-        set.translate(xy.x - w - bb.x, xy.y - h - bb.y);
-        return this.path(p).attr({fill: "#000", stroke: "none"}).insertBefore(set.node ? set : set[0]);
-    };
-    Raphael.fn.g.popup = function (x, y, text, dir, size) {
-        dir = dir == null ? 2 : dir > 3 ? 3 : dir;
-        size = size || 5;
-        text = text || "$9.99";
-        var res = this.set(),
-            d = 3;
-        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
-        res.update = function (X, Y, withAnimation) {
-            X = X || x;
-            Y = Y || y;
-            var bb = this[1].getBBox(),
-                w = bb.width / 2,
-                h = bb.height / 2,
-                dx = [0, w + size * 2, 0, -w - size * 2],
-                dy = [-h * 2 - size * 3, -h - size, 0, -h - size],
-                p = ["M", X - dx[dir], Y - dy[dir], "l", -size, (dir == 2) * -size, -mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, -size, -size,
-                    "l", 0, -mmax(h - size, 0), (dir == 3) * -size, -size, (dir == 3) * size, -size, 0, -mmax(h - size, 0), "a", size, size, 0, 0, 1, size, -size,
-                    "l", mmax(w - size, 0), 0, size, !dir * -size, size, !dir * size, mmax(w - size, 0), 0, "a", size, size, 0, 0, 1, size, size,
-                    "l", 0, mmax(h - size, 0), (dir == 1) * size, size, (dir == 1) * -size, size, 0, mmax(h - size, 0), "a", size, size, 0, 0, 1, -size, size,
-                    "l", -mmax(w - size, 0), 0, "z"].join(","),
-                xy = [{x: X, y: Y + size * 2 + h}, {x: X - size * 2 - w, y: Y}, {x: X, y: Y - size * 2 - h}, {x: X + size * 2 + w, y: Y}][dir];
-            xy.path = p;
-            if (withAnimation) {
-                this.animate(xy, 500, ">");
-            } else {
-                this.attr(xy);
-            }
-            return this;
-        };
-        return res.update(x, y);
-    };
-    Raphael.fn.g.flag = function (x, y, text, angle) {
-        angle = angle || 0;
-        text = text || "$9.99";
-        var res = this.set(),
-            d = 3;
-        res.push(this.path().attr({fill: "#000", stroke: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff", "font-family": "Helvetica, Arial"}));
-        res.update = function (x, y) {
-            this.rotate(0, x, y);
-            var bb = this[1].getBBox(),
-                h = bb.height / 2;
-            this[0].attr({path: ["M", x, y, "l", h + d, -h - d, bb.width + 2 * d, 0, 0, bb.height + 2 * d, -bb.width - 2 * d, 0, "z"].join(",")});
-            this[1].attr({x: x + h + d + bb.width / 2, y: y});
-            angle = 360 - angle;
-            this.rotate(angle, x, y);
-            angle > 90 && angle < 270 && this[1].attr({x: x - r - d - bb.width / 2, y: y, rotation: [180 + angle, x, y]});
-            return this;
-        };
-        return res.update(x, y);
-    };
-    Raphael.fn.g.label = function (x, y, text) {
-        var res = this.set();
-        res.push(this.rect(x, y, 10, 10).attr({stroke: "none", fill: "#000"}));
-        res.push(this.text(x, y, text).attr(this.g.txtattr).attr({fill: "#fff"}));
-        res.update = function () {
-            var bb = this[1].getBBox(),
-                r = mmin(bb.width + 10, bb.height + 10) / 2;
-            this[0].attr({x: bb.x - r / 2, y: bb.y - r / 2, width: bb.width + r, height: bb.height + r, r: r});
-        };
-        res.update();
-        return res;
-    };
-    Raphael.fn.g.labelit = function (set) {
-        var bb = set.getBBox(),
-            r = mmin(20, bb.width + 10, bb.height + 10) / 2;
-        return this.rect(bb.x - r / 2, bb.y - r / 2, bb.width + r, bb.height + r, r).attr({stroke: "none", fill: "#000"}).insertBefore(set.node ? set : set[0]);
-    };
-    Raphael.fn.g.drop = function (x, y, text, size, angle) {
-        size = size || 30;
-        angle = angle || 0;
-        var res = this.set();
-        res.push(this.path(["M", x, y, "l", size, 0, "A", size * .4, size * .4, 0, 1, 0, x + size * .7, y - size * .7, "z"]).attr({fill: "#000", stroke: "none", rotation: [22.5 - angle, x, y]}));
-        angle = (angle + 90) * Math.PI / 180;
-        res.push(this.text(x + size * Math.sin(angle), y + size * Math.cos(angle), text).attr(this.g.txtattr).attr({"font-size": size * 12 / 30, fill: "#fff"}));
-        res.drop = res[0];
-        res.text = res[1];
-        return res;
-    };
-    Raphael.fn.g.blob = function (x, y, text, angle, size) {
-        angle = (+angle + 1 ? angle : 45) + 90;
-        size = size || 12;
-        var rad = Math.PI / 180,
-            fontSize = size * 12 / 12;
-        var res = this.set();
-        res.push(this.path().attr({fill: "#000", stroke: "none"}));
-        res.push(this.text(x + size * Math.sin((angle) * rad), y + size * Math.cos((angle) * rad) - fontSize / 2, text).attr(this.g.txtattr).attr({"font-size": fontSize, fill: "#fff"}));
-        res.update = function (X, Y, withAnimation) {
-            X = X || x;
-            Y = Y || y;
-            var bb = this[1].getBBox(),
-                w = mmax(bb.width + fontSize, size * 25 / 12),
-                h = mmax(bb.height + fontSize, size * 25 / 12),
-                x2 = X + size * Math.sin((angle - 22.5) * rad),
-                y2 = Y + size * Math.cos((angle - 22.5) * rad),
-                x1 = X + size * Math.sin((angle + 22.5) * rad),
-                y1 = Y + size * Math.cos((angle + 22.5) * rad),
-                dx = (x1 - x2) / 2,
-                dy = (y1 - y2) / 2,
-                rx = w / 2,
-                ry = h / 2,
-                k = -Math.sqrt(Math.abs(rx * rx * ry * ry - rx * rx * dy * dy - ry * ry * dx * dx) / (rx * rx * dy * dy + ry * ry * dx * dx)),
-                cx = k * rx * dy / ry + (x1 + x2) / 2,
-                cy = k * -ry * dx / rx + (y1 + y2) / 2;
-            if (withAnimation) {
-                this.animate({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")}, 500, ">");
-            } else {
-                this.attr({x: cx, y: cy, path: ["M", x, y, "L", x1, y1, "A", rx, ry, 0, 1, 1, x2, y2, "z"].join(",")});
-            }
-            return this;
-        };
-        res.update(x, y);
-        return res;
-    };
-
-    Raphael.fn.g.colorValue = function (value, total, s, b) {
-        return "hsb(" + [mmin((1 - value / total) * .4, 1), s || .75, b || .75] + ")";
-    };
-
-    Raphael.fn.g.snapEnds = function (from, to, steps) {
-        var f = from,
-            t = to;
-        if (f == t) {
-            return {from: f, to: t, power: 0};
-        }
-        function round(a) {
-            return Math.abs(a - .5) < .25 ? ~~(a) + .5 : Math.round(a);
-        }
-        var d = (t - f) / steps,
-            r = ~~(d),
-            R = r,
-            i = 0;
-        if (r) {
-            while (R) {
-                i--;
-                R = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
-            }
-            i ++;
-        } else {
-            while (!r) {
-                i = i || 1;
-                r = ~~(d * Math.pow(10, i)) / Math.pow(10, i);
-                i++;
-            }
-            i && i--;
-        }
-        t = round(to * Math.pow(10, i)) / Math.pow(10, i);
-        if (t < to) {
-            t = round((to + .5) * Math.pow(10, i)) / Math.pow(10, i);
-        }
-        f = round((from - (i > 0 ? 0 : .5)) * Math.pow(10, i)) / Math.pow(10, i);
-        return {from: f, to: t, power: i};
-    };
-    Raphael.fn.g.axis = function (x, y, length, from, to, steps, orientation, labels, type, dashsize) {
-        dashsize = dashsize == null ? 2 : dashsize;
-        type = type || "t";
-        steps = steps || 10;
-        var path = type == "|" || type == " " ? ["M", x + .5, y, "l", 0, .001] : orientation == 1 || orientation == 3 ? ["M", x + .5, y, "l", 0, -length] : ["M", x, y + .5, "l", length, 0],
-            ends = this.g.snapEnds(from, to, steps),
-            f = ends.from,
-            t = ends.to,
-            i = ends.power,
-            j = 0,
-            text = this.set();
-        d = (t - f) / steps;
-        var label = f,
-            rnd = i > 0 ? i : 0;
-            dx = length / steps;
-        if (+orientation == 1 || +orientation == 3) {
-            var Y = y,
-                addon = (orientation - 1 ? 1 : -1) * (dashsize + 3 + !!(orientation - 1));
-            while (Y >= y - length) {
-                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), Y + .5, "l", dashsize * 2 + 1, 0]));
-                text.push(this.text(x + addon, Y, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
-                label += d;
-                Y -= dx;
-            }
-            if (Math.round(Y + dx - (y - length))) {
-                type != "-" && type != " " && (path = path.concat(["M", x - (type == "+" || type == "|" ? dashsize : !(orientation - 1) * dashsize * 2), y - length + .5, "l", dashsize * 2 + 1, 0]));
-                text.push(this.text(x + addon, y - length, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr).attr({"text-anchor": orientation - 1 ? "start" : "end"}));
-            }
-        } else {
-            label = f;
-            rnd = (i > 0) * i;
-            addon = (orientation ? -1 : 1) * (dashsize + 9 + !orientation);
-            var X = x,
-                dx = length / steps,
-                txt = 0,
-                prev = 0;
-            while (X <= x + length) {
-                type != "-" && type != " " && (path = path.concat(["M", X + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
-                text.push(txt = this.text(X, y + addon, (labels && labels[j++]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
-                var bb = txt.getBBox();
-                if (prev >= bb.x - 5) {
-                    text.pop(text.length - 1).remove();
-                } else {
-                    prev = bb.x + bb.width;
-                }
-                label += d;
-                X += dx;
-            }
-            if (Math.round(X - dx - x - length)) {
-                type != "-" && type != " " && (path = path.concat(["M", x + length + .5, y - (type == "+" ? dashsize : !!orientation * dashsize * 2), "l", 0, dashsize * 2 + 1]));
-                text.push(this.text(x + length, y + addon, (labels && labels[j]) || (Math.round(label) == label ? label : +label.toFixed(rnd))).attr(this.g.txtattr));
-            }
-        }
-        var res = this.path(path);
-        res.text = text;
-        res.all = this.set([res, text]);
-        res.remove = function () {
-            this.text.remove();
-            this.constructor.prototype.remove.call(this);
-        };
-        return res;
-    };
-
-    Raphael.el.lighter = function (times) {
-        times = times || 2;
-        var fs = [this.attrs.fill, this.attrs.stroke];
-        this.fs = this.fs || [fs[0], fs[1]];
-        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
-        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
-        fs[0].b = mmin(fs[0].b * times, 1);
-        fs[0].s = fs[0].s / times;
-        fs[1].b = mmin(fs[1].b * times, 1);
-        fs[1].s = fs[1].s / times;
-        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
-    };
-    Raphael.el.darker = function (times) {
-        times = times || 2;
-        var fs = [this.attrs.fill, this.attrs.stroke];
-        this.fs = this.fs || [fs[0], fs[1]];
-        fs[0] = Raphael.rgb2hsb(Raphael.getRGB(fs[0]).hex);
-        fs[1] = Raphael.rgb2hsb(Raphael.getRGB(fs[1]).hex);
-        fs[0].s = mmin(fs[0].s * times, 1);
-        fs[0].b = fs[0].b / times;
-        fs[1].s = mmin(fs[1].s * times, 1);
-        fs[1].b = fs[1].b / times;
-        this.attr({fill: "hsb(" + [fs[0].h, fs[0].s, fs[0].b] + ")", stroke: "hsb(" + [fs[1].h, fs[1].s, fs[1].b] + ")"});
-    };
-    Raphael.el.original = function () {
-        if (this.fs) {
-            this.attr({fill: this.fs[0], stroke: this.fs[1]});
-            delete this.fs;
-        }
-    };
-})();/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.barchart = function (x, y, width, height, values, opts) {
-    opts = opts || {};
-    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
-        gutter = parseFloat(opts.gutter || "20%"),
-        chart = this.set(),
-        bars = this.set(),
-        covers = this.set(),
-        covers2 = this.set(),
-        total = Math.max.apply(Math, values),
-        stacktotal = [],
-        paper = this,
-        multi = 0,
-        colors = opts.colors || this.g.colors,
-        len = values.length;
-    if (this.raphael.is(values[0], "array")) {
-        total = [];
-        multi = len;
-        len = 0;
-        for (var i = values.length; i--;) {
-            bars.push(this.set());
-            total.push(Math.max.apply(Math, values[i]));
-            len = Math.max(len, values[i].length);
-        }
-        if (opts.stacked) {
-            for (var i = len; i--;) {
-                var tot = 0;
-                for (var j = values.length; j--;) {
-                    tot +=+ values[j][i] || 0;
-                }
-                stacktotal.push(tot);
-            }
-        }
-        for (var i = values.length; i--;) {
-            if (values[i].length < len) {
-                for (var j = len; j--;) {
-                    values[i].push(0);
-                }
-            }
-        }
-        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
-    }
-    
-    total = (opts.to) || total;
-    var barwidth = width / (len * (100 + gutter) + gutter) * 100,
-        barhgutter = barwidth * gutter / 100,
-        barvgutter = opts.vgutter == null ? 20 : opts.vgutter,
-        stack = [],
-        X = x + barhgutter,
-        Y = (height - 2 * barvgutter) / total;
-    if (!opts.stretch) {
-        barhgutter = Math.round(barhgutter);
-        barwidth = Math.floor(barwidth);
-    }
-    !opts.stacked && (barwidth /= multi || 1);
-    for (var i = 0; i < len; i++) {
-        stack = [];
-        for (var j = 0; j < (multi || 1); j++) {
-            var h = Math.round((multi ? values[j][i] : values[i]) * Y),
-                top = y + height - barvgutter - h,
-                bar = this.g.finger(Math.round(X + barwidth / 2), top + h, barwidth, h, true, type).attr({stroke: "none", fill: colors[multi ? j : i]});
-            if (multi) {
-                bars[j].push(bar);
-            } else {
-                bars.push(bar);
-            }
-            bar.y = top;
-            bar.x = Math.round(X + barwidth / 2);
-            bar.w = barwidth;
-            bar.h = h;
-						bar.index = i;
-            bar.value = multi ? values[j][i] : values[i];
-            if (!opts.stacked) {
-                X += barwidth;
-            } else {
-                stack.push(bar);
-            }
-        }
-        if (opts.stacked) {
-            var cvr;
-            covers2.push(cvr = this.rect(stack[0].x - stack[0].w / 2, y, barwidth, height).attr(this.g.shim));
-            cvr.bars = this.set();
-            var size = 0;
-            for (var s = stack.length; s--;) {
-                stack[s].toFront();
-            }
-            for (var s = 0, ss = stack.length; s < ss; s++) {
-                var bar = stack[s],
-                    cover,
-                    h = (size + bar.value) * Y,
-                    path = this.g.finger(bar.x, y + height - barvgutter - !!size * .5, barwidth, h, true, type, 1);
-                cvr.bars.push(bar);
-                size && bar.attr({path: path});
-                bar.h = h;
-                bar.y = y + height - barvgutter - !!size * .5 - h;
-                covers.push(cover = this.rect(bar.x - bar.w / 2, bar.y, barwidth, bar.value * Y).attr(this.g.shim));
-                cover.bar = bar;
-                cover.value = bar.value;
-                size += bar.value;
-            }
-            X += barwidth;
-        }
-        X += barhgutter;
-    }
-    covers2.toFront();
-    X = x + barhgutter;
-    if (!opts.stacked) {
-        for (var i = 0; i < len; i++) {
-            for (var j = 0; j < (multi || 1); j++) {
-                var cover;
-                covers.push(cover = this.rect(Math.round(X), y + barvgutter, barwidth, height - barvgutter).attr(this.g.shim));
-                cover.bar = multi ? bars[j][i] : bars[i];
-                cover.value = cover.bar.value;
-                X += barwidth;
-            }
-            X += barhgutter;
-        }
-    }
-    chart.label = function (labels, isBottom, rotate) {
-        labels = labels || [];
-        isBottom = isBottom == undefined ? true : isBottom;
-	rotate = rotate == undefined ? false : rotate;
-        this.labels = paper.set();
-        var L, l = -Infinity;
-        if (opts.stacked) {
-            for (var i = 0; i < len; i++) {
-                var tot = 0;
-                for (var j = 0; j < (multi || 1); j++) {
-                    tot += multi ? values[j][i] : values[i];
-                    if (j == 0) {
-                        var label = paper.g.labelise(labels[j][i], tot, total);
-                        L = paper.g.text(bars[j][i].x, isBottom ? y + height - barvgutter / 2 : bars[j][i].y - 10, label);
-			if (rotate) {
-				L.rotate(90);
-			}
-                        var bb = L.getBBox();
-                        if (bb.x - 7 < l) {
-                            L.remove();
-                        } else {
-                            this.labels.push(L);
-                            l = bb.x + (rotate ? bb.height : bb.width);
-                        }
-                    }
-                }
-            }
-        } else {
-            for (var i = 0; i < len; i++) {
-                for (var j = 0; j < (multi || 1); j++) {
-                    // did not remove the loop because don't yet know whether to accept multi array input for arrays
-                    var label = paper.g.labelise(multi ? labels[0] && labels[0][i] : labels[i], multi ? values[0][i] : values[i], total);
-                     L = paper.g.text(bars[0][i].x, isBottom ? y + 5 + height - barvgutter / 2 : bars[0][i].y - 10, label);
-			if (rotate) {
-				L.rotate(90);
-				// If we rotated it, we need to move it as well. Still have to use the width
-				// to get the "length" of the label, divided it in two and shift down.
-				L.translate(0, (L.getBBox().width / 2));
-			}
-                    var bb = L.getBBox();
-//                    if (bb.x - 7 < l) {
-                    if (bb.x - (this.getBBox().width) < l) {
-                        L.remove();
-                    } else {
-                        this.labels.push(L);
-                        l = bb.x + (rotate ? bb.height : bb.width);
-                    }
-                }
-            }
-        }
-        return this;
-    };
-    chart.hover = function (fin, fout) {
-        covers2.hide();
-        covers.show();
-        covers.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.hoverColumn = function (fin, fout) {
-        covers.hide();
-        covers2.show();
-        fout = fout || function () {};
-        covers2.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.click = function (f) {
-        covers2.hide();
-        covers.show();
-        covers.click(f);
-        return this;
-    };
-    chart.each = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers.length; i--;) {
-            f.call(covers[i]);
-        }
-        return this;
-    };
-    chart.eachColumn = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers2.length; i--;) {
-            f.call(covers2[i]);
-        }
-        return this;
-    };
-    chart.clickColumn = function (f) {
-        covers.hide();
-        covers2.show();
-        covers2.click(f);
-        return this;
-    };
-    chart.push(bars, covers, covers2);
-    chart.bars = bars;
-    chart.covers = covers;
-    return chart;
-};
-Raphael.fn.g.hbarchart = function (x, y, width, height, values, opts) {
-    opts = opts || {};
-    var type = {round: "round", sharp: "sharp", soft: "soft"}[opts.type] || "square",
-        gutter = parseFloat(opts.gutter || "20%"),
-        chart = this.set(),
-        bars = this.set(),
-        covers = this.set(),
-        covers2 = this.set(),
-        total = Math.max.apply(Math, values),
-        stacktotal = [],
-        paper = this,
-        multi = 0,
-        colors = opts.colors || this.g.colors,
-        len = values.length;
-    if (this.raphael.is(values[0], "array")) {
-        total = [];
-        multi = len;
-        len = 0;
-        for (var i = values.length; i--;) {
-            bars.push(this.set());
-            total.push(Math.max.apply(Math, values[i]));
-            len = Math.max(len, values[i].length);
-        }
-        if (opts.stacked) {
-            for (var i = len; i--;) {
-                var tot = 0;
-                for (var j = values.length; j--;) {
-                    tot +=+ values[j][i] || 0;
-                }
-                stacktotal.push(tot);
-            }
-        }
-        for (var i = values.length; i--;) {
-            if (values[i].length < len) {
-                for (var j = len; j--;) {
-                    values[i].push(0);
-                }
-            }
-        }
-        total = Math.max.apply(Math, opts.stacked ? stacktotal : total);
-    }
-    
-    total = (opts.to) || total;
-    var barheight = Math.floor(height / (len * (100 + gutter) + gutter) * 100),
-        bargutter = Math.floor(barheight * gutter / 100),
-        stack = [],
-        Y = y + bargutter,
-        X = (width - 1) / total;
-    !opts.stacked && (barheight /= multi || 1);
-    for (var i = 0; i < len; i++) {
-        stack = [];
-        for (var j = 0; j < (multi || 1); j++) {
-            var val = multi ? values[j][i] : values[i],
-                bar = this.g.finger(x, Y + barheight / 2, Math.round(val * X), barheight - 1, false, type).attr({stroke: "none", fill: colors[multi ? j : i]});
-            if (multi) {
-                bars[j].push(bar);
-            } else {
-                bars.push(bar);
-            }
-            bar.x = x + Math.round(val * X);
-            bar.y = Y + barheight / 2;
-            bar.w = Math.round(val * X);
-            bar.h = barheight;
-            bar.value = +val;
-            if (!opts.stacked) {
-                Y += barheight;
-            } else {
-                stack.push(bar);
-            }
-        }
-        if (opts.stacked) {
-            var cvr = this.rect(x, stack[0].y - stack[0].h / 2, width, barheight).attr(this.g.shim);
-            covers2.push(cvr);
-            cvr.bars = this.set();
-            var size = 0;
-            for (var s = stack.length; s--;) {
-                stack[s].toFront();
-            }
-            for (var s = 0, ss = stack.length; s < ss; s++) {
-                var bar = stack[s],
-                    cover,
-                    val = Math.round((size + bar.value) * X),
-                    path = this.g.finger(x, bar.y, val, barheight - 1, false, type, 1);
-                cvr.bars.push(bar);
-                size && bar.attr({path: path});
-                bar.w = val;
-                bar.x = x + val;
-                covers.push(cover = this.rect(x + size * X, bar.y - bar.h / 2, bar.value * X, barheight).attr(this.g.shim));
-                cover.bar = bar;
-                size += bar.value;
-            }
-            Y += barheight;
-        }
-        Y += bargutter;
-    }
-    covers2.toFront();
-    Y = y + bargutter;
-    if (!opts.stacked) {
-        for (var i = 0; i < len; i++) {
-            for (var j = 0; j < (multi || 1); j++) {
-                var cover = this.rect(x, Y, width, barheight).attr(this.g.shim);
-                covers.push(cover);
-                cover.bar = multi ? bars[j][i] : bars[i];
-                cover.value = cover.bar.value;
-                Y += barheight;
-            }
-            Y += bargutter;
-        }
-    }
-    chart.label = function (labels, isRight) {
-        labels = labels || [];
-        this.labels = paper.set();
-        for (var i = 0; i < len; i++) {
-            for (var j = 0; j < multi; j++) {
-                var  label = paper.g.labelise(multi ? labels[j] && labels[j][i] : labels[i], multi ? values[j][i] : values[i], total);
-                var X = isRight ? bars[i * (multi || 1) + j].x - barheight / 2 + 3 : x + 5,
-                    A = isRight ? "end" : "start",
-                    L;
-                this.labels.push(L = paper.g.text(X, bars[i * (multi || 1) + j].y, label).attr({"text-anchor": A}).insertBefore(covers[0]));
-                if (L.getBBox().x < x + 5) {
-                    L.attr({x: x + 5, "text-anchor": "start"});
-                } else {
-                    bars[i * (multi || 1) + j].label = L;
-                }
-            }
-        }
-        return this;
-    };
-    chart.hover = function (fin, fout) {
-        covers2.hide();
-        covers.show();
-        fout = fout || function () {};
-        covers.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.hoverColumn = function (fin, fout) {
-        covers.hide();
-        covers2.show();
-        fout = fout || function () {};
-        covers2.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.each = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers.length; i--;) {
-            f.call(covers[i]);
-        }
-        return this;
-    };
-    chart.eachColumn = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers2.length; i--;) {
-            f.call(covers2[i]);
-        }
-        return this;
-    };
-    chart.click = function (f) {
-        covers2.hide();
-        covers.show();
-        covers.click(f);
-        return this;
-    };
-    chart.clickColumn = function (f) {
-        covers.hide();
-        covers2.show();
-        covers2.click(f);
-        return this;
-    };
-    chart.push(bars, covers, covers2);
-    chart.bars = bars;
-    chart.covers = covers;
-    return chart;
-};
-/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.dotchart = function (x, y, width, height, valuesx, valuesy, size, opts) {
-    function drawAxis(ax) {
-        +ax[0] && (ax[0] = paper.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[1] && (ax[1] = paper.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
-        +ax[2] && (ax[2] = paper.g.axis(x + gutter, y + height - gutter + maxR, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[3] && (ax[3] = paper.g.axis(x + gutter - maxR, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
-    }
-    opts = opts || {};
-    var xdim = this.g.snapEnds(Math.min.apply(Math, valuesx), Math.max.apply(Math, valuesx), valuesx.length - 1),
-        minx = xdim.from,
-        maxx = xdim.to,
-        gutter = opts.gutter || 10,
-        ydim = this.g.snapEnds(Math.min.apply(Math, valuesy), Math.max.apply(Math, valuesy), valuesy.length - 1),
-        miny = ydim.from,
-        maxy = ydim.to,
-        len = Math.max(valuesx.length, valuesy.length, size.length),
-        symbol = this.g.markers[opts.symbol] || "disc",
-        res = this.set(),
-        series = this.set(),
-        max = opts.max || 100,
-        top = Math.max.apply(Math, size),
-        R = [],
-        paper = this,
-        k = Math.sqrt(top / Math.PI) * 2 / max;
-
-    for (var i = 0; i < len; i++) {
-        R[i] = Math.min(Math.sqrt(size[i] / Math.PI) * 2 / k, max);
-    }
-    gutter = Math.max.apply(Math, R.concat(gutter));
-    var axis = this.set(),
-        maxR = Math.max.apply(Math, R);
-    if (opts.axis) {
-        var ax = (opts.axis + "").split(/[,\s]+/);
-        drawAxis(ax);
-        var g = [], b = [];
-        for (var i = 0, ii = ax.length; i < ii; i++) {
-            var bb = ax[i].all ? ax[i].all.getBBox()[["height", "width"][i % 2]] : 0;
-            g[i] = bb + gutter;
-            b[i] = bb;
-        }
-        gutter = Math.max.apply(Math, g.concat(gutter));
-        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
-            ax[i].remove();
-            ax[i] = 1;
-        }
-        drawAxis(ax);
-        for (var i = 0, ii = ax.length; i < ii; i++) if (ax[i].all) {
-            axis.push(ax[i].all);
-        }
-        res.axis = axis;
-    }
-    var kx = (width - gutter * 2) / ((maxx - minx) || 1),
-        ky = (height - gutter * 2) / ((maxy - miny) || 1);
-    for (var i = 0, ii = valuesy.length; i < ii; i++) {
-        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
-            X = x + gutter + (valuesx[i] - minx) * kx,
-            Y = y + height - gutter - (valuesy[i] - miny) * ky;
-        sym && R[i] && series.push(this.g[sym](X, Y, R[i]).attr({fill: opts.heat ? this.g.colorValue(R[i], maxR) : Raphael.fn.g.colors[0], "fill-opacity": opts.opacity ? R[i] / max : 1, stroke: "none"}));
-    }
-    var covers = this.set();
-    for (var i = 0, ii = valuesy.length; i < ii; i++) {
-        var X = x + gutter + (valuesx[i] - minx) * kx,
-            Y = y + height - gutter - (valuesy[i] - miny) * ky;
-        covers.push(this.circle(X, Y, maxR).attr(this.g.shim));
-        opts.href && opts.href[i] && covers[i].attr({href: opts.href[i]});
-        covers[i].r = +R[i].toFixed(3);
-        covers[i].x = +X.toFixed(3);
-        covers[i].y = +Y.toFixed(3);
-        covers[i].X = valuesx[i];
-        covers[i].Y = valuesy[i];
-        covers[i].value = size[i] || 0;
-        covers[i].dot = series[i];
-    }
-    res.covers = covers;
-    res.series = series;
-    res.push(series, axis, covers);
-    res.hover = function (fin, fout) {
-        covers.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    res.click = function (f) {
-        covers.click(f);
-        return this;
-    };
-    res.each = function (f) {
-        if (!Raphael.is(f, "function")) {
-            return this;
-        }
-        for (var i = covers.length; i--;) {
-            f.call(covers[i]);
-        }
-        return this;
-    };
-    res.href = function (map) {
-        var cover;
-        for (var i = covers.length; i--;) {
-            cover = covers[i];
-            if (cover.X == map.x && cover.Y == map.y && cover.value == map.value) {
-                cover.attr({href: map.href});
-            }
-        }
-    };
-    return res;
-};
-/*!
- * g.Raphael 0.4.2 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.linechart = function (x, y, width, height, valuesx, valuesy, opts) {
-    function shrink(values, dim) {
-        var k = values.length / dim,
-            j = 0,
-            l = k,
-            sum = 0,
-            res = [];
-        while (j < values.length) {
-            l--;
-            if (l < 0) {
-                sum += values[j] * (1 + l);
-                res.push(sum / k);
-                sum = values[j++] * -l;
-                l += k;
-            } else {
-                sum += values[j++];
-            }
-        }
-        return res;
-    }
-    function getAnchors(p1x, p1y, p2x, p2y, p3x, p3y) {
-        var l1 = (p2x - p1x) / 2,
-            l2 = (p3x - p2x) / 2,
-            a = Math.atan((p2x - p1x) / Math.abs(p2y - p1y)),
-            b = Math.atan((p3x - p2x) / Math.abs(p2y - p3y));
-        a = p1y < p2y ? Math.PI - a : a;
-        b = p3y < p2y ? Math.PI - b : b;
-        var alpha = Math.PI / 2 - ((a + b) % (Math.PI * 2)) / 2,
-            dx1 = l1 * Math.sin(alpha + a),
-            dy1 = l1 * Math.cos(alpha + a),
-            dx2 = l2 * Math.sin(alpha + b),
-            dy2 = l2 * Math.cos(alpha + b);
-        return {
-            x1: p2x - dx1,
-            y1: p2y + dy1,
-            x2: p2x + dx2,
-            y2: p2y + dy2
-        };
-    }
-    opts = opts || {};
-    if (!this.raphael.is(valuesx[0], "array")) {
-        valuesx = [valuesx];
-    }
-    if (!this.raphael.is(valuesy[0], "array")) {
-        valuesy = [valuesy];
-    }
-    var gutter = opts.gutter || 10,
-        len = Math.max(valuesx[0].length, valuesy[0].length),
-        symbol = opts.symbol || "",
-        colors = opts.colors || Raphael.fn.g.colors,
-        that = this,
-        columns = null,
-        dots = null,
-        chart = this.set(),
-        path = [];
-
-    for (var i = 0, ii = valuesy.length; i < ii; i++) {
-        len = Math.max(len, valuesy[i].length);
-    }
-    var shades = this.set();
-    for (i = 0, ii = valuesy.length; i < ii; i++) {
-        if (opts.shade) {
-            shades.push(this.path().attr({stroke: "none", fill: colors[i], opacity: opts.nostroke ? 1 : .3}));
-        }
-        if (valuesy[i].length > width - 2 * gutter) {
-            valuesy[i] = shrink(valuesy[i], width - 2 * gutter);
-            len = width - 2 * gutter;
-        }
-        if (valuesx[i] && valuesx[i].length > width - 2 * gutter) {
-            valuesx[i] = shrink(valuesx[i], width - 2 * gutter);
-        }
-    }
-    var allx = Array.prototype.concat.apply([], valuesx),
-        ally = Array.prototype.concat.apply([], valuesy),
-        xdim = this.g.snapEnds(Math.min.apply(Math, allx), Math.max.apply(Math, allx), valuesx[0].length - 1);
-        if(opts.clip) {
-            var minx = opts.minx || xdim.from,
-                maxx = opts.maxx || xdim.to,
-                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
-                miny = opts.miny || ydim.from,
-                maxy = opts.maxy || ydim.to;
-        } else {
-            var minx = opts.minx && Math.min(opts.minx, xdim.from) || xdim.from,
-                maxx = opts.maxx && Math.max(opts.maxx, xdimt.to) || xdim.to,
-                ydim = this.g.snapEnds(Math.min.apply(Math, ally), Math.max.apply(Math, ally), valuesy[0].length - 1),
-                miny = opts.miny && Math.min(opts.miny, ydim.from) || ydim.from,
-                maxy = opts.maxy && Math.max(opts.maxy, ydim.to) || ydim.to;
-        }
-        kx = (width - gutter * 2) / ((maxx - minx) || 1),
-        ky = (height - gutter * 2) / ((maxy - miny) || 1);
-
-    var lines = this.set(),
-        symbols = this.set(),
-        line;
-    for (i = 0, ii = valuesy.length; i < ii; i++) {
-        if (!opts.nostroke) {
-            lines.push(line = this.path().attr({
-                stroke: colors[i],
-                "stroke-width": opts.width || 2,
-                "stroke-linejoin": "round",
-                "stroke-linecap": "round",
-                "stroke-dasharray": opts.dash || ""
-            }));
-        }
-        var sym = this.raphael.is(symbol, "array") ? symbol[i] : symbol,
-            symset = this.set();
-        path = [];
-        for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
-            var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
-                Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
-            (Raphael.is(sym, "array") ? sym[j] : sym) && symset.push(this.g[Raphael.fn.g.markers[this.raphael.is(sym, "array") ? sym[j] : sym]](X, Y, (opts.width || 2) * 3).attr({fill: colors[i], stroke: "none"}));
-            if (opts.smooth) {
-                if (j && j != jj - 1) {
-                    var X0 = x + gutter + ((valuesx[i] || valuesx[0])[j - 1] - minx) * kx,
-                        Y0 = y + height - gutter - (valuesy[i][j - 1] - miny) * ky,
-                        X2 = x + gutter + ((valuesx[i] || valuesx[0])[j + 1] - minx) * kx,
-                        Y2 = y + height - gutter - (valuesy[i][j + 1] - miny) * ky;
-                    var a = getAnchors(X0, Y0, X, Y, X2, Y2);
-                    path = path.concat([a.x1, a.y1, X, Y, a.x2, a.y2]);
-                }
-                if (!j) {
-                    path = ["M", X, Y, "C", X, Y];
-                }
-            } else {
-                path = path.concat([j ? "L" : "M", X, Y]);
-            }
-        }
-        if (opts.smooth) {
-            path = path.concat([X, Y, X, Y]);
-        }
-        symbols.push(symset);
-        if (opts.shade) {
-            shades[i].attr({path: path.concat(["L", X, y + height - gutter, "L",  x + gutter + ((valuesx[i] || valuesx[0])[0] - minx) * kx, y + height - gutter, "z"]).join(",")});
-        }
-        !opts.nostroke && line.attr({path: path.join(","), 'clip-rect': [x + gutter, y + gutter, width - 2 * gutter, height - 2 * gutter].join(",")});
-    }
-
-    function createColumns(f) {
-        // unite Xs together
-        var Xs = [];
-        for (var i = 0, ii = valuesx.length; i < ii; i++) {
-            Xs = Xs.concat(valuesx[i]);
-        }
-        Xs.sort(function(a,b) { return a - b; });
-        // remove duplicates
-        var Xs2 = [],
-            xs = [];
-        for (i = 0, ii = Xs.length; i < ii; i++) {
-            Xs[i] != Xs[i - 1] && Xs2.push(Xs[i]) && xs.push(x + gutter + (Xs[i] - minx) * kx);
-        }
-        Xs = Xs2;
-        ii = Xs.length;
-        var cvrs = f || that.set();
-        for (i = 0; i < ii; i++) {
-            var X = xs[i] - (xs[i] - (xs[i - 1] || x)) / 2,
-                w = ((xs[i + 1] || x + width) - xs[i]) / 2 + (xs[i] - (xs[i - 1] || x)) / 2,
-                C;
-            f ? (C = {}) : cvrs.push(C = that.rect(X - 1, y, Math.max(w + 1, 1), height).attr({stroke: "none", fill: "#000", opacity: 0}));
-            C.values = [];
-            C.symbols = that.set();
-            C.y = [];
-            C.x = xs[i];
-            C.axis = Xs[i];
-            for (var j = 0, jj = valuesy.length; j < jj; j++) {
-                Xs2 = valuesx[j] || valuesx[0];
-                for (var k = 0, kk = Xs2.length; k < kk; k++) {
-                    if (Xs2[k] == Xs[i]) {
-                        C.values.push(valuesy[j][k]);
-                        C.y.push(y + height - gutter - (valuesy[j][k] - miny) * ky);
-                        C.symbols.push(chart.symbols[j][k]);
-                    }
-                }
-            }
-            f && f.call(C);
-        }
-        !f && (columns = cvrs);
-    }
-    function createDots(f) {
-        var cvrs = f || that.set(),
-            C;
-        for (var i = 0, ii = valuesy.length; i < ii; i++) {
-            for (var j = 0, jj = valuesy[i].length; j < jj; j++) {
-                var X = x + gutter + ((valuesx[i] || valuesx[0])[j] - minx) * kx,
-                    nearX = x + gutter + ((valuesx[i] || valuesx[0])[j ? j - 1 : 1] - minx) * kx,
-                    Y = y + height - gutter - (valuesy[i][j] - miny) * ky;
-                f ? (C = {}) : cvrs.push(C = that.circle(X, Y, Math.abs(nearX - X) / 2).attr({stroke: "none", fill: "#000", opacity: 0}));
-                C.x = X;
-                C.y = Y;
-                C.value = valuesy[i][j];
-                C.line = chart.lines[i];
-                C.shade = chart.shades[i];
-                C.symbol = chart.symbols[i][j];
-                C.symbols = chart.symbols[i];
-                C.axis = (valuesx[i] || valuesx[0])[j];
-                f && f.call(C);
-            }
-        }
-        !f && (dots = cvrs);
-    }
-
-    var axis = this.set();
-    if (opts.axis) {
-        var ax = (opts.axis + "").split(/[,\s]+/);
-        +ax[0] && axis.push(this.g.axis(x + gutter, y + gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 2, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[1] && axis.push(this.g.axis(x + width - gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 3, opts.axisylabels || null, opts.axisytype || "t"));
-        +ax[2] && axis.push(this.g.axis(x + gutter, y + height - gutter, width - 2 * gutter, minx, maxx, opts.axisxstep || Math.floor((width - 2 * gutter) / 20), 0, opts.axisxlabels || null, opts.axisxtype || "t"));
-        +ax[3] && axis.push(this.g.axis(x + gutter, y + height - gutter, height - 2 * gutter, miny, maxy, opts.axisystep || Math.floor((height - 2 * gutter) / 20), 1, opts.axisylabels || null, opts.axisytype || "t"));
-    }
-
-    chart.push(lines, shades, symbols, axis, columns, dots);
-    chart.lines = lines;
-    chart.shades = shades;
-    chart.symbols = symbols;
-    chart.axis = axis;
-    chart.hoverColumn = function (fin, fout) {
-        !columns && createColumns();
-        columns.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.clickColumn = function (f) {
-        !columns && createColumns();
-        columns.click(f);
-        return this;
-    };
-    chart.hrefColumn = function (cols) {
-        var hrefs = that.raphael.is(arguments[0], "array") ? arguments[0] : arguments;
-        if (!(arguments.length - 1) && typeof cols == "object") {
-            for (var x in cols) {
-                for (var i = 0, ii = columns.length; i < ii; i++) if (columns[i].axis == x) {
-                    columns[i].attr("href", cols[x]);
-                }
-            }
-        }
-        !columns && createColumns();
-        for (i = 0, ii = hrefs.length; i < ii; i++) {
-            columns[i] && columns[i].attr("href", hrefs[i]);
-        }
-        return this;
-    };
-    chart.hover = function (fin, fout) {
-        !dots && createDots();
-        dots.mouseover(fin).mouseout(fout);
-        return this;
-    };
-    chart.click = function (f) {
-        !dots && createDots();
-        dots.click(f);
-        return this;
-    };
-    chart.each = function (f) {
-        createDots(f);
-        return this;
-    };
-    chart.eachColumn = function (f) {
-        createColumns(f);
-        return this;
-    };
-    return chart;
-};
-/*!
- * g.Raphael 0.4.1 - Charting library, based on Raphaël
- *
- * Copyright (c) 2009 Dmitry Baranovskiy (http://g.raphaeljs.com)
- * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license.
- */
-Raphael.fn.g.piechart = function (cx, cy, r, values, opts) {
-    opts = opts || {};
-    var paper = this,
-        sectors = [],
-        covers = this.set(),
-        chart = this.set(),
-        series = this.set(),
-        order = [],
-        len = values.length,
-        angle = 0,
-        total = 0,
-        others = 0,
-        cut = 9,
-        defcut = true;
-
-    var sum = 0;
-    for (var i = 0; i < len; i++)
-        sum += values[i];
-    var single = false;
-    var single_index = -1;
-    for (var i = 0; i < len; i++)
-        if (sum == values[i]) {
-            single = true;
-            single_index = i;
-            break;
-        }
-    if (len == 1 || single == true) {
-        for(var i = 0; i < len; i++) {
-            var radius = 0.1;
-            if (i == single_index) {
-                radius = r;
-            }
-            series.push(this.circle(cx, cy, radius).attr({fill: opts.colors && opts.colors[i] || this.g.colors[i], stroke: opts.stroke || "#fff", "stroke-width": opts.strokewidth == null ? 1 : opts.strokewidth}));
-            covers.push(this.circle(cx, cy, radius).attr({href: opts.href ? opts.href[i] : null}).attr(this.g.shim));
-            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
-            series[i].middle = {x: cx, y: cy};
-            series[i].mangle = 180;
-        }
-        total = values[single_index];
-    } else {
-        function sector(cx, cy, r, startAngle, endAngle, fill) {
-            var rad = Math.PI / 180,
-                x1 = cx + r * Math.cos(-startAngle * rad),
-                x2 = cx + r * Math.cos(-endAngle * rad),
-                xm = cx + r / 2 * Math.cos(-(startAngle + (endAngle - startAngle) / 2) * rad),
-                y1 = cy + r * Math.sin(-startAngle * rad),
-                y2 = cy + r * Math.sin(-endAngle * rad),
-                ym = cy + r / 2 * Math.sin(-(startAngle + (endAngle - startAngle) / 2) * rad),
-                res = ["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(Math.abs(endAngle - startAngle) > 180), 1, x2, y2, "z"];
-            res.middle = {x: xm, y: ym};
-            return res;
-        }
-        for (var i = 0; i < len; i++) {
-            total += values[i];
-            values[i] = {value: values[i], order: i, valueOf: function () { return this.value; }};
-        }
-        values.sort(function (a, b) {
-            return b.value - a.value;
-        });
-        for (i = 0; i < len; i++) {
-            if (defcut && values[i] * 360 / total <= 1.5) {
-                cut = i;
-                defcut = false;
-            }
-            if (i > cut) {
-                defcut = false;
-                values[cut].value += values[i];
-                values[cut].others = true;
-                others = values[cut].value;
-            }
-        }
-        len = Math.min(cut + 1, values.length);
-        others && values.splice(len) && (values[cut].others = true);
-        for (i = 0; i < len; i++) {
-            var valueOrder = values[i].order;
-            var mangle = angle - 360 * values[i] / total / 2;
-            if (!i) {
-                angle = 90 - mangle;
-                mangle = angle - 360 * values[i] / total / 2;
-            }
-            if (opts.init) {
-                var ipath = sector(cx, cy, 1, angle, angle - 360 * values[i] / total).join(",");
-            }
-            var path = sector(cx, cy, r, angle, angle -= 360 * values[i] / total);
-            var p = this.path(opts.init ? ipath : path).attr({fill: opts.colors && opts.colors[valueOrder] || this.g.colors[valueOrder] || "#666", stroke: opts.stroke || "#fff", "stroke-width": (opts.strokewidth == null ? 1 : opts.strokewidth), "stroke-linejoin": "round"});
-            p.value = values[i];
-            p.middle = path.middle;
-            p.mangle = mangle;
-            sectors.push(p);
-            series.push(p);
-            opts.init && p.animate({path: path.join(",")}, (+opts.init - 1) || 1000, ">");
-        }
-        for (i = 0; i < len; i++) {
-            p = paper.path(sectors[i].attr("path")).attr(this.g.shim);
-            var valueOrder = values[i].order;
-            opts.href && opts.href[valueOrder] && p.attr({href: opts.href[valueOrder]});
-            //p.attr = function () {}; // this breaks translate!
-            covers.push(p);
-        }
-    }
-
-    chart.hover = function (fin, fout) {
-        fout = fout || function () {};
-        var that = this;
-        for (var i = 0; i < len; i++) {
-            (function (sector, cover, j) {
-                var o = {
-                    sector: sector,
-                    cover: cover,
-                    cx: cx,
-                    cy: cy,
-                    mx: sector.middle.x,
-                    my: sector.middle.y,
-                    mangle: sector.mangle,
-                    r: r,
-                    value: values[j],
-                    total: total,
-                    label: that.labels && that.labels[j]
-                };
-                cover.mouseover(function () {
-                    fin.call(o);
-                }).mouseout(function () {
-                    fout.call(o);
-                });
-            })(series[i], covers[i], i);
-        }
-        return this;
-    };
-    // x: where label could be put
-    // y: where label could be put
-    // value: value to show
-    // total: total number to count %
-    chart.each = function (f) {
-        var that = this;
-        for (var i = 0; i < len; i++) {
-            (function (sector, cover, j) {
-                var o = {
-                    sector: sector,
-                    cover: cover,
-                    cx: cx,
-                    cy: cy,
-                    x: sector.middle.x,
-                    y: sector.middle.y,
-                    mangle: sector.mangle,
-                    r: r,
-                    value: values[j],
-                    total: total,
-                    label: that.labels && that.labels[j]
-                };
-                f.call(o);
-            })(series[i], covers[i], i);
-        }
-        return this;
-    };
-    chart.click = function (f) {
-        var that = this;
-        for (var i = 0; i < len; i++) {
-            (function (sector, cover, j) {
-                var o = {
-                    sector: sector,
-                    cover: cover,
-                    cx: cx,
-                    cy: cy,
-                    mx: sector.middle.x,
-                    my: sector.middle.y,
-                    mangle: sector.mangle,
-                    r: r,
-                    value: values[j],
-                    total: total,
-                    label: that.labels && that.labels[j]
-                };
-                cover.click(function () { f.call(o); });
-            })(series[i], covers[i], i);
-        }
-        return this;
-    };
-    chart.inject = function (element) {
-        element.insertBefore(covers[0]);
-    };
-    var legend = function (labels, otherslabel, mark, dir) {
-        var x = cx + r + r / 5,
-            y = cy,
-            h = y + 10;
-        labels = labels || [];
-        dir = (dir && dir.toLowerCase && dir.toLowerCase()) || "east";
-        mark = paper.g.markers[mark && mark.toLowerCase()] || "disc";
-        chart.labels = paper.set();
-        for (var i = 0; i < len; i++) {
-            var clr = series[i].attr("fill"),
-                j = values[i].order,
-                txt;
-            values[i].others && (labels[j] = otherslabel || "Others");
-            labels[j] = paper.g.labelise(labels[j], values[i], total);
-            chart.labels.push(paper.set());
-            chart.labels[i].push(paper.g[mark](x + 5, h, 5).attr({fill: clr, stroke: "none"}));
-            chart.labels[i].push(txt = paper.text(x + 20, h, labels[j] || values[j]).attr(paper.g.txtattr).attr({fill: opts.legendcolor || "#000", "text-anchor": "start"}));
-            covers[i].label = chart.labels[i];
-            h += txt.getBBox().height * 1.2;
-        }
-        var bb = chart.labels.getBBox(),
-            tr = {
-                east: [0, -bb.height / 2],
-                west: [-bb.width - 2 * r - 20, -bb.height / 2],
-                north: [-r - bb.width / 2, -r - bb.height - 10],
-                south: [-r - bb.width / 2, r + 10]
-            }[dir];
-        chart.labels.translate.apply(chart.labels, tr);
-        chart.push(chart.labels);
-    };
-    if (opts.legend) {
-        legend(opts.legend, opts.legendothers, opts.legendmark, opts.legendpos);
-    }
-    chart.push(series, covers);
-    chart.series = series;
-    chart.covers = covers;
-    
-    var w = paper.width,
-        h = paper.height,
-        bb = chart.getBBox(),
-        tr = [(w - bb.width)/2 - bb.x, (h - bb.height)/2 - bb.y];
-    cx += tr[0];
-    cy += tr[1];
-    chart.translate.apply(chart, tr);
-    return chart;
-};
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js
deleted file mode 100644
index de0fc51..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/i18n/i18n.js
+++ /dev/null
@@ -1,93 +0,0 @@
-(function() {
-	/**
-	 * provides text formatting and i18n key storage features<br>
-	 * implements most of the Sun Java MessageFormat functionality.
-	 * @see <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/text/MessageFormat.html" target="sun">Sun's Documentation</a>
-	 */
-
-	var keys = {};
-
-	var format = function(message, args) {
-		var substitute = function() {
-			var format = arguments[1].split(',');
-			var substr = escape(args[format.shift()]);
-			if(format.length === 0) {
-				return substr; // simple substitution eg {0}
-			}
-			switch(format.shift()) {
-				case "number" : return (new Number(substr)).toLocaleString();
-				case "date" : return (new Date(+substr)).toLocaleDateString(); // date and time require milliseconds since epoch
-				case "time" : return (new Date(+substr)).toLocaleTimeString(); //  eg i18n.text("Key", +(new Date())); for current time
-			}
-			var styles = format.join("").split("|").map(function(style) {
-				return style.match(/(-?[\.\d]+)(#|<)([^{}]*)/);
-			});
-			var match = styles[0][3];
-			for(var i=0; i<styles.length; i++) {
-				if((styles[i][2] === "#" && (+styles[i][1]) === (+substr)) ||
-						(styles[i][2] === "<" && ((+styles[i][1]) < (+substr)))) {
-					match = styles[i][3];
-				}
-			}
-			return match;
-		};
-
-		return message && message.replace(/'(')|'([^']+)'|([^{']+)|([^']+)/g, function(x, sq, qs, ss, sub) {
-			do {} while(sub && (sub !== (sub = (sub.replace(/\{([^{}]+)\}/, substitute)))));
-			return sq || qs || ss || unescape(sub);
-		});
-	};
-
-	this.i18n = {
-
-		setKeys: function(strings) {
-			for(var key in strings) {
-				keys[key] = strings[key];
-			}
-		},
-
-		text: function() {
-			var args = Array.prototype.slice.call(arguments),
-				key = keys[args.shift()];
-			if(args.length === 0) {
-				return key;
-			}
-			return format(key, args);
-		},
-
-		complex: function() {
-			var args = Array.prototype.slice.call(arguments),
-				key = keys[args.shift()],
-				ret = [],
-				replacer = function(x, pt, sub) { ret.push(pt || args[+sub]); return ""; };
-			do {} while(key && key !== (key = key.replace(/([^{]+)|\{(\d+)\}/, replacer )));
-			return ret;
-		}
-
-	};
-
-})();
-
-(function() {
-	var nav = window.navigator;
-	var userLang = ( nav.languages && nav.languages[0] ) || nav.language || nav.userLanguage;
-	var scripts = document.getElementsByTagName('script');
-	var data = scripts[ scripts.length - 1].dataset;
-	if( ! data["langs"] ) {
-		return;
-	}
-	var langs = data["langs"].split(/\s*,\s*/);
-	var script0 = scripts[0];
-	function install( lang ) {
-		var s = document.createElement("script");
-		s.src = data["basedir"] + "/" + lang + '_strings.js';
-		s.async = false;
-		script0.parentNode.appendChild(s);
-		script0 = s;
-	}
-
-	install( langs.shift() ); // always install primary language
-	userLang && langs
-		.filter( function( lang ) { return userLang.indexOf( lang ) === 0; } )
-		.forEach( install );
-}());
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/joey/joey.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/joey/joey.js
deleted file mode 100644
index 2c9a0f5..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/joey/joey.js
+++ /dev/null
@@ -1,57 +0,0 @@
-(function() {
-
-	var joey = this.joey = function joey(elementDef, parentNode) {
-		return createNode( elementDef, parentNode, parentNode ? parentNode.ownerDocument : this.document );
-	};
-
-	var shortcuts = joey.shortcuts = {
-		"text" : "textContent",
-		"cls" : "className"
-	};
-
-	var plugins = joey.plugins = [
-		function( obj, context ) {
-			if( typeof obj === 'string' ) {
-				return context.createTextNode( obj );
-			}
-		},
-		function( obj, context ) {
-			if( "tag" in obj ) {
-				var el = context.createElement( obj.tag );
-				for( var attr in obj ) {
-					addAttr( el, attr, obj[ attr ], context );
-				}
-				return el;
-			}
-		}
-	];
-
-	function addAttr( el, attr, value, context ) {
-		attr = shortcuts[attr] || attr;
-		if( attr === 'children' ) {
-			for( var i = 0; i < value.length; i++) {
-				createNode( value[i], el, context );
-			}
-		} else if( attr === 'style' || attr === 'dataset' ) {
-			for( var prop in value ) {
-				el[ attr ][ prop ] = value[ prop ];
-			}
-		} else if( attr.indexOf("on") === 0 ) {
-			el.addEventListener( attr.substr(2), value, false );
-		} else if( value !== undefined ) {
-			el[ attr ] = value;
-		}
-	}
-
-	function createNode( obj, parent, context ) {
-		var el;
-		if( obj != null ) {
-			plugins.some( function( plug ) {
-				return ( el = plug( obj, context ) );
-			});
-			parent && parent.appendChild( el );
-			return el;
-		}
-	}
-
-}());
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/jquery/jquery.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/jquery/jquery.js
deleted file mode 100644
index 3450ce4..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/jquery/jquery.js
+++ /dev/null
@@ -1,8936 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6.1
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Thu May 12 15:04:36 2011 -0400
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
-	navigator = window.navigator,
-	location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
-		// The jQuery object is actually just the init constructor 'enhanced'
-		return new jQuery.fn.init( selector, context, rootjQuery );
-	},
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$,
-
-	// A central reference to the root jQuery(document)
-	rootjQuery,
-
-	// A simple way to check for HTML strings or ID strings
-	// (both of which we optimize for)
-	quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
-	// Check if a string has a non-whitespace character in it
-	rnotwhite = /\S/,
-
-	// Used for trimming whitespace
-	trimLeft = /^\s+/,
-	trimRight = /\s+$/,
-
-	// Check for digits
-	rdigit = /\d/,
-
-	// Match a standalone tag
-	rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
-	// JSON RegExp
-	rvalidchars = /^[\],:{}\s]*$/,
-	rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
-	rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
-	rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
-	// Useragent RegExp
-	rwebkit = /(webkit)[ \/]([\w.]+)/,
-	ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
-	rmsie = /(msie) ([\w.]+)/,
-	rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
-	// Keep a UserAgent string for use with jQuery.browser
-	userAgent = navigator.userAgent,
-
-	// For matching the engine and version of the browser
-	browserMatch,
-
-	// The deferred used on DOM ready
-	readyList,
-
-	// The ready event handler
-	DOMContentLoaded,
-
-	// Save a reference to some core methods
-	toString = Object.prototype.toString,
-	hasOwn = Object.prototype.hasOwnProperty,
-	push = Array.prototype.push,
-	slice = Array.prototype.slice,
-	trim = String.prototype.trim,
-	indexOf = Array.prototype.indexOf,
-
-	// [[Class]] -> type pairs
-	class2type = {};
-
-jQuery.fn = jQuery.prototype = {
-	constructor: jQuery,
-	init: function( selector, context, rootjQuery ) {
-		var match, elem, ret, doc;
-
-		// Handle $(""), $(null), or $(undefined)
-		if ( !selector ) {
-			return this;
-		}
-
-		// Handle $(DOMElement)
-		if ( selector.nodeType ) {
-			this.context = this[0] = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// The body element only exists once, optimize finding it
-		if ( selector === "body" && !context && document.body ) {
-			this.context = document;
-			this[0] = document.body;
-			this.selector = selector;
-			this.length = 1;
-			return this;
-		}
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			// Are we dealing with HTML string or an ID?
-			if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = quickExpr.exec( selector );
-			}
-
-			// Verify a match, and that no context was specified for #id
-			if ( match && (match[1] || !context) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[1] ) {
-					context = context instanceof jQuery ? context[0] : context;
-					doc = (context ? context.ownerDocument || context : document);
-
-					// If a single string is passed in and it's a single tag
-					// just do a createElement and skip the rest
-					ret = rsingleTag.exec( selector );
-
-					if ( ret ) {
-						if ( jQuery.isPlainObject( context ) ) {
-							selector = [ document.createElement( ret[1] ) ];
-							jQuery.fn.attr.call( selector, context, true );
-
-						} else {
-							selector = [ doc.createElement( ret[1] ) ];
-						}
-
-					} else {
-						ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
-						selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
-					}
-
-					return jQuery.merge( this, selector );
-
-				// HANDLE: $("#id")
-				} else {
-					elem = document.getElementById( match[2] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[2] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[0] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return (context || rootjQuery).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return rootjQuery.ready( selector );
-		}
-
-		if (selector.selector !== undefined) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	},
-
-	// Start with an empty selector
-	selector: "",
-
-	// The current version of jQuery being used
-	jquery: "1.6.1",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	// The number of elements contained in the matched element set
-	size: function() {
-		return this.length;
-	},
-
-	toArray: function() {
-		return slice.call( this, 0 );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num == null ?
-
-			// Return a 'clean' array
-			this.toArray() :
-
-			// Return just the object
-			( num < 0 ? this[ this.length + num ] : this[ num ] );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems, name, selector ) {
-		// Build a new jQuery matched element set
-		var ret = this.constructor();
-
-		if ( jQuery.isArray( elems ) ) {
-			push.apply( ret, elems );
-
-		} else {
-			jQuery.merge( ret, elems );
-		}
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-
-		ret.context = this.context;
-
-		if ( name === "find" ) {
-			ret.selector = this.selector + (this.selector ? " " : "") + selector;
-		} else if ( name ) {
-			ret.selector = this.selector + "." + name + "(" + selector + ")";
-		}
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	// (You can seed the arguments with an array of args, but this is
-	// only used internally.)
-	each: function( callback, args ) {
-		return jQuery.each( this, callback, args );
-	},
-
-	ready: function( fn ) {
-		// Attach the listeners
-		jQuery.bindReady();
-
-		// Add the callback
-		readyList.done( fn );
-
-		return this;
-	},
-
-	eq: function( i ) {
-		return i === -1 ?
-			this.slice( i ) :
-			this.slice( i, +i + 1 );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ),
-			"slice", slice.call(arguments).join(",") );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map(this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		}));
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor(null);
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: [].sort,
-	splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var options, name, src, copy, copyIsArray, clone,
-		target = arguments[0] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-		target = arguments[1] || {};
-		// skip the boolean and the target
-		i = 2;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( length === i ) {
-		target = this;
-		--i;
-	}
-
-	for ( ; i < length; i++ ) {
-		// Only deal with non-null/undefined values
-		if ( (options = arguments[ i ]) != null ) {
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray(src) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject(src) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function( deep ) {
-		if ( window.$ === jQuery ) {
-			window.$ = _$;
-		}
-
-		if ( deep && window.jQuery === jQuery ) {
-			window.jQuery = _jQuery;
-		}
-
-		return jQuery;
-	},
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-		// Either a released hold or an DOMready/load event and not yet ready
-		if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
-			// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-			if ( !document.body ) {
-				return setTimeout( jQuery.ready, 1 );
-			}
-
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-
-			// If a normal DOM Ready event fired, decrement, and wait if need be
-			if ( wait !== true && --jQuery.readyWait > 0 ) {
-				return;
-			}
-
-			// If there are functions bound, to execute
-			readyList.resolveWith( document, [ jQuery ] );
-
-			// Trigger any bound ready events
-			if ( jQuery.fn.trigger ) {
-				jQuery( document ).trigger( "ready" ).unbind( "ready" );
-			}
-		}
-	},
-
-	bindReady: function() {
-		if ( readyList ) {
-			return;
-		}
-
-		readyList = jQuery._Deferred();
-
-		// Catch cases where $(document).ready() is called after the
-		// browser event has already occurred.
-		if ( document.readyState === "complete" ) {
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			return setTimeout( jQuery.ready, 1 );
-		}
-
-		// Mozilla, Opera and webkit nightlies currently support this event
-		if ( document.addEventListener ) {
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", jQuery.ready, false );
-
-		// If IE event model is used
-		} else if ( document.attachEvent ) {
-			// ensure firing before onload,
-			// maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", jQuery.ready );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var toplevel = false;
-
-			try {
-				toplevel = window.frameElement == null;
-			} catch(e) {}
-
-			if ( document.documentElement.doScroll && toplevel ) {
-				doScrollCheck();
-			}
-		}
-	},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type(obj) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type(obj) === "array";
-	},
-
-	// A crude way of determining if an object is a window
-	isWindow: function( obj ) {
-		return obj && typeof obj === "object" && "setInterval" in obj;
-	},
-
-	isNaN: function( obj ) {
-		return obj == null || !rdigit.test( obj ) || isNaN( obj );
-	},
-
-	type: function( obj ) {
-		return obj == null ?
-			String( obj ) :
-			class2type[ toString.call(obj) ] || "object";
-	},
-
-	isPlainObject: function( obj ) {
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		// Not own constructor property must be Object
-		if ( obj.constructor &&
-			!hasOwn.call(obj, "constructor") &&
-			!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
-			return false;
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-
-		var key;
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	isEmptyObject: function( obj ) {
-		for ( var name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	error: function( msg ) {
-		throw msg;
-	},
-
-	parseJSON: function( data ) {
-		if ( typeof data !== "string" || !data ) {
-			return null;
-		}
-
-		// Make sure leading/trailing whitespace is removed (IE can't handle it)
-		data = jQuery.trim( data );
-
-		// Attempt to parse using the native JSON parser first
-		if ( window.JSON && window.JSON.parse ) {
-			return window.JSON.parse( data );
-		}
-
-		// Make sure the incoming data is actual JSON
-		// Logic borrowed from http://json.org/json2.js
-		if ( rvalidchars.test( data.replace( rvalidescape, "@" )
-			.replace( rvalidtokens, "]" )
-			.replace( rvalidbraces, "")) ) {
-
-			return (new Function( "return " + data ))();
-
-		}
-		jQuery.error( "Invalid JSON: " + data );
-	},
-
-	// Cross-browser xml parsing
-	// (xml & tmp used internally)
-	parseXML: function( data , xml , tmp ) {
-
-		if ( window.DOMParser ) { // Standard
-			tmp = new DOMParser();
-			xml = tmp.parseFromString( data , "text/xml" );
-		} else { // IE
-			xml = new ActiveXObject( "Microsoft.XMLDOM" );
-			xml.async = "false";
-			xml.loadXML( data );
-		}
-
-		tmp = xml.documentElement;
-
-		if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
-			jQuery.error( "Invalid XML: " + data );
-		}
-
-		return xml;
-	},
-
-	noop: function() {},
-
-	// Evaluates a script in a global context
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && rnotwhite.test( data ) ) {
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data );
-			} )( data );
-		}
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
-	},
-
-	// args is for internal usage only
-	each: function( object, callback, args ) {
-		var name, i = 0,
-			length = object.length,
-			isObj = length === undefined || jQuery.isFunction( object );
-
-		if ( args ) {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.apply( object[ name ], args ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.apply( object[ i++ ], args ) === false ) {
-						break;
-					}
-				}
-			}
-
-		// A special, fast, case for the most common use of each
-		} else {
-			if ( isObj ) {
-				for ( name in object ) {
-					if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
-						break;
-					}
-				}
-			} else {
-				for ( ; i < length; ) {
-					if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
-						break;
-					}
-				}
-			}
-		}
-
-		return object;
-	},
-
-	// Use native String.trim function wherever possible
-	trim: trim ?
-		function( text ) {
-			return text == null ?
-				"" :
-				trim.call( text );
-		} :
-
-		// Otherwise use our own trimming functionality
-		function( text ) {
-			return text == null ?
-				"" :
-				text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
-		},
-
-	// results is for internal usage only
-	makeArray: function( array, results ) {
-		var ret = results || [];
-
-		if ( array != null ) {
-			// The window, strings (and functions) also have 'length'
-			// The extra typeof function check is to prevent crashes
-			// in Safari 2 (See: #3039)
-			// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
-			var type = jQuery.type( array );
-
-			if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
-				push.call( ret, array );
-			} else {
-				jQuery.merge( ret, array );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, array ) {
-
-		if ( indexOf ) {
-			return indexOf.call( array, elem );
-		}
-
-		for ( var i = 0, length = array.length; i < length; i++ ) {
-			if ( array[ i ] === elem ) {
-				return i;
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var i = first.length,
-			j = 0;
-
-		if ( typeof second.length === "number" ) {
-			for ( var l = second.length; j < l; j++ ) {
-				first[ i++ ] = second[ j ];
-			}
-
-		} else {
-			while ( second[j] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, inv ) {
-		var ret = [], retVal;
-		inv = !!inv;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, length = elems.length; i < length; i++ ) {
-			retVal = !!callback( elems[ i ], i );
-			if ( inv !== retVal ) {
-				ret.push( elems[ i ] );
-			}
-		}
-
-		return ret;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var value, key, ret = [],
-			i = 0,
-			length = elems.length,
-			// jquery objects are treated as arrays
-			isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
-		// Go through the array, translating each of the items to their
-		if ( isArray ) {
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( key in elems ) {
-				value = callback( elems[ key ], key, arg );
-
-				if ( value != null ) {
-					ret[ ret.length ] = value;
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return ret.concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		if ( typeof context === "string" ) {
-			var tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		var args = slice.call( arguments, 2 ),
-			proxy = function() {
-				return fn.apply( context, args.concat( slice.call( arguments ) ) );
-			};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	// Mutifunctional method to get and set values to a collection
-	// The value/s can be optionally by executed if its a function
-	access: function( elems, key, value, exec, fn, pass ) {
-		var length = elems.length;
-
-		// Setting many attributes
-		if ( typeof key === "object" ) {
-			for ( var k in key ) {
-				jQuery.access( elems, k, key[k], exec, fn, value );
-			}
-			return elems;
-		}
-
-		// Setting one attribute
-		if ( value !== undefined ) {
-			// Optionally, function values get executed if exec is true
-			exec = !pass && exec && jQuery.isFunction(value);
-
-			for ( var i = 0; i < length; i++ ) {
-				fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
-			}
-
-			return elems;
-		}
-
-		// Getting an attribute
-		return length ? fn( elems[0], key ) : undefined;
-	},
-
-	now: function() {
-		return (new Date()).getTime();
-	},
-
-	// Use of jQuery.browser is frowned upon.
-	// More details: http://docs.jquery.com/Utilities/jQuery.browser
-	uaMatch: function( ua ) {
-		ua = ua.toLowerCase();
-
-		var match = rwebkit.exec( ua ) ||
-			ropera.exec( ua ) ||
-			rmsie.exec( ua ) ||
-			ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
-			[];
-
-		return { browser: match[1] || "", version: match[2] || "0" };
-	},
-
-	sub: function() {
-		function jQuerySub( selector, context ) {
-			return new jQuerySub.fn.init( selector, context );
-		}
-		jQuery.extend( true, jQuerySub, this );
-		jQuerySub.superclass = this;
-		jQuerySub.fn = jQuerySub.prototype = this();
-		jQuerySub.fn.constructor = jQuerySub;
-		jQuerySub.sub = this.sub;
-		jQuerySub.fn.init = function init( selector, context ) {
-			if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
-				context = jQuerySub( context );
-			}
-
-			return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
-		};
-		jQuerySub.fn.init.prototype = jQuerySub.fn;
-		var rootjQuerySub = jQuerySub(document);
-		return jQuerySub;
-	},
-
-	browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
-	jQuery.browser[ browserMatch.browser ] = true;
-	jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
-	jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
-	trimLeft = /^[\s\xA0]+/;
-	trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
-	DOMContentLoaded = function() {
-		document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-		jQuery.ready();
-	};
-
-} else if ( document.attachEvent ) {
-	DOMContentLoaded = function() {
-		// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
-		if ( document.readyState === "complete" ) {
-			document.detachEvent( "onreadystatechange", DOMContentLoaded );
-			jQuery.ready();
-		}
-	};
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
-	if ( jQuery.isReady ) {
-		return;
-	}
-
-	try {
-		// If IE is used, use the trick by Diego Perini
-		// http://javascript.nwbox.com/IEContentLoaded/
-		document.documentElement.doScroll("left");
-	} catch(e) {
-		setTimeout( doScrollCheck, 1 );
-		return;
-	}
-
-	// and execute any waiting functions
-	jQuery.ready();
-}
-
-// Expose jQuery to the global object
-return jQuery;
-
-})();
-
-
-var // Promise methods
-	promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
-	// Static reference to slice
-	sliceDeferred = [].slice;
-
-jQuery.extend({
-	// Create a simple deferred (one callbacks list)
-	_Deferred: function() {
-		var // callbacks list
-			callbacks = [],
-			// stored [ context , args ]
-			fired,
-			// to avoid firing when already doing so
-			firing,
-			// flag to know if the deferred has been cancelled
-			cancelled,
-			// the deferred itself
-			deferred  = {
-
-				// done( f1, f2, ...)
-				done: function() {
-					if ( !cancelled ) {
-						var args = arguments,
-							i,
-							length,
-							elem,
-							type,
-							_fired;
-						if ( fired ) {
-							_fired = fired;
-							fired = 0;
-						}
-						for ( i = 0, length = args.length; i < length; i++ ) {
-							elem = args[ i ];
-							type = jQuery.type( elem );
-							if ( type === "array" ) {
-								deferred.done.apply( deferred, elem );
-							} else if ( type === "function" ) {
-								callbacks.push( elem );
-							}
-						}
-						if ( _fired ) {
-							deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
-						}
-					}
-					return this;
-				},
-
-				// resolve with given context and args
-				resolveWith: function( context, args ) {
-					if ( !cancelled && !fired && !firing ) {
-						// make sure args are available (#8421)
-						args = args || [];
-						firing = 1;
-						try {
-							while( callbacks[ 0 ] ) {
-								callbacks.shift().apply( context, args );
-							}
-						}
-						finally {
-							fired = [ context, args ];
-							firing = 0;
-						}
-					}
-					return this;
-				},
-
-				// resolve with this as context and given arguments
-				resolve: function() {
-					deferred.resolveWith( this, arguments );
-					return this;
-				},
-
-				// Has this deferred been resolved?
-				isResolved: function() {
-					return !!( firing || fired );
-				},
-
-				// Cancel
-				cancel: function() {
-					cancelled = 1;
-					callbacks = [];
-					return this;
-				}
-			};
-
-		return deferred;
-	},
-
-	// Full fledged deferred (two callbacks list)
-	Deferred: function( func ) {
-		var deferred = jQuery._Deferred(),
-			failDeferred = jQuery._Deferred(),
-			promise;
-		// Add errorDeferred methods, then and promise
-		jQuery.extend( deferred, {
-			then: function( doneCallbacks, failCallbacks ) {
-				deferred.done( doneCallbacks ).fail( failCallbacks );
-				return this;
-			},
-			always: function() {
-				return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
-			},
-			fail: failDeferred.done,
-			rejectWith: failDeferred.resolveWith,
-			reject: failDeferred.resolve,
-			isRejected: failDeferred.isResolved,
-			pipe: function( fnDone, fnFail ) {
-				return jQuery.Deferred(function( newDefer ) {
-					jQuery.each( {
-						done: [ fnDone, "resolve" ],
-						fail: [ fnFail, "reject" ]
-					}, function( handler, data ) {
-						var fn = data[ 0 ],
-							action = data[ 1 ],
-							returned;
-						if ( jQuery.isFunction( fn ) ) {
-							deferred[ handler ](function() {
-								returned = fn.apply( this, arguments );
-								if ( returned && jQuery.isFunction( returned.promise ) ) {
-									returned.promise().then( newDefer.resolve, newDefer.reject );
-								} else {
-									newDefer[ action ]( returned );
-								}
-							});
-						} else {
-							deferred[ handler ]( newDefer[ action ] );
-						}
-					});
-				}).promise();
-			},
-			// Get a promise for this deferred
-			// If obj is provided, the promise aspect is added to the object
-			promise: function( obj ) {
-				if ( obj == null ) {
-					if ( promise ) {
-						return promise;
-					}
-					promise = obj = {};
-				}
-				var i = promiseMethods.length;
-				while( i-- ) {
-					obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
-				}
-				return obj;
-			}
-		});
-		// Make sure only one callback list will be used
-		deferred.done( failDeferred.cancel ).fail( deferred.cancel );
-		// Unexpose cancel
-		delete deferred.cancel;
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( firstParam ) {
-		var args = arguments,
-			i = 0,
-			length = args.length,
-			count = length,
-			deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
-				firstParam :
-				jQuery.Deferred();
-		function resolveFunc( i ) {
-			return function( value ) {
-				args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
-				if ( !( --count ) ) {
-					// Strange bug in FF4:
-					// Values changed onto the arguments object sometimes end up as undefined values
-					// outside the $.when method. Cloning the object into a fresh array solves the issue
-					deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
-				}
-			};
-		}
-		if ( length > 1 ) {
-			for( ; i < length; i++ ) {
-				if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
-					args[ i ].promise().then( resolveFunc(i), deferred.reject );
-				} else {
-					--count;
-				}
-			}
-			if ( !count ) {
-				deferred.resolveWith( deferred, args );
-			}
-		} else if ( deferred !== firstParam ) {
-			deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
-		}
-		return deferred.promise();
-	}
-});
-
-
-
-jQuery.support = (function() {
-
-	var div = document.createElement( "div" ),
-		documentElement = document.documentElement,
-		all,
-		a,
-		select,
-		opt,
-		input,
-		marginDiv,
-		support,
-		fragment,
-		body,
-		bodyStyle,
-		tds,
-		events,
-		eventName,
-		i,
-		isSupported;
-
-	// Preliminary tests
-	div.setAttribute("className", "t");
-	div.innerHTML = "   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-	all = div.getElementsByTagName( "*" );
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Can't get basic test support
-	if ( !all || !all.length || !a ) {
-		return {};
-	}
-
-	// First batch of supports tests
-	select = document.createElement( "select" );
-	opt = select.appendChild( document.createElement("option") );
-	input = div.getElementsByTagName( "input" )[ 0 ];
-
-	support = {
-		// IE strips leading whitespace when .innerHTML is used
-		leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
-		// Make sure that tbody elements aren't automatically inserted
-		// IE will insert them into empty tables
-		tbody: !div.getElementsByTagName( "tbody" ).length,
-
-		// Make sure that link elements get serialized correctly by innerHTML
-		// This requires a wrapper element in IE
-		htmlSerialize: !!div.getElementsByTagName( "link" ).length,
-
-		// Get the style information from getAttribute
-		// (IE uses .cssText instead)
-		style: /top/.test( a.getAttribute("style") ),
-
-		// Make sure that URLs aren't manipulated
-		// (IE normalizes it by default)
-		hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
-
-		// Make sure that element opacity exists
-		// (IE uses filter instead)
-		// Use a regex to work around a WebKit issue. See #5145
-		opacity: /^0.55$/.test( a.style.opacity ),
-
-		// Verify style float existence
-		// (IE uses styleFloat instead of cssFloat)
-		cssFloat: !!a.style.cssFloat,
-
-		// Make sure that if no value is specified for a checkbox
-		// that it defaults to "on".
-		// (WebKit defaults to "" instead)
-		checkOn: ( input.value === "on" ),
-
-		// Make sure that a selected-by-default option has a working selected property.
-		// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-		optSelected: opt.selected,
-
-		// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-		getSetAttribute: div.className !== "t",
-
-		// Will be defined later
-		submitBubbles: true,
-		changeBubbles: true,
-		focusinBubbles: false,
-		deleteExpando: true,
-		noCloneEvent: true,
-		inlineBlockNeedsLayout: false,
-		shrinkWrapBlocks: false,
-		reliableMarginRight: true
-	};
-
-	// Make sure checked status is properly cloned
-	input.checked = true;
-	support.noCloneChecked = input.cloneNode( true ).checked;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Test to see if it's possible to delete an expando from an element
-	// Fails in Internet Explorer
-	try {
-		delete div.test;
-	} catch( e ) {
-		support.deleteExpando = false;
-	}
-
-	if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
-		div.attachEvent( "onclick", function click() {
-			// Cloning a node shouldn't copy over any
-			// bound event handlers (IE does this)
-			support.noCloneEvent = false;
-			div.detachEvent( "onclick", click );
-		});
-		div.cloneNode( true ).fireEvent( "onclick" );
-	}
-
-	// Check if a radio maintains it's value
-	// after being appended to the DOM
-	input = document.createElement("input");
-	input.value = "t";
-	input.setAttribute("type", "radio");
-	support.radioValue = input.value === "t";
-
-	input.setAttribute("checked", "checked");
-	div.appendChild( input );
-	fragment = document.createDocumentFragment();
-	fragment.appendChild( div.firstChild );
-
-	// WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	div.innerHTML = "";
-
-	// Figure out if the W3C box model works as expected
-	div.style.width = div.style.paddingLeft = "1px";
-
-	// We use our own, invisible, body
-	body = document.createElement( "body" );
-	bodyStyle = {
-		visibility: "hidden",
-		width: 0,
-		height: 0,
-		border: 0,
-		margin: 0,
-		// Set background to avoid IE crashes when removing (#9028)
-		background: "none"
-	};
-	for ( i in bodyStyle ) {
-		body.style[ i ] = bodyStyle[ i ];
-	}
-	body.appendChild( div );
-	documentElement.insertBefore( body, documentElement.firstChild );
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	support.appendChecked = input.checked;
-
-	support.boxModel = div.offsetWidth === 2;
-
-	if ( "zoom" in div.style ) {
-		// Check if natively block-level elements act like inline-block
-		// elements when setting their display to 'inline' and giving
-		// them layout
-		// (IE < 8 does this)
-		div.style.display = "inline";
-		div.style.zoom = 1;
-		support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
-		// Check if elements with layout shrink-wrap their children
-		// (IE 6 does this)
-		div.style.display = "";
-		div.innerHTML = "<div style='width:4px;'></div>";
-		support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
-	}
-
-	div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
-	tds = div.getElementsByTagName( "td" );
-
-	// Check if table cells still have offsetWidth/Height when they are set
-	// to display:none and there are still other visible table cells in a
-	// table row; if so, offsetWidth/Height are not reliable for use when
-	// determining if an element has been hidden directly using
-	// display:none (it is still safe to use offsets if a parent element is
-	// hidden; don safety goggles and see bug #4512 for more information).
-	// (only IE 8 fails this test)
-	isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
-	tds[ 0 ].style.display = "";
-	tds[ 1 ].style.display = "none";
-
-	// Check if empty table cells still have offsetWidth/Height
-	// (IE < 8 fail this test)
-	support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-	div.innerHTML = "";
-
-	// Check if div with explicit width and no margin-right incorrectly
-	// gets computed margin-right based on width of container. For more
-	// info see bug #3333
-	// Fails in WebKit before Feb 2011 nightlies
-	// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-	if ( document.defaultView && document.defaultView.getComputedStyle ) {
-		marginDiv = document.createElement( "div" );
-		marginDiv.style.width = "0";
-		marginDiv.style.marginRight = "0";
-		div.appendChild( marginDiv );
-		support.reliableMarginRight =
-			( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
-	}
-
-	// Remove the body element we added
-	body.innerHTML = "";
-	documentElement.removeChild( body );
-
-	// Technique from Juriy Zaytsev
-	// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
-	// We only care about the case where non-standard event systems
-	// are used, namely in IE. Short-circuiting here helps us to
-	// avoid an eval call (in setAttribute) which can cause CSP
-	// to go haywire. See: https://developer.mozilla.org/en/Security/CSP
-	if ( div.attachEvent ) {
-		for( i in {
-			submit: 1,
-			change: 1,
-			focusin: 1
-		} ) {
-			eventName = "on" + i;
-			isSupported = ( eventName in div );
-			if ( !isSupported ) {
-				div.setAttribute( eventName, "return;" );
-				isSupported = ( typeof div[ eventName ] === "function" );
-			}
-			support[ i + "Bubbles" ] = isSupported;
-		}
-	}
-
-	return support;
-})();
-
-// Keep track of boxModel
-jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
-	rmultiDash = /([a-z])([A-Z])/g;
-
-jQuery.extend({
-	cache: {},
-
-	// Please use with caution
-	uuid: 0,
-
-	// Unique for each copy of jQuery on the page
-	// Non-digits removed to match rinlinejQuery
-	expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
-	// The following elements throw uncatchable exceptions if you
-	// attempt to add expando properties to them.
-	noData: {
-		"embed": true,
-		// Ban all objects except for Flash (which handle expandos)
-		"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
-		"applet": true
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
-
-			// We have to handle DOM nodes and JS objects differently because IE6-7
-			// can't GC object references properly across the DOM-JS boundary
-			isNode = elem.nodeType,
-
-			// Only DOM nodes need the global jQuery cache; JS object data is
-			// attached directly to the object so GC can occur automatically
-			cache = isNode ? jQuery.cache : elem,
-
-			// Only defining an ID for JS objects if its cache already exists allows
-			// the code to shortcut on the same path as a DOM node with no cache
-			id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
-
-		// Avoid doing any more work than we need to when trying to get data on an
-		// object that has no data at all
-		if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
-			return;
-		}
-
-		if ( !id ) {
-			// Only DOM nodes need a new unique ID for each element since their data
-			// ends up in the global cache
-			if ( isNode ) {
-				elem[ jQuery.expando ] = id = ++jQuery.uuid;
-			} else {
-				id = jQuery.expando;
-			}
-		}
-
-		if ( !cache[ id ] ) {
-			cache[ id ] = {};
-
-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
-			// metadata on plain JS objects when the object is serialized using
-			// JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-		}
-
-		// An object can be passed to jQuery.data instead of a key/value pair; this gets
-		// shallow copied over onto the existing cache
-		if ( typeof name === "object" || typeof name === "function" ) {
-			if ( pvt ) {
-				cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
-			} else {
-				cache[ id ] = jQuery.extend(cache[ id ], name);
-			}
-		}
-
-		thisCache = cache[ id ];
-
-		// Internal jQuery data is stored in a separate object inside the object's data
-		// cache in order to avoid key collisions between internal data and user-defined
-		// data
-		if ( pvt ) {
-			if ( !thisCache[ internalKey ] ) {
-				thisCache[ internalKey ] = {};
-			}
-
-			thisCache = thisCache[ internalKey ];
-		}
-
-		if ( data !== undefined ) {
-			thisCache[ jQuery.camelCase( name ) ] = data;
-		}
-
-		// TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
-		// not attempt to inspect the internal events object using jQuery.data, as this
-		// internal data object is undocumented and subject to change.
-		if ( name === "events" && !thisCache[name] ) {
-			return thisCache[ internalKey ] && thisCache[ internalKey ].events;
-		}
-
-		return getByName ? thisCache[ jQuery.camelCase( name ) ] : thisCache;
-	},
-
-	removeData: function( elem, name, pvt /* Internal Use Only */ ) {
-		if ( !jQuery.acceptData( elem ) ) {
-			return;
-		}
-
-		var internalKey = jQuery.expando, isNode = elem.nodeType,
-
-			// See jQuery.data for more information
-			cache = isNode ? jQuery.cache : elem,
-
-			// See jQuery.data for more information
-			id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-		// If there is already no cache entry for this object, there is no
-		// purpose in continuing
-		if ( !cache[ id ] ) {
-			return;
-		}
-
-		if ( name ) {
-			var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
-
-			if ( thisCache ) {
-				delete thisCache[ name ];
-
-				// If there is no data left in the cache, we want to continue
-				// and let the cache object itself get destroyed
-				if ( !isEmptyDataObject(thisCache) ) {
-					return;
-				}
-			}
-		}
-
-		// See jQuery.data for more information
-		if ( pvt ) {
-			delete cache[ id ][ internalKey ];
-
-			// Don't destroy the parent cache unless the internal data object
-			// had been the only thing left in it
-			if ( !isEmptyDataObject(cache[ id ]) ) {
-				return;
-			}
-		}
-
-		var internalCache = cache[ id ][ internalKey ];
-
-		// Browsers that fail expando deletion also refuse to delete expandos on
-		// the window, but it will allow it on all other JS objects; other browsers
-		// don't care
-		if ( jQuery.support.deleteExpando || cache != window ) {
-			delete cache[ id ];
-		} else {
-			cache[ id ] = null;
-		}
-
-		// We destroyed the entire user cache at once because it's faster than
-		// iterating through each key, but we need to continue to persist internal
-		// data if it existed
-		if ( internalCache ) {
-			cache[ id ] = {};
-			// TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
-			// metadata on plain JS objects when the object is serialized using
-			// JSON.stringify
-			if ( !isNode ) {
-				cache[ id ].toJSON = jQuery.noop;
-			}
-
-			cache[ id ][ internalKey ] = internalCache;
-
-		// Otherwise, we need to eliminate the expando on the node to avoid
-		// false lookups in the cache for entries that no longer exist
-		} else if ( isNode ) {
-			// IE does not allow us to delete expando properties from nodes,
-			// nor does it have a removeAttribute function on Document nodes;
-			// we must handle all of these cases
-			if ( jQuery.support.deleteExpando ) {
-				delete elem[ jQuery.expando ];
-			} else if ( elem.removeAttribute ) {
-				elem.removeAttribute( jQuery.expando );
-			} else {
-				elem[ jQuery.expando ] = null;
-			}
-		}
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return jQuery.data( elem, name, data, true );
-	},
-
-	// A method for determining if a DOM node can handle the data expando
-	acceptData: function( elem ) {
-		if ( elem.nodeName ) {
-			var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
-			if ( match ) {
-				return !(match === true || elem.getAttribute("classid") !== match);
-			}
-		}
-
-		return true;
-	}
-});
-
-jQuery.fn.extend({
-	data: function( key, value ) {
-		var data = null;
-
-		if ( typeof key === "undefined" ) {
-			if ( this.length ) {
-				data = jQuery.data( this[0] );
-
-				if ( this[0].nodeType === 1 ) {
-			    var attr = this[0].attributes, name;
-					for ( var i = 0, l = attr.length; i < l; i++ ) {
-						name = attr[i].name;
-
-						if ( name.indexOf( "data-" ) === 0 ) {
-							name = jQuery.camelCase( name.substring(5) );
-
-							dataAttr( this[0], name, data[ name ] );
-						}
-					}
-				}
-			}
-
-			return data;
-
-		} else if ( typeof key === "object" ) {
-			return this.each(function() {
-				jQuery.data( this, key );
-			});
-		}
-
-		var parts = key.split(".");
-		parts[1] = parts[1] ? "." + parts[1] : "";
-
-		if ( value === undefined ) {
-			data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
-			// Try to fetch any internally stored data first
-			if ( data === undefined && this.length ) {
-				data = jQuery.data( this[0], key );
-				data = dataAttr( this[0], key, data );
-			}
-
-			return data === undefined && parts[1] ?
-				this.data( parts[0] ) :
-				data;
-
-		} else {
-			return this.each(function() {
-				var $this = jQuery( this ),
-					args = [ parts[0], value ];
-
-				$this.triggerHandler( "setData" + parts[1] + "!", args );
-				jQuery.data( this, key, value );
-				$this.triggerHandler( "changeData" + parts[1] + "!", args );
-			});
-		}
-	},
-
-	removeData: function( key ) {
-		return this.each(function() {
-			jQuery.removeData( this, key );
-		});
-	}
-});
-
-function dataAttr( elem, key, data ) {
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-		var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-				data === "false" ? false :
-				data === "null" ? null :
-				!jQuery.isNaN( data ) ? parseFloat( data ) :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
-// property to be considered empty objects; this property always exists in
-// order to make sure JSON.stringify does not expose internal metadata
-function isEmptyDataObject( obj ) {
-	for ( var name in obj ) {
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
-	var deferDataKey = type + "defer",
-		queueDataKey = type + "queue",
-		markDataKey = type + "mark",
-		defer = jQuery.data( elem, deferDataKey, undefined, true );
-	if ( defer &&
-		( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
-		( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
-		// Give room for hard-coded callbacks to fire first
-		// and eventually mark/queue something else on the element
-		setTimeout( function() {
-			if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
-				!jQuery.data( elem, markDataKey, undefined, true ) ) {
-				jQuery.removeData( elem, deferDataKey, true );
-				defer.resolve();
-			}
-		}, 0 );
-	}
-}
-
-jQuery.extend({
-
-	_mark: function( elem, type ) {
-		if ( elem ) {
-			type = (type || "fx") + "mark";
-			jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
-		}
-	},
-
-	_unmark: function( force, elem, type ) {
-		if ( force !== true ) {
-			type = elem;
-			elem = force;
-			force = false;
-		}
-		if ( elem ) {
-			type = type || "fx";
-			var key = type + "mark",
-				count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
-			if ( count ) {
-				jQuery.data( elem, key, count, true );
-			} else {
-				jQuery.removeData( elem, key, true );
-				handleQueueMarkDefer( elem, type, "mark" );
-			}
-		}
-	},
-
-	queue: function( elem, type, data ) {
-		if ( elem ) {
-			type = (type || "fx") + "queue";
-			var q = jQuery.data( elem, type, undefined, true );
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !q || jQuery.isArray(data) ) {
-					q = jQuery.data( elem, type, jQuery.makeArray(data), true );
-				} else {
-					q.push( data );
-				}
-			}
-			return q || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			fn = queue.shift(),
-			defer;
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-		}
-
-		if ( fn ) {
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift("inprogress");
-			}
-
-			fn.call(elem, function() {
-				jQuery.dequeue(elem, type);
-			});
-		}
-
-		if ( !queue.length ) {
-			jQuery.removeData( elem, type + "queue", true );
-			handleQueueMarkDefer( elem, type, "queue" );
-		}
-	}
-});
-
-jQuery.fn.extend({
-	queue: function( type, data ) {
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-		}
-
-		if ( data === undefined ) {
-			return jQuery.queue( this[0], type );
-		}
-		return this.each(function() {
-			var queue = jQuery.queue( this, type, data );
-
-			if ( type === "fx" && queue[0] !== "inprogress" ) {
-				jQuery.dequeue( this, type );
-			}
-		});
-	},
-	dequeue: function( type ) {
-		return this.each(function() {
-			jQuery.dequeue( this, type );
-		});
-	},
-	// Based off of the plugin by Clint Helfers, with permission.
-	// http://blindsignals.com/index.php/2009/07/jquery-delay/
-	delay: function( time, type ) {
-		time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
-		type = type || "fx";
-
-		return this.queue( type, function() {
-			var elem = this;
-			setTimeout(function() {
-				jQuery.dequeue( elem, type );
-			}, time );
-		});
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, object ) {
-		if ( typeof type !== "string" ) {
-			object = type;
-			type = undefined;
-		}
-		type = type || "fx";
-		var defer = jQuery.Deferred(),
-			elements = this,
-			i = elements.length,
-			count = 1,
-			deferDataKey = type + "defer",
-			queueDataKey = type + "queue",
-			markDataKey = type + "mark",
-			tmp;
-		function resolve() {
-			if ( !( --count ) ) {
-				defer.resolveWith( elements, [ elements ] );
-			}
-		}
-		while( i-- ) {
-			if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
-					( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
-						jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
-					jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
-				count++;
-				tmp.done( resolve );
-			}
-		}
-		resolve();
-		return defer.promise();
-	}
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
-	rspace = /\s+/,
-	rreturn = /\r/g,
-	rtype = /^(?:button|input)$/i,
-	rfocusable = /^(?:button|input|object|select|textarea)$/i,
-	rclickable = /^a(?:rea)?$/i,
-	rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
-	rinvalidChar = /\:/,
-	formHook, boolHook;
-
-jQuery.fn.extend({
-	attr: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.attr );
-	},
-
-	removeAttr: function( name ) {
-		return this.each(function() {
-			jQuery.removeAttr( this, name );
-		});
-	},
-	
-	prop: function( name, value ) {
-		return jQuery.access( this, name, value, true, jQuery.prop );
-	},
-	
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each(function() {
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch( e ) {}
-		});
-	},
-
-	addClass: function( value ) {
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				self.addClass( value.call(this, i, self.attr("class") || "") );
-			});
-		}
-
-		if ( value && typeof value === "string" ) {
-			var classNames = (value || "").split( rspace );
-
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				var elem = this[i];
-
-				if ( elem.nodeType === 1 ) {
-					if ( !elem.className ) {
-						elem.className = value;
-
-					} else {
-						var className = " " + elem.className + " ",
-							setClass = elem.className;
-
-						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
-							if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
-								setClass += " " + classNames[c];
-							}
-						}
-						elem.className = jQuery.trim( setClass );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				self.removeClass( value.call(this, i, self.attr("class")) );
-			});
-		}
-
-		if ( (value && typeof value === "string") || value === undefined ) {
-			var classNames = (value || "").split( rspace );
-
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				var elem = this[i];
-
-				if ( elem.nodeType === 1 && elem.className ) {
-					if ( value ) {
-						var className = (" " + elem.className + " ").replace(rclass, " ");
-						for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
-							className = className.replace(" " + classNames[c] + " ", " ");
-						}
-						elem.className = jQuery.trim( className );
-
-					} else {
-						elem.className = "";
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value,
-			isBool = typeof stateVal === "boolean";
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
-			});
-		}
-
-		return this.each(function() {
-			if ( type === "string" ) {
-				// toggle individual class names
-				var className,
-					i = 0,
-					self = jQuery( this ),
-					state = stateVal,
-					classNames = value.split( rspace );
-
-				while ( (className = classNames[ i++ ]) ) {
-					// check each className given, space seperated list
-					state = isBool ? state : !self.hasClass( className );
-					self[ state ? "addClass" : "removeClass" ]( className );
-				}
-
-			} else if ( type === "undefined" || type === "boolean" ) {
-				if ( this.className ) {
-					// store className if set
-					jQuery._data( this, "__className__", this.className );
-				}
-
-				// toggle whole className
-				this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
-			}
-		});
-	},
-
-	hasClass: function( selector ) {
-		var className = " " + selector + " ";
-		for ( var i = 0, l = this.length; i < l; i++ ) {
-			if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
-				return true;
-			}
-		}
-
-		return false;
-	},
-
-	val: function( value ) {
-		var hooks, ret,
-			elem = this[0];
-		
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
-				if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
-					return ret;
-				}
-
-				return (elem.value || "").replace(rreturn, "");
-			}
-
-			return undefined;
-		}
-
-		var isFunction = jQuery.isFunction( value );
-
-		return this.each(function( i ) {
-			var self = jQuery(this), val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, self.val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map(val, function ( value ) {
-					return value == null ? "" : value + "";
-				});
-			}
-
-			hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		});
-	}
-});
-
-jQuery.extend({
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				// attributes.value is undefined in Blackberry 4.7 but
-				// uses .value. See #6932
-				var val = elem.attributes.value;
-				return !val || val.specified ? elem.value : elem.text;
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value,
-					index = elem.selectedIndex,
-					values = [],
-					options = elem.options,
-					one = elem.type === "select-one";
-
-				// Nothing was selected
-				if ( index < 0 ) {
-					return null;
-				}
-
-				// Loop through all the selected options
-				for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
-					var option = options[ i ];
-
-					// Don't return options that are disabled or in a disabled optgroup
-					if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
-							(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
-				if ( one && !values.length && options.length ) {
-					return jQuery( options[ index ] ).val();
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var values = jQuery.makeArray( value );
-
-				jQuery(elem).find("option").each(function() {
-					this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
-				});
-
-				if ( !values.length ) {
-					elem.selectedIndex = -1;
-				}
-				return values;
-			}
-		}
-	},
-
-	attrFn: {
-		val: true,
-		css: true,
-		html: true,
-		text: true,
-		data: true,
-		width: true,
-		height: true,
-		offset: true
-	},
-	
-	attrFix: {
-		// Always normalize to ensure hook usage
-		tabindex: "tabIndex"
-	},
-	
-	attr: function( elem, name, value, pass ) {
-		var nType = elem.nodeType;
-		
-		// don't get/set attributes on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return undefined;
-		}
-
-		if ( pass && name in jQuery.attrFn ) {
-			return jQuery( elem )[ name ]( value );
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( !("getAttribute" in elem) ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		var ret, hooks,
-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// Normalize the name if needed
-		name = notxml && jQuery.attrFix[ name ] || name;
-
-		hooks = jQuery.attrHooks[ name ];
-
-		if ( !hooks ) {
-			// Use boolHook for boolean attributes
-			if ( rboolean.test( name ) &&
-				(typeof value === "boolean" || value === undefined || value.toLowerCase() === name.toLowerCase()) ) {
-
-				hooks = boolHook;
-
-			// Use formHook for forms and if the name contains certain characters
-			} else if ( formHook && (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
-				hooks = formHook;
-			}
-		}
-
-		if ( value !== undefined ) {
-
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return undefined;
-
-			} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				elem.setAttribute( name, "" + value );
-				return value;
-			}
-
-		} else if ( hooks && "get" in hooks && notxml ) {
-			return hooks.get( elem, name );
-
-		} else {
-
-			ret = elem.getAttribute( name );
-
-			// Non-existent attributes return null, we normalize to undefined
-			return ret === null ?
-				undefined :
-				ret;
-		}
-	},
-
-	removeAttr: function( elem, name ) {
-		var propName;
-		if ( elem.nodeType === 1 ) {
-			name = jQuery.attrFix[ name ] || name;
-		
-			if ( jQuery.support.getSetAttribute ) {
-				// Use removeAttribute in browsers that support it
-				elem.removeAttribute( name );
-			} else {
-				jQuery.attr( elem, name, "" );
-				elem.removeAttributeNode( elem.getAttributeNode( name ) );
-			}
-
-			// Set corresponding property to false for boolean attributes
-			if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
-				elem[ propName ] = false;
-			}
-		}
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				// We can't allow the type property to be changed (since it causes problems in IE)
-				if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
-					jQuery.error( "type property can't be changed" );
-				} else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
-					// Setting the type on a radio button after the value resets the value in IE6-9
-					// Reset value to it's default in case type is set after value
-					// This is for element creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		},
-		tabIndex: {
-			get: function( elem ) {
-				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				var attributeNode = elem.getAttributeNode("tabIndex");
-
-				return attributeNode && attributeNode.specified ?
-					parseInt( attributeNode.value, 10 ) :
-					rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
-						0 :
-						undefined;
-			}
-		}
-	},
-
-	propFix: {
-		tabindex: "tabIndex",
-		readonly: "readOnly",
-		"for": "htmlFor",
-		"class": "className",
-		maxlength: "maxLength",
-		cellspacing: "cellSpacing",
-		cellpadding: "cellPadding",
-		rowspan: "rowSpan",
-		colspan: "colSpan",
-		usemap: "useMap",
-		frameborder: "frameBorder",
-		contenteditable: "contentEditable"
-	},
-	
-	prop: function( elem, name, value ) {
-		var nType = elem.nodeType;
-
-		// don't get/set properties on text, comment and attribute nodes
-		if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
-			return undefined;
-		}
-
-		var ret, hooks,
-			notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-		// Try to normalize/fix the name
-		name = notxml && jQuery.propFix[ name ] || name;
-		
-		hooks = jQuery.propHooks[ name ];
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return (elem[ name ] = value);
-			}
-
-		} else {
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
-				return ret;
-
-			} else {
-				return elem[ name ];
-			}
-		}
-	},
-	
-	propHooks: {}
-});
-
-// Hook for boolean attributes
-boolHook = {
-	get: function( elem, name ) {
-		// Align boolean attributes with corresponding properties
-		return elem[ jQuery.propFix[ name ] || name ] ?
-			name.toLowerCase() :
-			undefined;
-	},
-	set: function( elem, value, name ) {
-		var propName;
-		if ( value === false ) {
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else {
-			// value is true since we know at this point it's type boolean and not false
-			// Set boolean attributes to the same name and set the DOM property
-			propName = jQuery.propFix[ name ] || name;
-			if ( propName in elem ) {
-				// Only set the IDL specifically if it already exists on the element
-				elem[ propName ] = value;
-			}
-
-			elem.setAttribute( name, name.toLowerCase() );
-		}
-		return name;
-	}
-};
-
-// Use the value property for back compat
-// Use the formHook for button elements in IE6/7 (#1954)
-jQuery.attrHooks.value = {
-	get: function( elem, name ) {
-		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
-			return formHook.get( elem, name );
-		}
-		return elem.value;
-	},
-	set: function( elem, value, name ) {
-		if ( formHook && jQuery.nodeName( elem, "button" ) ) {
-			return formHook.set( elem, value, name );
-		}
-		// Does not return so that setAttribute is also used
-		elem.value = value;
-	}
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !jQuery.support.getSetAttribute ) {
-
-	// propFix is more comprehensive and contains all fixes
-	jQuery.attrFix = jQuery.propFix;
-	
-	// Use this for any attribute on a form in IE6/7
-	formHook = jQuery.attrHooks.name = jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret;
-			ret = elem.getAttributeNode( name );
-			// Return undefined if nodeValue is empty string
-			return ret && ret.nodeValue !== "" ?
-				ret.nodeValue :
-				undefined;
-		},
-		set: function( elem, value, name ) {
-			// Check form objects in IE (multiple bugs related)
-			// Only use nodeValue if the attribute node exists on the form
-			var ret = elem.getAttributeNode( name );
-			if ( ret ) {
-				ret.nodeValue = value;
-				return value;
-			}
-		}
-	};
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each([ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		});
-	});
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
-	jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
-			get: function( elem ) {
-				var ret = elem.getAttribute( name, 2 );
-				return ret === null ? undefined : ret;
-			}
-		});
-	});
-}
-
-if ( !jQuery.support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-			// Return undefined in the case of empty string
-			// Normalize to lowercase since IE uppercases css property names
-			return elem.style.cssText.toLowerCase() || undefined;
-		},
-		set: function( elem, value ) {
-			return (elem.style.cssText = "" + value);
-		}
-	};
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
-	jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-		}
-	});
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
-	jQuery.each([ "radio", "checkbox" ], function() {
-		jQuery.valHooks[ this ] = {
-			get: function( elem ) {
-				// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
-				return elem.getAttribute("value") === null ? "on" : elem.value;
-			}
-		};
-	});
-}
-jQuery.each([ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
-			}
-		}
-	});
-});
-
-
-
-
-var hasOwn = Object.prototype.hasOwnProperty,
-	rnamespaces = /\.(.*)$/,
-	rformElems = /^(?:textarea|input|select)$/i,
-	rperiod = /\./g,
-	rspaces = / /g,
-	rescape = /[^\w\s.|`]/g,
-	fcleanup = function( nm ) {
-		return nm.replace(rescape, "\\$&");
-	};
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
-	// Bind an event to an element
-	// Original by Dean Edwards
-	add: function( elem, types, handler, data ) {
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		if ( handler === false ) {
-			handler = returnFalse;
-		} else if ( !handler ) {
-			// Fixes bug #7229. Fix recommended by jdalton
-			return;
-		}
-
-		var handleObjIn, handleObj;
-
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-		}
-
-		// Make sure that the function being executed has a unique ID
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure
-		var elemData = jQuery._data( elem );
-
-		// If no elemData is found then we must be trying to bind to one of the
-		// banned noData elements
-		if ( !elemData ) {
-			return;
-		}
-
-		var events = elemData.events,
-			eventHandle = elemData.handle;
-
-		if ( !events ) {
-			elemData.events = events = {};
-		}
-
-		if ( !eventHandle ) {
-			elemData.handle = eventHandle = function( e ) {
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
-					jQuery.event.handle.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-		}
-
-		// Add elem as a property of the handle function
-		// This is to prevent a memory leak with non-native events in IE.
-		eventHandle.elem = elem;
-
-		// Handle multiple events separated by a space
-		// jQuery(...).bind("mouseover mouseout", fn);
-		types = types.split(" ");
-
-		var type, i = 0, namespaces;
-
-		while ( (type = types[ i++ ]) ) {
-			handleObj = handleObjIn ?
-				jQuery.extend({}, handleObjIn) :
-				{ handler: handler, data: data };
-
-			// Namespaced event handlers
-			if ( type.indexOf(".") > -1 ) {
-				namespaces = type.split(".");
-				type = namespaces.shift();
-				handleObj.namespace = namespaces.slice(0).sort().join(".");
-
-			} else {
-				namespaces = [];
-				handleObj.namespace = "";
-			}
-
-			handleObj.type = type;
-			if ( !handleObj.guid ) {
-				handleObj.guid = handler.guid;
-			}
-
-			// Get the current list of functions bound to this event
-			var handlers = events[ type ],
-				special = jQuery.event.special[ type ] || {};
-
-			// Init the event handler queue
-			if ( !handlers ) {
-				handlers = events[ type ] = [];
-
-				// Check for a special event handler
-				// Only use addEventListener/attachEvent if the special
-				// events handler returns false
-				if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add the function to the element's handler list
-			handlers.push( handleObj );
-
-			// Keep track of which events have been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	global: {},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, pos ) {
-		// don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		if ( handler === false ) {
-			handler = returnFalse;
-		}
-
-		var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
-			elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
-			events = elemData && elemData.events;
-
-		if ( !elemData || !events ) {
-			return;
-		}
-
-		// types is actually an event object here
-		if ( types && types.type ) {
-			handler = types.handler;
-			types = types.type;
-		}
-
-		// Unbind all events for the element
-		if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
-			types = types || "";
-
-			for ( type in events ) {
-				jQuery.event.remove( elem, type + types );
-			}
-
-			return;
-		}
-
-		// Handle multiple events separated by a space
-		// jQuery(...).unbind("mouseover mouseout", fn);
-		types = types.split(" ");
-
-		while ( (type = types[ i++ ]) ) {
-			origType = type;
-			handleObj = null;
-			all = type.indexOf(".") < 0;
-			namespaces = [];
-
-			if ( !all ) {
-				// Namespaced event handlers
-				namespaces = type.split(".");
-				type = namespaces.shift();
-
-				namespace = new RegExp("(^|\\.)" +
-					jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
-			}
-
-			eventType = events[ type ];
-
-			if ( !eventType ) {
-				continue;
-			}
-
-			if ( !handler ) {
-				for ( j = 0; j < eventType.length; j++ ) {
-					handleObj = eventType[ j ];
-
-					if ( all || namespace.test( handleObj.namespace ) ) {
-						jQuery.event.remove( elem, origType, handleObj.handler, j );
-						eventType.splice( j--, 1 );
-					}
-				}
-
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-
-			for ( j = pos || 0; j < eventType.length; j++ ) {
-				handleObj = eventType[ j ];
-
-				if ( handler.guid === handleObj.guid ) {
-					// remove the given handler for the given type
-					if ( all || namespace.test( handleObj.namespace ) ) {
-						if ( pos == null ) {
-							eventType.splice( j--, 1 );
-						}
-
-						if ( special.remove ) {
-							special.remove.call( elem, handleObj );
-						}
-					}
-
-					if ( pos != null ) {
-						break;
-					}
-				}
-			}
-
-			// remove generic event handler if no more handlers exist
-			if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
-				if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				ret = null;
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			var handle = elemData.handle;
-			if ( handle ) {
-				handle.elem = null;
-			}
-
-			delete elemData.events;
-			delete elemData.handle;
-
-			if ( jQuery.isEmptyObject( elemData ) ) {
-				jQuery.removeData( elem, undefined, true );
-			}
-		}
-	},
-	
-	// Events that are safe to short-circuit if no handlers are attached.
-	// Native DOM events should not be added, they may have inline handlers.
-	customEvent: {
-		"getData": true,
-		"setData": true,
-		"changeData": true
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		// Event object or event type
-		var type = event.type || event,
-			namespaces = [],
-			exclusive;
-
-		if ( type.indexOf("!") >= 0 ) {
-			// Exclusive events trigger only for the exact event (no namespaces)
-			type = type.slice(0, -1);
-			exclusive = true;
-		}
-
-		if ( type.indexOf(".") >= 0 ) {
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split(".");
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-
-		if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
-			// No jQuery handlers for this event type, and it can't have inline handlers
-			return;
-		}
-
-		// Caller can pass in an Event, Object, or just an event type string
-		event = typeof event === "object" ?
-			// jQuery.Event object
-			event[ jQuery.expando ] ? event :
-			// Object literal
-			new jQuery.Event( type, event ) :
-			// Just the event type (string)
-			new jQuery.Event( type );
-
-		event.type = type;
-		event.exclusive = exclusive;
-		event.namespace = namespaces.join(".");
-		event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
-		
-		// triggerHandler() and global events don't bubble or run the default action
-		if ( onlyHandlers || !elem ) {
-			event.preventDefault();
-			event.stopPropagation();
-		}
-
-		// Handle a global trigger
-		if ( !elem ) {
-			// TODO: Stop taunting the data cache; remove global events and always attach to document
-			jQuery.each( jQuery.cache, function() {
-				// internalKey variable is just used to make it easier to find
-				// and potentially change this stuff later; currently it just
-				// points to jQuery.expando
-				var internalKey = jQuery.expando,
-					internalCache = this[ internalKey ];
-				if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
-					jQuery.event.trigger( event, data, internalCache.handle.elem );
-				}
-			});
-			return;
-		}
-
-		// Don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		event.target = elem;
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data ? jQuery.makeArray( data ) : [];
-		data.unshift( event );
-
-		var cur = elem,
-			// IE doesn't like method names with a colon (#3533, #8272)
-			ontype = type.indexOf(":") < 0 ? "on" + type : "";
-
-		// Fire event on the current element, then bubble up the DOM tree
-		do {
-			var handle = jQuery._data( cur, "handle" );
-
-			event.currentTarget = cur;
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-
-			// Trigger an inline bound script
-			if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
-				event.result = false;
-				event.preventDefault();
-			}
-
-			// Bubble up to document, then to window
-			cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
-		} while ( cur && !event.isPropagationStopped() );
-
-		// If nobody prevented the default action, do it now
-		if ( !event.isDefaultPrevented() ) {
-			var old,
-				special = jQuery.event.special[ type ] || {};
-
-			if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
-				!(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction)() check here because IE6/7 fails that test.
-				// IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
-				try {
-					if ( ontype && elem[ type ] ) {
-						// Don't re-trigger an onFOO event when we call its FOO() method
-						old = elem[ ontype ];
-
-						if ( old ) {
-							elem[ ontype ] = null;
-						}
-
-						jQuery.event.triggered = type;
-						elem[ type ]();
-					}
-				} catch ( ieError ) {}
-
-				if ( old ) {
-					elem[ ontype ] = old;
-				}
-
-				jQuery.event.triggered = undefined;
-			}
-		}
-		
-		return event.result;
-	},
-
-	handle: function( event ) {
-		event = jQuery.event.fix( event || window.event );
-		// Snapshot the handlers list since a called handler may add/remove events.
-		var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
-			run_all = !event.exclusive && !event.namespace,
-			args = Array.prototype.slice.call( arguments, 0 );
-
-		// Use the fix-ed Event rather than the (read-only) native event
-		args[0] = event;
-		event.currentTarget = this;
-
-		for ( var j = 0, l = handlers.length; j < l; j++ ) {
-			var handleObj = handlers[ j ];
-
-			// Triggered event must 1) be non-exclusive and have no namespace, or
-			// 2) have namespace(s) a subset or equal to those in the bound event.
-			if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
-				// Pass in a reference to the handler function itself
-				// So that we can later remove it
-				event.handler = handleObj.handler;
-				event.data = handleObj.data;
-				event.handleObj = handleObj;
-
-				var ret = handleObj.handler.apply( this, args );
-
-				if ( ret !== undefined ) {
-					event.result = ret;
-					if ( ret === false ) {
-						event.preventDefault();
-						event.stopPropagation();
-					}
-				}
-
-				if ( event.isImmediatePropagationStopped() ) {
-					break;
-				}
-			}
-		}
-		return event.result;
-	},
-
-	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// store a copy of the original event object
-		// and "clone" to set read-only properties
-		var originalEvent = event;
-		event = jQuery.Event( originalEvent );
-
-		for ( var i = this.props.length, prop; i; ) {
-			prop = this.props[ --i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Fix target property, if necessary
-		if ( !event.target ) {
-			// Fixes #1925 where srcElement might not be defined either
-			event.target = event.srcElement || document;
-		}
-
-		// check if target is a textnode (safari)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// Add relatedTarget, if necessary
-		if ( !event.relatedTarget && event.fromElement ) {
-			event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
-		}
-
-		// Calculate pageX/Y if missing and clientX/Y available
-		if ( event.pageX == null && event.clientX != null ) {
-			var eventDocument = event.target.ownerDocument || document,
-				doc = eventDocument.documentElement,
-				body = eventDocument.body;
-
-			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
-			event.pageY = event.clientY + (doc && doc.scrollTop  || body && body.scrollTop  || 0) - (doc && doc.clientTop  || body && body.clientTop  || 0);
-		}
-
-		// Add which for key events
-		if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
-			event.which = event.charCode != null ? event.charCode : event.keyCode;
-		}
-
-		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
-		if ( !event.metaKey && event.ctrlKey ) {
-			event.metaKey = event.ctrlKey;
-		}
-
-		// Add which for click: 1 === left; 2 === middle; 3 === right
-		// Note: button is not normalized, so don't use it
-		if ( !event.which && event.button !== undefined ) {
-			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
-		}
-
-		return event;
-	},
-
-	// Deprecated, use jQuery.guid instead
-	guid: 1E8,
-
-	// Deprecated, use jQuery.proxy instead
-	proxy: jQuery.proxy,
-
-	special: {
-		ready: {
-			// Make sure the ready event is setup
-			setup: jQuery.bindReady,
-			teardown: jQuery.noop
-		},
-
-		live: {
-			add: function( handleObj ) {
-				jQuery.event.add( this,
-					liveConvert( handleObj.origType, handleObj.selector ),
-					jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
-			},
-
-			remove: function( handleObj ) {
-				jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
-			}
-		},
-
-		beforeunload: {
-			setup: function( data, namespaces, eventHandle ) {
-				// We only want to do this special case on windows
-				if ( jQuery.isWindow( this ) ) {
-					this.onbeforeunload = eventHandle;
-				}
-			},
-
-			teardown: function( namespaces, eventHandle ) {
-				if ( this.onbeforeunload === eventHandle ) {
-					this.onbeforeunload = null;
-				}
-			}
-		}
-	}
-};
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle, false );
-		}
-	} :
-	function( elem, type, handle ) {
-		if ( elem.detachEvent ) {
-			elem.detachEvent( "on" + type, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-	// Allow instantiation without the 'new' keyword
-	if ( !this.preventDefault ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
-			src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// timeStamp is buggy for some events on Firefox(#3843)
-	// So we won't rely on the native value
-	this.timeStamp = jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
-	return false;
-}
-function returnTrue() {
-	return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	preventDefault: function() {
-		this.isDefaultPrevented = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-
-		// if preventDefault exists run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// otherwise set the returnValue property of the original event to false (IE)
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		this.isPropagationStopped = returnTrue;
-
-		var e = this.originalEvent;
-		if ( !e ) {
-			return;
-		}
-		// if stopPropagation exists run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-		// otherwise set the cancelBubble property of the original event to true (IE)
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		this.isImmediatePropagationStopped = returnTrue;
-		this.stopPropagation();
-	},
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
-	// Check if mouse(over|out) are still within the same parent element
-	var parent = event.relatedTarget;
-
-	// set the correct event type
-	event.type = event.data;
-
-	// Firefox sometimes assigns relatedTarget a XUL element
-	// which we cannot access the parentNode property of
-	try {
-
-		// Chrome does something similar, the parentNode property
-		// can be accessed but is null.
-		if ( parent && parent !== document && !parent.parentNode ) {
-			return;
-		}
-
-		// Traverse up the tree
-		while ( parent && parent !== this ) {
-			parent = parent.parentNode;
-		}
-
-		if ( parent !== this ) {
-			// handle event if we actually just moused on to a non sub-element
-			jQuery.event.handle.apply( this, arguments );
-		}
-
-	// assuming we've left the element since we most likely mousedover a xul element
-	} catch(e) { }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
-	event.type = event.data;
-	jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		setup: function( data ) {
-			jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
-		},
-		teardown: function( data ) {
-			jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
-		}
-	};
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
-	jQuery.event.special.submit = {
-		setup: function( data, namespaces ) {
-			if ( !jQuery.nodeName( this, "form" ) ) {
-				jQuery.event.add(this, "click.specialSubmit", function( e ) {
-					var elem = e.target,
-						type = elem.type;
-
-					if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
-						trigger( "submit", this, arguments );
-					}
-				});
-
-				jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
-					var elem = e.target,
-						type = elem.type;
-
-					if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
-						trigger( "submit", this, arguments );
-					}
-				});
-
-			} else {
-				return false;
-			}
-		},
-
-		teardown: function( namespaces ) {
-			jQuery.event.remove( this, ".specialSubmit" );
-		}
-	};
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
-	var changeFilters,
-
-	getVal = function( elem ) {
-		var type = elem.type, val = elem.value;
-
-		if ( type === "radio" || type === "checkbox" ) {
-			val = elem.checked;
-
-		} else if ( type === "select-multiple" ) {
-			val = elem.selectedIndex > -1 ?
-				jQuery.map( elem.options, function( elem ) {
-					return elem.selected;
-				}).join("-") :
-				"";
-
-		} else if ( jQuery.nodeName( elem, "select" ) ) {
-			val = elem.selectedIndex;
-		}
-
-		return val;
-	},
-
-	testChange = function testChange( e ) {
-		var elem = e.target, data, val;
-
-		if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
-			return;
-		}
-
-		data = jQuery._data( elem, "_change_data" );
-		val = getVal(elem);
-
-		// the current data will be also retrieved by beforeactivate
-		if ( e.type !== "focusout" || elem.type !== "radio" ) {
-			jQuery._data( elem, "_change_data", val );
-		}
-
-		if ( data === undefined || val === data ) {
-			return;
-		}
-
-		if ( data != null || val ) {
-			e.type = "change";
-			e.liveFired = undefined;
-			jQuery.event.trigger( e, arguments[1], elem );
-		}
-	};
-
-	jQuery.event.special.change = {
-		filters: {
-			focusout: testChange,
-
-			beforedeactivate: testChange,
-
-			click: function( e ) {
-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
-				if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
-					testChange.call( this, e );
-				}
-			},
-
-			// Change has to be called before submit
-			// Keydown will be called before keypress, which is used in submit-event delegation
-			keydown: function( e ) {
-				var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
-				if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
-					(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
-					type === "select-multiple" ) {
-					testChange.call( this, e );
-				}
-			},
-
-			// Beforeactivate happens also before the previous element is blurred
-			// with this event you can't trigger a change event, but you can store
-			// information
-			beforeactivate: function( e ) {
-				var elem = e.target;
-				jQuery._data( elem, "_change_data", getVal(elem) );
-			}
-		},
-
-		setup: function( data, namespaces ) {
-			if ( this.type === "file" ) {
-				return false;
-			}
-
-			for ( var type in changeFilters ) {
-				jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
-			}
-
-			return rformElems.test( this.nodeName );
-		},
-
-		teardown: function( namespaces ) {
-			jQuery.event.remove( this, ".specialChange" );
-
-			return rformElems.test( this.nodeName );
-		}
-	};
-
-	changeFilters = jQuery.event.special.change.filters;
-
-	// Handle when the input is .focus()'d
-	changeFilters.focus = changeFilters.beforeactivate;
-}
-
-function trigger( type, elem, args ) {
-	// Piggyback on a donor event to simulate a different one.
-	// Fake originalEvent to avoid donor's stopPropagation, but if the
-	// simulated event prevents default then we do the same on the donor.
-	// Don't pass args or remember liveFired; they apply to the donor event.
-	var event = jQuery.extend( {}, args[ 0 ] );
-	event.type = type;
-	event.originalEvent = {};
-	event.liveFired = undefined;
-	jQuery.event.handle.call( elem, event );
-	if ( event.isDefaultPrevented() ) {
-		args[ 0 ].preventDefault();
-	}
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
-	jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler while someone wants focusin/focusout
-		var attaches = 0;
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				if ( attaches++ === 0 ) {
-					document.addEventListener( orig, handler, true );
-				}
-			},
-			teardown: function() {
-				if ( --attaches === 0 ) {
-					document.removeEventListener( orig, handler, true );
-				}
-			}
-		};
-
-		function handler( donor ) {
-			// Donor event is always a native one; fix it and switch its type.
-			// Let focusin/out handler cancel the donor focus/blur event.
-			var e = jQuery.event.fix( donor );
-			e.type = fix;
-			e.originalEvent = {};
-			jQuery.event.trigger( e, null, e.target );
-			if ( e.isDefaultPrevented() ) {
-				donor.preventDefault();
-			}
-		}
-	});
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
-	jQuery.fn[ name ] = function( type, data, fn ) {
-		var handler;
-
-		// Handle object literals
-		if ( typeof type === "object" ) {
-			for ( var key in type ) {
-				this[ name ](key, data, type[key], fn);
-			}
-			return this;
-		}
-
-		if ( arguments.length === 2 || data === false ) {
-			fn = data;
-			data = undefined;
-		}
-
-		if ( name === "one" ) {
-			handler = function( event ) {
-				jQuery( this ).unbind( event, handler );
-				return fn.apply( this, arguments );
-			};
-			handler.guid = fn.guid || jQuery.guid++;
-		} else {
-			handler = fn;
-		}
-
-		if ( type === "unload" && name !== "one" ) {
-			this.one( type, data, fn );
-
-		} else {
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				jQuery.event.add( this[i], type, handler, data );
-			}
-		}
-
-		return this;
-	};
-});
-
-jQuery.fn.extend({
-	unbind: function( type, fn ) {
-		// Handle object literals
-		if ( typeof type === "object" && !type.preventDefault ) {
-			for ( var key in type ) {
-				this.unbind(key, type[key]);
-			}
-
-		} else {
-			for ( var i = 0, l = this.length; i < l; i++ ) {
-				jQuery.event.remove( this[i], type, fn );
-			}
-		}
-
-		return this;
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.live( types, data, fn, selector );
-	},
-
-	undelegate: function( selector, types, fn ) {
-		if ( arguments.length === 0 ) {
-			return this.unbind( "live" );
-
-		} else {
-			return this.die( types, null, fn, selector );
-		}
-	},
-
-	trigger: function( type, data ) {
-		return this.each(function() {
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-
-	triggerHandler: function( type, data ) {
-		if ( this[0] ) {
-			return jQuery.event.trigger( type, data, this[0], true );
-		}
-	},
-
-	toggle: function( fn ) {
-		// Save reference to arguments for access in closure
-		var args = arguments,
-			guid = fn.guid || jQuery.guid++,
-			i = 0,
-			toggler = function( event ) {
-				// Figure out which function to execute
-				var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
-				jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
-				// Make sure that clicks stop
-				event.preventDefault();
-
-				// and execute the function
-				return args[ lastToggle ].apply( this, arguments ) || false;
-			};
-
-		// link all the functions, so any of them can unbind this click handler
-		toggler.guid = guid;
-		while ( i < args.length ) {
-			args[ i++ ].guid = guid;
-		}
-
-		return this.click( toggler );
-	},
-
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-});
-
-var liveMap = {
-	focus: "focusin",
-	blur: "focusout",
-	mouseenter: "mouseover",
-	mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
-	jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
-		var type, i = 0, match, namespaces, preType,
-			selector = origSelector || this.selector,
-			context = origSelector ? this : jQuery( this.context );
-
-		if ( typeof types === "object" && !types.preventDefault ) {
-			for ( var key in types ) {
-				context[ name ]( key, data, types[key], selector );
-			}
-
-			return this;
-		}
-
-		if ( name === "die" && !types &&
-					origSelector && origSelector.charAt(0) === "." ) {
-
-			context.unbind( origSelector );
-
-			return this;
-		}
-
-		if ( data === false || jQuery.isFunction( data ) ) {
-			fn = data || returnFalse;
-			data = undefined;
-		}
-
-		types = (types || "").split(" ");
-
-		while ( (type = types[ i++ ]) != null ) {
-			match = rnamespaces.exec( type );
-			namespaces = "";
-
-			if ( match )  {
-				namespaces = match[0];
-				type = type.replace( rnamespaces, "" );
-			}
-
-			if ( type === "hover" ) {
-				types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
-				continue;
-			}
-
-			preType = type;
-
-			if ( liveMap[ type ] ) {
-				types.push( liveMap[ type ] + namespaces );
-				type = type + namespaces;
-
-			} else {
-				type = (liveMap[ type ] || type) + namespaces;
-			}
-
-			if ( name === "live" ) {
-				// bind live handler
-				for ( var j = 0, l = context.length; j < l; j++ ) {
-					jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
-						{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
-				}
-
-			} else {
-				// unbind live handler
-				context.unbind( "live." + liveConvert( type, selector ), fn );
-			}
-		}
-
-		return this;
-	};
-});
-
-function liveHandler( event ) {
-	var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
-		elems = [],
-		selectors = [],
-		events = jQuery._data( this, "events" );
-
-	// Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
-	if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
-		return;
-	}
-
-	if ( event.namespace ) {
-		namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
-	}
-
-	event.liveFired = this;
-
-	var live = events.live.slice(0);
-
-	for ( j = 0; j < live.length; j++ ) {
-		handleObj = live[j];
-
-		if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
-			selectors.push( handleObj.selector );
-
-		} else {
-			live.splice( j--, 1 );
-		}
-	}
-
-	match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
-	for ( i = 0, l = match.length; i < l; i++ ) {
-		close = match[i];
-
-		for ( j = 0; j < live.length; j++ ) {
-			handleObj = live[j];
-
-			if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
-				elem = close.elem;
-				related = null;
-
-				// Those two events require additional checking
-				if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
-					event.type = handleObj.preType;
-					related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
-
-					// Make sure not to accidentally match a child element with the same selector
-					if ( related && jQuery.contains( elem, related ) ) {
-						related = elem;
-					}
-				}
-
-				if ( !related || related !== elem ) {
-					elems.push({ elem: elem, handleObj: handleObj, level: close.level });
-				}
-			}
-		}
-	}
-
-	for ( i = 0, l = elems.length; i < l; i++ ) {
-		match = elems[i];
-
-		if ( maxLevel && match.level > maxLevel ) {
-			break;
-		}
-
-		event.currentTarget = match.elem;
-		event.data = match.handleObj.data;
-		event.handleObj = match.handleObj;
-
-		ret = match.handleObj.origHandler.apply( match.elem, arguments );
-
-		if ( ret === false || event.isPropagationStopped() ) {
-			maxLevel = match.level;
-
-			if ( ret === false ) {
-				stop = false;
-			}
-			if ( event.isImmediatePropagationStopped() ) {
-				break;
-			}
-		}
-	}
-
-	return stop;
-}
-
-function liveConvert( type, selector ) {
-	return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		if ( fn == null ) {
-			fn = data;
-			data = null;
-		}
-
-		return arguments.length > 0 ?
-			this.bind( name, data, fn ) :
-			this.trigger( name );
-	};
-
-	if ( jQuery.attrFn ) {
-		jQuery.attrFn[ name ] = true;
-	}
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- *  Copyright 2011, The Dojo Foundation
- *  Released under the MIT, BSD, and GPL Licenses.
- *  More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
-	done = 0,
-	toString = Object.prototype.toString,
-	hasDuplicate = false,
-	baseHasDuplicate = true,
-	rBackslash = /\\/g,
-	rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-//   Thus far that includes Google Chrome.
-[0, 0].sort(function() {
-	baseHasDuplicate = false;
-	return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
-	results = results || [];
-	context = context || document;
-
-	var origContext = context;
-
-	if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
-		return [];
-	}
-	
-	if ( !selector || typeof selector !== "string" ) {
-		return results;
-	}
-
-	var m, set, checkSet, extra, ret, cur, pop, i,
-		prune = true,
-		contextXML = Sizzle.isXML( context ),
-		parts = [],
-		soFar = selector;
-	
-	// Reset the position of the chunker regexp (start from head)
-	do {
-		chunker.exec( "" );
-		m = chunker.exec( soFar );
-
-		if ( m ) {
-			soFar = m[3];
-		
-			parts.push( m[1] );
-		
-			if ( m[2] ) {
-				extra = m[3];
-				break;
-			}
-		}
-	} while ( m );
-
-	if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
-		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
-			set = posProcess( parts[0] + parts[1], context );
-
-		} else {
-			set = Expr.relative[ parts[0] ] ?
-				[ context ] :
-				Sizzle( parts.shift(), context );
-
-			while ( parts.length ) {
-				selector = parts.shift();
-
-				if ( Expr.relative[ selector ] ) {
-					selector += parts.shift();
-				}
-				
-				set = posProcess( selector, set );
-			}
-		}
-
-	} else {
-		// Take a shortcut and set the context if the root selector is an ID
-		// (but not if it'll be faster if the inner selector is an ID)
-		if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
-				Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
-			ret = Sizzle.find( parts.shift(), context, contextXML );
-			context = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set )[0] :
-				ret.set[0];
-		}
-
-		if ( context ) {
-			ret = seed ?
-				{ expr: parts.pop(), set: makeArray(seed) } :
-				Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
-			set = ret.expr ?
-				Sizzle.filter( ret.expr, ret.set ) :
-				ret.set;
-
-			if ( parts.length > 0 ) {
-				checkSet = makeArray( set );
-
-			} else {
-				prune = false;
-			}
-
-			while ( parts.length ) {
-				cur = parts.pop();
-				pop = cur;
-
-				if ( !Expr.relative[ cur ] ) {
-					cur = "";
-				} else {
-					pop = parts.pop();
-				}
-
-				if ( pop == null ) {
-					pop = context;
-				}
-
-				Expr.relative[ cur ]( checkSet, pop, contextXML );
-			}
-
-		} else {
-			checkSet = parts = [];
-		}
-	}
-
-	if ( !checkSet ) {
-		checkSet = set;
-	}
-
-	if ( !checkSet ) {
-		Sizzle.error( cur || selector );
-	}
-
-	if ( toString.call(checkSet) === "[object Array]" ) {
-		if ( !prune ) {
-			results.push.apply( results, checkSet );
-
-		} else if ( context && context.nodeType === 1 ) {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
-					results.push( set[i] );
-				}
-			}
-
-		} else {
-			for ( i = 0; checkSet[i] != null; i++ ) {
-				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
-					results.push( set[i] );
-				}
-			}
-		}
-
-	} else {
-		makeArray( checkSet, results );
-	}
-
-	if ( extra ) {
-		Sizzle( extra, origContext, results, seed );
-		Sizzle.uniqueSort( results );
-	}
-
-	return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
-	if ( sortOrder ) {
-		hasDuplicate = baseHasDuplicate;
-		results.sort( sortOrder );
-
-		if ( hasDuplicate ) {
-			for ( var i = 1; i < results.length; i++ ) {
-				if ( results[i] === results[ i - 1 ] ) {
-					results.splice( i--, 1 );
-				}
-			}
-		}
-	}
-
-	return results;
-};
-
-Sizzle.matches = function( expr, set ) {
-	return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
-	return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
-	var set;
-
-	if ( !expr ) {
-		return [];
-	}
-
-	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
-		var match,
-			type = Expr.order[i];
-		
-		if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
-			var left = match[1];
-			match.splice( 1, 1 );
-
-			if ( left.substr( left.length - 1 ) !== "\\" ) {
-				match[1] = (match[1] || "").replace( rBackslash, "" );
-				set = Expr.find[ type ]( match, context, isXML );
-
-				if ( set != null ) {
-					expr = expr.replace( Expr.match[ type ], "" );
-					break;
-				}
-			}
-		}
-	}
-
-	if ( !set ) {
-		set = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( "*" ) :
-			[];
-	}
-
-	return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
-	var match, anyFound,
-		old = expr,
-		result = [],
-		curLoop = set,
-		isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
-	while ( expr && set.length ) {
-		for ( var type in Expr.filter ) {
-			if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
-				var found, item,
-					filter = Expr.filter[ type ],
-					left = match[1];
-
-				anyFound = false;
-
-				match.splice(1,1);
-
-				if ( left.substr( left.length - 1 ) === "\\" ) {
-					continue;
-				}
-
-				if ( curLoop === result ) {
-					result = [];
-				}
-
-				if ( Expr.preFilter[ type ] ) {
-					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
-					if ( !match ) {
-						anyFound = found = true;
-
-					} else if ( match === true ) {
-						continue;
-					}
-				}
-
-				if ( match ) {
-					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
-						if ( item ) {
-							found = filter( item, match, i, curLoop );
-							var pass = not ^ !!found;
-
-							if ( inplace && found != null ) {
-								if ( pass ) {
-									anyFound = true;
-
-								} else {
-									curLoop[i] = false;
-								}
-
-							} else if ( pass ) {
-								result.push( item );
-								anyFound = true;
-							}
-						}
-					}
-				}
-
-				if ( found !== undefined ) {
-					if ( !inplace ) {
-						curLoop = result;
-					}
-
-					expr = expr.replace( Expr.match[ type ], "" );
-
-					if ( !anyFound ) {
-						return [];
-					}
-
-					break;
-				}
-			}
-		}
-
-		// Improper expression
-		if ( expr === old ) {
-			if ( anyFound == null ) {
-				Sizzle.error( expr );
-
-			} else {
-				break;
-			}
-		}
-
-		old = expr;
-	}
-
-	return curLoop;
-};
-
-Sizzle.error = function( msg ) {
-	throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
-	order: [ "ID", "NAME", "TAG" ],
-
-	match: {
-		ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
-		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
-		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
-		TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
-		CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
-		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
-		PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
-	},
-
-	leftMatch: {},
-
-	attrMap: {
-		"class": "className",
-		"for": "htmlFor"
-	},
-
-	attrHandle: {
-		href: function( elem ) {
-			return elem.getAttribute( "href" );
-		},
-		type: function( elem ) {
-			return elem.getAttribute( "type" );
-		}
-	},
-
-	relative: {
-		"+": function(checkSet, part){
-			var isPartStr = typeof part === "string",
-				isTag = isPartStr && !rNonWord.test( part ),
-				isPartStrNotTag = isPartStr && !isTag;
-
-			if ( isTag ) {
-				part = part.toLowerCase();
-			}
-
-			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
-				if ( (elem = checkSet[i]) ) {
-					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
-					checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
-						elem || false :
-						elem === part;
-				}
-			}
-
-			if ( isPartStrNotTag ) {
-				Sizzle.filter( part, checkSet, true );
-			}
-		},
-
-		">": function( checkSet, part ) {
-			var elem,
-				isPartStr = typeof part === "string",
-				i = 0,
-				l = checkSet.length;
-
-			if ( isPartStr && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						var parent = elem.parentNode;
-						checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
-					}
-				}
-
-			} else {
-				for ( ; i < l; i++ ) {
-					elem = checkSet[i];
-
-					if ( elem ) {
-						checkSet[i] = isPartStr ?
-							elem.parentNode :
-							elem.parentNode === part;
-					}
-				}
-
-				if ( isPartStr ) {
-					Sizzle.filter( part, checkSet, true );
-				}
-			}
-		},
-
-		"": function(checkSet, part, isXML){
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
-		},
-
-		"~": function( checkSet, part, isXML ) {
-			var nodeCheck,
-				doneName = done++,
-				checkFn = dirCheck;
-
-			if ( typeof part === "string" && !rNonWord.test( part ) ) {
-				part = part.toLowerCase();
-				nodeCheck = part;
-				checkFn = dirNodeCheck;
-			}
-
-			checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
-		}
-	},
-
-	find: {
-		ID: function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-				// Check parentNode to catch when Blackberry 4.6 returns
-				// nodes that are no longer in the document #6963
-				return m && m.parentNode ? [m] : [];
-			}
-		},
-
-		NAME: function( match, context ) {
-			if ( typeof context.getElementsByName !== "undefined" ) {
-				var ret = [],
-					results = context.getElementsByName( match[1] );
-
-				for ( var i = 0, l = results.length; i < l; i++ ) {
-					if ( results[i].getAttribute("name") === match[1] ) {
-						ret.push( results[i] );
-					}
-				}
-
-				return ret.length === 0 ? null : ret;
-			}
-		},
-
-		TAG: function( match, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( match[1] );
-			}
-		}
-	},
-	preFilter: {
-		CLASS: function( match, curLoop, inplace, result, not, isXML ) {
-			match = " " + match[1].replace( rBackslash, "" ) + " ";
-
-			if ( isXML ) {
-				return match;
-			}
-
-			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
-				if ( elem ) {
-					if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
-						if ( !inplace ) {
-							result.push( elem );
-						}
-
-					} else if ( inplace ) {
-						curLoop[i] = false;
-					}
-				}
-			}
-
-			return false;
-		},
-
-		ID: function( match ) {
-			return match[1].replace( rBackslash, "" );
-		},
-
-		TAG: function( match, curLoop ) {
-			return match[1].replace( rBackslash, "" ).toLowerCase();
-		},
-
-		CHILD: function( match ) {
-			if ( match[1] === "nth" ) {
-				if ( !match[2] ) {
-					Sizzle.error( match[0] );
-				}
-
-				match[2] = match[2].replace(/^\+|\s*/g, '');
-
-				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
-				var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
-					match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
-					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
-				// calculate the numbers (first)n+(last) including if they are negative
-				match[2] = (test[1] + (test[2] || 1)) - 0;
-				match[3] = test[3] - 0;
-			}
-			else if ( match[2] ) {
-				Sizzle.error( match[0] );
-			}
-
-			// TODO: Move to normal caching system
-			match[0] = done++;
-
-			return match;
-		},
-
-		ATTR: function( match, curLoop, inplace, result, not, isXML ) {
-			var name = match[1] = match[1].replace( rBackslash, "" );
-			
-			if ( !isXML && Expr.attrMap[name] ) {
-				match[1] = Expr.attrMap[name];
-			}
-
-			// Handle if an un-quoted value was used
-			match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
-			if ( match[2] === "~=" ) {
-				match[4] = " " + match[4] + " ";
-			}
-
-			return match;
-		},
-
-		PSEUDO: function( match, curLoop, inplace, result, not ) {
-			if ( match[1] === "not" ) {
-				// If we're dealing with a complex expression, or a simple one
-				if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
-					match[3] = Sizzle(match[3], null, null, curLoop);
-
-				} else {
-					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
-					if ( !inplace ) {
-						result.push.apply( result, ret );
-					}
-
-					return false;
-				}
-
-			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
-				return true;
-			}
-			
-			return match;
-		},
-
-		POS: function( match ) {
-			match.unshift( true );
-
-			return match;
-		}
-	},
-	
-	filters: {
-		enabled: function( elem ) {
-			return elem.disabled === false && elem.type !== "hidden";
-		},
-
-		disabled: function( elem ) {
-			return elem.disabled === true;
-		},
-
-		checked: function( elem ) {
-			return elem.checked === true;
-		},
-		
-		selected: function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-			
-			return elem.selected === true;
-		},
-
-		parent: function( elem ) {
-			return !!elem.firstChild;
-		},
-
-		empty: function( elem ) {
-			return !elem.firstChild;
-		},
-
-		has: function( elem, i, match ) {
-			return !!Sizzle( match[3], elem ).length;
-		},
-
-		header: function( elem ) {
-			return (/h\d/i).test( elem.nodeName );
-		},
-
-		text: function( elem ) {
-			var attr = elem.getAttribute( "type" ), type = elem.type;
-			// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) 
-			// use getAttribute instead to test this case
-			return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
-		},
-
-		radio: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
-		},
-
-		checkbox: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
-		},
-
-		file: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
-		},
-
-		password: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
-		},
-
-		submit: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "submit" === elem.type;
-		},
-
-		image: function( elem ) {
-			return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
-		},
-
-		reset: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return (name === "input" || name === "button") && "reset" === elem.type;
-		},
-
-		button: function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && "button" === elem.type || name === "button";
-		},
-
-		input: function( elem ) {
-			return (/input|select|textarea|button/i).test( elem.nodeName );
-		},
-
-		focus: function( elem ) {
-			return elem === elem.ownerDocument.activeElement;
-		}
-	},
-	setFilters: {
-		first: function( elem, i ) {
-			return i === 0;
-		},
-
-		last: function( elem, i, match, array ) {
-			return i === array.length - 1;
-		},
-
-		even: function( elem, i ) {
-			return i % 2 === 0;
-		},
-
-		odd: function( elem, i ) {
-			return i % 2 === 1;
-		},
-
-		lt: function( elem, i, match ) {
-			return i < match[3] - 0;
-		},
-
-		gt: function( elem, i, match ) {
-			return i > match[3] - 0;
-		},
-
-		nth: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		},
-
-		eq: function( elem, i, match ) {
-			return match[3] - 0 === i;
-		}
-	},
-	filter: {
-		PSEUDO: function( elem, match, i, array ) {
-			var name = match[1],
-				filter = Expr.filters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-
-			} else if ( name === "contains" ) {
-				return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
-			} else if ( name === "not" ) {
-				var not = match[3];
-
-				for ( var j = 0, l = not.length; j < l; j++ ) {
-					if ( not[j] === elem ) {
-						return false;
-					}
-				}
-
-				return true;
-
-			} else {
-				Sizzle.error( name );
-			}
-		},
-
-		CHILD: function( elem, match ) {
-			var type = match[1],
-				node = elem;
-
-			switch ( type ) {
-				case "only":
-				case "first":
-					while ( (node = node.previousSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					if ( type === "first" ) { 
-						return true; 
-					}
-
-					node = elem;
-
-				case "last":
-					while ( (node = node.nextSibling) )	 {
-						if ( node.nodeType === 1 ) { 
-							return false; 
-						}
-					}
-
-					return true;
-
-				case "nth":
-					var first = match[2],
-						last = match[3];
-
-					if ( first === 1 && last === 0 ) {
-						return true;
-					}
-					
-					var doneName = match[0],
-						parent = elem.parentNode;
-	
-					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
-						var count = 0;
-						
-						for ( node = parent.firstChild; node; node = node.nextSibling ) {
-							if ( node.nodeType === 1 ) {
-								node.nodeIndex = ++count;
-							}
-						} 
-
-						parent.sizcache = doneName;
-					}
-					
-					var diff = elem.nodeIndex - last;
-
-					if ( first === 0 ) {
-						return diff === 0;
-
-					} else {
-						return ( diff % first === 0 && diff / first >= 0 );
-					}
-			}
-		},
-
-		ID: function( elem, match ) {
-			return elem.nodeType === 1 && elem.getAttribute("id") === match;
-		},
-
-		TAG: function( elem, match ) {
-			return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
-		},
-		
-		CLASS: function( elem, match ) {
-			return (" " + (elem.className || elem.getAttribute("class")) + " ")
-				.indexOf( match ) > -1;
-		},
-
-		ATTR: function( elem, match ) {
-			var name = match[1],
-				result = Expr.attrHandle[ name ] ?
-					Expr.attrHandle[ name ]( elem ) :
-					elem[ name ] != null ?
-						elem[ name ] :
-						elem.getAttribute( name ),
-				value = result + "",
-				type = match[2],
-				check = match[4];
-
-			return result == null ?
-				type === "!=" :
-				type === "=" ?
-				value === check :
-				type === "*=" ?
-				value.indexOf(check) >= 0 :
-				type === "~=" ?
-				(" " + value + " ").indexOf(check) >= 0 :
-				!check ?
-				value && result !== false :
-				type === "!=" ?
-				value !== check :
-				type === "^=" ?
-				value.indexOf(check) === 0 :
-				type === "$=" ?
-				value.substr(value.length - check.length) === check :
-				type === "|=" ?
-				value === check || value.substr(0, check.length + 1) === check + "-" :
-				false;
-		},
-
-		POS: function( elem, match, i, array ) {
-			var name = match[2],
-				filter = Expr.setFilters[ name ];
-
-			if ( filter ) {
-				return filter( elem, i, match, array );
-			}
-		}
-	}
-};
-
-var origPOS = Expr.match.POS,
-	fescape = function(all, num){
-		return "\\" + (num - 0 + 1);
-	};
-
-for ( var type in Expr.match ) {
-	Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
-	Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
-	array = Array.prototype.slice.call( array, 0 );
-
-	if ( results ) {
-		results.push.apply( results, array );
-		return results;
-	}
-	
-	return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
-	Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
-	makeArray = function( array, results ) {
-		var i = 0,
-			ret = results || [];
-
-		if ( toString.call(array) === "[object Array]" ) {
-			Array.prototype.push.apply( ret, array );
-
-		} else {
-			if ( typeof array.length === "number" ) {
-				for ( var l = array.length; i < l; i++ ) {
-					ret.push( array[i] );
-				}
-
-			} else {
-				for ( ; array[i]; i++ ) {
-					ret.push( array[i] );
-				}
-			}
-		}
-
-		return ret;
-	};
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
-			return a.compareDocumentPosition ? -1 : 1;
-		}
-
-		return a.compareDocumentPosition(b) & 4 ? -1 : 1;
-	};
-
-} else {
-	sortOrder = function( a, b ) {
-		// The nodes are identical, we can exit early
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-
-		// Fallback to using sourceIndex (in IE) if it's available on both nodes
-		} else if ( a.sourceIndex && b.sourceIndex ) {
-			return a.sourceIndex - b.sourceIndex;
-		}
-
-		var al, bl,
-			ap = [],
-			bp = [],
-			aup = a.parentNode,
-			bup = b.parentNode,
-			cur = aup;
-
-		// If the nodes are siblings (or identical) we can do a quick check
-		if ( aup === bup ) {
-			return siblingCheck( a, b );
-
-		// If no parents were found then the nodes are disconnected
-		} else if ( !aup ) {
-			return -1;
-
-		} else if ( !bup ) {
-			return 1;
-		}
-
-		// Otherwise they're somewhere else in the tree so we need
-		// to build up a full list of the parentNodes for comparison
-		while ( cur ) {
-			ap.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		cur = bup;
-
-		while ( cur ) {
-			bp.unshift( cur );
-			cur = cur.parentNode;
-		}
-
-		al = ap.length;
-		bl = bp.length;
-
-		// Start walking down the tree looking for a discrepancy
-		for ( var i = 0; i < al && i < bl; i++ ) {
-			if ( ap[i] !== bp[i] ) {
-				return siblingCheck( ap[i], bp[i] );
-			}
-		}
-
-		// We ended someplace up the tree so do a sibling check
-		return i === al ?
-			siblingCheck( a, bp[i], -1 ) :
-			siblingCheck( ap[i], b, 1 );
-	};
-
-	siblingCheck = function( a, b, ret ) {
-		if ( a === b ) {
-			return ret;
-		}
-
-		var cur = a.nextSibling;
-
-		while ( cur ) {
-			if ( cur === b ) {
-				return -1;
-			}
-
-			cur = cur.nextSibling;
-		}
-
-		return 1;
-	};
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-Sizzle.getText = function( elems ) {
-	var ret = "", elem;
-
-	for ( var i = 0; elems[i]; i++ ) {
-		elem = elems[i];
-
-		// Get the text from text nodes and CDATA nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
-			ret += elem.nodeValue;
-
-		// Traverse everything else, except comment nodes
-		} else if ( elem.nodeType !== 8 ) {
-			ret += Sizzle.getText( elem.childNodes );
-		}
-	}
-
-	return ret;
-};
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
-	// We're going to inject a fake input element with a specified name
-	var form = document.createElement("div"),
-		id = "script" + (new Date()).getTime(),
-		root = document.documentElement;
-
-	form.innerHTML = "<a name='" + id + "'/>";
-
-	// Inject it into the root element, check its status, and remove it quickly
-	root.insertBefore( form, root.firstChild );
-
-	// The workaround has to do additional checks after a getElementById
-	// Which slows things down for other browsers (hence the branching)
-	if ( document.getElementById( id ) ) {
-		Expr.find.ID = function( match, context, isXML ) {
-			if ( typeof context.getElementById !== "undefined" && !isXML ) {
-				var m = context.getElementById(match[1]);
-
-				return m ?
-					m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
-						[m] :
-						undefined :
-					[];
-			}
-		};
-
-		Expr.filter.ID = function( elem, match ) {
-			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
-			return elem.nodeType === 1 && node && node.nodeValue === match;
-		};
-	}
-
-	root.removeChild( form );
-
-	// release memory in IE
-	root = form = null;
-})();
-
-(function(){
-	// Check to see if the browser returns only elements
-	// when doing getElementsByTagName("*")
-
-	// Create a fake element
-	var div = document.createElement("div");
-	div.appendChild( document.createComment("") );
-
-	// Make sure no comments are found
-	if ( div.getElementsByTagName("*").length > 0 ) {
-		Expr.find.TAG = function( match, context ) {
-			var results = context.getElementsByTagName( match[1] );
-
-			// Filter out possible comments
-			if ( match[1] === "*" ) {
-				var tmp = [];
-
-				for ( var i = 0; results[i]; i++ ) {
-					if ( results[i].nodeType === 1 ) {
-						tmp.push( results[i] );
-					}
-				}
-
-				results = tmp;
-			}
-
-			return results;
-		};
-	}
-
-	// Check to see if an attribute returns normalized href attributes
-	div.innerHTML = "<a href='#'></a>";
-
-	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
-			div.firstChild.getAttribute("href") !== "#" ) {
-
-		Expr.attrHandle.href = function( elem ) {
-			return elem.getAttribute( "href", 2 );
-		};
-	}
-
-	// release memory in IE
-	div = null;
-})();
-
-if ( document.querySelectorAll ) {
-	(function(){
-		var oldSizzle = Sizzle,
-			div = document.createElement("div"),
-			id = "__sizzle__";
-
-		div.innerHTML = "<p class='TEST'></p>";
-
-		// Safari can't handle uppercase or unicode characters when
-		// in quirks mode.
-		if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
-			return;
-		}
-	
-		Sizzle = function( query, context, extra, seed ) {
-			context = context || document;
-
-			// Only use querySelectorAll on non-XML documents
-			// (ID selectors don't work in non-HTML documents)
-			if ( !seed && !Sizzle.isXML(context) ) {
-				// See if we find a selector to speed up
-				var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-				
-				if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
-					// Speed-up: Sizzle("TAG")
-					if ( match[1] ) {
-						return makeArray( context.getElementsByTagName( query ), extra );
-					
-					// Speed-up: Sizzle(".CLASS")
-					} else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
-						return makeArray( context.getElementsByClassName( match[2] ), extra );
-					}
-				}
-				
-				if ( context.nodeType === 9 ) {
-					// Speed-up: Sizzle("body")
-					// The body element only exists once, optimize finding it
-					if ( query === "body" && context.body ) {
-						return makeArray( [ context.body ], extra );
-						
-					// Speed-up: Sizzle("#ID")
-					} else if ( match && match[3] ) {
-						var elem = context.getElementById( match[3] );
-
-						// Check parentNode to catch when Blackberry 4.6 returns
-						// nodes that are no longer in the document #6963
-						if ( elem && elem.parentNode ) {
-							// Handle the case where IE and Opera return items
-							// by name instead of ID
-							if ( elem.id === match[3] ) {
-								return makeArray( [ elem ], extra );
-							}
-							
-						} else {
-							return makeArray( [], extra );
-						}
-					}
-					
-					try {
-						return makeArray( context.querySelectorAll(query), extra );
-					} catch(qsaError) {}
-
-				// qSA works strangely on Element-rooted queries
-				// We can work around this by specifying an extra ID on the root
-				// and working up from there (Thanks to Andrew Dupont for the technique)
-				// IE 8 doesn't work on object elements
-				} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
-					var oldContext = context,
-						old = context.getAttribute( "id" ),
-						nid = old || id,
-						hasParent = context.parentNode,
-						relativeHierarchySelector = /^\s*[+~]/.test( query );
-
-					if ( !old ) {
-						context.setAttribute( "id", nid );
-					} else {
-						nid = nid.replace( /'/g, "\\$&" );
-					}
-					if ( relativeHierarchySelector && hasParent ) {
-						context = context.parentNode;
-					}
-
-					try {
-						if ( !relativeHierarchySelector || hasParent ) {
-							return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
-						}
-
-					} catch(pseudoError) {
-					} finally {
-						if ( !old ) {
-							oldContext.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-		
-			return oldSizzle(query, context, extra, seed);
-		};
-
-		for ( var prop in oldSizzle ) {
-			Sizzle[ prop ] = oldSizzle[ prop ];
-		}
-
-		// release memory in IE
-		div = null;
-	})();
-}
-
-(function(){
-	var html = document.documentElement,
-		matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
-	if ( matches ) {
-		// Check to see if it's possible to do matchesSelector
-		// on a disconnected node (IE 9 fails this)
-		var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
-			pseudoWorks = false;
-
-		try {
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( document.documentElement, "[test!='']:sizzle" );
-	
-		} catch( pseudoError ) {
-			pseudoWorks = true;
-		}
-
-		Sizzle.matchesSelector = function( node, expr ) {
-			// Make sure that attribute selectors are quoted
-			expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
-			if ( !Sizzle.isXML( node ) ) {
-				try { 
-					if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
-						var ret = matches.call( node, expr );
-
-						// IE 9's matchesSelector returns false on disconnected nodes
-						if ( ret || !disconnectedMatch ||
-								// As well, disconnected nodes are said to be in a document
-								// fragment in IE 9, so check for that
-								node.document && node.document.nodeType !== 11 ) {
-							return ret;
-						}
-					}
-				} catch(e) {}
-			}
-
-			return Sizzle(expr, null, null, [node]).length > 0;
-		};
-	}
-})();
-
-(function(){
-	var div = document.createElement("div");
-
-	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
-	// Opera can't find a second classname (in 9.6)
-	// Also, make sure that getElementsByClassName actually exists
-	if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
-		return;
-	}
-
-	// Safari caches class attributes, doesn't catch changes (in 3.2)
-	div.lastChild.className = "e";
-
-	if ( div.getElementsByClassName("e").length === 1 ) {
-		return;
-	}
-	
-	Expr.order.splice(1, 0, "CLASS");
-	Expr.find.CLASS = function( match, context, isXML ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
-			return context.getElementsByClassName(match[1]);
-		}
-	};
-
-	// release memory in IE
-	div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem.sizcache === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 && !isXML ){
-					elem.sizcache = doneName;
-					elem.sizset = i;
-				}
-
-				if ( elem.nodeName.toLowerCase() === cur ) {
-					match = elem;
-					break;
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
-	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
-		var elem = checkSet[i];
-
-		if ( elem ) {
-			var match = false;
-			
-			elem = elem[dir];
-
-			while ( elem ) {
-				if ( elem.sizcache === doneName ) {
-					match = checkSet[elem.sizset];
-					break;
-				}
-
-				if ( elem.nodeType === 1 ) {
-					if ( !isXML ) {
-						elem.sizcache = doneName;
-						elem.sizset = i;
-					}
-
-					if ( typeof cur !== "string" ) {
-						if ( elem === cur ) {
-							match = true;
-							break;
-						}
-
-					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
-						match = elem;
-						break;
-					}
-				}
-
-				elem = elem[dir];
-			}
-
-			checkSet[i] = match;
-		}
-	}
-}
-
-if ( document.documentElement.contains ) {
-	Sizzle.contains = function( a, b ) {
-		return a !== b && (a.contains ? a.contains(b) : true);
-	};
-
-} else if ( document.documentElement.compareDocumentPosition ) {
-	Sizzle.contains = function( a, b ) {
-		return !!(a.compareDocumentPosition(b) & 16);
-	};
-
-} else {
-	Sizzle.contains = function() {
-		return false;
-	};
-}
-
-Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833) 
-	var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context ) {
-	var match,
-		tmpSet = [],
-		later = "",
-		root = context.nodeType ? [context] : context;
-
-	// Position selectors must be done after the filter
-	// And so must :not(positional) so we move all PSEUDOs to the end
-	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
-		later += match[0];
-		selector = selector.replace( Expr.match.PSEUDO, "" );
-	}
-
-	selector = Expr.relative[selector] ? selector + "*" : selector;
-
-	for ( var i = 0, l = root.length; i < l; i++ ) {
-		Sizzle( selector, root[i], tmpSet );
-	}
-
-	return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
-	rparentsprev = /^(?:parents|prevUntil|prevAll)/,
-	// Note: This RegExp should be improved, or likely pulled from Sizzle
-	rmultiselector = /,/,
-	isSimple = /^.[^:#\[\.,]*$/,
-	slice = Array.prototype.slice,
-	POS = jQuery.expr.match.POS,
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend({
-	find: function( selector ) {
-		var self = this,
-			i, l;
-
-		if ( typeof selector !== "string" ) {
-			return jQuery( selector ).filter(function() {
-				for ( i = 0, l = self.length; i < l; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			});
-		}
-
-		var ret = this.pushStack( "", "find", selector ),
-			length, n, r;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			length = ret.length;
-			jQuery.find( selector, this[i], ret );
-
-			if ( i > 0 ) {
-				// Make sure that the results are unique
-				for ( n = length; n < ret.length; n++ ) {
-					for ( r = 0; r < length; r++ ) {
-						if ( ret[r] === ret[n] ) {
-							ret.splice(n--, 1);
-							break;
-						}
-					}
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	has: function( target ) {
-		var targets = jQuery( target );
-		return this.filter(function() {
-			for ( var i = 0, l = targets.length; i < l; i++ ) {
-				if ( jQuery.contains( this, targets[i] ) ) {
-					return true;
-				}
-			}
-		});
-	},
-
-	not: function( selector ) {
-		return this.pushStack( winnow(this, selector, false), "not", selector);
-	},
-
-	filter: function( selector ) {
-		return this.pushStack( winnow(this, selector, true), "filter", selector );
-	},
-
-	is: function( selector ) {
-		return !!selector && ( typeof selector === "string" ?
-			jQuery.filter( selector, this ).length > 0 :
-			this.filter( selector ).length > 0 );
-	},
-
-	closest: function( selectors, context ) {
-		var ret = [], i, l, cur = this[0];
-		
-		// Array
-		if ( jQuery.isArray( selectors ) ) {
-			var match, selector,
-				matches = {},
-				level = 1;
-
-			if ( cur && selectors.length ) {
-				for ( i = 0, l = selectors.length; i < l; i++ ) {
-					selector = selectors[i];
-
-					if ( !matches[ selector ] ) {
-						matches[ selector ] = POS.test( selector ) ?
-							jQuery( selector, context || this.context ) :
-							selector;
-					}
-				}
-
-				while ( cur && cur.ownerDocument && cur !== context ) {
-					for ( selector in matches ) {
-						match = matches[ selector ];
-
-						if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
-							ret.push({ selector: selector, elem: cur, level: level });
-						}
-					}
-
-					cur = cur.parentNode;
-					level++;
-				}
-			}
-
-			return ret;
-		}
-
-		// String
-		var pos = POS.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( i = 0, l = this.length; i < l; i++ ) {
-			cur = this[i];
-
-			while ( cur ) {
-				if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
-					ret.push( cur );
-					break;
-
-				} else {
-					cur = cur.parentNode;
-					if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
-						break;
-					}
-				}
-			}
-		}
-
-		ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
-		return this.pushStack( ret, "closest", selectors );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-		if ( !elem || typeof elem === "string" ) {
-			return jQuery.inArray( this[0],
-				// If it receives a string, the selector is used
-				// If it receives nothing, the siblings are used
-				elem ? jQuery( elem ) : this.parent().children() );
-		}
-		// Locate the position of the desired element
-		return jQuery.inArray(
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[0] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		var set = typeof selector === "string" ?
-				jQuery( selector, context ) :
-				jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
-			all = jQuery.merge( this.get(), set );
-
-		return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
-			all :
-			jQuery.unique( all ) );
-	},
-
-	andSelf: function() {
-		return this.add( this.prevObject );
-	}
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
-	return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return jQuery.dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return jQuery.nth( elem, 2, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return jQuery.nth( elem, 2, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return jQuery.dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return jQuery.dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return jQuery.dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return jQuery.sibling( elem.parentNode.firstChild, elem );
-	},
-	children: function( elem ) {
-		return jQuery.sibling( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.makeArray( elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until ),
-			// The variable 'args' was introduced in
-			// https://github.com/jquery/jquery/commit/52a0238
-			// to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
-			// http://code.google.com/p/v8/issues/detail?id=1050
-			args = slice.call(arguments);
-
-		if ( !runtil.test( name ) ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
-		if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
-			ret = ret.reverse();
-		}
-
-		return this.pushStack( ret, name, args.join(",") );
-	};
-});
-
-jQuery.extend({
-	filter: function( expr, elems, not ) {
-		if ( not ) {
-			expr = ":not(" + expr + ")";
-		}
-
-		return elems.length === 1 ?
-			jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
-			jQuery.find.matches(expr, elems);
-	},
-
-	dir: function( elem, dir, until ) {
-		var matched = [],
-			cur = elem[ dir ];
-
-		while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
-			if ( cur.nodeType === 1 ) {
-				matched.push( cur );
-			}
-			cur = cur[dir];
-		}
-		return matched;
-	},
-
-	nth: function( cur, result, dir, elem ) {
-		result = result || 1;
-		var num = 0;
-
-		for ( ; cur; cur = cur[dir] ) {
-			if ( cur.nodeType === 1 && ++num === result ) {
-				break;
-			}
-		}
-
-		return cur;
-	},
-
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType === 1 && n !== elem ) {
-				r.push( n );
-			}
-		}
-
-		return r;
-	}
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
-	// Can't pass null or undefined to indexOf in Firefox 4
-	// Set to 0 to skip string check
-	qualifier = qualifier || 0;
-
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			var retVal = !!qualifier.call( elem, i, elem );
-			return retVal === keep;
-		});
-
-	} else if ( qualifier.nodeType ) {
-		return jQuery.grep(elements, function( elem, i ) {
-			return (elem === qualifier) === keep;
-		});
-
-	} else if ( typeof qualifier === "string" ) {
-		var filtered = jQuery.grep(elements, function( elem ) {
-			return elem.nodeType === 1;
-		});
-
-		if ( isSimple.test( qualifier ) ) {
-			return jQuery.filter(qualifier, filtered, !keep);
-		} else {
-			qualifier = jQuery.filter( qualifier, filtered );
-		}
-	}
-
-	return jQuery.grep(elements, function( elem, i ) {
-		return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
-	});
-}
-
-
-
-
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
-	rleadingWhitespace = /^\s+/,
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
-	rtagName = /<([\w:]+)/,
-	rtbody = /<tbody/i,
-	rhtml = /<|&#?\w+;/,
-	rnocache = /<(?:script|object|embed|option|style)/i,
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptType = /\/(java|ecma)script/i,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
-	wrapMap = {
-		option: [ 1, "<select multiple='multiple'>", "</select>" ],
-		legend: [ 1, "<fieldset>", "</fieldset>" ],
-		thead: [ 1, "<table>", "</table>" ],
-		tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-		td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-		col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-		area: [ 1, "<map>", "</map>" ],
-		_default: [ 0, "", "" ]
-	};
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
-	wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
-	text: function( text ) {
-		if ( jQuery.isFunction(text) ) {
-			return this.each(function(i) {
-				var self = jQuery( this );
-
-				self.text( text.call(this, i, self.text()) );
-			});
-		}
-
-		if ( typeof text !== "object" && text !== undefined ) {
-			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
-		}
-
-		return jQuery.text( this );
-	},
-
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapAll( html.call(this, i) );
-			});
-		}
-
-		if ( this[0] ) {
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
-			if ( this[0].parentNode ) {
-				wrap.insertBefore( this[0] );
-			}
-
-			wrap.map(function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			}).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each(function(i) {
-				jQuery(this).wrapInner( html.call(this, i) );
-			});
-		}
-
-		return this.each(function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		});
-	},
-
-	wrap: function( html ) {
-		return this.each(function() {
-			jQuery( this ).wrapAll( html );
-		});
-	},
-
-	unwrap: function() {
-		return this.parent().each(function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		}).end();
-	},
-
-	append: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.appendChild( elem );
-			}
-		});
-	},
-
-	prepend: function() {
-		return this.domManip(arguments, true, function( elem ) {
-			if ( this.nodeType === 1 ) {
-				this.insertBefore( elem, this.firstChild );
-			}
-		});
-	},
-
-	before: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this );
-			});
-		} else if ( arguments.length ) {
-			var set = jQuery(arguments[0]);
-			set.push.apply( set, this.toArray() );
-			return this.pushStack( set, "before", arguments );
-		}
-	},
-
-	after: function() {
-		if ( this[0] && this[0].parentNode ) {
-			return this.domManip(arguments, false, function( elem ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			});
-		} else if ( arguments.length ) {
-			var set = this.pushStack( this, "after", arguments );
-			set.push.apply( set, jQuery(arguments[0]).toArray() );
-			return set;
-		}
-	},
-
-	// keepData is for internal use only--do not document
-	remove: function( selector, keepData ) {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
-				if ( !keepData && elem.nodeType === 1 ) {
-					jQuery.cleanData( elem.getElementsByTagName("*") );
-					jQuery.cleanData( [ elem ] );
-				}
-
-				if ( elem.parentNode ) {
-					elem.parentNode.removeChild( elem );
-				}
-			}
-		}
-
-		return this;
-	},
-
-	empty: function() {
-		for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( elem.getElementsByTagName("*") );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function () {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		});
-	},
-
-	html: function( value ) {
-		if ( value === undefined ) {
-			return this[0] && this[0].nodeType === 1 ?
-				this[0].innerHTML.replace(rinlinejQuery, "") :
-				null;
-
-		// See if we can take a shortcut and just use innerHTML
-		} else if ( typeof value === "string" && !rnocache.test( value ) &&
-			(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
-			!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
-			value = value.replace(rxhtmlTag, "<$1></$2>");
-
-			try {
-				for ( var i = 0, l = this.length; i < l; i++ ) {
-					// Remove element nodes and prevent memory leaks
-					if ( this[i].nodeType === 1 ) {
-						jQuery.cleanData( this[i].getElementsByTagName("*") );
-						this[i].innerHTML = value;
-					}
-				}
-
-			// If using innerHTML throws an exception, use the fallback method
-			} catch(e) {
-				this.empty().append( value );
-			}
-
-		} else if ( jQuery.isFunction( value ) ) {
-			this.each(function(i){
-				var self = jQuery( this );
-
-				self.html( value.call(this, i, self.html()) );
-			});
-
-		} else {
-			this.empty().append( value );
-		}
-
-		return this;
-	},
-
-	replaceWith: function( value ) {
-		if ( this[0] && this[0].parentNode ) {
-			// Make sure that the elements are removed from the DOM before they are inserted
-			// this can help fix replacing a parent with child elements
-			if ( jQuery.isFunction( value ) ) {
-				return this.each(function(i) {
-					var self = jQuery(this), old = self.html();
-					self.replaceWith( value.call( this, i, old ) );
-				});
-			}
-
-			if ( typeof value !== "string" ) {
-				value = jQuery( value ).detach();
-			}
-
-			return this.each(function() {
-				var next = this.nextSibling,
-					parent = this.parentNode;
-
-				jQuery( this ).remove();
-
-				if ( next ) {
-					jQuery(next).before( value );
-				} else {
-					jQuery(parent).append( value );
-				}
-			});
-		} else {
-			return this.length ?
-				this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
-				this;
-		}
-	},
-
-	detach: function( selector ) {
-		return this.remove( selector, true );
-	},
-
-	domManip: function( args, table, callback ) {
-		var results, first, fragment, parent,
-			value = args[0],
-			scripts = [];
-
-		// We can't cloneNode fragments that contain checked, in WebKit
-		if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
-			return this.each(function() {
-				jQuery(this).domManip( args, table, callback, true );
-			});
-		}
-
-		if ( jQuery.isFunction(value) ) {
-			return this.each(function(i) {
-				var self = jQuery(this);
-				args[0] = value.call(this, i, table ? self.html() : undefined);
-				self.domManip( args, table, callback );
-			});
-		}
-
-		if ( this[0] ) {
-			parent = value && value.parentNode;
-
-			// If we're in a fragment, just use that instead of building a new one
-			if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
-				results = { fragment: parent };
-
-			} else {
-				results = jQuery.buildFragment( args, this, scripts );
-			}
-
-			fragment = results.fragment;
-
-			if ( fragment.childNodes.length === 1 ) {
-				first = fragment = fragment.firstChild;
-			} else {
-				first = fragment.firstChild;
-			}
-
-			if ( first ) {
-				table = table && jQuery.nodeName( first, "tr" );
-
-				for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
-					callback.call(
-						table ?
-							root(this[i], first) :
-							this[i],
-						// Make sure that we do not leak memory by inadvertently discarding
-						// the original fragment (which might have attached data) instead of
-						// using it; in addition, use the original fragment object for the last
-						// item instead of first because it can end up being emptied incorrectly
-						// in certain situations (Bug #8070).
-						// Fragments from the fragment cache must always be cloned and never used
-						// in place.
-						results.cacheable || (l > 1 && i < lastIndex) ?
-							jQuery.clone( fragment, true, true ) :
-							fragment
-					);
-				}
-			}
-
-			if ( scripts.length ) {
-				jQuery.each( scripts, evalScript );
-			}
-		}
-
-		return this;
-	}
-});
-
-function root( elem, cur ) {
-	return jQuery.nodeName(elem, "table") ?
-		(elem.getElementsByTagName("tbody")[0] ||
-		elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
-		elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var internalKey = jQuery.expando,
-		oldData = jQuery.data( src ),
-		curData = jQuery.data( dest, oldData );
-
-	// Switch to use the internal data object, if it exists, for the next
-	// stage of data copying
-	if ( (oldData = oldData[ internalKey ]) ) {
-		var events = oldData.events;
-				curData = curData[ internalKey ] = jQuery.extend({}, oldData);
-
-		if ( events ) {
-			delete curData.handle;
-			curData.events = {};
-
-			for ( var type in events ) {
-				for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
-					jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
-				}
-			}
-		}
-	}
-}
-
-function cloneFixAttributes( src, dest ) {
-	var nodeName;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	// clearAttributes removes the attributes, which we don't want,
-	// but also removes the attachEvent events, which we *do* want
-	if ( dest.clearAttributes ) {
-		dest.clearAttributes();
-	}
-
-	// mergeAttributes, in contrast, only merges back on the
-	// original attributes, not the events
-	if ( dest.mergeAttributes ) {
-		dest.mergeAttributes( src );
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 fail to clone children inside object elements that use
-	// the proprietary classid attribute value (rather than the type
-	// attribute) to identify the type of content to display
-	if ( nodeName === "object" ) {
-		dest.outerHTML = src.outerHTML;
-
-	} else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-		if ( src.checked ) {
-			dest.defaultChecked = dest.checked = src.checked;
-		}
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-
-	// Event data gets referenced instead of copied if the expando
-	// gets copied too
-	dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
-	var fragment, cacheable, cacheresults,
-		doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
-
-	// Only cache "small" (1/2 KB) HTML strings that are associated with the main document
-	// Cloning options loses the selected state, so don't cache them
-	// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
-	// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
-	if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
-		args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
-		cacheable = true;
-
-		cacheresults = jQuery.fragments[ args[0] ];
-		if ( cacheresults && cacheresults !== 1 ) {
-			fragment = cacheresults;
-		}
-	}
-
-	if ( !fragment ) {
-		fragment = doc.createDocumentFragment();
-		jQuery.clean( args, doc, fragment, scripts );
-	}
-
-	if ( cacheable ) {
-		jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
-	}
-
-	return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var ret = [],
-			insert = jQuery( selector ),
-			parent = this.length === 1 && this[0].parentNode;
-
-		if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
-			insert[ original ]( this[0] );
-			return this;
-
-		} else {
-			for ( var i = 0, l = insert.length; i < l; i++ ) {
-				var elems = (i > 0 ? this.clone(true) : this).get();
-				jQuery( insert[i] )[ original ]( elems );
-				ret = ret.concat( elems );
-			}
-
-			return this.pushStack( ret, name, insert.selector );
-		}
-	};
-});
-
-function getAll( elem ) {
-	if ( "getElementsByTagName" in elem ) {
-		return elem.getElementsByTagName( "*" );
-
-	} else if ( "querySelectorAll" in elem ) {
-		return elem.querySelectorAll( "*" );
-
-	} else {
-		return [];
-	}
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
-	if ( elem.type === "checkbox" || elem.type === "radio" ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
-	if ( jQuery.nodeName( elem, "input" ) ) {
-		fixDefaultChecked( elem );
-	} else if ( elem.getElementsByTagName ) {
-		jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
-	}
-}
-
-jQuery.extend({
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var clone = elem.cloneNode(true),
-				srcElements,
-				destElements,
-				i;
-
-		if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
-				(elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-			// IE copies events bound via attachEvent when using cloneNode.
-			// Calling detachEvent on the clone will also remove the events
-			// from the original. In order to get around this, we use some
-			// proprietary methods to clear the events. Thanks to MooTools
-			// guys for this hotness.
-
-			cloneFixAttributes( elem, clone );
-
-			// Using Sizzle here is crazy slow, so we use getElementsByTagName
-			// instead
-			srcElements = getAll( elem );
-			destElements = getAll( clone );
-
-			// Weird iteration because IE will replace the length property
-			// with an element if you are cloning the body and one of the
-			// elements on the page has a name or id of "length"
-			for ( i = 0; srcElements[i]; ++i ) {
-				cloneFixAttributes( srcElements[i], destElements[i] );
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			cloneCopyEvent( elem, clone );
-
-			if ( deepDataAndEvents ) {
-				srcElements = getAll( elem );
-				destElements = getAll( clone );
-
-				for ( i = 0; srcElements[i]; ++i ) {
-					cloneCopyEvent( srcElements[i], destElements[i] );
-				}
-			}
-		}
-
-		// Return the cloned set
-		return clone;
-	},
-
-	clean: function( elems, context, fragment, scripts ) {
-		var checkScriptType;
-
-		context = context || document;
-
-		// !context.createElement fails in IE with an error but returns typeof 'object'
-		if ( typeof context.createElement === "undefined" ) {
-			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
-		}
-
-		var ret = [], j;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( typeof elem === "number" ) {
-				elem += "";
-			}
-
-			if ( !elem ) {
-				continue;
-			}
-
-			// Convert html string into DOM nodes
-			if ( typeof elem === "string" ) {
-				if ( !rhtml.test( elem ) ) {
-					elem = context.createTextNode( elem );
-				} else {
-					// Fix "XHTML"-style tags in all browsers
-					elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
-					// Trim whitespace, otherwise indexOf won't work as expected
-					var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
-						wrap = wrapMap[ tag ] || wrapMap._default,
-						depth = wrap[0],
-						div = context.createElement("div");
-
-					// Go to html and back, then peel off extra wrappers
-					div.innerHTML = wrap[1] + elem + wrap[2];
-
-					// Move to the right depth
-					while ( depth-- ) {
-						div = div.lastChild;
-					}
-
-					// Remove IE's autoinserted <tbody> from table fragments
-					if ( !jQuery.support.tbody ) {
-
-						// String was a <table>, *may* have spurious <tbody>
-						var hasBody = rtbody.test(elem),
-							tbody = tag === "table" && !hasBody ?
-								div.firstChild && div.firstChild.childNodes :
-
-								// String was a bare <thead> or <tfoot>
-								wrap[1] === "<table>" && !hasBody ?
-									div.childNodes :
-									[];
-
-						for ( j = tbody.length - 1; j >= 0 ; --j ) {
-							if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
-								tbody[ j ].parentNode.removeChild( tbody[ j ] );
-							}
-						}
-					}
-
-					// IE completely kills leading whitespace when innerHTML is used
-					if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-						div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
-					}
-
-					elem = div.childNodes;
-				}
-			}
-
-			// Resets defaultChecked for any radios and checkboxes
-			// about to be appended to the DOM in IE 6/7 (#8060)
-			var len;
-			if ( !jQuery.support.appendChecked ) {
-				if ( elem[0] && typeof (len = elem.length) === "number" ) {
-					for ( j = 0; j < len; j++ ) {
-						findInputs( elem[j] );
-					}
-				} else {
-					findInputs( elem );
-				}
-			}
-
-			if ( elem.nodeType ) {
-				ret.push( elem );
-			} else {
-				ret = jQuery.merge( ret, elem );
-			}
-		}
-
-		if ( fragment ) {
-			checkScriptType = function( elem ) {
-				return !elem.type || rscriptType.test( elem.type );
-			};
-			for ( i = 0; ret[i]; i++ ) {
-				if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
-					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
-				} else {
-					if ( ret[i].nodeType === 1 ) {
-						var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
-						ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
-					}
-					fragment.appendChild( ret[i] );
-				}
-			}
-		}
-
-		return ret;
-	},
-
-	cleanData: function( elems ) {
-		var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
-			deleteExpando = jQuery.support.deleteExpando;
-
-		for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
-			if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
-				continue;
-			}
-
-			id = elem[ jQuery.expando ];
-
-			if ( id ) {
-				data = cache[ id ] && cache[ id ][ internalKey ];
-
-				if ( data && data.events ) {
-					for ( var type in data.events ) {
-						if ( special[ type ] ) {
-							jQuery.event.remove( elem, type );
-
-						// This is a shortcut to avoid jQuery.event.remove's overhead
-						} else {
-							jQuery.removeEvent( elem, type, data.handle );
-						}
-					}
-
-					// Null the DOM reference to avoid IE6/7/8 leak (#7054)
-					if ( data.handle ) {
-						data.handle.elem = null;
-					}
-				}
-
-				if ( deleteExpando ) {
-					delete elem[ jQuery.expando ];
-
-				} else if ( elem.removeAttribute ) {
-					elem.removeAttribute( jQuery.expando );
-				}
-
-				delete cache[ id ];
-			}
-		}
-	}
-});
-
-function evalScript( i, elem ) {
-	if ( elem.src ) {
-		jQuery.ajax({
-			url: elem.src,
-			async: false,
-			dataType: "script"
-		});
-	} else {
-		jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
-	}
-
-	if ( elem.parentNode ) {
-		elem.parentNode.removeChild( elem );
-	}
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity=([^)]*)/,
-	rdashAlpha = /-([a-z])/ig,
-	// fixed for IE9, see #8346
-	rupper = /([A-Z]|^ms)/g,
-	rnumpx = /^-?\d+(?:px)?$/i,
-	rnum = /^-?\d/,
-	rrelNum = /^[+\-]=/,
-	rrelNumFilter = /[^+\-\.\de]+/g,
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssWidth = [ "Left", "Right" ],
-	cssHeight = [ "Top", "Bottom" ],
-	curCSS,
-
-	getComputedStyle,
-	currentStyle,
-
-	fcamelCase = function( all, letter ) {
-		return letter.toUpperCase();
-	};
-
-jQuery.fn.css = function( name, value ) {
-	// Setting 'undefined' is a no-op
-	if ( arguments.length === 2 && value === undefined ) {
-		return this;
-	}
-
-	return jQuery.access( this, name, value, true, function( elem, name, value ) {
-		return value !== undefined ?
-			jQuery.style( elem, name, value ) :
-			jQuery.css( elem, name );
-	});
-};
-
-jQuery.extend({
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity", "opacity" );
-					return ret === "" ? "1" : ret;
-
-				} else {
-					return elem.style.opacity;
-				}
-			}
-		}
-	},
-
-	// Exclude the following css properties to add px
-	cssNumber: {
-		"zIndex": true,
-		"fontWeight": true,
-		"opacity": true,
-		"zoom": true,
-		"lineHeight": true,
-		"widows": true,
-		"orphans": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-		// normalize float css property
-		"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, origName = jQuery.camelCase( name ),
-			style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
-		name = jQuery.cssProps[ origName ] || origName;
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// Make sure that NaN and null values aren't set. See: #7116
-			if ( type === "number" && isNaN( value ) || value == null ) {
-				return;
-			}
-
-			// convert relative number strings (+= or -=) to relative numbers. #7345
-			if ( type === "string" && rrelNum.test( value ) ) {
-				value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
-			}
-
-			// If a number was passed in, add 'px' to the (except for certain CSS properties)
-			if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
-				value += "px";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
-				// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
-				// Fixes bug #5509
-				try {
-					style[ name ] = value;
-				} catch(e) {}
-			}
-
-		} else {
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra ) {
-		var ret, hooks;
-
-		// Make sure that we're working with the right name
-		name = jQuery.camelCase( name );
-		hooks = jQuery.cssHooks[ name ];
-		name = jQuery.cssProps[ name ] || name;
-
-		// cssFloat needs a special treatment
-		if ( name === "cssFloat" ) {
-			name = "float";
-		}
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
-			return ret;
-
-		// Otherwise, if a way to get the computed value exists, use that
-		} else if ( curCSS ) {
-			return curCSS( elem, name );
-		}
-	},
-
-	// A method for quickly swapping in/out CSS properties to get correct calculations
-	swap: function( elem, options, callback ) {
-		var old = {};
-
-		// Remember the old values, and insert the new ones
-		for ( var name in options ) {
-			old[ name ] = elem.style[ name ];
-			elem.style[ name ] = options[ name ];
-		}
-
-		callback.call( elem );
-
-		// Revert the old values
-		for ( name in options ) {
-			elem.style[ name ] = old[ name ];
-		}
-	},
-
-	camelCase: function( string ) {
-		return string.replace( rdashAlpha, fcamelCase );
-	}
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			var val;
-
-			if ( computed ) {
-				if ( elem.offsetWidth !== 0 ) {
-					val = getWH( elem, name, extra );
-
-				} else {
-					jQuery.swap( elem, cssShow, function() {
-						val = getWH( elem, name, extra );
-					});
-				}
-
-				if ( val <= 0 ) {
-					val = curCSS( elem, name, name );
-
-					if ( val === "0px" && currentStyle ) {
-						val = currentStyle( elem, name, name );
-					}
-
-					if ( val != null ) {
-						// Should return "auto" instead of 0, use 0 for
-						// temporary backwards-compat
-						return val === "" || val === "auto" ? "0px" : val;
-					}
-				}
-
-				if ( val < 0 || val == null ) {
-					val = elem.style[ name ];
-
-					// Should return "auto" instead of 0, use 0 for
-					// temporary backwards-compat
-					return val === "" || val === "auto" ? "0px" : val;
-				}
-
-				return typeof val === "string" ? val : val + "px";
-			}
-		},
-
-		set: function( elem, value ) {
-			if ( rnumpx.test( value ) ) {
-				// ignore negative width and height values #1599
-				value = parseFloat(value);
-
-				if ( value >= 0 ) {
-					return value + "px";
-				}
-
-			} else {
-				return value;
-			}
-		}
-	};
-});
-
-if ( !jQuery.support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-			// IE uses filters for opacity
-			return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
-				( parseFloat( RegExp.$1 ) / 100 ) + "" :
-				computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle;
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// Set the alpha filter to set the opacity
-			var opacity = jQuery.isNaN( value ) ?
-				"" :
-				"alpha(opacity=" + value * 100 + ")",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery(function() {
-	// This hook cannot be added until DOM ready because the support test
-	// for it is not run until after DOM ready
-	if ( !jQuery.support.reliableMarginRight ) {
-		jQuery.cssHooks.marginRight = {
-			get: function( elem, computed ) {
-				// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-				// Work around by temporarily setting element display to inline-block
-				var ret;
-				jQuery.swap( elem, { "display": "inline-block" }, function() {
-					if ( computed ) {
-						ret = curCSS( elem, "margin-right", "marginRight" );
-					} else {
-						ret = elem.style.marginRight;
-					}
-				});
-				return ret;
-			}
-		};
-	}
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
-	getComputedStyle = function( elem, name ) {
-		var ret, defaultView, computedStyle;
-
-		name = name.replace( rupper, "-$1" ).toLowerCase();
-
-		if ( !(defaultView = elem.ownerDocument.defaultView) ) {
-			return undefined;
-		}
-
-		if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-			ret = computedStyle.getPropertyValue( name );
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-		}
-
-		return ret;
-	};
-}
-
-if ( document.documentElement.currentStyle ) {
-	currentStyle = function( elem, name ) {
-		var left,
-			ret = elem.currentStyle && elem.currentStyle[ name ],
-			rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
-			style = elem.style;
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
-			// Remember the original values
-			left = style.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : (ret || 0);
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				elem.runtimeStyle.left = rsLeft;
-			}
-		}
-
-		return ret === "" ? "auto" : ret;
-	};
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-	var which = name === "width" ? cssWidth : cssHeight,
-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
-
-	if ( extra === "border" ) {
-		return val;
-	}
-
-	jQuery.each( which, function() {
-		if ( !extra ) {
-			val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
-		}
-
-		if ( extra === "margin" ) {
-			val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
-
-		} else {
-			val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
-		}
-	});
-
-	return val;
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.hidden = function( elem ) {
-		var width = elem.offsetWidth,
-			height = elem.offsetHeight;
-
-		return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
-	};
-
-	jQuery.expr.filters.visible = function( elem ) {
-		return !jQuery.expr.filters.hidden( elem );
-	};
-}
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rhash = /#.*$/,
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
-	rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rquery = /\?/,
-	rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
-	rselectTextarea = /^(?:select|textarea)/i,
-	rspacesAjax = /\s+/,
-	rts = /([?&])_=[^&]*/,
-	rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
-	// Keep a copy of the old load method
-	_load = jQuery.fn.load,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Document location
-	ajaxLocation,
-
-	// Document location segments
-	ajaxLocParts;
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
-	ajaxLocation = location.href;
-} catch( e ) {
-	// Use the href attribute of an A element
-	// since IE will modify it given document.location
-	ajaxLocation = document.createElement( "a" );
-	ajaxLocation.href = "";
-	ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		if ( jQuery.isFunction( func ) ) {
-			var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
-				i = 0,
-				length = dataTypes.length,
-				dataType,
-				list,
-				placeBefore;
-
-			// For each dataType in the dataTypeExpression
-			for(; i < length; i++ ) {
-				dataType = dataTypes[ i ];
-				// We control if we're asked to add before
-				// any existing element
-				placeBefore = /^\+/.test( dataType );
-				if ( placeBefore ) {
-					dataType = dataType.substr( 1 ) || "*";
-				}
-				list = structure[ dataType ] = structure[ dataType ] || [];
-				// then we add to the structure accordingly
-				list[ placeBefore ? "unshift" : "push" ]( func );
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
-		dataType /* internal */, inspected /* internal */ ) {
-
-	dataType = dataType || options.dataTypes[ 0 ];
-	inspected = inspected || {};
-
-	inspected[ dataType ] = true;
-
-	var list = structure[ dataType ],
-		i = 0,
-		length = list ? list.length : 0,
-		executeOnly = ( structure === prefilters ),
-		selection;
-
-	for(; i < length && ( executeOnly || !selection ); i++ ) {
-		selection = list[ i ]( options, originalOptions, jqXHR );
-		// If we got redirected to another dataType
-		// we try there if executing only and not done already
-		if ( typeof selection === "string" ) {
-			if ( !executeOnly || inspected[ selection ] ) {
-				selection = undefined;
-			} else {
-				options.dataTypes.unshift( selection );
-				selection = inspectPrefiltersOrTransports(
-						structure, options, originalOptions, jqXHR, selection, inspected );
-			}
-		}
-	}
-	// If we're only executing or nothing was selected
-	// we try the catchall dataType if not done already
-	if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
-		selection = inspectPrefiltersOrTransports(
-				structure, options, originalOptions, jqXHR, "*", inspected );
-	}
-	// unnecessary when only executing (prefilters)
-	// but it'll be ignored by the caller in that case
-	return selection;
-}
-
-jQuery.fn.extend({
-	load: function( url, params, callback ) {
-		if ( typeof url !== "string" && _load ) {
-			return _load.apply( this, arguments );
-
-		// Don't do a request if no elements are being requested
-		} else if ( !this.length ) {
-			return this;
-		}
-
-		var off = url.indexOf( " " );
-		if ( off >= 0 ) {
-			var selector = url.slice( off, url.length );
-			url = url.slice( 0, off );
-		}
-
-		// Default to a GET request
-		var type = "GET";
-
-		// If the second parameter was provided
-		if ( params ) {
-			// If it's a function
-			if ( jQuery.isFunction( params ) ) {
-				// We assume that it's the callback
-				callback = params;
-				params = undefined;
-
-			// Otherwise, build a param string
-			} else if ( typeof params === "object" ) {
-				params = jQuery.param( params, jQuery.ajaxSettings.traditional );
-				type = "POST";
-			}
-		}
-
-		var self = this;
-
-		// Request the remote document
-		jQuery.ajax({
-			url: url,
-			type: type,
-			dataType: "html",
-			data: params,
-			// Complete callback (responseText is used internally)
-			complete: function( jqXHR, status, responseText ) {
-				// Store the response as specified by the jqXHR object
-				responseText = jqXHR.responseText;
-				// If successful, inject the HTML into all the matched elements
-				if ( jqXHR.isResolved() ) {
-					// #4825: Get the actual response in case
-					// a dataFilter is present in ajaxSettings
-					jqXHR.done(function( r ) {
-						responseText = r;
-					});
-					// See if a selector was specified
-					self.html( selector ?
-						// Create a dummy div to hold the results
-						jQuery("<div>")
-							// inject the contents of the document in, removing the scripts
-							// to avoid any 'Permission Denied' errors in IE
-							.append(responseText.replace(rscript, ""))
-
-							// Locate the specified elements
-							.find(selector) :
-
-						// If not, just inject the full result
-						responseText );
-				}
-
-				if ( callback ) {
-					self.each( callback, [ responseText, status, jqXHR ] );
-				}
-			}
-		});
-
-		return this;
-	},
-
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-
-	serializeArray: function() {
-		return this.map(function(){
-			return this.elements ? jQuery.makeArray( this.elements ) : this;
-		})
-		.filter(function(){
-			return this.name && !this.disabled &&
-				( this.checked || rselectTextarea.test( this.nodeName ) ||
-					rinput.test( this.type ) );
-		})
-		.map(function( i, elem ){
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val, i ){
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					}) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		}).get();
-	}
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
-	jQuery.fn[ o ] = function( f ){
-		return this.bind( o, f );
-	};
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		return jQuery.ajax({
-			type: method,
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	};
-});
-
-jQuery.extend({
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function ( target, settings ) {
-		if ( !settings ) {
-			// Only one parameter, we extend ajaxSettings
-			settings = target;
-			target = jQuery.extend( true, jQuery.ajaxSettings, settings );
-		} else {
-			// target was provided, we extend into it
-			jQuery.extend( true, target, jQuery.ajaxSettings, settings );
-		}
-		// Flatten fields we don't want deep extended
-		for( var field in { context: 1, url: 1 } ) {
-			if ( field in settings ) {
-				target[ field ] = settings[ field ];
-			} else if( field in jQuery.ajaxSettings ) {
-				target[ field ] = jQuery.ajaxSettings[ field ];
-			}
-		}
-		return target;
-	},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		type: "GET",
-		contentType: "application/x-www-form-urlencoded",
-		processData: true,
-		async: true,
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			xml: "application/xml, text/xml",
-			html: "text/html",
-			text: "text/plain",
-			json: "application/json, text/javascript",
-			"*": "*/*"
-		},
-
-		contents: {
-			xml: /xml/,
-			html: /html/,
-			json: /json/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText"
-		},
-
-		// List of data converters
-		// 1) key format is "source_type destination_type" (a single space in-between)
-		// 2) the catchall symbol "*" can be used for source_type
-		converters: {
-
-			// Convert anything to text
-			"* text": window.String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		}
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var // Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-			// Callbacks context
-			callbackContext = s.context || s,
-			// Context for global events
-			// It's the callbackContext if one was provided in the options
-			// and if it's a DOM node or a jQuery collection
-			globalEventContext = callbackContext !== s &&
-				( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
-						jQuery( callbackContext ) : jQuery.event,
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery._Deferred(),
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-			// ifModified key
-			ifModifiedKey,
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-			// Response headers
-			responseHeadersString,
-			responseHeaders,
-			// transport
-			transport,
-			// timeout handle
-			timeoutTimer,
-			// Cross-domain detection vars
-			parts,
-			// The jqXHR state
-			state = 0,
-			// To know if global events are to be dispatched
-			fireGlobals,
-			// Loop variable
-			i,
-			// Fake xhr
-			jqXHR = {
-
-				readyState: 0,
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					if ( !state ) {
-						var lname = name.toLowerCase();
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match === undefined ? null : match;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					statusText = statusText || "abort";
-					if ( transport ) {
-						transport.abort( statusText );
-					}
-					done( 0, statusText );
-					return this;
-				}
-			};
-
-		// Callback for when everything is done
-		// It is defined here because jslint complains if it is declared
-		// at the end of the function (which would be more logical and readable)
-		function done( status, statusText, responses, headers ) {
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status ? 4 : 0;
-
-			var isSuccess,
-				success,
-				error,
-				response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
-				lastModified,
-				etag;
-
-			// If successful, handle type chaining
-			if ( status >= 200 && status < 300 || status === 304 ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-
-					if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
-						jQuery.lastModified[ ifModifiedKey ] = lastModified;
-					}
-					if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
-						jQuery.etag[ ifModifiedKey ] = etag;
-					}
-				}
-
-				// If not modified
-				if ( status === 304 ) {
-
-					statusText = "notmodified";
-					isSuccess = true;
-
-				// If we have data
-				} else {
-
-					try {
-						success = ajaxConvert( s, response );
-						statusText = "success";
-						isSuccess = true;
-					} catch(e) {
-						// We have a parsererror
-						statusText = "parsererror";
-						error = e;
-					}
-				}
-			} else {
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if( !statusText || status ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = statusText;
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
-						[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		// Attach deferreds
-		deferred.promise( jqXHR );
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-		jqXHR.complete = completeDeferred.done;
-
-		// Status-dependent callbacks
-		jqXHR.statusCode = function( map ) {
-			if ( map ) {
-				var tmp;
-				if ( state < 2 ) {
-					for( tmp in map ) {
-						statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
-					}
-				} else {
-					tmp = map[ jqXHR.status ];
-					jqXHR.then( tmp, tmp );
-				}
-			}
-			return this;
-		};
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
-		// Determine if a cross-domain request is in order
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefiler, stop there
-		if ( state === 2 ) {
-			return false;
-		}
-
-		// We can fire global events as of now if asked to
-		fireGlobals = s.global;
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
-			}
-
-			// Get ifModifiedKey before adding the anti-cache parameter
-			ifModifiedKey = s.url;
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-
-				var ts = jQuery.now(),
-					// try replacing _= if it is there
-					ret = s.url.replace( rts, "$1_=" + ts );
-
-				// if nothing was replaced, add timestamp to the end
-				s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			ifModifiedKey = ifModifiedKey || s.url;
-			if ( jQuery.lastModified[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
-			}
-			if ( jQuery.etag[ ifModifiedKey ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
-			}
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
-				s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-				// Abort if not done already
-				jqXHR.abort();
-				return false;
-
-		}
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = setTimeout( function(){
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch (e) {
-				// Propagate exception as error if not done
-				if ( status < 2 ) {
-					done( -1, e );
-				// Simply rethrow otherwise
-				} else {
-					jQuery.error( e );
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a, traditional ) {
-		var s = [],
-			add = function( key, value ) {
-				// If value is a function, invoke it and return its value
-				value = jQuery.isFunction( value ) ? value() : value;
-				s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-			};
-
-		// Set traditional to true for jQuery <= 1.3.2 behavior.
-		if ( traditional === undefined ) {
-			traditional = jQuery.ajaxSettings.traditional;
-		}
-
-		// If an array was passed in, assume that it is an array of form elements.
-		if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-			// Serialize the form elements
-			jQuery.each( a, function() {
-				add( this.name, this.value );
-			});
-
-		} else {
-			// If traditional, encode the "old" way (the way 1.3.2 or older
-			// did it), otherwise encode params recursively.
-			for ( var prefix in a ) {
-				buildParams( prefix, a[ prefix ], traditional, add );
-			}
-		}
-
-		// Return the resulting serialization
-		return s.join( "&" ).replace( r20, "+" );
-	}
-});
-
-function buildParams( prefix, obj, traditional, add ) {
-	if ( jQuery.isArray( obj ) ) {
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-				// If array item is non-scalar (array or object), encode its
-				// numeric index to resolve deserialization ambiguity issues.
-				// Note that rack (as of 1.0.0) can't currently deserialize
-				// nested arrays properly, and attempting to do so may cause
-				// a server error. Possible fixes are to modify rack's
-				// deserialization algorithm or to provide an option or flag
-				// to force array serialization to be shallow.
-				buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
-			}
-		});
-
-	} else if ( !traditional && obj != null && typeof obj === "object" ) {
-		// Serialize object item.
-		for ( var name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
-	var contents = s.contents,
-		dataTypes = s.dataTypes,
-		responseFields = s.responseFields,
-		ct,
-		type,
-		finalDataType,
-		firstDataType;
-
-	// Fill responseXXX fields
-	for( type in responseFields ) {
-		if ( type in responses ) {
-			jqXHR[ responseFields[type] ] = responses[ type ];
-		}
-	}
-
-	// Remove auto dataType and get content-type in the process
-	while( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
-	// Apply the dataFilter if provided
-	if ( s.dataFilter ) {
-		response = s.dataFilter( response, s.dataType );
-	}
-
-	var dataTypes = s.dataTypes,
-		converters = {},
-		i,
-		key,
-		length = dataTypes.length,
-		tmp,
-		// Current and previous dataTypes
-		current = dataTypes[ 0 ],
-		prev,
-		// Conversion expression
-		conversion,
-		// Conversion function
-		conv,
-		// Conversion functions (transitive conversion)
-		conv1,
-		conv2;
-
-	// For each dataType in the chain
-	for( i = 1; i < length; i++ ) {
-
-		// Create converters map
-		// with lowercased keys
-		if ( i === 1 ) {
-			for( key in s.converters ) {
-				if( typeof key === "string" ) {
-					converters[ key.toLowerCase() ] = s.converters[ key ];
-				}
-			}
-		}
-
-		// Get the dataTypes
-		prev = current;
-		current = dataTypes[ i ];
-
-		// If current is auto dataType, update it to prev
-		if( current === "*" ) {
-			current = prev;
-		// If no auto and dataTypes are actually different
-		} else if ( prev !== "*" && prev !== current ) {
-
-			// Get the converter
-			conversion = prev + " " + current;
-			conv = converters[ conversion ] || converters[ "* " + current ];
-
-			// If there is no direct converter, search transitively
-			if ( !conv ) {
-				conv2 = undefined;
-				for( conv1 in converters ) {
-					tmp = conv1.split( " " );
-					if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
-						conv2 = converters[ tmp[1] + " " + current ];
-						if ( conv2 ) {
-							conv1 = converters[ conv1 ];
-							if ( conv1 === true ) {
-								conv = conv2;
-							} else if ( conv2 === true ) {
-								conv = conv1;
-							}
-							break;
-						}
-					}
-				}
-			}
-			// If we found no converter, dispatch an error
-			if ( !( conv || conv2 ) ) {
-				jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
-			}
-			// If found converter is not an equivalence
-			if ( conv !== true ) {
-				// Convert with 1 or 2 converters accordingly
-				response = conv ? conv( response ) : conv2( conv1(response) );
-			}
-		}
-	}
-	return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
-	jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
-	jsonp: "callback",
-	jsonpCallback: function() {
-		return jQuery.expando + "_" + ( jsc++ );
-	}
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
-		( typeof s.data === "string" );
-
-	if ( s.dataTypes[ 0 ] === "jsonp" ||
-		s.jsonp !== false && ( jsre.test( s.url ) ||
-				inspectData && jsre.test( s.data ) ) ) {
-
-		var responseContainer,
-			jsonpCallback = s.jsonpCallback =
-				jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
-			previous = window[ jsonpCallback ],
-			url = s.url,
-			data = s.data,
-			replace = "$1" + jsonpCallback + "$2";
-
-		if ( s.jsonp !== false ) {
-			url = url.replace( jsre, replace );
-			if ( s.url === url ) {
-				if ( inspectData ) {
-					data = data.replace( jsre, replace );
-				}
-				if ( s.data === data ) {
-					// Add callback manually
-					url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
-				}
-			}
-		}
-
-		s.url = url;
-		s.data = data;
-
-		// Install callback
-		window[ jsonpCallback ] = function( response ) {
-			responseContainer = [ response ];
-		};
-
-		// Clean-up function
-		jqXHR.always(function() {
-			// Set callback back to previous value
-			window[ jsonpCallback ] = previous;
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( previous ) ) {
-				window[ jsonpCallback ]( responseContainer[ 0 ] );
-			}
-		});
-
-		// Use data converter to retrieve json after script execution
-		s.converters["script json"] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( jsonpCallback + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Delegate to script
-		return "script";
-	}
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
-	accepts: {
-		script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /javascript|ecmascript/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = "async";
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( head && script.parentNode ) {
-							head.removeChild( script );
-						}
-
-						// Dereference the script
-						script = undefined;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-				// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
-				// This arises when a base node is used (#2709 and #4378).
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( 0, 1 );
-				}
-			}
-		};
-	}
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
-	xhrOnUnloadAbort = window.ActiveXObject ? function() {
-		// Abort all pending requests
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( 0, 1 );
-		}
-	} : false,
-	xhrId = 0,
-	xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
-	/* Microsoft failed to properly
-	 * implement the XMLHttpRequest in IE7 (can't request local files),
-	 * so we use the ActiveXObject when it is available
-	 * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
-	 * we need a fallback.
-	 */
-	function() {
-		return !this.isLocal && createStandardXHR() || createActiveXHR();
-	} :
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
-	jQuery.extend( jQuery.support, {
-		ajax: !!xhr,
-		cors: !!xhr && ( "withCredentials" in xhr )
-	});
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
-	jQuery.ajaxTransport(function( s ) {
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !s.crossDomain || jQuery.support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-
-					// Get a new xhr
-					var xhr = s.xhr(),
-						handle,
-						i;
-
-					// Open the socket
-					// Passing null username, generates a login popup on Opera (#2865)
-					if ( s.username ) {
-						xhr.open( s.type, s.url, s.async, s.username, s.password );
-					} else {
-						xhr.open( s.type, s.url, s.async );
-					}
-
-					// Apply custom fields if provided
-					if ( s.xhrFields ) {
-						for ( i in s.xhrFields ) {
-							xhr[ i ] = s.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( s.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( s.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !s.crossDomain && !headers["X-Requested-With"] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Need an extra try/catch for cross domain requests in Firefox 3
-					try {
-						for ( i in headers ) {
-							xhr.setRequestHeader( i, headers[ i ] );
-						}
-					} catch( _ ) {}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( s.hasContent && s.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-
-						var status,
-							statusText,
-							responseHeaders,
-							responses,
-							xml;
-
-						// Firefox throws exceptions when accessing properties
-						// of an xhr when a network error occured
-						// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
-						try {
-
-							// Was never called and is aborted or complete
-							if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-								// Only called once
-								callback = undefined;
-
-								// Do not keep as active anymore
-								if ( handle ) {
-									xhr.onreadystatechange = jQuery.noop;
-									if ( xhrOnUnloadAbort ) {
-										delete xhrCallbacks[ handle ];
-									}
-								}
-
-								// If it's an abort
-								if ( isAbort ) {
-									// Abort it manually if needed
-									if ( xhr.readyState !== 4 ) {
-										xhr.abort();
-									}
-								} else {
-									status = xhr.status;
-									responseHeaders = xhr.getAllResponseHeaders();
-									responses = {};
-									xml = xhr.responseXML;
-
-									// Construct response list
-									if ( xml && xml.documentElement /* #4958 */ ) {
-										responses.xml = xml;
-									}
-									responses.text = xhr.responseText;
-
-									// Firefox throws an exception when accessing
-									// statusText for faulty cross-domain requests
-									try {
-										statusText = xhr.statusText;
-									} catch( e ) {
-										// We normalize with Webkit giving an empty statusText
-										statusText = "";
-									}
-
-									// Filter status for non standard behaviors
-
-									// If the request is local and we have data: assume a success
-									// (success with no data won't get notified, that's the best we
-									// can do given current implementations)
-									if ( !status && s.isLocal && !s.crossDomain ) {
-										status = responses.text ? 200 : 404;
-									// IE - #1450: sometimes returns 1223 when it should be 204
-									} else if ( status === 1223 ) {
-										status = 204;
-									}
-								}
-							}
-						} catch( firefoxAccessException ) {
-							if ( !isAbort ) {
-								complete( -1, firefoxAccessException );
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, responseHeaders );
-						}
-					};
-
-					// if we're in sync mode or it's in cache
-					// and has been retrieved directly (IE6 & IE7)
-					// we need to manually fire the callback
-					if ( !s.async || xhr.readyState === 4 ) {
-						callback();
-					} else {
-						handle = ++xhrId;
-						if ( xhrOnUnloadAbort ) {
-							// Create the active xhrs callbacks list if needed
-							// and attach the unload handler
-							if ( !xhrCallbacks ) {
-								xhrCallbacks = {};
-								jQuery( window ).unload( xhrOnUnloadAbort );
-							}
-							// Add to list of active xhrs callbacks
-							xhrCallbacks[ handle ] = callback;
-						}
-						xhr.onreadystatechange = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback(0,1);
-					}
-				}
-			};
-		}
-	});
-}
-
-
-
-
-var elemdisplay = {},
-	iframe, iframeDoc,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
-	timerId,
-	fxAttrs = [
-		// height animations
-		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
-		// width animations
-		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
-		// opacity animations
-		[ "opacity" ]
-	],
-	fxNow,
-	requestAnimationFrame = window.webkitRequestAnimationFrame ||
-	    window.mozRequestAnimationFrame ||
-	    window.oRequestAnimationFrame;
-
-jQuery.fn.extend({
-	show: function( speed, easing, callback ) {
-		var elem, display;
-
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("show", 3), speed, easing, callback);
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				elem = this[i];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					// Reset the inline display of this element to learn if it is
-					// being hidden by cascaded rules or not
-					if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
-						display = elem.style.display = "";
-					}
-
-					// Set elements which have been overridden with display: none
-					// in a stylesheet to whatever the default browser style is
-					// for such an element
-					if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
-						jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
-					}
-				}
-			}
-
-			// Set the display of most of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				elem = this[i];
-
-				if ( elem.style ) {
-					display = elem.style.display;
-
-					if ( display === "" || display === "none" ) {
-						elem.style.display = jQuery._data(elem, "olddisplay") || "";
-					}
-				}
-			}
-
-			return this;
-		}
-	},
-
-	hide: function( speed, easing, callback ) {
-		if ( speed || speed === 0 ) {
-			return this.animate( genFx("hide", 3), speed, easing, callback);
-
-		} else {
-			for ( var i = 0, j = this.length; i < j; i++ ) {
-				if ( this[i].style ) {
-					var display = jQuery.css( this[i], "display" );
-
-					if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
-						jQuery._data( this[i], "olddisplay", display );
-					}
-				}
-			}
-
-			// Set the display of the elements in a second loop
-			// to avoid the constant reflow
-			for ( i = 0; i < j; i++ ) {
-				if ( this[i].style ) {
-					this[i].style.display = "none";
-				}
-			}
-
-			return this;
-		}
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-
-	toggle: function( fn, fn2, callback ) {
-		var bool = typeof fn === "boolean";
-
-		if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
-			this._toggle.apply( this, arguments );
-
-		} else if ( fn == null || bool ) {
-			this.each(function() {
-				var state = bool ? fn : jQuery(this).is(":hidden");
-				jQuery(this)[ state ? "show" : "hide" ]();
-			});
-
-		} else {
-			this.animate(genFx("toggle", 3), fn, fn2, callback);
-		}
-
-		return this;
-	},
-
-	fadeTo: function( speed, to, easing, callback ) {
-		return this.filter(":hidden").css("opacity", 0).show().end()
-					.animate({opacity: to}, speed, easing, callback);
-	},
-
-	animate: function( prop, speed, easing, callback ) {
-		var optall = jQuery.speed(speed, easing, callback);
-
-		if ( jQuery.isEmptyObject( prop ) ) {
-			return this.each( optall.complete, [ false ] );
-		}
-
-		// Do not change referenced properties as per-property easing will be lost
-		prop = jQuery.extend( {}, prop );
-
-		return this[ optall.queue === false ? "each" : "queue" ](function() {
-			// XXX 'this' does not always have a nodeName when running the
-			// test suite
-
-			if ( optall.queue === false ) {
-				jQuery._mark( this );
-			}
-
-			var opt = jQuery.extend( {}, optall ),
-				isElement = this.nodeType === 1,
-				hidden = isElement && jQuery(this).is(":hidden"),
-				name, val, p,
-				display, e,
-				parts, start, end, unit;
-
-			// will store per property easing and be used to determine when an animation is complete
-			opt.animatedProperties = {};
-
-			for ( p in prop ) {
-
-				// property name normalization
-				name = jQuery.camelCase( p );
-				if ( p !== name ) {
-					prop[ name ] = prop[ p ];
-					delete prop[ p ];
-				}
-
-				val = prop[ name ];
-
-				// easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
-				if ( jQuery.isArray( val ) ) {
-					opt.animatedProperties[ name ] = val[ 1 ];
-					val = prop[ name ] = val[ 0 ];
-				} else {
-					opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
-				}
-
-				if ( val === "hide" && hidden || val === "show" && !hidden ) {
-					return opt.complete.call( this );
-				}
-
-				if ( isElement && ( name === "height" || name === "width" ) ) {
-					// Make sure that nothing sneaks out
-					// Record all 3 overflow attributes because IE does not
-					// change the overflow attribute when overflowX and
-					// overflowY are set to the same value
-					opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
-					// Set display property to inline-block for height/width
-					// animations on inline elements that are having width/height
-					// animated
-					if ( jQuery.css( this, "display" ) === "inline" &&
-							jQuery.css( this, "float" ) === "none" ) {
-						if ( !jQuery.support.inlineBlockNeedsLayout ) {
-							this.style.display = "inline-block";
-
-						} else {
-							display = defaultDisplay( this.nodeName );
-
-							// inline-level elements accept inline-block;
-							// block-level elements need to be inline with layout
-							if ( display === "inline" ) {
-								this.style.display = "inline-block";
-
-							} else {
-								this.style.display = "inline";
-								this.style.zoom = 1;
-							}
-						}
-					}
-				}
-			}
-
-			if ( opt.overflow != null ) {
-				this.style.overflow = "hidden";
-			}
-
-			for ( p in prop ) {
-				e = new jQuery.fx( this, opt, p );
-				val = prop[ p ];
-
-				if ( rfxtypes.test(val) ) {
-					e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
-
-				} else {
-					parts = rfxnum.exec( val );
-					start = e.cur();
-
-					if ( parts ) {
-						end = parseFloat( parts[2] );
-						unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
-						// We need to compute starting value
-						if ( unit !== "px" ) {
-							jQuery.style( this, p, (end || 1) + unit);
-							start = ((end || 1) / e.cur()) * start;
-							jQuery.style( this, p, start + unit);
-						}
-
-						// If a +=/-= token was provided, we're doing a relative animation
-						if ( parts[1] ) {
-							end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
-						}
-
-						e.custom( start, end, unit );
-
-					} else {
-						e.custom( start, val, "" );
-					}
-				}
-			}
-
-			// For JS strict compliance
-			return true;
-		});
-	},
-
-	stop: function( clearQueue, gotoEnd ) {
-		if ( clearQueue ) {
-			this.queue([]);
-		}
-
-		this.each(function() {
-			var timers = jQuery.timers,
-				i = timers.length;
-			// clear marker counters if we know they won't be
-			if ( !gotoEnd ) {
-				jQuery._unmark( true, this );
-			}
-			while ( i-- ) {
-				if ( timers[i].elem === this ) {
-					if (gotoEnd) {
-						// force the next step to be the last
-						timers[i](true);
-					}
-
-					timers.splice(i, 1);
-				}
-			}
-		});
-
-		// start the next in the queue if the last step wasn't forced
-		if ( !gotoEnd ) {
-			this.dequeue();
-		}
-
-		return this;
-	}
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	setTimeout( clearFxNow, 0 );
-	return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
-	fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
-	var obj = {};
-
-	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
-		obj[ this ] = type;
-	});
-
-	return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
-	slideDown: genFx("show", 1),
-	slideUp: genFx("hide", 1),
-	slideToggle: genFx("toggle", 1),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-});
-
-jQuery.extend({
-	speed: function( speed, easing, fn ) {
-		var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
-			complete: fn || !fn && easing ||
-				jQuery.isFunction( speed ) && speed,
-			duration: speed,
-			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
-		};
-
-		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-			opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
-
-		// Queueing
-		opt.old = opt.complete;
-		opt.complete = function( noUnmark ) {
-			if ( opt.queue !== false ) {
-				jQuery.dequeue( this );
-			} else if ( noUnmark !== false ) {
-				jQuery._unmark( this );
-			}
-
-			if ( jQuery.isFunction( opt.old ) ) {
-				opt.old.call( this );
-			}
-		};
-
-		return opt;
-	},
-
-	easing: {
-		linear: function( p, n, firstNum, diff ) {
-			return firstNum + diff * p;
-		},
-		swing: function( p, n, firstNum, diff ) {
-			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
-		}
-	},
-
-	timers: [],
-
-	fx: function( elem, options, prop ) {
-		this.options = options;
-		this.elem = elem;
-		this.prop = prop;
-
-		options.orig = options.orig || {};
-	}
-
-});
-
-jQuery.fx.prototype = {
-	// Simple function for setting a style value
-	update: function() {
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
-	},
-
-	// Get the current size
-	cur: function() {
-		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
-			return this.elem[ this.prop ];
-		}
-
-		var parsed,
-			r = jQuery.css( this.elem, this.prop );
-		// Empty strings, null, undefined and "auto" are converted to 0,
-		// complex values such as "rotate(1rad)" are returned as is,
-		// simple values such as "10px" are parsed to Float.
-		return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
-	},
-
-	// Start an animation from one number to another
-	custom: function( from, to, unit ) {
-		var self = this,
-			fx = jQuery.fx,
-			raf;
-
-		this.startTime = fxNow || createFxNow();
-		this.start = from;
-		this.end = to;
-		this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-		this.now = this.start;
-		this.pos = this.state = 0;
-
-		function t( gotoEnd ) {
-			return self.step(gotoEnd);
-		}
-
-		t.elem = this.elem;
-
-		if ( t() && jQuery.timers.push(t) && !timerId ) {
-			// Use requestAnimationFrame instead of setInterval if available
-			if ( requestAnimationFrame ) {
-				timerId = 1;
-				raf = function() {
-					// When timerId gets set to null at any point, this stops
-					if ( timerId ) {
-						requestAnimationFrame( raf );
-						fx.tick();
-					}
-				};
-				requestAnimationFrame( raf );
-			} else {
-				timerId = setInterval( fx.tick, fx.interval );
-			}
-		}
-	},
-
-	// Simple 'show' function
-	show: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
-		this.options.show = true;
-
-		// Begin the animation
-		// Make sure that we start at a small width/height to avoid any
-		// flash of content
-		this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
-
-		// Start by showing the element
-		jQuery( this.elem ).show();
-	},
-
-	// Simple 'hide' function
-	hide: function() {
-		// Remember where we started, so that we can go back to it later
-		this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
-		this.options.hide = true;
-
-		// Begin the animation
-		this.custom(this.cur(), 0);
-	},
-
-	// Each step of an animation
-	step: function( gotoEnd ) {
-		var t = fxNow || createFxNow(),
-			done = true,
-			elem = this.elem,
-			options = this.options,
-			i, n;
-
-		if ( gotoEnd || t >= options.duration + this.startTime ) {
-			this.now = this.end;
-			this.pos = this.state = 1;
-			this.update();
-
-			options.animatedProperties[ this.prop ] = true;
-
-			for ( i in options.animatedProperties ) {
-				if ( options.animatedProperties[i] !== true ) {
-					done = false;
-				}
-			}
-
-			if ( done ) {
-				// Reset the overflow
-				if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
-					jQuery.each( [ "", "X", "Y" ], function (index, value) {
-						elem.style[ "overflow" + value ] = options.overflow[index];
-					});
-				}
-
-				// Hide the element if the "hide" operation was done
-				if ( options.hide ) {
-					jQuery(elem).hide();
-				}
-
-				// Reset the properties, if the item has been hidden or shown
-				if ( options.hide || options.show ) {
-					for ( var p in options.animatedProperties ) {
-						jQuery.style( elem, p, options.orig[p] );
-					}
-				}
-
-				// Execute the complete function
-				options.complete.call( elem );
-			}
-
-			return false;
-
-		} else {
-			// classical easing cannot be used with an Infinity duration
-			if ( options.duration == Infinity ) {
-				this.now = t;
-			} else {
-				n = t - this.startTime;
-				this.state = n / options.duration;
-
-				// Perform the easing function, defaults to swing
-				this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
-				this.now = this.start + ((this.end - this.start) * this.pos);
-			}
-			// Perform the next step of the animation
-			this.update();
-		}
-
-		return true;
-	}
-};
-
-jQuery.extend( jQuery.fx, {
-	tick: function() {
-		for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
-			if ( !timers[i]() ) {
-				timers.splice(i--, 1);
-			}
-		}
-
-		if ( !timers.length ) {
-			jQuery.fx.stop();
-		}
-	},
-
-	interval: 13,
-
-	stop: function() {
-		clearInterval( timerId );
-		timerId = null;
-	},
-
-	speeds: {
-		slow: 600,
-		fast: 200,
-		// Default speed
-		_default: 400
-	},
-
-	step: {
-		opacity: function( fx ) {
-			jQuery.style( fx.elem, "opacity", fx.now );
-		},
-
-		_default: function( fx ) {
-			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
-				fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
-			} else {
-				fx.elem[ fx.prop ] = fx.now;
-			}
-		}
-	}
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
-	jQuery.expr.filters.animated = function( elem ) {
-		return jQuery.grep(jQuery.timers, function( fn ) {
-			return elem === fn.elem;
-		}).length;
-	};
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
-	if ( !elemdisplay[ nodeName ] ) {
-
-		var elem = jQuery( "<" + nodeName + ">" ).appendTo( "body" ),
-			display = elem.css( "display" );
-
-		elem.remove();
-
-		// If the simple way fails,
-		// get element's real default display by attaching it to a temp iframe
-		if ( display === "none" || display === "" ) {
-			// No iframe to use yet, so create it
-			if ( !iframe ) {
-				iframe = document.createElement( "iframe" );
-				iframe.frameBorder = iframe.width = iframe.height = 0;
-			}
-
-			document.body.appendChild( iframe );
-
-			// Create a cacheable copy of the iframe document on first call.
-			// IE and Opera will allow us to reuse the iframeDoc without re-writing the fake html
-			// document to it, Webkit & Firefox won't allow reusing the iframe document
-			if ( !iframeDoc || !iframe.createElement ) {
-				iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
-				iframeDoc.write( "<!doctype><html><body></body></html>" );
-			}
-
-			elem = iframeDoc.createElement( nodeName );
-
-			iframeDoc.body.appendChild( elem );
-
-			display = jQuery.css( elem, "display" );
-
-			document.body.removeChild( iframe );
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
-	rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0], box;
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		try {
-			box = elem.getBoundingClientRect();
-		} catch(e) {}
-
-		var doc = elem.ownerDocument,
-			docElem = doc.documentElement;
-
-		// Make sure we're not dealing with a disconnected DOM node
-		if ( !box || !jQuery.contains( docElem, elem ) ) {
-			return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
-		}
-
-		var body = doc.body,
-			win = getWindow(doc),
-			clientTop  = docElem.clientTop  || body.clientTop  || 0,
-			clientLeft = docElem.clientLeft || body.clientLeft || 0,
-			scrollTop  = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop  || body.scrollTop,
-			scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
-			top  = box.top  + scrollTop  - clientTop,
-			left = box.left + scrollLeft - clientLeft;
-
-		return { top: top, left: left };
-	};
-
-} else {
-	jQuery.fn.offset = function( options ) {
-		var elem = this[0];
-
-		if ( options ) {
-			return this.each(function( i ) {
-				jQuery.offset.setOffset( this, options, i );
-			});
-		}
-
-		if ( !elem || !elem.ownerDocument ) {
-			return null;
-		}
-
-		if ( elem === elem.ownerDocument.body ) {
-			return jQuery.offset.bodyOffset( elem );
-		}
-
-		jQuery.offset.initialize();
-
-		var computedStyle,
-			offsetParent = elem.offsetParent,
-			prevOffsetParent = elem,
-			doc = elem.ownerDocument,
-			docElem = doc.documentElement,
-			body = doc.body,
-			defaultView = doc.defaultView,
-			prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
-			top = elem.offsetTop,
-			left = elem.offsetLeft;
-
-		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
-			if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
-				break;
-			}
-
-			computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
-			top  -= elem.scrollTop;
-			left -= elem.scrollLeft;
-
-			if ( elem === offsetParent ) {
-				top  += elem.offsetTop;
-				left += elem.offsetLeft;
-
-				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
-					top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-					left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-				}
-
-				prevOffsetParent = offsetParent;
-				offsetParent = elem.offsetParent;
-			}
-
-			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
-				top  += parseFloat( computedStyle.borderTopWidth  ) || 0;
-				left += parseFloat( computedStyle.borderLeftWidth ) || 0;
-			}
-
-			prevComputedStyle = computedStyle;
-		}
-
-		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
-			top  += body.offsetTop;
-			left += body.offsetLeft;
-		}
-
-		if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
-			top  += Math.max( docElem.scrollTop, body.scrollTop );
-			left += Math.max( docElem.scrollLeft, body.scrollLeft );
-		}
-
-		return { top: top, left: left };
-	};
-}
-
-jQuery.offset = {
-	initialize: function() {
-		var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
-			html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-
-		jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
-
-		container.innerHTML = html;
-		body.insertBefore( container, body.firstChild );
-		innerDiv = container.firstChild;
-		checkDiv = innerDiv.firstChild;
-		td = innerDiv.nextSibling.firstChild.firstChild;
-
-		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
-		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
-		checkDiv.style.position = "fixed";
-		checkDiv.style.top = "20px";
-
-		// safari subtracts parent border width here which is 5px
-		this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
-		checkDiv.style.position = checkDiv.style.top = "";
-
-		innerDiv.style.overflow = "hidden";
-		innerDiv.style.position = "relative";
-
-		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
-		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
-
-		body.removeChild( container );
-		jQuery.offset.initialize = jQuery.noop;
-	},
-
-	bodyOffset: function( body ) {
-		var top = body.offsetTop,
-			left = body.offsetLeft;
-
-		jQuery.offset.initialize();
-
-		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
-			top  += parseFloat( jQuery.css(body, "marginTop") ) || 0;
-			left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
-		}
-
-		return { top: top, left: left };
-	},
-
-	setOffset: function( elem, options, i ) {
-		var position = jQuery.css( elem, "position" );
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		var curElem = jQuery( elem ),
-			curOffset = curElem.offset(),
-			curCSSTop = jQuery.css( elem, "top" ),
-			curCSSLeft = jQuery.css( elem, "left" ),
-			calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
-			props = {}, curPosition = {}, curTop, curLeft;
-
-		// need to be able to calculate position if either top or left is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-			options = options.call( elem, i, curOffset );
-		}
-
-		if (options.top != null) {
-			props.top = (options.top - curOffset.top) + curTop;
-		}
-		if (options.left != null) {
-			props.left = (options.left - curOffset.left) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-
-jQuery.fn.extend({
-	position: function() {
-		if ( !this[0] ) {
-			return null;
-		}
-
-		var elem = this[0],
-
-		// Get *real* offsetParent
-		offsetParent = this.offsetParent(),
-
-		// Get correct offsets
-		offset       = this.offset(),
-		parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
-		// Subtract element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		offset.top  -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
-		offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
-		// Add offsetParent borders
-		parentOffset.top  += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
-		parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
-		// Subtract the two offsets
-		return {
-			top:  offset.top  - parentOffset.top,
-			left: offset.left - parentOffset.left
-		};
-	},
-
-	offsetParent: function() {
-		return this.map(function() {
-			var offsetParent = this.offsetParent || document.body;
-			while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent;
-		});
-	}
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
-	var method = "scroll" + name;
-
-	jQuery.fn[ method ] = function( val ) {
-		var elem, win;
-
-		if ( val === undefined ) {
-			elem = this[ 0 ];
-
-			if ( !elem ) {
-				return null;
-			}
-
-			win = getWindow( elem );
-
-			// Return the scroll offset
-			return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
-				jQuery.support.boxModel && win.document.documentElement[ method ] ||
-					win.document.body[ method ] :
-				elem[ method ];
-		}
-
-		// Set the scroll offset
-		return this.each(function() {
-			win = getWindow( this );
-
-			if ( win ) {
-				win.scrollTo(
-					!i ? val : jQuery( win ).scrollLeft(),
-					 i ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				this[ method ] = val;
-			}
-		});
-	};
-});
-
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-
-
-
-// Create innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
-	var type = name.toLowerCase();
-
-	// innerHeight and innerWidth
-	jQuery.fn["inner" + name] = function() {
-		return this[0] ?
-			parseFloat( jQuery.css( this[0], type, "padding" ) ) :
-			null;
-	};
-
-	// outerHeight and outerWidth
-	jQuery.fn["outer" + name] = function( margin ) {
-		return this[0] ?
-			parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
-			null;
-	};
-
-	jQuery.fn[ type ] = function( size ) {
-		// Get window width or height
-		var elem = this[0];
-		if ( !elem ) {
-			return size == null ? null : this;
-		}
-
-		if ( jQuery.isFunction( size ) ) {
-			return this.each(function( i ) {
-				var self = jQuery( this );
-				self[ type ]( size.call( this, i, self[ type ]() ) );
-			});
-		}
-
-		if ( jQuery.isWindow( elem ) ) {
-			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
-			// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
-			var docElemProp = elem.document.documentElement[ "client" + name ];
-			return elem.document.compatMode === "CSS1Compat" && docElemProp ||
-				elem.document.body[ "client" + name ] || docElemProp;
-
-		// Get document width or height
-		} else if ( elem.nodeType === 9 ) {
-			// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
-			return Math.max(
-				elem.documentElement["client" + name],
-				elem.body["scroll" + name], elem.documentElement["scroll" + name],
-				elem.body["offset" + name], elem.documentElement["offset" + name]
-			);
-
-		// Get or set width or height on the element
-		} else if ( size === undefined ) {
-			var orig = jQuery.css( elem, type ),
-				ret = parseFloat( orig );
-
-			return jQuery.isNaN( ret ) ? orig : ret;
-
-		// Set the width or height on the element (default to pixels if value is unitless)
-		} else {
-			return this.css( type, typeof size === "string" ? size : size + "px" );
-		}
-	};
-
-});
-
-
-window.jQuery = window.$ = jQuery;
-})(window);
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/nohtml/jquery-nohtml.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/nohtml/jquery-nohtml.js
deleted file mode 100644
index 1c62168..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/src/vendor/nohtml/jquery-nohtml.js
+++ /dev/null
@@ -1,96 +0,0 @@
-(function($, document) {
-
-	var create = $.create = (function() {
-
-		function addAttrs( el, obj, context ) {
-			for( var attr in obj ){
-				switch( attr ) {
-				case 'tag' :
-					break;
-				case 'html' :
-					el.innerHTML = obj[ attr ];
-					break;
-				case 'css' :
-					for( var style in obj.css ) {
-						$.attr( el.style, style, obj.css[ style ] );
-					}
-					break;
-				case 'text' : case 'child' : case 'children' :
-					createNode( obj[attr], el, context );
-					break;
-				case 'cls' :
-					el.className = obj[attr];
-					break;
-				case 'data' :
-					for( var data in obj.data ) {
-						$.data( el, data, obj.data[data] );
-					}
-					break;
-				default :
-					if( attr.indexOf("on") === 0 && $.isFunction(obj[attr]) ) {
-						$.event.add( el, attr.substr(2).replace(/^[A-Z]/, function(a) { return a.toLowerCase(); }), obj[attr] );
-					} else {
-						$.attr( el, attr, obj[attr] );
-					}
-				}
-			}
-		}
-
-		function createNode(obj, parent, context) {
-			if(obj && ($.isArray(obj) || obj instanceof $)) {
-				for(var ret = [], i = 0; i < obj.length; i++) {
-					var newNode = createNode(obj[i], parent, context);
-					if(newNode) {
-						ret.push(newNode);
-					}
-				}
-				return ret;
-			}
-			var el;
-			if(typeof(obj) === 'string') {
-				el = context.createTextNode( obj );
-			} else if(!obj) {
-				return undefined;
-			} else if(obj.nodeType === 1) {
-				el = obj;
-			} else if( obj instanceof app.ui.AbstractWidget ) {
-				el = obj.el[0];
-			} else {
-				el = context.createElement( obj.tag || 'DIV' );
-				addAttrs(el, obj, context);
-			}
-			if(parent){ parent.appendChild(el); }
-			return el;
-		}
-
-		return function(elementDef, parentNode) {
-			return createNode(elementDef, parentNode, (parentNode && parentNode.ownerDocument) || document);
-		};
-		
-	})();
-	
-
-	// inject create into jquery internals so object definitions are treated as first class constructors (overrides non-public methods)
-	var clean = $.clean,
-		init = $.fn.init;
-
-	$.clean = function( elems, context, fragment, scripts ) {
-		for(var i = 0; i < elems.length; i++) {
-			if( elems[i].tag || elems[i] instanceof app.ui.AbstractWidget ) {
-				elems[i] = create( elems[i], null, context );
-			}
-		}
-		return clean( elems, context, fragment, scripts );
-	};
-
-	$.fn.init = function( selector, context, rootjQuery ) {
-		if ( selector && ( selector.tag || selector instanceof app.ui.AbstractWidget )) {
-			selector = create( selector, null, context );
-		}
-		return init.call( this, selector, context, rootjQuery );
-	};
-
-	$.fn.init.prototype = $.fn;
-
-})(jQuery, window.document);
-
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/demo.html b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/demo.html
deleted file mode 100644
index 333a920..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/demo.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-	<head>
-		<meta charset="UTF-8">
-		<title>Elasticsearch UI Demo</title>
-		<link rel="stylesheet" href="../_site/base/reset.css">
-		<link rel="stylesheet" href="../_site/app.css">
-		<script src="../_site/i18n.js" data-baseDir="../_site/lang" data-langs="en,fr"></script>
-		<script src="../_site/vendor.js"></script>
-		<script src="../_site/app.js"></script>
-		<script>
-			$( function() {
-				var args = location.search.substring(1).split("&").reduce(function(r, p) {
-					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
-				}, {});
-				var script0 = document.getElementsByTagName('script')[0];
-				var s = document.createElement("script");
-				s.src = '../src/' + args['demo'];
-				s.onload = function() {
-					$("body").append(
-						{ tag: "DIV", children: [
-							window.builder()
-						] }
-					);
-				}
-				script0.parentNode.insertBefore(s, script0);
-				document.title = args['demo'].match(/([^\/]+)(\.js)$/)[1]
-			} );
-		</script>
-		<link rel="icon" href="../_site/app/favicon.png" type="image/png">
-	</head>
-	<body></body>
-</html>
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh
deleted file mode 100755
index 917d896..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/conflictingField.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-
-curl -XDELETE 'http://localhost:9200/conflicting_field_type'
-echo
-curl -XPUT 'http://localhost:9200/conflicting_field_type'
-echo
-curl -XPUT 'http://localhost:9200/conflicting_field_type/map1/_mapping' -d '{
-  "map1": {
-    "date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"],
-    "_all": {
-      "enabled": true,
-      "store": "yes"
-    },
-    "properties": {
-      "field1": {
-        "type": "date",
-        "store": "yes",
-        "format": "yyyyMMddHHmmssSSS",
-        "include_in_all": false
-      }
-    }
-  }
-}'
-echo
-curl -XPUT 'http://localhost:9200/conflicting_field_type/map2/_mapping' -d '{
-  "map2": {
-    "date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"],
-    "_all": {
-      "enabled": true,
-      "store": "yes"
-    },
-    "properties": {
-      "field1": {
-        "type": "string",
-        "store": "yes",
-        "term_vector": "yes",
-        "include_in_all": false
-      }
-    }
-  }
-}'
-echo
-curl -XPUT 'http://localhost:9200/conflicting_field_type/map1/1' -d '{
-    "field1" : "20110214172449000"
-}'
-echo
-curl -XPUT 'http://localhost:9200/conflicting_field_type/map2/2' -d '{
-    "field1" : "Test map2 with string type field"
-}'
-echo
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh
deleted file mode 100644
index 878964c..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/delete_all_indices.sh
+++ /dev/null
@@ -1,6 +0,0 @@
-#!/bin/sh
-
-curl -XDELETE 'http://localhost:9200/conflicting_field_type'
-echo
-curl -XDELETE 'http://localhost:9200/twitter'
-echo
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/multi_type.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/multi_type.sh
deleted file mode 100755
index 5623462..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/multi_type.sh
+++ /dev/null
@@ -1,75 +0,0 @@
-curl -XDELETE 'http://localhost:9200/multi_field_type'
-echo
-curl -XPUT 'http://localhost:9200/multi_field_type'
-echo
-curl -XPUT 'http://localhost:9200/multi_field_type/map1/_mapping' -d '{
-	"map1": {
-		"properties": {
-			"field1": {
-				"type": "string",
-				"store": "yes"
-			},
-			"field2": {
-				"type": "multi_field",
-				"path": "full",
-				"fields": {
-					"field2": { "type": "string" },
-					"alt_name": { "type": "string" },
-					"alt_name2": { "type": "string" }
-				}
-			},
-			"field3": {
-				"type": "multi_field",
-				"path": "just_name",
-				"fields": {
-					"field3": { "type": "string" },
-					"foobar": { "type": "string" }
-				}
-			},
-			"field4": {
-				"type": "multi_field",
-				"path": "just_name",
-				"fields": {
-					"field4": { "type": "string" },
-					"foobar": { "type": "string" }
-				}
-			},
-			"field5": {
-				"type": "string"
-			}
-		}
-	}
-}'
-echo
-curl -XPUT 'http://localhost:9200/multi_field_type/map1/1' -d '{
-	"field1": "Whats the dogs name",
-	"field2": "Max",
-	"field3": "Hey Janelle, whats wrong with Wolfie? I can hear him barking",
-	"field4": "Wolfies fine, honey, Wolfies just fine. Where are you",
-	"field5": "Your foster parents are dead"
-}'
-echo
-curl -XPUT 'http://localhost:9200/multi_field_type/map1/2' -d '{
-	"field1": "Nice night for a walk, eh",
-	"field2": "Nice night for a walk",
-	"field3": "Wash day tomorrow? Nothing clean, right?",
-	"field4": "Nothing clean. Right",
-	"field5": "Hey, I think this guys a couple cans short of a six-pack"
-}'
-echo
-curl -XPUT 'http://localhost:9200/multi_field_type/map1/3' -d '{
-	"field1": "The 600 series had rubber skin. We spotted them easy, but these are new. They look human... sweat, bad breath, everything. Very hard to spot. I had to wait till he moved on you before I could zero him",
-	"field2": "Look... I am not stupid, you know. They cannot make things like that yet.",
-	"field3": "Not yet. Not for about 40 years",
-	"field4": "Are you saying its from the future?",
-	"field5": "One possible future. From your point of view... I dont know tech stuff"
-}'
-echo
-curl -XPUT 'http://localhost:9200/multi_field_type/map1/4' -d '{
-	"field1": "Did you see this war?",
-	"field2": "No. I grew up after. In the ruins... starving... hiding from H-Ks",
-	"field3": "H-Ks?",
-	"field4": "Hunter-Killers. Patrol machines built in automated factories. Most of us were rounded up, put in camps for orderly disposal",
-	"field5": "This is burned in by laser scan. Some of us were kept alive... to work... loading bodies. The disposal units ran night and day. We were that close to going out forever. But there was one man who taught us to fight, to storm the wire of the camps, to smash those metal motherfuckers into junk. He turned it around. He brought us back from the brink. His name is Connor. John Connor. Your son, Sarah, your unborn son"
-}'
-echo
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh
deleted file mode 100755
index 165246a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_feed.sh
+++ /dev/null
@@ -1,45 +0,0 @@
-#!/bin/sh
-
-curl -XDELETE 'http://localhost:9200/twitter'
-echo
-curl -XPUT 'http://localhost:9200/twitter'
-echo
-curl -XPUT 'http://localhost:9200/twitter/_mapping' -d '{
-	"tweet": {
-		"date_formats": ["date_time", "yyyyMMddHHmmss", "yyyyMMddHHmmssSSS"],
-		"properties" : {
-			"user" : { "type" : "string", "index" : "not_analyzed" },
-			"message" : { "type" : "string" },
-			"postDate" : { "type" : "date" },
-			"srcAddr" : { "type" : "ip" },
-			"priority" : { "type" : "integer", null_value: 1 },
-			"rank" : { "type" : "float", null_value: 1.0 },
-			"loc" : { "type": "geo_point" }
-		}
-	}
-}'
-echo
-curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
-	"user" : "mobz",
-	"message" : "developing a tool to search with",
-	"postDate" : "20110220100330",
-	"srcAddr" : "203.19.74.11",
-	"loc" : "-37.86,144.90"
-}'
-echo
-curl -XPUT 'http://localhost:9200/twitter/tweet/2' -d '{
-	"user" : "mobz",
-	"message" : "you know, for elastic search",
-	"postDate" : "20110220095900",
-	"srcAddr" : "203.19.74.11",
-	"loc" : "-37.86,144.90"
-}'
-echo
-curl -XPUT 'http://localhost:9200/twitter/tweet/3' -d '{
-	"user" : "mobz",
-	"message" : "lets take some matilda bay",
-	"postDate" : "20110221171330",
-	"srcAddr" : "203.19.74.11",
-	"loc" : "-37.86,144.90"
-}'
-echo
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh
deleted file mode 100755
index e55c665..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/generators/twitter_river.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-curl -XDELETE 'http://localhost:9200/twitter_river'
-echo
-curl -XDELETE 'http://localhost:9200/_river/twitter_river'
-echo
-curl -XPUT 'http://localhost:9200/twitter_river'
-echo
-read -p "consumer key: " consumer_key
-read -p "consumer secret: " consumer_secret
-read -p "access token: " access_token
-read -p "access token secret: " access_token_secret
-curl -XPUT 'localhost:9200/_river/twitter_river/_meta' -d '
-{
-	"type" : "twitter",
-	"twitter" : {
-		"oauth": {
-			"consumer_key": "'${consumer_key}'",
-			"consumer_secret": "'${consumer_secret}'",
-			"access_token": "'${access_token}'",
-			"access_token_secret": "'${access_token_secret}'"
-		}
-	},
-	"index": {
-		"index": "twitter_river",
-		"type": "status",
-		"buk_size": 100
-	}
-}'
-echo
\ No newline at end of file
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/perf.html b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/perf.html
deleted file mode 100644
index eecfc0a..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/perf.html
+++ /dev/null
@@ -1,54 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-	<head>
-		<meta charset="UTF-8">
-		<title>Elasticsearch UI Performance Testing Harness</title>
-		<link rel="stylesheet" href="../_site/base/reset.css">
-		<link rel="stylesheet" href="../_site/app.css">
-		<script src="../_site/i18n.js" data-baseDir="../_site/lang" data-langs="en,fr"></script>
-		<script src="../_site/vendor.js"></script>
-		<script src="../_site/app.js"></script>
-		<script>
-			$( function() {
-				var widget;
-				var container = document.getElementById("demo");
-				function build() {
-					widget = window.builder();
-					widget.attach( demo );
-				}
-				function remove() {
-					widget.remove();
-					widget = null;
-				}
-				var args = location.search.substring(1).split("&").reduce(function(r, p) {
-					r[decodeURIComponent(p.split("=")[0])] = decodeURIComponent(p.split("=")[1]); return r;
-				}, {});
-				var script0 = document.getElementsByTagName('script')[0];
-				var s = document.createElement("script");
-				s.src = '../src/' + args['demo'];
-				script0.parentNode.insertBefore(s, script0);
-				document.title = args['demo'].match(/([^\/]+)(\.js)$/)[1];
-				document.getElementsByName("build")[0].addEventListener("click", build );
-				document.getElementsByName("remove")[0].addEventListener("click", remove );
-				document.getElementsByName("repeat")[0].addEventListener("click", function() {
-					console.time("build x 1000 in");
-					for( var i = 0; i < 1000; i++ ) {
-						build();
-						remove();
-					}
-					console.timeEnd("build x 1000 in");
-				});
-			} );
-		</script>
-		<link rel="icon" href="../_site/app/favicon.png" type="image/png">
-	</head>
-	<body>
-		<div class="header">
-			<button type="button" name="build">Build</button>
-			<button type="button" name="remove">Remove</button>
-			<button type="button" name="repeat">Build and Remove x 1000</button>
-		</div>
-		<div id="demo"></div>
-	</body>
-</html>
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/spec/specHelper.js b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/spec/specHelper.js
deleted file mode 100644
index 55ba80d..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch/plugins/head/test/spec/specHelper.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// find *Spec.js files in the src directory next to the corresponding source file
-
-var test = window.test = {};
-
-test.cb = (function( jasmine ) {
-	var callbacks = [];
-
-	return {
-		use: function() {
-			callbacks = [];
-		},
-		createSpy: function( name, arg, data, context ) {
-			return jasmine.createSpy( name ).and.callFake( function() {
-				callbacks.push( { cb: arguments[ arg || 0 ], data: data, context: context } );
-			});
-		},
-		execOne: function() {
-			var exec = callbacks.shift();
-			exec.cb.apply( exec.context, exec.data );
-		},
-		execAll: function() {
-			while( callbacks.length ) {
-				this.execOne();
-			}
-		}
-	};
-})( this.jasmine );
-
-
-test.clock = ( function() {
-	var id = 0, timers, saved;
-	var names = [ "setTimeout", "setInterval", "clearTimeout", "clearInterval" ];
-	var byNext = function( a, b ) { return a.next - b.next; };
-	var mocks = {
-		setTimeout: function( fn, t ) {
-			timers.push( { id: id, fn: fn, next: t, t: t, type: "t" } );
-			return id++;
-		},
-		clearTimeout: function( id ) {
-			timers = timers.filter( function( timer ) { return timer.id !== id; } );
-		},
-		setInterval: function( fn, t ) {
-			timers.push( { id: id, fn: fn, next: t, t: t, type: "i" } );
-			return id++;
-		},
-		clearInterval: function( id ) {
-			timers = timers.filter( function( timer ) { return timer.id !== id; } );
-		}
-	};
-
-	return {
-		steal: function() {
-			timers = [];
-			saved = {};
-			names.forEach( function( n ) {
-				saved[n] = window[n];
-				window[n] = mocks[n];
-			});
-		},
-		restore: function() {
-			names.forEach( function( n ) {
-				window[n] = saved[n];
-			});
-			timers = null;
-			saved = null;
-		},
-		tick: function() {
-			if( timers.length ) {
-				timers.sort( byNext );
-				var t0 = timers[0];
-				if( t0.type === "t" ) {
-					timers.shift();
-				} else {
-					t0.next += t0.t;
-				}
-				t0.fn();
-			}
-		}
-	};
-
-})();
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch_update.zip b/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch_update.zip
deleted file mode 100644
index 7365339..0000000
--- a/sdnr/wt/devicemanager/provider/src/test/resources/elasticsearch_update.zip
+++ /dev/null
Binary files differ
diff --git a/sdnr/wt/devicemanager/provider/src/test/resources/mediator-server.json b/sdnr/wt/devicemanager/provider/src/test/resources/mediator-server.json
new file mode 100644
index 0000000..c7db701
--- /dev/null
+++ b/sdnr/wt/devicemanager/provider/src/test/resources/mediator-server.json
@@ -0,0 +1,18 @@
+[
+	{
+	    "uri":"/mwtn/mediator-server/_query",
+	    "method":"DELETE",
+	    "body":{"query":{"match_all":{}}}
+	},
+
+	{
+		"uri":"/mwtn/mediator-server/1",
+		"method":"POST",
+		"body":{
+			"id": 1,
+			"name": "internal mediatorserver",
+			"url": "http://192.168.178.89:7070"
+
+		}
+	}
+]
diff --git a/sdnr/wt/devicemanager/provider/test2.properties b/sdnr/wt/devicemanager/provider/test2.properties
deleted file mode 100644
index 95432ea..0000000
--- a/sdnr/wt/devicemanager/provider/test2.properties
+++ /dev/null
@@ -1,47 +0,0 @@
-[dcae]
-dcaeUserCredentials=admin:admin
-dcaeUrl=off
-dcaeHeartbeatPeriodSeconds=120
-dcaeTestCollector=no
-
-[aots]
-userPassword=passwd
-soapurladd=off
-soapaddtimeout=10
-soapinqtimeout=20
-userName=user
-inqtemplate=inqreq.tmpl.xml
-assignedto=userid
-addtemplate=addreq.tmpl.xml
-severitypassthrough=critical,major,minor,warning
-systemuser=user
-prt-offset=1200
-soapurlinq=off
-#smtpHost=
-#smtpPort=
-#smtpUsername=
-#smtpPassword=
-#smtpSender=
-#smtpReceivers=
-
-[es]
-esCluster=sendateodl5
-
-[aai]
-#keep comment
-aaiHeaders=["X-TransactionId: 9999"]
-aaiUrl=http://localhost:45454
-aaiUserCredentials=AAI:AAI
-aaiDeleteOnMountpointRemove=true
-aaiTrustAllCerts=false
-aaiApiVersion=aai/v13
-aaiPropertiesFile=aaiclient.properties
-aaiApplicationId=SDNR
-aaiPcks12ClientCertFile=/opt/logs/externals/data/stores/keystore.client.p12
-aaiPcks12ClientCertPassphrase=adminadmin
-aaiClientConnectionTimeout=30000
-
-[pm]
-pmCluster=sendateodl5
-pmEnabled=true
-
