diff --git a/core/CHANGELOG.txt b/core/CHANGELOG.txt
index 6882e8f..96904f0 100644
--- a/core/CHANGELOG.txt
+++ b/core/CHANGELOG.txt
@@ -97,7 +97,6 @@ Drupal 8.0, xxxx-xx-xx (development version)
       * Added language select form element in the Form API.
 - Added E-mail field type to core.
 - Added Link field type to core.
-- Added Phone number field type to core.
 - Added local image input filter, to enable secure image posting.
 - Added Views and Views UI module to core.
 
diff --git a/core/MAINTAINERS.txt b/core/MAINTAINERS.txt
index 7652003..8f8edb2 100644
--- a/core/MAINTAINERS.txt
+++ b/core/MAINTAINERS.txt
@@ -111,6 +111,7 @@ Markup
 - Daniel F. Kudwien 'sun' http://drupal.org/user/54136
 
 Menu system
+- Peter Wolanin 'pwolanin' http://drupal.org/user/49851
 - Károly Négyesi 'chx' http://drupal.org/user/9446
 
 Path system
@@ -260,6 +261,9 @@ PHP module
 Picture module
 - Peter Droogmans 'attiks' http://drupal.org/user/105002
 
+Poll module
+- Andrei Mateescu 'amateescu' http://drupal.org/user/729614
+
 RDF module
 - Stéphane Corlosquet 'scor' http://drupal.org/user/52142
 - Lin Clark 'linclark' http://drupal.org/user/396253
diff --git a/core/authorize.php b/core/authorize.php
index 114dcd3..46c6a29 100644
--- a/core/authorize.php
+++ b/core/authorize.php
@@ -78,11 +78,11 @@ function authorize_access_allowed() {
 
 // We have to enable the user and system modules, even to check access and
 // display errors via the maintenance theme.
-$module_list['system'] = 'core/modules/system/system.module';
-$module_list['user'] = 'core/modules/user/user.module';
-drupal_container()->get('module_handler')->setModuleList($module_list);
-drupal_container()->get('module_handler')->load('system');
-drupal_container()->get('module_handler')->load('user');
+$module_list['system']['filename'] = 'core/modules/system/system.module';
+$module_list['user']['filename'] = 'core/modules/user/user.module';
+module_list(NULL, $module_list);
+drupal_load('module', 'system');
+drupal_load('module', 'user');
 
 // Initialize the language system.
 drupal_language_initialize();
diff --git a/core/composer.json b/core/composer.json
index 47ffad1..ab2dc0e 100644
--- a/core/composer.json
+++ b/core/composer.json
@@ -13,10 +13,10 @@
     "symfony/yaml": "<2.4",
     "twig/twig": "1.*@stable",
     "doctrine/common": "2.3.*@stable",
-    "guzzle/http": "3.1.*@stable",
+    "guzzle/http": "*",
     "kriswallsmith/assetic": "1.1.*@alpha",
-    "symfony-cmf/routing": "dev-master#ea4a10",
-    "easyrdf/easyrdf": "dev-master"
+    "symfony-cmf/routing": "1.0.*@dev",
+    "njh/easyrdf": "0.8.*"
   },
   "minimum-stability": "dev"
 }
diff --git a/core/composer.lock b/core/composer.lock
index 7d2a943..07d030c 100644
--- a/core/composer.lock
+++ b/core/composer.lock
@@ -1,5 +1,5 @@
 {
-    "hash": "4c18d6f1c91b78555300b0036b5a8a7e",
+    "hash": "27b5fb7194e0d492c69d372d8ba17b2b",
     "packages": [
         {
             "name": "doctrine/common",
@@ -25,6 +25,7 @@
                     "dev-master": "2.3.x-dev"
                 }
             },
+            "installation-source": "dist",
             "autoload": {
                 "psr-0": {
                     "Doctrine\\Common": "lib/"
@@ -71,85 +72,27 @@
             ]
         },
         {
-            "name": "easyrdf/easyrdf",
-            "version": "dev-master",
-            "source": {
-                "type": "git",
-                "url": "git://github.com/njh/easyrdf.git",
-                "reference": "d1c363bd04cd55169fbefe52328e86031c6db3a2"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://github.com/njh/easyrdf/archive/d1c363bd04cd55169fbefe52328e86031c6db3a2.zip",
-                "reference": "d1c363bd04cd55169fbefe52328e86031c6db3a2",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.2.8"
-            },
-            "replace": {
-                "njh/easyrdf": "self.version"
-            },
-            "require-dev": {
-                "phpunit/phpunit": ">=3.5.15",
-                "squizlabs/php_codesniffer": ">=1.4.3",
-                "sami/sami": "dev-master"
-            },
-            "time": "2013-01-13 01:20:04",
-            "type": "library",
-            "autoload": {
-                "psr-0": {
-                    "EasyRdf_": "lib/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "authors": [
-                {
-                    "name": "Nicholas Humfrey",
-                    "email": "njh@aelius.com",
-                    "homepage": "http://www.aelius.com/njh/",
-                    "role": "Developer"
-                }
-            ],
-            "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
-            "homepage": "http://www.easyrdf.org/",
-            "keywords": [
-                "rdfa",
-                "RDF",
-                "Semantic Web",
-                "Turtle",
-                "Linked Data"
-            ]
-        },
-        {
             "name": "guzzle/common",
-            "version": "v3.1.0",
+            "version": "dev-master",
             "target-dir": "Guzzle/Common",
             "source": {
                 "type": "git",
                 "url": "git://github.com/guzzle/common.git",
-                "reference": "v3.1.0"
+                "reference": "23162d56daa85b1ee6f1d73d9b5a5ecda2d70849"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/guzzle/common/archive/v3.1.0.zip",
-                "reference": "v3.1.0",
+                "url": "https://github.com/guzzle/common/archive/23162d56daa85b1ee6f1d73d9b5a5ecda2d70849.zip",
+                "reference": "23162d56daa85b1ee6f1d73d9b5a5ecda2d70849",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2",
                 "symfony/event-dispatcher": ">=2.1"
             },
-            "time": "2013-01-13 05:14:34",
+            "time": "2012-12-06 02:26:39",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Guzzle\\Common": ""
@@ -170,33 +113,28 @@
         },
         {
             "name": "guzzle/http",
-            "version": "v3.1.0",
+            "version": "dev-master",
             "target-dir": "Guzzle/Http",
             "source": {
                 "type": "git",
                 "url": "git://github.com/guzzle/http.git",
-                "reference": "v3.1.0"
+                "reference": "v3.0.5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/guzzle/http/archive/v3.1.0.zip",
-                "reference": "v3.1.0",
+                "url": "https://github.com/guzzle/http/archive/v3.0.5.zip",
+                "reference": "v3.0.5",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2",
-                "ext-curl": "*",
                 "guzzle/common": "self.version",
                 "guzzle/parser": "self.version",
                 "guzzle/stream": "self.version"
             },
-            "time": "2013-01-13 05:09:32",
+            "time": "2012-11-18 05:28:55",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Guzzle\\Http": ""
@@ -225,29 +163,25 @@
         },
         {
             "name": "guzzle/parser",
-            "version": "v3.1.0",
+            "version": "dev-master",
             "target-dir": "Guzzle/Parser",
             "source": {
                 "type": "git",
                 "url": "git://github.com/guzzle/parser.git",
-                "reference": "v3.1.0"
+                "reference": "v3.0.5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/guzzle/parser/archive/v3.1.0.zip",
-                "reference": "v3.1.0",
+                "url": "https://github.com/guzzle/parser/archive/v3.0.5.zip",
+                "reference": "v3.0.5",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2"
             },
-            "time": "2013-01-12 21:43:21",
+            "time": "2012-11-19 00:07:13",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Guzzle\\Parser": ""
@@ -269,30 +203,26 @@
         },
         {
             "name": "guzzle/stream",
-            "version": "v3.1.0",
+            "version": "dev-master",
             "target-dir": "Guzzle/Stream",
             "source": {
                 "type": "git",
                 "url": "https://github.com/guzzle/stream",
-                "reference": "v3.1.0"
+                "reference": "v3.0.5"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/guzzle/stream/archive/v3.1.0.zip",
-                "reference": "v3.1.0",
+                "url": "https://github.com/guzzle/stream/archive/v3.0.5.zip",
+                "reference": "v3.0.5",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.2",
                 "guzzle/common": "self.version"
             },
-            "time": "2012-12-07 16:45:11",
+            "time": "2012-11-11 23:54:57",
             "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "3.0-dev"
-                }
-            },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Guzzle\\Stream": ""
@@ -354,6 +284,7 @@
                     "dev-master": "1.1-dev"
                 }
             },
+            "installation-source": "dist",
             "autoload": {
                 "psr-0": {
                     "Assetic": "src/"
@@ -385,12 +316,12 @@
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony-cmf/Routing",
-                "reference": "ea4a10"
+                "reference": "1.0.0-alpha3"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://github.com/symfony-cmf/Routing/archive/ea4a10dd971580a9a57a69397f165e25233ba667.zip",
-                "reference": "ea4a10",
+                "url": "https://github.com/symfony-cmf/Routing/archive/1.0.0-alpha3.zip",
+                "reference": "1.0.0-alpha3",
                 "shasum": ""
             },
             "require": {
@@ -398,13 +329,14 @@
                 "symfony/routing": ">=2.1,<2.3-dev",
                 "symfony/http-kernel": ">=2.1,<2.3-dev"
             },
-            "time": "2013-01-21 20:33:16",
+            "time": "2012-12-16 17:52:57",
             "type": "library",
             "extra": {
                 "branch-alias": {
                     "dev-master": "1.0-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Cmf\\Component\\Routing": ""
@@ -428,6 +360,39 @@
             ]
         },
         {
+            "name": "njh/easyrdf",
+            "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
+            "version": "0.8.0",
+            "type": "library",
+            "keywords": ["RDF", "Semantic Web", "Turtle", "RDFa"],
+            "homepage": "http://www.aelius.com/njh/easyrdf/",
+            "license": "BSD-3-Clause",
+            "authors": [
+                {
+                    "name": "Nicholas Humfrey",
+                    "email": "njh@aelius.com",
+                    "homepage": "http://www.aelius.com/njh/",
+                    "role": "Developer"
+                }
+            ],
+            "support": {
+                "forum": "http://groups.google.com/group/easyrdf/",
+                "issues": "http://github.com/njh/easyrdf/issues"
+            },
+            "require": {
+                "php": ">=5.2.8"
+            },
+            "repositories": [
+                {
+                    "type": "vcs",
+                    "url": "https://github.com/njh/easyrdf"
+                }
+            ],
+            "autoload": {
+                "psr-0": { "EasyRdf": "lib/" }
+            }
+        },
+        {
             "name": "symfony/class-loader",
             "version": "dev-master",
             "target-dir": "Symfony/Component/ClassLoader",
@@ -455,6 +420,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\ClassLoader\\": ""
@@ -510,6 +476,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\DependencyInjection\\": ""
@@ -564,6 +531,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\EventDispatcher\\": ""
@@ -611,6 +579,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\HttpFoundation\\": ""
@@ -682,6 +651,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\HttpKernel\\": ""
@@ -724,6 +694,7 @@
             },
             "time": "2012-12-06 10:00:55",
             "type": "library",
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\Process": ""
@@ -782,6 +753,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\Routing\\": ""
@@ -829,6 +801,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\Serializer\\": ""
@@ -876,6 +849,7 @@
                     "dev-master": "2.2-dev"
                 }
             },
+            "installation-source": "source",
             "autoload": {
                 "psr-0": {
                     "Symfony\\Component\\Yaml\\": ""
@@ -922,6 +896,7 @@
                     "dev-master": "1.11-dev"
                 }
             },
+            "installation-source": "dist",
             "autoload": {
                 "psr-0": {
                     "Twig_": "lib/"
@@ -956,9 +931,7 @@
     "stability-flags": {
         "twig/twig": 0,
         "doctrine/common": 0,
-        "guzzle/http": 0,
         "kriswallsmith/assetic": 15,
-        "symfony-cmf/routing": 20,
-        "easyrdf/easyrdf": 20
+        "symfony-cmf/routing": 20
     }
 }
diff --git a/core/includes/ajax.inc b/core/includes/ajax.inc
index d8eb913..a7fbe7b 100644
--- a/core/includes/ajax.inc
+++ b/core/includes/ajax.inc
@@ -5,6 +5,8 @@
  * Functions for use with Drupal's Ajax framework.
  */
 
+use Drupal\Component\Utility\NestedArray;
+
 /**
  * @defgroup ajax Ajax framework
  * @{
@@ -289,8 +291,8 @@ function ajax_render($commands = array()) {
   // Now add a command to merge changes and additions to Drupal.settings.
   $scripts = drupal_add_js();
   if (!empty($scripts['settings'])) {
-    $settings = drupal_merge_js_settings($scripts['settings']['data']);
-    array_unshift($commands, ajax_command_settings($settings, TRUE));
+    $settings = $scripts['settings'];
+    array_unshift($commands, ajax_command_settings(NestedArray::mergeDeepArray($settings['data']), TRUE));
   }
 
   // Allow modules to alter any Ajax response.
diff --git a/core/includes/bootstrap.inc b/core/includes/bootstrap.inc
index 676a948..cd65323 100644
--- a/core/includes/bootstrap.inc
+++ b/core/includes/bootstrap.inc
@@ -7,7 +7,6 @@
 use Drupal\Core\DependencyInjection\ContainerBuilder;
 use Symfony\Component\ClassLoader\UniversalClassLoader;
 use Symfony\Component\ClassLoader\ApcUniversalClassLoader;
-use Symfony\Component\DependencyInjection\ContainerInterface;
 use Symfony\Component\DependencyInjection\Container;
 use Symfony\Component\DependencyInjection\Reference;
 use Symfony\Component\DependencyInjection\Exception\RuntimeException as DependencyInjectionRuntimeException;
@@ -888,14 +887,6 @@ function drupal_get_filename($type, $name, $filename = NULL) {
     // nothing
   }
   else {
-    if ($type == 'module') {
-      if (empty($files[$type])) {
-        $files[$type] = drupal_container()->get('module_handler')->getModuleList();
-      }
-      if (isset($files[$type][$name])) {
-        return $files[$type][$name];
-      }
-    }
     // Verify that we have an keyvalue service before using it. This is required
     // because this function is called during installation.
     // @todo Inject database connection into KeyValueStore\DatabaseStorage.
@@ -1141,9 +1132,8 @@ function drupal_page_is_cacheable($allow_caching = NULL) {
  * @see bootstrap_hooks()
  */
 function bootstrap_invoke_all($hook) {
-  $module_handler = drupal_container()->get('module_handler');
-  foreach ($module_handler->getBootstrapModules() as $module) {
-    $module_handler->load($module);
+  foreach (module_list('bootstrap') as $module) {
+    drupal_load('module', $module);
     module_invoke($module, $hook);
   }
 }
@@ -1162,10 +1152,6 @@ function bootstrap_invoke_all($hook) {
  *   TRUE if the item is loaded or has already been loaded.
  */
 function drupal_load($type, $name) {
-  if ($type == 'module' && drupal_container()->get('module_handler')->moduleExists($name)) {
-    return drupal_container()->get('module_handler')->load($name);
-  }
-
   // Once a file is included this can't be reversed during a request so do not
   // use drupal_static() here.
   static $files = array();
@@ -2289,6 +2275,10 @@ function _drupal_exception_handler($exception) {
  * Sets up the script environment and loads settings.php.
  */
 function _drupal_bootstrap_configuration() {
+  // Set the Drupal custom error handler.
+  set_error_handler('_drupal_error_handler');
+  set_exception_handler('_drupal_exception_handler');
+
   drupal_environment_initialize();
   // Start a page timer:
   timer_start('page');
@@ -2303,11 +2293,6 @@ function _drupal_bootstrap_configuration() {
 
   // Load the procedural configuration system helper functions.
   require_once DRUPAL_ROOT . '/core/includes/config.inc';
-
-  // Set the Drupal custom error handler. (requires config())
-  set_error_handler('_drupal_error_handler');
-  set_exception_handler('_drupal_exception_handler');
-
   // Redirect the user to the installation script if Drupal has not been
   // installed yet (i.e., if no $databases array has been defined in the
   // settings.php file) and we are not already installing.
@@ -2437,7 +2422,7 @@ function _drupal_bootstrap_variables() {
   $conf = variable_initialize(isset($conf) ? $conf : array());
   // Load bootstrap modules.
   require_once DRUPAL_ROOT . '/core/includes/module.inc';
-  drupal_container()->get('module_handler')->loadBootstrapModules();
+  module_load_all(TRUE);
 }
 
 /**
@@ -2472,14 +2457,14 @@ function drupal_get_bootstrap_phase() {
  *
  * @see Drupal\Core\DrupalKernel
  *
- * @param Symfony\Component\DependencyInjection\ContainerInterface $new_container
+ * @param Symfony\Component\DependencyInjection\Container $new_container
  *   (optional) A new container instance to replace the current.
  *
- * @return Symfony\Component\DependencyInjection\ContainerInterface|bool
- *   The instance of the ContainerInterface used to set up and maintain
- *   object instances or FALSE if none exist yet.
+ * @return Symfony\Component\DependencyInjection\Container|bool
+ *   The instance of the Container used to set up and maintain object
+ *   instances or FALSE if none exist yet.
  */
-function drupal_container(ContainerInterface $new_container = NULL) {
+function drupal_container(Container $new_container = NULL) {
   // We do not use drupal_static() here because we do not have a mechanism by
   // which to reinitialize the stored objects, so a drupal_static_reset() call
   // would leave Drupal in a nonfunctional state.
@@ -2491,82 +2476,6 @@ function drupal_container(ContainerInterface $new_container = NULL) {
 }
 
 /**
- * Returns the list of enabled modules.
- *
- * @deprecated as of Drupal 8.0. Use
- *   drupal_container()->get('module_handler')->getModuleList().
- *
- * @see \Drupal\Core\Extension\ModuleHandler::getModuleList()
- */
-function module_list() {
-  $modules = array_keys(drupal_container()->get('module_handler')->getModuleList());
-  return array_combine($modules, $modules);
-}
-
-/**
- * Determines which modules are implementing a hook.
- *
- * @deprecated as of Drupal 8.0. Use
- *   drupal_container()->get('module_handler')->getImplementations($hook).
- *
- * @see \Drupal\Core\Extension\ModuleHandler::getImplementations()
- */
-function module_implements($hook) {
-  return drupal_container()->get('module_handler')->getImplementations($hook);
-}
-
-/**
- * Invokes a hook in all enabled modules that implement it.
- *
- * @deprecated as of Drupal 8.0. Use
- *   drupal_container()->get('module_handler')->invokeAll($hook).
- *
- * @see \Drupal\Core\Extension\ModuleHandler::invokeAll()
- */
-function module_invoke_all($hook) {
-  $args = func_get_args();
-  // Remove $hook from the arguments.
-  array_shift($args);
-  return drupal_container()->get('module_handler')->invokeAll($hook, $args);
-}
-
-/**
- * Passes alterable variables to specific hook_TYPE_alter() implementations.
- *
- * @deprecated as of Drupal 8.0. Use
- *   drupal_container()->get('module_handler')->alter($hook).
- *
- * @see \Drupal\Core\Extension\ModuleHandler::alter()
- */
-function drupal_alter($type, &$data, &$context1 = NULL, &$context2 = NULL) {
-  return drupal_container()->get('module_handler')->alter($type, $data, $context1, $context2);
-}
-
-/**
- * Determines whether a given module exists.
- *
- * @deprecated as of Drupal 8.0. Use
- *   drupal_container()->get('module_handler')->moduleExists($hook).
- *
- * @see \Drupal\Core\Extension\ModuleHandler::moduleExists()
- */
-function module_exists($module) {
-  return drupal_container()->get('module_handler')->moduleExists($module);
-}
-
-/**
- * Determines whether a module implements a hook.
- *
- * @deprecated as of Drupal 8.0. Use
- *   drupal_container()->get('module_handler')->implementsHook($module, $hook).
- *
- * @see \Drupal\Core\Extension\ModuleHandler::implementsHook()
- */
-function module_hook($module, $hook) {
-  return drupal_container()->get('module_handler')->implementsHook($module, $hook);
-}
-
-/**
  * Returns the state storage service.
  *
  * Use this to store machine-generated data, local to a specific environment
diff --git a/core/includes/common.inc b/core/includes/common.inc
index e22307a..2638468 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -688,8 +688,8 @@ function drupal_goto($path = '', array $options = array(), $http_response_code =
   // A destination in $_GET always overrides the function arguments.
   // We do not allow absolute URLs to be passed via $_GET, as this can be an
   // attack vector, with the following exception:
-  // - Absolute URLs that point to this site (i.e. same base URL and
-  //   base path) are allowed.
+  // - absolute URLs that point to this site (i.e. same base URL and
+  //   base path) are allowed
   if (isset($_GET['destination']) && (!url_is_external($_GET['destination']) || _external_url_is_local($_GET['destination']))) {
     $destination = drupal_parse_url($_GET['destination']);
     $path = $destination['path'];
@@ -722,18 +722,13 @@ function drupal_goto($path = '', array $options = array(), $http_response_code =
  *   TRUE if the URL has the same domain and base path.
  */
 function _external_url_is_local($url) {
-  $url_parts = parse_url($url);
-  $base_host = parse_url($GLOBALS['base_url'], PHP_URL_HOST);
+    $url_parts = parse_url($url);
+    $base_host = parse_url($GLOBALS['base_url'], PHP_URL_HOST);
 
-  if (!isset($url_parts['path'])) {
-    return ($url_parts['host'] == $base_host);
-  }
-  else {
     // When comparing base paths, we need a trailing slash to make sure a
     // partial URL match isn't occuring. Since base_path() always returns with
     // a trailing slash, we don't need to add the trailing slash here.
     return ($url_parts['host'] == $base_host && stripos($url_parts['path'], base_path()) === 0);
-  }
 }
 
 /**
@@ -3874,63 +3869,6 @@ function drupal_get_js($scope = 'header', $javascript = NULL, $skip_alter = FALS
 }
 
 /**
- * Merges an array of settings arrays into a single settings array.
- *
- * This function merges the items in the same way that
- *
- * @code
- *   jQuery.extend(true, {}, $settings_items[0], $settings_items[1], ...)
- * @endcode
- *
- * would. This means integer indeces are preserved just like string indeces are,
- * rather than re-indexed as is common in PHP array merging.
- *
- * Example:
- * @code
- * function module1_page_build(&$page) {
- *   $page['#attached']['js'][] = array(
- *     'type' => 'setting',
- *     'data' => array('foo' => array('a', 'b', 'c')),
- *   );
- * }
- * function module2_page_build(&$page) {
- *   $page['#attached']['js'][] = array(
- *     'type' => 'setting',
- *     'data' => array('foo' => array('d')),
- *   );
- * }
- * // When the page is rendered after the above code, and the browser runs the
- * // resulting <SCRIPT> tags, the value of drupalSettings.foo is
- * // ['d', 'b', 'c'], not ['a', 'b', 'c', 'd'].
- * @endcode
- *
- * By following jQuery.extend() merge logic rather than common PHP array merge
- * logic, the following are ensured:
- * - drupal_add_js() is idempotent: calling it twice with the same parameters
- *   does not change the output sent to the browser.
- * - If pieces of the page are rendered in separate PHP requests and the
- *   returned settings are merged by JavaScript, the resulting settings are the
- *   same as if rendered in one PHP request and merged by PHP.
- *
- * @param $settings_items
- *   An array of settings arrays, as returned by:
- *   @code
- *     $js = drupal_add_js();
- *     $settings_items = $js['settings']['data'];
- *   @endcode
- *
- * @return
- *   A merged $settings array, suitable for JSON encoding and returning to the
- *   browser.
- *
- * @see drupal_add_js()
- * @see drupal_pre_render_scripts()
- */
-function drupal_merge_js_settings($settings_items) {
-  return NestedArray::mergeDeepArray($settings_items, TRUE);
-}
-
-/**
  * #pre_render callback to add the elements needed for JavaScript tags to be rendered.
  *
  * This function evaluates the aggregation enabled/disabled condition on a group
@@ -4011,7 +3949,7 @@ function drupal_pre_render_scripts($elements) {
         switch ($item['type']) {
           case 'setting':
             $element['#value_prefix'] = $embed_prefix;
-            $element['#value'] = 'var drupalSettings = ' . drupal_json_encode(drupal_merge_js_settings($item['data'])) . ";";
+            $element['#value'] = 'var drupalSettings = ' . drupal_json_encode(NestedArray::mergeDeepArray($item['data'], TRUE)) . ";";
             $element['#value_suffix'] = $embed_suffix;
             break;
 
@@ -4636,9 +4574,6 @@ function drupal_get_library($module, $name = NULL) {
  */
 function drupal_add_tabledrag($table_id, $action, $relationship, $group, $subgroup = NULL, $source = NULL, $hidden = TRUE, $limit = 0) {
   $js_added = &drupal_static(__FUNCTION__, FALSE);
-  $tabledrag_id = &drupal_static(__FUNCTION__  . '_setting', FALSE);
-  $tabledrag_id = (!isset($tabledrag_id)) ? 0 : $tabledrag_id + 1;
-
   if (!$js_added) {
     // Add the table drag JavaScript to the page before the module JavaScript
     // to ensure that table drag behaviors are registered before any module
@@ -4650,7 +4585,7 @@ function drupal_add_tabledrag($table_id, $action, $relationship, $group, $subgro
   // If a subgroup or source isn't set, assume it is the same as the group.
   $target = isset($subgroup) ? $subgroup : $group;
   $source = isset($source) ? $source : $target;
-  $settings['tableDrag'][$table_id][$group][$tabledrag_id] = array(
+  $settings['tableDrag'][$table_id][$group][] = array(
     'target' => $target,
     'source' => $source,
     'relationship' => $relationship,
@@ -4839,7 +4774,7 @@ function _drupal_bootstrap_code() {
   require_once DRUPAL_ROOT . '/core/includes/entity.inc';
 
   // Load all enabled modules
-  drupal_container()->get('module_handler')->loadAll();
+  module_load_all();
 
   // Make sure all stream wrappers are registered.
   file_get_stream_wrappers();
@@ -5223,7 +5158,7 @@ function drupal_pre_render_link($element) {
  * @code
  * $node->content['links'] = array(
  *   '#theme' => 'links__node',
- *   '#pre_render' => array('drupal_pre_render_links'),
+ *   '#pre_render' = array('drupal_pre_render_links'),
  *   'comment' => array(
  *     '#theme' => 'links__node__comment',
  *     '#links' => array(
@@ -6438,7 +6373,7 @@ function drupal_flush_all_caches() {
 
   // Ensure that all modules that are currently supposed to be enabled are
   // actually loaded.
-  drupal_container()->get('module_handler')->loadAll();
+  module_load_all();
 
   // Update the list of bootstrap modules.
   // Allows developers to get new hook_boot() implementations registered without
@@ -6512,10 +6447,68 @@ function debug($data, $label = NULL, $print_r = FALSE) {
 }
 
 /**
+ * Parses a dependency for comparison by drupal_check_incompatibility().
+ *
+ * @param $dependency
+ *   A dependency string, for example 'foo (>=8.x-4.5-beta5, 3.x)'.
+ *
+ * @return
+ *   An associative array with three keys:
+ *   - 'name' includes the name of the thing to depend on (e.g. 'foo').
+ *   - 'original_version' contains the original version string (which can be
+ *     used in the UI for reporting incompatibilities).
+ *   - 'versions' is a list of associative arrays, each containing the keys
+ *     'op' and 'version'. 'op' can be one of: '=', '==', '!=', '<>', '<',
+ *     '<=', '>', or '>='. 'version' is one piece like '4.5-beta3'.
+ *   Callers should pass this structure to drupal_check_incompatibility().
+ *
+ * @see drupal_check_incompatibility()
+ */
+function drupal_parse_dependency($dependency) {
+  // We use named subpatterns and support every op that version_compare
+  // supports. Also, op is optional and defaults to equals.
+  $p_op = '(?P<operation>!=|==|=|<|<=|>|>=|<>)?';
+  // Core version is always optional: 8.x-2.x and 2.x is treated the same.
+  $p_core = '(?:' . preg_quote(DRUPAL_CORE_COMPATIBILITY) . '-)?';
+  $p_major = '(?P<major>\d+)';
+  // By setting the minor version to x, branches can be matched.
+  $p_minor = '(?P<minor>(?:\d+|x)(?:-[A-Za-z]+\d+)?)';
+  $value = array();
+  $parts = explode('(', $dependency, 2);
+  $value['name'] = trim($parts[0]);
+  if (isset($parts[1])) {
+    $value['original_version'] = ' (' . $parts[1];
+    foreach (explode(',', $parts[1]) as $version) {
+      if (preg_match("/^\s*$p_op\s*$p_core$p_major\.$p_minor/", $version, $matches)) {
+        $op = !empty($matches['operation']) ? $matches['operation'] : '=';
+        if ($matches['minor'] == 'x') {
+          // Drupal considers "2.x" to mean any version that begins with
+          // "2" (e.g. 2.0, 2.9 are all "2.x"). PHP's version_compare(),
+          // on the other hand, treats "x" as a string; so to
+          // version_compare(), "2.x" is considered less than 2.0. This
+          // means that >=2.x and <2.x are handled by version_compare()
+          // as we need, but > and <= are not.
+          if ($op == '>' || $op == '<=') {
+            $matches['major']++;
+          }
+          // Equivalence can be checked by adding two restrictions.
+          if ($op == '=' || $op == '==') {
+            $value['versions'][] = array('op' => '<', 'version' => ($matches['major'] + 1) . '.x');
+            $op = '>=';
+          }
+        }
+        $value['versions'][] = array('op' => $op, 'version' => $matches['major'] . '.' . $matches['minor']);
+      }
+    }
+  }
+  return $value;
+}
+
+/**
  * Checks whether a version is compatible with a given dependency.
  *
  * @param $v
- *   A parsed dependency structure e.g. from ModuleHandler::parseDependency().
+ *   The parsed dependency structure from drupal_parse_dependency().
  * @param $current_version
  *   The version to check against (like 4.2).
  *
@@ -6523,7 +6516,7 @@ function debug($data, $label = NULL, $print_r = FALSE) {
  *   NULL if compatible, otherwise the original dependency version string that
  *   caused the incompatibility.
  *
- * @see \Drupal\Core\Extension\ModuleHandler::parseDependency()
+ * @see drupal_parse_dependency()
  */
 function drupal_check_incompatibility($v, $current_version) {
   if (!empty($v['versions'])) {
diff --git a/core/includes/config.inc b/core/includes/config.inc
index 06e0e67..c89537d 100644
--- a/core/includes/config.inc
+++ b/core/includes/config.inc
@@ -253,7 +253,6 @@ function config_import_invoke_owner(array $config_changes, StorageInterface $sou
   // higher-level configuration data.
   // First pass deleted, then new, and lastly changed configuration, in order to
   // handle dependencies correctly.
-  $manager = drupal_container()->get('plugin.manager.entity');
   foreach (array('delete', 'create', 'change') as $op) {
     foreach ($config_changes[$op] as $key => $name) {
       // Call to the configuration entity's storage controller to handle the
@@ -272,7 +271,7 @@ function config_import_invoke_owner(array $config_changes, StorageInterface $sou
         }
 
         $method = 'import' . ucfirst($op);
-        $handled_by_module = $manager->getStorageController($entity_type)->$method($name, $new_config, $old_config);
+        $handled_by_module = entity_get_controller($entity_type)->$method($name, $new_config, $old_config);
       }
       if (!empty($handled_by_module)) {
         unset($config_changes[$op][$key]);
diff --git a/core/includes/entity.api.php b/core/includes/entity.api.php
index 7c9c539..88e370a 100644
--- a/core/includes/entity.api.php
+++ b/core/includes/entity.api.php
@@ -24,114 +24,11 @@
  * @see entity_get_info()
  */
 function hook_entity_info(&$entity_info) {
-  // Add a form controller for a custom node form without overriding the default
-  // node form. To override the default node form, use hook_entity_info_alter()
-  // to alter $entity_info['node']['form_controller_class']['default'].
-  $entity_info['node']['form_controller_class']['mymodule_foo'] = 'Drupal\mymodule\NodeFooFormController';
-}
-
-/**
- * Describe the view modes for entity types.
- *
- * View modes let entities be displayed differently depending on the context.
- * For instance, a node can be displayed differently on its own page ('full'
- * mode), on the home page or taxonomy listings ('teaser' mode), or in an RSS
- * feed ('rss' mode). Modules taking part in the display of the entity (notably
- * the Field API) can adjust their behavior depending on the requested view
- * mode. An additional 'default' view mode is available for all entity types.
- * This view mode is not intended for actual entity display, but holds default
- * display settings. For each available view mode, administrators can configure
- * whether it should use its own set of field display settings, or just
- * replicate the settings of the 'default' view mode, thus reducing the amount
- * of display configurations to keep track of.
- *
- * @return array
- *   An associative array of all entity view modes, keyed by the entity
- *   type name, and then the view mode name, with the following keys:
- *   - label: The human-readable name of the view mode.
- *   - custom_settings: A boolean specifying whether the view mode should by
- *     default use its own custom field display settings. If FALSE, entities
- *     displayed in this view mode will reuse the 'default' display settings
- *     by default (e.g. right after the module exposing the view mode is
- *     enabled), but administrators can later use the Field UI to apply custom
- *     display settings specific to the view mode.
- *
- * @see entity_get_view_modes()
- * @see hook_entity_view_mode_info_alter()
- */
-function hook_entity_view_mode_info() {
-  $view_modes['user']['full'] = array(
-    'label' => t('User account'),
-  );
-  $view_modes['user']['compact'] = array(
-    'label' => t('Compact'),
-    'custom_settings' => TRUE,
-  );
-  return $view_modes;
-}
-
-/**
- * Alter the view modes for entity types.
- *
- * @param array $view_modes
- *   An array of view modes, keyed first by entity type, then by view mode name.
- *
- * @see entity_get_view_modes()
- * @see hook_entity_view_mode_info()
- */
-function hook_entity_view_mode_info_alter(&$view_modes) {
-  $view_modes['user']['full']['custom_settings'] = TRUE;
-}
-
-/**
- * Describe the bundles for entity types.
- *
- * @return array
- *   An associative array of all entity bundles, keyed by the entity
- *   type name, and then the bundle name, with the following keys:
- *   - label: The human-readable name of the bundle.
- *   - uri_callback: The same as the 'uri_callback' key defined for the entity
- *     type in the EntityManager, but for the bundle only. When determining
- *     the URI of an entity, if a 'uri_callback' is defined for both the
- *     entity type and the bundle, the one for the bundle is used.
- *   - admin: An array of information that allows Field UI pages to attach
- *     themselves to the existing administration pages for the bundle.
- *     Elements:
- *     - path: the path of the bundle's main administration page, as defined
- *       in hook_menu(). If the path includes a placeholder for the bundle,
- *       the 'bundle argument', 'bundle helper' and 'real path' keys below
- *       are required.
- *     - bundle argument: The position of the placeholder in 'path', if any.
- *     - real path: The actual path (no placeholder) of the bundle's main
- *       administration page. This will be used to generate links.
- *     - access callback: As in hook_menu(). 'user_access' will be assumed if
- *       no value is provided.
- *     - access arguments: As in hook_menu().
- *
- * @see entity_get_bundles()
- * @see hook_entity_bundle_info_alter()
- */
-function hook_entity_bundle_info() {
-  $bundles['user']['user'] = array(
-    'label' => t('User'),
-    'admin' => array(
-      'path' => 'admin/config/people/accounts',
-    ),
+  // Add the 'Print' view mode for nodes.
+  $entity_info['node']['view_modes']['print'] = array(
+    'label' => t('Print'),
+    'custom_settings' => FALSE,
   );
-  return $bundles;
-}
-
-/**
- * Alter the bundles for entity types.
- *
- * @param array $bundles
- *   An array of bundles, keyed first by entity type, then by bundle name.
- *
- * @see entity_get_bundles()
- * @see hook_entity_bundle_info()
- */
-function hook_entity_bundle_info_alter(&$bundles) {
-  $bundles['user']['user']['label'] = t('Full account');
 }
 
 /**
diff --git a/core/includes/entity.inc b/core/includes/entity.inc
index 2d21e82..bf6c1ce 100644
--- a/core/includes/entity.inc
+++ b/core/includes/entity.inc
@@ -49,91 +49,23 @@ function entity_get_info($entity_type = NULL) {
  */
 function entity_info_cache_clear() {
   drupal_static_reset('entity_get_info');
-  drupal_static_reset('entity_get_view_modes');
-  drupal_static_reset('entity_get_bundles');
   // Clear all languages.
   cache()->deleteTags(array('entity_info' => TRUE));
 }
 
 /**
- * Returns the entity bundle info.
+ * Returns the defined bundles for the given entity type.
  *
- * @param string|null $entity_type
- *   The entity type whose bundle info should be returned, or NULL for all
- *   bundles info. Defaults to NULL.
- *
- * @return array
- *   The bundle info for a specific entity type, or all entity types.
- */
-function entity_get_bundles($entity_type = NULL) {
-  $bundles = &drupal_static(__FUNCTION__);
-  if (!$bundles) {
-    $langcode = language(LANGUAGE_TYPE_INTERFACE)->langcode;
-    if ($cache = cache()->get("entity_bundle_info:$langcode")) {
-      $bundles = $cache->data;
-    }
-    else {
-      $bundles = module_invoke_all('entity_bundle_info');
-      // If no bundles are provided, use the entity type name and label.
-      foreach (entity_get_info() as $type => $entity_info) {
-        if (!isset($bundles[$type])) {
-          $bundles[$type][$type]['label'] = $entity_info['label'];
-        }
-      }
-      drupal_alter('entity_bundle_info', $bundles);
-      cache()->set("entity_bundle_info:$langcode", $bundles, CacheBackendInterface::CACHE_PERMANENT, array('entity_info' => TRUE));
-    }
-  }
-
-  if (empty($entity_type)) {
-    return $bundles;
-  }
-  elseif (isset($bundles[$entity_type])) {
-    return $bundles[$entity_type];
-  }
-
-  return array();
-}
-
-/**
- * Returns the entity view mode info.
- *
- * @param string|null $entity_type
- *   The entity type whose view mode info should be returned, or NULL for all
- *   view mode info. Defaults to NULL.
+ * @param string $entity_type
+ *   The entity type whose bundles should be returned.
  *
  * @return array
- *   The view mode info for a specific entity type, or all entity types.
+ *   An array containing the bundle names or the entity type name itself if no
+ *   bundle is defined.
  */
-function entity_get_view_modes($entity_type = NULL) {
-  $view_modes = &drupal_static(__FUNCTION__);
-  if (!$view_modes) {
-    $langcode = language(LANGUAGE_TYPE_INTERFACE)->langcode;
-    if ($cache = cache()->get("entity_view_mode_info:$langcode")) {
-      $view_modes = $cache->data;
-    }
-    else {
-      $view_modes = module_invoke_all('entity_view_mode_info');
-      foreach ($view_modes as $type => $entity_info) {
-        foreach ($entity_info as $view_mode => $view_mode_info) {
-          $view_modes[$type][$view_mode] += array(
-            'custom_settings' => FALSE,
-          );
-        }
-      }
-      drupal_alter('entity_view_mode_info', $view_modes);
-      cache()->set("entity_view_mode_info:$langcode", $view_modes, CacheBackendInterface::CACHE_PERMANENT, array('entity_info' => TRUE));
-    }
-  }
-
-  if (empty($entity_type)) {
-    return $view_modes;
-  }
-  elseif (isset($view_modes[$entity_type])) {
-    return $view_modes[$entity_type];
-  }
-
-  return array();
+function entity_get_bundles($entity_type) {
+  $entity_info = entity_get_info($entity_type);
+  return isset($entity_info['bundles']) ? array_keys($entity_info['bundles']) : array($entity_type);
 }
 
 /**
@@ -177,9 +109,7 @@ function entity_load($entity_type, $id, $reset = FALSE) {
  * @see Drupal\Core\Entity\DatabaseStorageController
  */
 function entity_revision_load($entity_type, $revision_id) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getStorageController($entity_type)
-    ->loadRevision($revision_id);
+  return entity_get_controller($entity_type)->loadRevision($revision_id);
 }
 
 /**
@@ -191,9 +121,7 @@ function entity_revision_load($entity_type, $revision_id) {
  *   The revision ID to delete.
  */
 function entity_revision_delete($entity_type, $revision_id) {
-  drupal_container()->get('plugin.manager.entity')
-    ->getStorageController($entity_type)
-    ->deleteRevision($revision_id);
+  entity_get_controller($entity_type)->deleteRevision($revision_id);
 }
 
 /**
@@ -223,7 +151,7 @@ function entity_load_by_uuid($entity_type, $uuid, $reset = FALSE) {
   }
   $uuid_key = $entity_info['entity_keys']['uuid'];
 
-  $controller = drupal_container()->get('plugin.manager.entity')->getStorageController($entity_type);
+  $controller = entity_get_controller($entity_type);
   if ($reset) {
     $controller->resetCache();
   }
@@ -265,11 +193,10 @@ function entity_load_by_uuid($entity_type, $uuid, $reset = FALSE) {
  * @see Drupal\Core\Entity\Query\QueryInterface
  */
 function entity_load_multiple($entity_type, array $ids = NULL, $reset = FALSE) {
-  $controller = drupal_container()->get('plugin.manager.entity')->getStorageController($entity_type);
   if ($reset) {
-    $controller->resetCache();
+    entity_get_controller($entity_type)->resetCache();
   }
-  return $controller->load($ids);
+  return entity_get_controller($entity_type)->load($ids);
 }
 
 /**
@@ -285,9 +212,7 @@ function entity_load_multiple($entity_type, array $ids = NULL, $reset = FALSE) {
  *   An array of entity objects indexed by their ids.
  */
 function entity_load_multiple_by_properties($entity_type, array $values) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getStorageController($entity_type)
-    ->loadByProperties($values);
+  return entity_get_controller($entity_type)->loadByProperties($values);
 }
 
 /**
@@ -307,9 +232,8 @@ function entity_load_multiple_by_properties($entity_type, array $values) {
  *   The unchanged entity, or FALSE if the entity cannot be loaded.
  */
 function entity_load_unchanged($entity_type, $id) {
-  $controller = drupal_container()->get('plugin.manager.entity')->getStorageController($entity_type);
-  $controller->resetCache(array($id));
-  $result = $controller->load(array($id));
+  entity_get_controller($entity_type)->resetCache(array($id));
+  $result = entity_get_controller($entity_type)->load(array($id));
   return reset($result);
 }
 
@@ -322,7 +246,7 @@ function entity_load_unchanged($entity_type, $id) {
  *   An array of entity IDs of the entities to delete.
  */
 function entity_delete_multiple($entity_type, array $ids) {
-  $controller = drupal_container()->get('plugin.manager.entity')->getStorageController($entity_type);
+  $controller = entity_get_controller($entity_type);
   $entities = $controller->load($ids);
   $controller->delete($entities);
 }
@@ -340,21 +264,22 @@ function entity_delete_multiple($entity_type, array $ids) {
  *   A new entity object.
  */
 function entity_create($entity_type, array $values) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getStorageController($entity_type)
-    ->create($values);
+  return entity_get_controller($entity_type)->create($values);
 }
 
 /**
  * Gets the entity controller class for an entity type.
  *
  * @return Drupal\Core\Entity\EntityStorageControllerInterface
- *
- * @deprecated Use \Drupal\Core\Entity\EntityManager::getStorageController().
  */
 function entity_get_controller($entity_type) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getStorageController($entity_type);
+  $controllers = &drupal_static(__FUNCTION__, array());
+  if (!isset($controllers[$entity_type])) {
+    $type_info = entity_get_info($entity_type);
+    $class = $type_info['controller_class'];
+    $controllers[$entity_type] = new $class($entity_type);
+  }
+  return $controllers[$entity_type];
 }
 
 /**
@@ -388,11 +313,16 @@ function entity_page_label(EntityInterface $entity, $langcode = NULL) {
  * @return \Drupal\Core\Entity\EntityAccessControllerInterface
  *   An entity access controller instance.
  *
- * @deprecated Use \Drupal\Core\Entity\EntityManager::getRenderController().
+ * @see \Drupal\Core\Entity\EntityManager
  */
 function entity_access_controller($entity_type) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getAccessController($entity_type);
+  $controllers = &drupal_static(__FUNCTION__, array());
+  if (!isset($controllers[$entity_type])) {
+    $type_info = entity_get_info($entity_type);
+    $class = $type_info['access_controller_class'];
+    $controllers[$entity_type] = new $class($entity_type);
+  }
+  return $controllers[$entity_type];
 }
 
 /**
@@ -415,12 +345,24 @@ function entity_access_controller($entity_type) {
  *
  * @return Drupal\Core\Entity\EntityFormControllerInterface
  *   An entity form controller instance.
- *
- * @deprecated Use \Drupal\Core\Entity\EntityManager::getFormController().
  */
 function entity_form_controller($entity_type, $operation = 'default') {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getFormController($entity_type, $operation);
+  $info = entity_get_info($entity_type);
+
+  // Check whether there is a form controller class for the specified operation.
+  if (!empty($info['form_controller_class'][$operation])) {
+    $class = $info['form_controller_class'][$operation];
+  }
+  // If no controller is specified default to the base implementation.
+  elseif (empty($info['form_controller_class']) && $operation == 'default') {
+    $class = 'Drupal\Core\Entity\EntityFormController';
+  }
+  // If a non-existing operation has been specified stop.
+  else {
+    throw new InvalidArgumentException("Missing form controller for '$entity_type', operation '$operation'");
+  }
+
+  return new $class($operation);
 }
 
 /**
@@ -460,7 +402,7 @@ function entity_form_id(EntityInterface $entity, $operation = 'default') {
  */
 function entity_form_state_defaults(EntityInterface $entity, $operation = 'default', $langcode = NULL) {
   $form_state = array();
-  $controller = drupal_container()->get('plugin.manager.entity')->getFormController($entity->entityType(), $operation);
+  $controller = entity_form_controller($entity->entityType(), $operation);
   $form_state['build_info']['callback'] = array($controller, 'build');
   $form_state['build_info']['base_form_id'] = $entity->entityType() . '_form';
   $form_state['build_info']['args'] = array($entity);
@@ -558,11 +500,13 @@ function entity_form_submit_build_entity($entity_type, $entity, $form, &$form_st
  * @return Drupal\Core\Entity\EntityListControllerInterface
  *   An entity list controller.
  *
- * @deprecated Use \Drupal\Core\Entity\EntityManager::getFormController().
+ * @see \Drupal\Core\Entity\EntityManager
  */
 function entity_list_controller($entity_type) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getListController($entity_type);
+  $storage = entity_get_controller($entity_type);
+  $entity_info = entity_get_info($entity_type);
+  $class = $entity_info['list_controller_class'];
+  return new $class($entity_type, $storage);
 }
 
 /**
@@ -574,11 +518,12 @@ function entity_list_controller($entity_type) {
  * @return Drupal\Core\Entity\EntityRenderControllerInterface
  *   An entity render controller.
  *
- * @deprecated Use \Drupal\Core\Entity\EntityManager::getFormController().
+ * @see \Drupal\Core\Entity\EntityManager
  */
 function entity_render_controller($entity_type) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getRenderController($entity_type);
+  $info = entity_get_info($entity_type);
+  $class = $info['render_controller_class'];
+  return new $class($entity_type);
 }
 
 /**
@@ -596,9 +541,7 @@ function entity_render_controller($entity_type) {
  *   A render array for the entity.
  */
 function entity_view(EntityInterface $entity, $view_mode, $langcode = NULL) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getRenderController($entity->entityType())
-    ->view($entity, $view_mode, $langcode);
+  return entity_render_controller($entity->entityType())->view($entity, $view_mode, $langcode);
 }
 
 /**
@@ -617,9 +560,7 @@ function entity_view(EntityInterface $entity, $view_mode, $langcode = NULL) {
  *   entities array passed in $entities.
  */
 function entity_view_multiple(array $entities, $view_mode, $langcode = NULL) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getRenderController(reset($entities)->entityType())
-    ->viewMultiple($entities, $view_mode, $langcode);
+  return entity_render_controller(reset($entities)->entityType())->viewMultiple($entities, $view_mode, $langcode);
 }
 
 /**
diff --git a/core/includes/form.inc b/core/includes/form.inc
index 513615c..375f178 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -2832,15 +2832,10 @@ function theme_fieldset($variables) {
     $element['#attributes']['aria-describedby'] = $description_id;
   }
 
-  $legend_attributes = array();
-  if (isset($element['#title_display']) && $element['#title_display'] == 'invisible') {
-    $legend_attributes['class'][] = 'element-invisible';
-  }
-
   $output = '<fieldset' . new Attribute($element['#attributes']) . '>';
   if (!empty($element['#title'])) {
     // Always wrap fieldset legends in a SPAN for CSS positioning.
-    $output .= '<legend' . new Attribute($legend_attributes) . '><span class="fieldset-legend">' . $element['#title'] . '</span></legend>';
+    $output .= '<legend><span class="fieldset-legend">' . $element['#title'] . '</span></legend>';
   }
   $output .= '<div class="fieldset-wrapper">';
   if (!empty($element['#description'])) {
@@ -3875,19 +3870,19 @@ function form_validate_machine_name(&$element, &$form_state) {
 }
 
 /**
- * Arranges elements into groups.
+ * Arranges details into groups.
  *
  * @param $element
  *   An associative array containing the properties and children of the
- *   element. Note that $element must be taken by reference here, so processed
+ *   details. Note that $element must be taken by reference here, so processed
  *   child elements are taken over into $form_state.
  * @param $form_state
- *   The $form_state array for the form this element belongs to.
+ *   The $form_state array for the form this details belongs to.
  *
  * @return
  *   The processed element.
  */
-function form_process_group(&$element, &$form_state) {
+function form_process_details(&$element, &$form_state) {
   $parents = implode('][', $element['#parents']);
 
   // Each details element forms a new group. The #type 'vertical_tabs' basically
@@ -3909,14 +3904,14 @@ function form_process_group(&$element, &$form_state) {
 }
 
 /**
- * Adds form element theming to details.
+ * Adds members of this group as actual elements for rendering.
  *
  * @param $element
  *   An associative array containing the properties and children of the
  *   details.
  *
  * @return
- *   The modified element.
+ *   The modified element with all group members.
  */
 function form_pre_render_details($element) {
   // The .form-wrapper class is required for #states to treat details like
@@ -3934,25 +3929,10 @@ function form_pre_render_details($element) {
     $element['#attributes']['open'] = 'open';
   }
 
-  return $element;
-}
-
-/**
- * Adds members of this group as actual elements for rendering.
- *
- * @param $element
- *   An associative array containing the properties and children of the
- *   element.
- *
- * @return
- *   The modified element with all group members.
- */
-function form_pre_render_group($element) {
-  // The element may be rendered outside of a Form API context.
+  // Details may be rendered outside of a Form API context.
   if (!isset($element['#parents']) || !isset($element['#groups'])) {
     return $element;
   }
-
   // Inject group member elements belonging to this group.
   $parents = implode('][', $element['#parents']);
   $children = element_children($element['#groups'][$parents]);
@@ -4095,17 +4075,17 @@ function form_process_autocomplete($element, &$form_state) {
     $element['#attributes']['class'][] = 'form-autocomplete';
     $element['#attached']['library'][] = array('system', 'drupal.autocomplete');
     // Provide a hidden element for the JavaScript behavior to bind to. Since
-    // this element is for client-side functionality only, do not process input.
+    // this element is for client-side functionality only, and we don't want to
+    // collect any input from it, use #theme='hidden' instead of #type='hidden'.
     // @todo Refactor autocomplete.js to accept Drupal.settings instead of
     //   requiring extraneous markup.
     $element['autocomplete'] = array(
-      '#type' => 'hidden',
-      '#input' => FALSE,
-      '#value' => url($element['#autocomplete_path'], array('absolute' => TRUE)),
-      '#disabled' => TRUE,
+      '#theme' => 'hidden',
       '#attributes' => array(
-        'class' => array('autocomplete'),
         'id' => $element['#id'] . '-autocomplete',
+        'value' => url($element['#autocomplete_path'], array('absolute' => TRUE)),
+        'class' => array('autocomplete'),
+        'disabled' => 'disabled',
       ),
     );
   }
@@ -4668,6 +4648,8 @@ function form_pre_render_file($element) {
  */
 function theme_form_element($variables) {
   $element = &$variables['element'];
+  // This is also used in the installer, pre-database setup.
+  $t = get_t();
 
   // This function is invoked as theme wrapper, but the rendered form element
   // may not necessarily have been processed by form_builder().
@@ -4675,18 +4657,12 @@ function theme_form_element($variables) {
     '#title_display' => 'before',
   );
 
-  // Take over any #wrapper_attributes defined by the element.
-  // @todo Temporary hack for #type 'item'.
-  // @see http://drupal.org/node/1829202
-  if (isset($element['#wrapper_attributes'])) {
-    $attributes = $element['#wrapper_attributes'];
-  }
   // Add element #id for #type 'item'.
   if (isset($element['#markup']) && !empty($element['#id'])) {
     $attributes['id'] = $element['#id'];
   }
   // Add element's #type and #name as class to aid with JS/CSS selectors.
-  $attributes['class'][] = 'form-item';
+  $attributes['class'] = array('form-item');
   if (!empty($element['#type'])) {
     $attributes['class'][] = 'form-type-' . strtr($element['#type'], '_', '-');
   }
@@ -4809,7 +4785,8 @@ function theme_form_element_label($variables) {
     $attributes['for'] = $element['#id'];
   }
 
-  return '<label' . new Attribute($attributes) . '>' . $t('!title!required', array('!title' => $title, '!required' => $required)) . '</label>';
+  // The leading whitespace helps visually separate fields from inline labels.
+  return ' <label' . new Attribute($attributes) . '>' . $t('!title !required', array('!title' => $title, '!required' => $required)) . "</label>\n";
 }
 
 /**
diff --git a/core/includes/install.core.inc b/core/includes/install.core.inc
index 20c690b..7f4b26b 100644
--- a/core/includes/install.core.inc
+++ b/core/includes/install.core.inc
@@ -338,7 +338,6 @@ function install_begin_request(&$install_state) {
     $container->register('config.factory', 'Drupal\Core\Config\ConfigFactory')
       ->addArgument(new Reference('config.storage'))
       ->addArgument(new Reference('event_dispatcher'));
-
     // The install process cannot use the database lock backend since the database
     // is not fully up, so we use a null backend implementation during the
     // installation process. This will also speed up the installation process.
@@ -347,10 +346,6 @@ function install_begin_request(&$install_state) {
     // (as opposed to the cache backend) so we can afford having a null
     // implementation here.
     $container->register('lock', 'Drupal\Core\Lock\NullLockBackend');
-
-    // Register a module handler for managing enabled modules.
-    $container
-      ->register('module_handler', 'Drupal\Core\Extension\ModuleHandler');
     drupal_container($container);
   }
 
@@ -358,13 +353,10 @@ function install_begin_request(&$install_state) {
   drupal_language_initialize();
 
   require_once DRUPAL_ROOT . '/core/includes/ajax.inc';
-
-  $module_handler = drupal_container()->get('module_handler');
-  if (!$module_handler->moduleExists('system')) {
-    // Override the module list with a minimal set of modules.
-    $module_handler->setModuleList(array('system' => 'core/modules/system/system.module'));
-  }
-  $module_handler->load('system');
+  // Override the module list with a minimal set of modules.
+  $module_list['system']['filename'] = 'core/modules/system/system.module';
+  module_list(NULL, $module_list);
+  drupal_load('module', 'system');
 
   require_once DRUPAL_ROOT . '/core/includes/cache.inc';
   $conf['cache_classes'] = array('cache' => 'Drupal\Core\Cache\MemoryBackend');
@@ -1578,7 +1570,9 @@ function install_bootstrap_full(&$install_state) {
   // cache backend will be used again.
   unset($GLOBALS['conf']['cache_classes']['cache']);
   drupal_static_reset('cache');
-
+  // Clear the module list that was overriden earlier in the process.
+  // This will allow all freshly installed modules to be loaded.
+  module_list_reset();
   drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 }
 
diff --git a/core/includes/install.inc b/core/includes/install.inc
index e9d666f..9223b9c 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -424,10 +424,15 @@ function drupal_install_system() {
     ->set('enabled.system', 0)
     ->save();
 
-  // Update the module list to include it.
-  drupal_container()->get('module_handler')->setModuleList(array('system' => $system_path . '/system.module'));
-  drupal_container()->get('module_handler')->resetImplementations();
-
+  // Clear out module list and hook implementation statics.
+  system_list_reset();
+  module_list_reset();
+  module_implements_reset();
+
+  // To ensure that the system module can be found by the plugin system, warm
+  // the module list cache.
+  // @todo Remove this in http://drupal.org/node/1798732.
+  module_list();
   config_install_default_config('module', 'system');
 
   module_invoke('system', 'install');
diff --git a/core/includes/module.inc b/core/includes/module.inc
index 83a3ba6..f6d47b6 100644
--- a/core/includes/module.inc
+++ b/core/includes/module.inc
@@ -10,6 +10,114 @@
 use Symfony\Component\DependencyInjection\ContainerInterface;
 
 /**
+ * Loads all enabled modules.
+ *
+ * @param bool $bootstrap
+ *   Whether to load only the reduced set of modules loaded in "bootstrap mode"
+ *   for cached pages. See bootstrap.inc. Pass NULL to only check the current
+ *   status without loading of modules.
+ * @param bool $reset
+ *   (optional) Internal use only. Whether to reset the internal statically
+ *   cached flag of whether modules have been loaded. If TRUE, all modules are
+ *   (re)loaded in the same call. Used by the testing framework to override and
+ *   persist a limited module list for the duration of a unit test (in which no
+ *   module system exists).
+ *
+ * @return bool
+ *   A Boolean indicating whether all modules have been loaded. This means all
+ *   modules; the load status of bootstrap modules cannot be checked.
+ */
+function module_load_all($bootstrap = FALSE, $reset = FALSE) {
+  static $has_run = FALSE;
+
+  if ($reset) {
+    $has_run = FALSE;
+  }
+
+  // Unless $boostrap is NULL, load the requested set of modules.
+  if (isset($bootstrap) && !$has_run) {
+    $type = $bootstrap ? 'bootstrap' : 'module_enabled';
+    foreach (module_list($type) as $module) {
+      drupal_load('module', $module);
+    }
+    // $has_run will be TRUE if $bootstrap is FALSE.
+    $has_run = !$bootstrap;
+  }
+  return $has_run;
+}
+
+/**
+ * Returns a list of currently active modules.
+ *
+ * Acts as a wrapper around system_list(), returning either a list of all
+ * enabled modules, or just modules needed for bootstrap.
+ *
+ * The returned module list is always based on system_list(). The only exception
+ * to that is when a fixed list of modules has been passed in previously, in
+ * which case system_list() is omitted and the fixed list is always returned in
+ * subsequent calls until manually reverted via module_list_reset().
+ *
+ * @param string $type
+ *   The type of list to return:
+ *   - module_enabled: All enabled modules.
+ *   - bootstrap: All enabled modules required for bootstrap.
+ * @param array $fixed_list
+ *   (optional) An array of module names to override the list of modules. This
+ *   list will persist until the next call with a new $fixed_list passed in.
+ *   Primarily intended for internal use (e.g., in install.php and update.php).
+ *   Use module_list_reset() to undo the $fixed_list override.
+ * @param bool $reset
+ *   (optional) Whether to reset/remove the $fixed_list.
+ *
+ * @return array
+ *   An associative array whose keys and values are the names of the modules in
+ *   the list.
+ *
+ * @see module_list_reset()
+ */
+function module_list($type = 'module_enabled', array $fixed_list = NULL, $reset = FALSE) {
+  // This static is only used for $fixed_list. It must not be a drupal_static(),
+  // since any call to drupal_static_reset() in unit tests would cause an
+  // attempt to retrieve the list of modules from the database (which does not
+  // exist).
+  static $module_list;
+
+  if ($reset) {
+    $module_list = NULL;
+    // Do nothing if no $type and no $fixed_list have been passed.
+    if (!isset($type) && !isset($fixed_list)) {
+      return;
+    }
+  }
+
+  // The list that will be be returned. Separate from $module_list in order
+  // to not duplicate the static cache of system_list().
+  $list = $module_list;
+
+  if (isset($fixed_list)) {
+    $module_list = array();
+    foreach ($fixed_list as $name => $module) {
+      system_register('module', $name, $module['filename']);
+      $module_list[$name] = $name;
+    }
+    $list = $module_list;
+  }
+  elseif (!isset($module_list)) {
+    $list = system_list($type);
+  }
+  return $list;
+}
+
+/**
+ * Reverts an enforced fixed list of module_list().
+ *
+ * Subsequent calls to module_list() will no longer use a fixed list.
+ */
+function module_list_reset() {
+  module_list(NULL, NULL, TRUE);
+}
+
+/**
  * Builds a list of bootstrap modules and enabled modules and themes.
  *
  * @param $type
@@ -24,6 +132,7 @@
  *   For $type 'theme', the array values are objects representing the
  *   respective database row, with the 'info' property already unserialized.
  *
+ * @see module_list()
  * @see list_themes()
  *
  * @todo There are too many layers/levels of caching involved for system_list()
@@ -33,74 +142,121 @@
  */
 function system_list($type) {
   $lists = &drupal_static(__FUNCTION__);
-  if ($cached = cache('bootstrap')->get('system_list')) {
-    $lists = $cached->data;
+
+  // For bootstrap modules, attempt to fetch the list from cache if possible.
+  // if not fetch only the required information to fire bootstrap hooks
+  // in case we are going to serve the page from cache.
+  if ($type == 'bootstrap') {
+    if (isset($lists['bootstrap'])) {
+      return $lists['bootstrap'];
+    }
+    if ($cached = cache('bootstrap')->get('bootstrap_modules')) {
+      $bootstrap_list = $cached->data;
+    }
+    else {
+      $bootstrap_list = state()->get('system.module.bootstrap') ?: array();
+      cache('bootstrap')->set('bootstrap_modules', $bootstrap_list);
+    }
+    // To avoid a separate database lookup for the filepath, prime the
+    // drupal_get_filename() static cache for bootstrap modules only.
+    // The rest is stored separately to keep the bootstrap module cache small.
+    foreach ($bootstrap_list as $name => $filename) {
+      system_register('module', $name, $filename);
+    }
+    // We only return the module names here since module_list() doesn't need
+    // the filename itself.
+    $lists['bootstrap'] = array_keys($bootstrap_list);
   }
-  else {
-    $lists = array(
-      'theme' => array(),
-      'filepaths' => array(),
-    );
-    // Build a list of themes.
-    $enabled_themes = (array) config('system.theme')->get('enabled');
-    // @todo Themes include all themes, including disabled/uninstalled. This
-    //   system.theme.data state will go away entirely as soon as themes have
-    //   a proper installation status.
-    // @see http://drupal.org/node/1067408
-    $theme_data = state()->get('system.theme.data');
-    if (empty($theme_data)) {
-      // @todo: system_list() may be called from _drupal_bootstrap_code(), in
-      // which case system.module is not loaded yet.
-      // Prevent a filesystem scan in drupal_load() and include it directly.
-      // @see http://drupal.org/node/1067408
-      require_once DRUPAL_ROOT . '/core/modules/system/system.module';
-      $theme_data = system_rebuild_theme_data();
-    }
-    foreach ($theme_data as $name => $theme) {
-      $theme->status = (int) isset($enabled_themes[$name]);
-      $lists['theme'][$name] = $theme;
-      // Build a list of filenames so drupal_get_filename can use it.
-      if (isset($enabled_themes[$name])) {
+  // Otherwise build the list for enabled modules and themes.
+  elseif (!isset($lists['module_enabled'])) {
+    if ($cached = cache('bootstrap')->get('system_list')) {
+      $lists = $cached->data;
+    }
+    else {
+      $lists = array(
+        'module_enabled' => array(),
+        'theme' => array(),
+        'filepaths' => array(),
+      );
+      // The module name (rather than the filename) is used as the fallback
+      // weighting in order to guarantee consistent behavior across different
+      // Drupal installations, which might have modules installed in different
+      // locations in the file system. The ordering here must also be
+      // consistent with the one used in module_implements().
+      $enabled_modules = (array) config('system.module')->get('enabled');
+      $module_files = state()->get('system.module.files');
+      foreach ($enabled_modules as $name => $weight) {
+        // Build a list of all enabled modules.
+        $lists['module_enabled'][$name] = $name;
+        // Build a list of filenames so drupal_get_filename can use it.
         $lists['filepaths'][] = array(
-          'type' => 'theme',
+          'type' => 'module',
           'name' => $name,
-          'filepath' => $theme->filename,
+          'filepath' => $module_files[$name],
         );
       }
-    }
-    // @todo Move into list_themes(). Read info for a particular requested
-    //   theme from state instead.
-    foreach ($lists['theme'] as $key => $theme) {
-      if (!empty($theme->info['base theme'])) {
-        // Make a list of the theme's base themes.
-        require_once DRUPAL_ROOT . '/core/includes/theme.inc';
-        $lists['theme'][$key]->base_themes = drupal_find_base_themes($lists['theme'], $key);
-        // Don't proceed if there was a problem with the root base theme.
-        if (!current($lists['theme'][$key]->base_themes)) {
-          continue;
-        }
-        // Determine the root base theme.
-        $base_key = key($lists['theme'][$key]->base_themes);
-        // Add to the list of sub-themes for each of the theme's base themes.
-        foreach (array_keys($lists['theme'][$key]->base_themes) as $base_theme) {
-          $lists['theme'][$base_theme]->sub_themes[$key] = $lists['theme'][$key]->info['name'];
+
+      // Build a list of themes.
+      $enabled_themes = (array) config('system.theme')->get('enabled');
+      // @todo Themes include all themes, including disabled/uninstalled. This
+      //   system.theme.data state will go away entirely as soon as themes have
+      //   a proper installation status.
+      // @see http://drupal.org/node/1067408
+      $theme_data = state()->get('system.theme.data');
+      if (empty($theme_data)) {
+        // @todo: system_list() may be called from _drupal_bootstrap_code() and
+        // module_load_all(), in which case system.module is not loaded yet.
+        // Prevent a filesystem scan in drupal_load() and include it directly.
+        // @see http://drupal.org/node/1067408
+        require_once DRUPAL_ROOT . '/core/modules/system/system.module';
+        $theme_data = system_rebuild_theme_data();
+      }
+      foreach ($theme_data as $name => $theme) {
+        $theme->status = (int) isset($enabled_themes[$name]);
+        $lists['theme'][$name] = $theme;
+        // Build a list of filenames so drupal_get_filename can use it.
+        if (isset($enabled_themes[$name])) {
+          $lists['filepaths'][] = array(
+            'type' => 'theme',
+            'name' => $name,
+            'filepath' => $theme->filename,
+          );
         }
-        // Add the base theme's theme engine info.
-        $lists['theme'][$key]->info['engine'] = $lists['theme'][$base_key]->info['engine'];
       }
-      else {
-        // A plain theme is its own base theme.
-        $base_key = $key;
+      // @todo Move into list_themes(). Read info for a particular requested
+      //   theme from state instead.
+      foreach ($lists['theme'] as $key => $theme) {
+        if (!empty($theme->info['base theme'])) {
+          // Make a list of the theme's base themes.
+          require_once DRUPAL_ROOT . '/core/includes/theme.inc';
+          $lists['theme'][$key]->base_themes = drupal_find_base_themes($lists['theme'], $key);
+          // Don't proceed if there was a problem with the root base theme.
+          if (!current($lists['theme'][$key]->base_themes)) {
+            continue;
+          }
+          // Determine the root base theme.
+          $base_key = key($lists['theme'][$key]->base_themes);
+          // Add to the list of sub-themes for each of the theme's base themes.
+          foreach (array_keys($lists['theme'][$key]->base_themes) as $base_theme) {
+            $lists['theme'][$base_theme]->sub_themes[$key] = $lists['theme'][$key]->info['name'];
+          }
+          // Add the base theme's theme engine info.
+          $lists['theme'][$key]->info['engine'] = $lists['theme'][$base_key]->info['engine'];
+        }
+        else {
+          // A plain theme is its own base theme.
+          $base_key = $key;
+        }
+        // Set the theme engine prefix.
+        $lists['theme'][$key]->prefix = ($lists['theme'][$key]->info['engine'] == 'theme') ? $base_key : $lists['theme'][$key]->info['engine'];
       }
-      // Set the theme engine prefix.
-      $lists['theme'][$key]->prefix = ($lists['theme'][$key]->info['engine'] == 'theme') ? $base_key : $lists['theme'][$key]->info['engine'];
+      cache('bootstrap')->set('system_list', $lists);
+    }
+    // To avoid a separate database lookup for the filepath, prime the
+    // drupal_get_filename() static cache with all enabled modules and themes.
+    foreach ($lists['filepaths'] as $item) {
+      system_register($item['type'], $item['name'], $item['filepath']);
     }
-    cache('bootstrap')->set('system_list', $lists);
-  }
-  // To avoid a separate database lookup for the filepath, prime the
-  // drupal_get_filename() static cache with all enabled modules and themes.
-  foreach ($lists['filepaths'] as $item) {
-    system_register($item['type'], $item['name'], $item['filepath']);
   }
 
   return $lists[$type];
@@ -113,7 +269,7 @@ function system_list_reset() {
   drupal_static_reset('system_list');
   drupal_static_reset('system_rebuild_module_data');
   drupal_static_reset('list_themes');
-  cache('bootstrap')->delete('system_list');
+  cache('bootstrap')->deleteMultiple(array('bootstrap_modules', 'system_list'));
   cache()->delete('system_info');
   // Remove last known theme data state.
   // This causes system_list() to call system_rebuild_theme_data() on its next
@@ -142,6 +298,53 @@ function system_register($type, $name, $uri) {
 }
 
 /**
+ * Determines which modules require and are required by each module.
+ *
+ * @param $files
+ *   The array of filesystem objects used to rebuild the cache.
+ *
+ * @return
+ *   The same array with the new keys for each module:
+ *   - requires: An array with the keys being the modules that this module
+ *     requires.
+ *   - required_by: An array with the keys being the modules that will not work
+ *     without this module.
+ */
+function _module_build_dependencies($files) {
+  foreach ($files as $filename => $file) {
+    $graph[$file->name]['edges'] = array();
+    if (isset($file->info['dependencies']) && is_array($file->info['dependencies'])) {
+      foreach ($file->info['dependencies'] as $dependency) {
+        $dependency_data = drupal_parse_dependency($dependency);
+        $graph[$file->name]['edges'][$dependency_data['name']] = $dependency_data;
+      }
+    }
+  }
+  $graph_object = new Graph($graph);
+  $graph = $graph_object->searchAndSort();
+  foreach ($graph as $module => $data) {
+    $files[$module]->required_by = isset($data['reverse_paths']) ? $data['reverse_paths'] : array();
+    $files[$module]->requires = isset($data['paths']) ? $data['paths'] : array();
+    $files[$module]->sort = $data['weight'];
+  }
+  return $files;
+}
+
+/**
+ * Determines whether a given module exists.
+ *
+ * @param $module
+ *   The name of the module (without the .module extension).
+ *
+ * @return
+ *   TRUE if the module is both installed and enabled.
+ */
+function module_exists($module) {
+  $list = module_list();
+  return isset($list[$module]);
+}
+
+/**
  * Loads a module's installation hooks.
  *
  * @param $module
@@ -183,11 +386,6 @@ function module_load_install($module) {
  *
  * @return
  *   The name of the included file, if successful; FALSE otherwise.
- *
- * @todo The module_handler service has a loadInclude() method which performs
- *   this same task but only for enabled modules. Figure out a way to move this
- *   functionality entirely into the module_handler while keeping the ability to
- *   load the files of disabled modules.
  */
 function module_load_include($type, $module, $name = NULL) {
   if (!isset($name)) {
@@ -204,6 +402,15 @@ function module_load_include($type, $module, $name = NULL) {
   return FALSE;
 }
 
+/**
+ * Loads an include file for each enabled module.
+ */
+function module_load_all_includes($type, $name = NULL) {
+  $modules = module_list();
+  foreach ($modules as $module) {
+    module_load_include($type, $module, $name);
+  }
+}
 
 /**
  * Enables or installs a given list of modules.
@@ -287,12 +494,9 @@ function module_enable($module_list, $enable_dependencies = TRUE) {
   $schema_store = drupal_container()->get('keyvalue')->get('system.schema');
   $module_config = config('system.module');
   $disabled_config = config('system.module.disabled');
-  $module_handler = drupal_container()->get('module_handler');
+  $module_filenames = drupal_container()->getParameter('container.modules');
   foreach ($module_list as $module) {
     // Only process modules that are not already enabled.
-    // A module is only enabled if it is configured as enabled. Custom or
-    // overridden module handlers might contain the module already, which means
-    // that it might be loaded, but not necessarily installed or enabled.
     $enabled = $module_config->get("enabled.$module") !== NULL;
     if (!$enabled) {
       $weight = $disabled_config->get($module);
@@ -306,59 +510,21 @@ function module_enable($module_list, $enable_dependencies = TRUE) {
       $disabled_config
         ->clear($module)
         ->save();
-
-      // Prepare the new module list, sorted by weight, including filenames.
-      // This list is used for both the ModuleHandler and DrupalKernel. It needs
-      // to be kept in sync between both. A DrupalKernel reboot or rebuild will
-      // automatically re-instantiate a new ModuleHandler that uses the new
-      // module list of the kernel. However, DrupalKernel does not cause any
-      // modules to be loaded.
-      // Furthermore, the currently active (fixed) module list can be different
-      // from the configured list of enabled modules. For all active modules not
-      // contained in the configured enabled modules, we assume a weight of 0.
-      $current_module_filenames = $module_handler->getModuleList();
-      $current_modules = array_fill_keys(array_keys($current_module_filenames), 0);
-      $current_modules = module_config_sort(array_merge($current_modules, $module_config->get('enabled')));
-      $module_filenames = array();
-      foreach ($current_modules as $name => $weight) {
-        if (isset($current_module_filenames[$name])) {
-          $filename = $current_module_filenames[$name];
-        }
-        else {
-          $filename = drupal_get_filename('module', $name);
-        }
-        $module_filenames[$name] = $filename;
-      }
-
-      // Update the module handler in order to load the module's code.
-      // This allows the module to participate in hooks and its existence to be
-      // discovered by other modules.
-      // The current ModuleHandler instance is obsolete with the kernel rebuild
-      // below.
-      $module_handler->setModuleList($module_filenames);
-      $module_handler->load($module);
+      // Load the module's code.
+      drupal_load('module', $module);
       module_load_install($module);
 
-      // Reset the the hook implementations cache.
-      $module_handler->resetImplementations();
-
-      // Flush theme info caches, since (testing) modules can implement
-      // hook_system_theme_info() to register additional themes.
+      // Refresh the module list to include it.
       system_list_reset();
-      // Refresh the list of modules that implement bootstrap hooks.
-      // @see bootstrap_hooks()
+      module_implements_reset();
       _system_update_bootstrap_status();
-
+      $module_filenames[$module] = drupal_get_filename('module', $module);
       // Update the kernel to include it.
-      // This reboots the kernel to register the module's bundle and its
-      // services in the service container. The $module_filenames argument is
-      // taken over as %container.modules% parameter, which is passed to a fresh
-      // ModuleHandler instance upon first retrieval.
-      // @todo install_begin_request() creates a container without a kernel.
+      // @todo The if statement is here because install_begin_request() creates
+      //   a container without a kernel. It probably shouldn't.
       if ($kernel = drupal_container()->get('kernel', ContainerInterface::NULL_ON_INVALID_REFERENCE)) {
-        $kernel->updateModules($module_filenames, $module_filenames);
+        $kernel->updateModules(module_list(), $module_filenames);
       }
-
       // Refresh the schema to include it.
       drupal_get_schema(NULL, TRUE);
       // Update the theme registry to include it.
@@ -466,58 +632,32 @@ function module_disable($module_list, $disable_dependents = TRUE) {
 
   $module_config = config('system.module');
   $disabled_config = config('system.module.disabled');
-  $module_handler = drupal_container()->get('module_handler');
   foreach ($module_list as $module) {
-    // Only process modules that are enabled.
-    // A module is only enabled if it is configured as enabled. Custom or
-    // overridden module handlers might contain the module already, which means
-    // that it might be loaded, but not necessarily installed or enabled.
-    $enabled = $module_config->get("enabled.$module") !== NULL;
-    if ($enabled) {
+    if (module_exists($module)) {
       module_load_install($module);
       module_invoke($module, 'disable');
-
       $disabled_config
         ->set($module, $module_config->get($module))
         ->save();
       $module_config
         ->clear("enabled.$module")
         ->save();
-
-      // Update the module handler to remove the module.
-      // The current ModuleHandler instance is obsolete with the kernel rebuild
-      // below.
-      $module_filenames = $module_handler->getModuleList();
-      unset($module_filenames[$module]);
-      $module_handler->setModuleList($module_filenames);
-
-      // Record the fact that it was disabled.
       $invoke_modules[] = $module;
       watchdog('system', '%module module disabled.', array('%module' => $module), WATCHDOG_INFO);
     }
   }
 
   if (!empty($invoke_modules)) {
-    // @todo Most of the following should happen in above loop already.
     // Refresh the module list to exclude the disabled modules.
-    $module_handler->resetImplementations();
-
-    // Refresh the system list to exclude the disabled modules.
-    // @todo Only needed to rebuild theme info.
-    // @see system_list_reset()
     system_list_reset();
-
+    module_implements_reset();
     entity_info_cache_clear();
-
     // Invoke hook_modules_disabled before disabling modules,
     // so we can still call module hooks to get information.
     module_invoke_all('modules_disabled', $invoke_modules);
     _system_update_bootstrap_status();
-
     // Update the kernel to exclude the disabled modules.
-    $enabled = $module_handler->getModuleList();
-    drupal_container()->get('kernel')->updateModules($enabled, $enabled);
-
+    drupal_container()->get('kernel')->updateModules(module_list());
     // Update the theme registry to remove the newly-disabled module.
     drupal_theme_rebuild();
   }
@@ -626,6 +766,200 @@ function module_uninstall($module_list = array(), $uninstall_dependents = TRUE)
  */
 
 /**
+ * Determines whether a module implements a hook.
+ *
+ * @param $module
+ *   The name of the module (without the .module extension).
+ * @param $hook
+ *   The name of the hook (e.g. "help" or "menu").
+ *
+ * @return
+ *   TRUE if the module is both installed and enabled, and the hook is
+ *   implemented in that module.
+ */
+function module_hook($module, $hook) {
+  $function = $module . '_' . $hook;
+  if (function_exists($function)) {
+    return TRUE;
+  }
+  // If the hook implementation does not exist, check whether it may live in an
+  // optional include file registered via hook_hook_info().
+  $hook_info = module_hook_info();
+  if (isset($hook_info[$hook]['group'])) {
+    module_load_include('inc', $module, $module . '.' . $hook_info[$hook]['group']);
+    if (function_exists($function)) {
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
+/**
+ * Determines which modules are implementing a hook.
+ *
+ * @param $hook
+ *   The name of the hook (e.g. "help" or "menu").
+ *
+ * @return
+ *   An array with the names of the modules which are implementing this hook.
+ *
+ * @see module_implements_write_cache()
+ */
+function module_implements($hook) {
+  // Use the advanced drupal_static() pattern, since this is called very often.
+  static $drupal_static_fast;
+  if (!isset($drupal_static_fast)) {
+    $drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
+  }
+  $implementations = &$drupal_static_fast['implementations'];
+
+  // Fetch implementations from cache.
+  if (empty($implementations)) {
+    $implementations = cache('bootstrap')->get('module_implements');
+    if ($implementations === FALSE) {
+      $implementations = array();
+    }
+    else {
+      $implementations = $implementations->data;
+    }
+  }
+
+  if (!isset($implementations[$hook])) {
+    // The hook is not cached, so ensure that whether or not it has
+    // implementations, that the cache is updated at the end of the request.
+    $implementations['#write_cache'] = TRUE;
+    $hook_info = module_hook_info();
+    $implementations[$hook] = array();
+    foreach (module_list() as $module) {
+      $include_file = isset($hook_info[$hook]['group']) && module_load_include('inc', $module, $module . '.' . $hook_info[$hook]['group']);
+      // Since module_hook() may needlessly try to load the include file again,
+      // function_exists() is used directly here.
+      if (function_exists($module . '_' . $hook)) {
+        $implementations[$hook][$module] = $include_file ? $hook_info[$hook]['group'] : FALSE;
+      }
+    }
+    // Allow modules to change the weight of specific implementations but avoid
+    // an infinite loop.
+    if ($hook != 'module_implements_alter') {
+      drupal_alter('module_implements', $implementations[$hook], $hook);
+    }
+  }
+  else {
+    foreach ($implementations[$hook] as $module => $group) {
+      // If this hook implementation is stored in a lazy-loaded file, so include
+      // that file first.
+      if ($group) {
+        module_load_include('inc', $module, "$module.$group");
+      }
+      // It is possible that a module removed a hook implementation without the
+      // implementations cache being rebuilt yet, so we check whether the
+      // function exists on each request to avoid undefined function errors.
+      // Since module_hook() may needlessly try to load the include file again,
+      // function_exists() is used directly here.
+      if (!function_exists($module . '_' . $hook)) {
+        // Clear out the stale implementation from the cache and force a cache
+        // refresh to forget about no longer existing hook implementations.
+        unset($implementations[$hook][$module]);
+        $implementations['#write_cache'] = TRUE;
+      }
+    }
+  }
+
+  return array_keys($implementations[$hook]);
+}
+
+/**
+ * Regenerates the stored list of hook implementations.
+ */
+function module_implements_reset() {
+  // We maintain a persistent cache of hook implementations in addition to the
+  // static cache to avoid looping through every module and every hook on each
+  // request. Benchmarks show that the benefit of this caching outweighs the
+  // additional database hit even when using the default database caching
+  // backend and only a small number of modules are enabled. The cost of the
+  // cache('bootstrap')->get() is more or less constant and reduced further when
+  // non-database caching backends are used, so there will be more significant
+  // gains when a large number of modules are installed or hooks invoked, since
+  // this can quickly lead to module_hook() being called several thousand times
+  // per request.
+  drupal_static_reset('module_implements');
+  cache('bootstrap')->set('module_implements', array());
+  drupal_static_reset('module_hook_info');
+  drupal_static_reset('drupal_alter');
+  cache('bootstrap')->delete('hook_info');
+}
+
+/**
+ * Retrieves a list of hooks that are declared through hook_hook_info().
+ *
+ * @return
+ *   An associative array whose keys are hook names and whose values are an
+ *   associative array containing a group name. The structure of the array
+ *   is the same as the return value of hook_hook_info().
+ *
+ * @see hook_hook_info()
+ */
+function module_hook_info() {
+  // When this function is indirectly invoked from bootstrap_invoke_all() prior
+  // to all modules being loaded, we do not want to cache an incomplete
+  // hook_hook_info() result, so instead return an empty array. This requires
+  // bootstrap hook implementations to reside in the .module file, which is
+  // optimal for performance anyway.
+  if (!module_load_all(NULL)) {
+    return array();
+  }
+  $hook_info = &drupal_static(__FUNCTION__);
+
+  if (!isset($hook_info)) {
+    $hook_info = array();
+    $cache = cache('bootstrap')->get('hook_info');
+    if ($cache === FALSE) {
+      // Rebuild the cache and save it.
+      // We can't use module_invoke_all() here or it would cause an infinite
+      // loop.
+      foreach (module_list() as $module) {
+        $function = $module . '_hook_info';
+        if (function_exists($function)) {
+          $result = $function();
+          if (isset($result) && is_array($result)) {
+            $hook_info = NestedArray::mergeDeep($hook_info, $result);
+          }
+        }
+      }
+      // We can't use drupal_alter() for the same reason as above.
+      foreach (module_list() as $module) {
+        $function = $module . '_hook_info_alter';
+        if (function_exists($function)) {
+          $function($hook_info);
+        }
+      }
+      cache('bootstrap')->set('hook_info', $hook_info);
+    }
+    else {
+      $hook_info = $cache->data;
+    }
+  }
+
+  return $hook_info;
+}
+
+/**
+ * Writes the hook implementation cache.
+ *
+ * @see module_implements()
+ */
+function module_implements_write_cache() {
+  $implementations = &drupal_static('module_implements');
+  // Check whether we need to write the cache. We do not want to cache hooks
+  // which are only invoked on HTTP POST requests since these do not need to be
+  // optimized as tightly, and not doing so keeps the cache entry smaller.
+  if (isset($implementations['#write_cache']) && ($_SERVER['REQUEST_METHOD'] == 'GET' || $_SERVER['REQUEST_METHOD'] == 'HEAD')) {
+    unset($implementations['#write_cache']);
+    cache('bootstrap')->set('module_implements', $implementations);
+  }
+}
+
+/**
  * Invokes a hook in a particular module.
  *
  * @param $module
@@ -648,6 +982,39 @@ function module_invoke($module, $hook) {
 }
 
 /**
+ * Invokes a hook in all enabled modules that implement it.
+ *
+ * @param $hook
+ *   The name of the hook to invoke.
+ * @param ...
+ *   Arguments to pass to the hook.
+ *
+ * @return
+ *   An array of return values of the hook implementations. If modules return
+ *   arrays from their implementations, those are merged into one array.
+ */
+function module_invoke_all($hook) {
+  $args = func_get_args();
+  // Remove $hook from the arguments.
+  unset($args[0]);
+  $return = array();
+  foreach (module_implements($hook) as $module) {
+    $function = $module . '_' . $hook;
+    if (function_exists($function)) {
+      $result = call_user_func_array($function, $args);
+      if (isset($result) && is_array($result)) {
+        $return = NestedArray::mergeDeep($return, $result);
+      }
+      elseif (isset($result)) {
+        $return[] = $result;
+      }
+    }
+  }
+
+  return $return;
+}
+
+/**
  * @} End of "defgroup hooks".
  */
 
@@ -672,6 +1039,172 @@ function drupal_required_modules() {
 }
 
 /**
+ * Passes alterable variables to specific hook_TYPE_alter() implementations.
+ *
+ * This dispatch function hands off the passed-in variables to type-specific
+ * hook_TYPE_alter() implementations in modules. It ensures a consistent
+ * interface for all altering operations.
+ *
+ * A maximum of 2 alterable arguments is supported. In case more arguments need
+ * to be passed and alterable, modules provide additional variables assigned by
+ * reference in the last $context argument:
+ * @code
+ *   $context = array(
+ *     'alterable' => &$alterable,
+ *     'unalterable' => $unalterable,
+ *     'foo' => 'bar',
+ *   );
+ *   drupal_alter('mymodule_data', $alterable1, $alterable2, $context);
+ * @endcode
+ *
+ * Note that objects are always passed by reference in PHP5. If it is absolutely
+ * required that no implementation alters a passed object in $context, then an
+ * object needs to be cloned:
+ * @code
+ *   $context = array(
+ *     'unalterable_object' => clone $object,
+ *   );
+ *   drupal_alter('mymodule_data', $data, $context);
+ * @endcode
+ *
+ * @param $type
+ *   A string describing the type of the alterable $data. 'form', 'links',
+ *   'node_content', and so on are several examples. Alternatively can be an
+ *   array, in which case hook_TYPE_alter() is invoked for each value in the
+ *   array, ordered first by module, and then for each module, in the order of
+ *   values in $type. For example, when Form API is using drupal_alter() to
+ *   execute both hook_form_alter() and hook_form_FORM_ID_alter()
+ *   implementations, it passes array('form', 'form_' . $form_id) for $type.
+ * @param $data
+ *   The variable that will be passed to hook_TYPE_alter() implementations to be
+ *   altered. The type of this variable depends on the value of the $type
+ *   argument. For example, when altering a 'form', $data will be a structured
+ *   array. When altering a 'profile', $data will be an object.
+ * @param $context1
+ *   (optional) An additional variable that is passed by reference.
+ * @param $context2
+ *   (optional) An additional variable that is passed by reference. If more
+ *   context needs to be provided to implementations, then this should be an
+ *   associative array as described above.
+ */
+function drupal_alter($type, &$data, &$context1 = NULL, &$context2 = NULL) {
+  // Use the advanced drupal_static() pattern, since this is called very often.
+  static $drupal_static_fast;
+  if (!isset($drupal_static_fast)) {
+    $drupal_static_fast['functions'] = &drupal_static(__FUNCTION__);
+  }
+  $functions = &$drupal_static_fast['functions'];
+
+  // Most of the time, $type is passed as a string, so for performance,
+  // normalize it to that. When passed as an array, usually the first item in
+  // the array is a generic type, and additional items in the array are more
+  // specific variants of it, as in the case of array('form', 'form_FORM_ID').
+  if (is_array($type)) {
+    $cid = implode(',', $type);
+    $extra_types = $type;
+    $type = array_shift($extra_types);
+    // Allow if statements in this function to use the faster isset() rather
+    // than !empty() both when $type is passed as a string, or as an array with
+    // one item.
+    if (empty($extra_types)) {
+      unset($extra_types);
+    }
+  }
+  else {
+    $cid = $type;
+  }
+
+  // Some alter hooks are invoked many times per page request, so statically
+  // cache the list of functions to call, and on subsequent calls, iterate
+  // through them quickly.
+  if (!isset($functions[$cid])) {
+    $functions[$cid] = array();
+    $hook = $type . '_alter';
+    $modules = module_implements($hook);
+    if (!isset($extra_types)) {
+      // For the more common case of a single hook, we do not need to call
+      // function_exists(), since module_implements() returns only modules with
+      // implementations.
+      foreach ($modules as $module) {
+        $functions[$cid][] = $module . '_' . $hook;
+      }
+    }
+    else {
+      // For multiple hooks, we need $modules to contain every module that
+      // implements at least one of them.
+      $extra_modules = array();
+      foreach ($extra_types as $extra_type) {
+        $extra_modules = array_merge($extra_modules, module_implements($extra_type . '_alter'));
+      }
+      // If any modules implement one of the extra hooks that do not implement
+      // the primary hook, we need to add them to the $modules array in their
+      // appropriate order. module_implements() can only return ordered
+      // implementations of a single hook. To get the ordered implementations
+      // of multiple hooks, we mimic the module_implements() logic of first
+      // ordering by module_list(), and then calling
+      // drupal_alter('module_implements').
+      if (array_diff($extra_modules, $modules)) {
+        // Merge the arrays and order by module_list().
+        $modules = array_intersect(module_list(), array_merge($modules, $extra_modules));
+        // Since module_implements() already took care of loading the necessary
+        // include files, we can safely pass FALSE for the array values.
+        $implementations = array_fill_keys($modules, FALSE);
+        // Let modules adjust the order solely based on the primary hook. This
+        // ensures the same module order regardless of whether this if block
+        // runs. Calling drupal_alter() recursively in this way does not result
+        // in an infinite loop, because this call is for a single $type, so we
+        // won't end up in this code block again.
+        drupal_alter('module_implements', $implementations, $hook);
+        $modules = array_keys($implementations);
+      }
+      foreach ($modules as $module) {
+        // Since $modules is a merged array, for any given module, we do not
+        // know whether it has any particular implementation, so we need a
+        // function_exists().
+        $function = $module . '_' . $hook;
+        if (function_exists($function)) {
+          $functions[$cid][] = $function;
+        }
+        foreach ($extra_types as $extra_type) {
+          $function = $module . '_' . $extra_type . '_alter';
+          if (function_exists($function)) {
+            $functions[$cid][] = $function;
+          }
+        }
+      }
+    }
+    // Allow the theme to alter variables after the theme system has been
+    // initialized.
+    global $theme, $base_theme_info;
+    if (isset($theme)) {
+      $theme_keys = array();
+      foreach ($base_theme_info as $base) {
+        $theme_keys[] = $base->name;
+      }
+      $theme_keys[] = $theme;
+      foreach ($theme_keys as $theme_key) {
+        $function = $theme_key . '_' . $hook;
+        if (function_exists($function)) {
+          $functions[$cid][] = $function;
+        }
+        if (isset($extra_types)) {
+          foreach ($extra_types as $extra_type) {
+            $function = $theme_key . '_' . $extra_type . '_alter';
+            if (function_exists($function)) {
+              $functions[$cid][] = $function;
+            }
+          }
+        }
+      }
+    }
+  }
+
+  foreach ($functions[$cid] as $function) {
+    $function($data, $context1, $context2);
+  }
+}
+
+/**
  * Sets weight of a particular module.
  *
  * The weight of uninstalled modules cannot be changed.
@@ -689,19 +1222,6 @@ function module_set_weight($module, $weight) {
       ->set("enabled.$module", $weight)
       ->set('enabled', module_config_sort($module_config->get('enabled')))
       ->save();
-
-    // Prepare the new module list, sorted by weight, including filenames.
-    // @see module_enable()
-    $module_handler = drupal_container()->get('module_handler');
-    $current_module_filenames = $module_handler->getModuleList();
-    $current_modules = array_fill_keys(array_keys($current_module_filenames), 0);
-    $current_modules = module_config_sort(array_merge($current_modules, $module_config->get('enabled')));
-    $module_filenames = array();
-    foreach ($current_modules as $name => $weight) {
-      $module_filenames[$name] = $current_module_filenames[$name];
-    }
-    // Update the module list in the extension handler.
-    $module_handler->setModuleList($module_filenames);
     return;
   }
   $disabled_config = config('system.module.disabled');
diff --git a/core/includes/schema.inc b/core/includes/schema.inc
index e599923..b370145 100644
--- a/core/includes/schema.inc
+++ b/core/includes/schema.inc
@@ -77,7 +77,16 @@ function drupal_get_complete_schema($rebuild = FALSE) {
     else {
       $schema = array();
       // Load the .install files to get hook_schema.
-      drupal_container()->get('module_handler')->loadAllIncludes('install');
+      // On some databases this function may be called before bootstrap has
+      // been completed, so we force the functions we need to load just in case.
+      if (function_exists('module_load_all_includes')) {
+        // This function can be called very early in the bootstrap process, so
+        // we force the system_list() static cache to be refreshed to ensure
+        // that it contains the complete list of modules before we go on to call
+        // module_load_all_includes().
+        system_list_reset();
+        module_load_all_includes('install');
+      }
 
       require_once DRUPAL_ROOT . '/core/includes/common.inc';
       // Invoke hook_schema for all modules.
@@ -121,7 +130,8 @@ function drupal_get_schema_versions($module) {
   $updates = &drupal_static(__FUNCTION__, NULL);
   if (!isset($updates[$module])) {
     $updates = array();
-    foreach (drupal_container()->get('module_handler')->getModuleList() as $loaded_module => $filename) {
+
+    foreach (module_list() as $loaded_module) {
       $updates[$loaded_module] = array();
     }
 
@@ -331,9 +341,7 @@ function _drupal_schema_initialize(&$schema, $module, $remove_descriptions = TRU
  *   An array of fields.
  */
 function drupal_schema_fields_sql($table, $prefix = NULL) {
-  if (!$schema = drupal_get_schema($table)) {
-    return array();
-  }
+  $schema = drupal_get_schema($table);
   $fields = array_keys($schema['fields']);
   if ($prefix) {
     $columns = array();
diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 5dd028b..bab2af5 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -368,14 +368,14 @@ function _theme_load_registry($theme, $base_theme = NULL, $theme_engine = NULL,
       $registry = _theme_build_registry($theme, $base_theme, $theme_engine);
       // Only persist this registry if all modules are loaded. This assures a
       // complete set of theme hooks.
-      if (drupal_container()->get('module_handler')->isLoaded()) {
+      if (module_load_all(NULL)) {
         _theme_save_registry($theme, $registry);
       }
     }
     return $registry;
   }
   else {
-    return new ThemeRegistry('theme_registry:runtime:' . $theme->name, 'cache', array('theme_registry' => TRUE), drupal_container()->get('module_handler')->isLoaded());
+    return new ThemeRegistry('theme_registry:runtime:' . $theme->name, 'cache', array('theme_registry' => TRUE));
   }
 }
 
@@ -441,6 +441,7 @@ function drupal_theme_rebuild() {
  *   themes/bartik.
  *
  * @see theme()
+ * @see _theme_process_registry()
  * @see hook_theme()
  * @see list_themes()
  */
@@ -547,7 +548,7 @@ function _theme_process_registry(&$cache, $name, $type, $theme, $path) {
             // Add all modules so they can intervene with their own variable
             // processors. This allows them to provide variable processors even
             // if they are not the owner of the current hook.
-            $prefixes = array_merge($prefixes, array_keys(drupal_container()->get('module_handler')->getModuleList()));
+            $prefixes += module_list();
           }
           elseif ($type == 'theme_engine' || $type == 'base_theme_engine') {
             // Theme engines get an extra set that come before the normally
@@ -643,7 +644,7 @@ function _theme_build_registry($theme, $base_theme, $theme_engine) {
       _theme_process_registry($cache, $module, 'module', $module, drupal_get_path('module', $module));
     }
     // Only cache this registry if all modules are loaded.
-    if (drupal_container()->get('module_handler')->isLoaded()) {
+    if (module_load_all(NULL)) {
       cache()->set("theme_registry:build:modules", $cache, CacheBackendInterface::CACHE_PERMANENT, array('theme_registry' => TRUE));
     }
   }
@@ -958,7 +959,7 @@ function theme($hook, $variables = array()) {
   // If called before all modules are loaded, we do not necessarily have a full
   // theme registry to work with, and therefore cannot process the theme
   // request properly. See also _theme_load_registry().
-  if (!drupal_container()->get('module_handler')->isLoaded() && !defined('MAINTENANCE_MODE')) {
+  if (!module_load_all(NULL) && !defined('MAINTENANCE_MODE')) {
     throw new Exception(t('theme() may not be called until all modules are loaded.'));
   }
 
diff --git a/core/includes/theme.maintenance.inc b/core/includes/theme.maintenance.inc
index 0b426e2..ba88661 100644
--- a/core/includes/theme.maintenance.inc
+++ b/core/includes/theme.maintenance.inc
@@ -55,10 +55,9 @@ function _drupal_maintenance_theme() {
 
   // Ensure that system.module is loaded.
   if (!function_exists('_system_rebuild_theme_data')) {
-    $module_list['system'] = 'core/modules/system/system.module';
-    $module_handler = drupal_container()->get('module_handler');
-    $module_handler->setModuleList($module_list);
-    $module_handler->load('system');
+    $module_list['system']['filename'] = 'core/modules/system/system.module';
+    module_list(NULL, $module_list);
+    drupal_load('module', 'system');
   }
 
   $themes = list_themes();
diff --git a/core/includes/update.inc b/core/includes/update.inc
index 508e01b..1a90660 100644
--- a/core/includes/update.inc
+++ b/core/includes/update.inc
@@ -11,7 +11,6 @@
 use Drupal\Component\Graph\Graph;
 use Drupal\Core\Config\FileStorage;
 use Drupal\Core\Config\ConfigException;
-use Drupal\Core\DrupalKernel;
 use Drupal\Component\Uuid\Uuid;
 use Drupal\Component\Utility\NestedArray;
 
@@ -94,19 +93,6 @@ function update_prepare_d8_bootstrap() {
   // Bootstrap to configuration.
   drupal_bootstrap(DRUPAL_BOOTSTRAP_CONFIGURATION);
 
-  // During the bootstrap to DRUPAL_BOOTSTRAP_PAGE_CACHE, code will try to read
-  // the cache but the cache tables are not compatible yet. Use the Null backend
-  // by default to avoid exceptions.
-  $GLOBALS['conf']['cache_classes'] = array('cache' => 'Drupal\Core\Cache\NullBackend');
-
-  // Enable UpdateBundle service overrides.
-  $GLOBALS['conf']['container_bundles'][] = 'Drupal\Core\DependencyInjection\UpdateBundle';
-
-  // Bootstrap the kernel.
-  // Do not attempt to dump and write it.
-  $kernel = new DrupalKernel('update', FALSE, drupal_classloader(), FALSE);
-  $kernel->boot();
-
   // Check whether settings.php needs to be rewritten.
   $settings_exist = !empty($GLOBALS['config_directories']);
 
@@ -139,9 +125,9 @@ function update_prepare_d8_bootstrap() {
 
     include_once DRUPAL_ROOT . '/core/includes/module.inc';
     include_once DRUPAL_ROOT . '/core/includes/cache.inc';
-    $module_handler = drupal_container()->get('module_handler');
-    $module_handler->setModuleList(array('system' => 'core/modules/system/system.module'));
-    $module_handler->load('system');
+    $module_list['system']['filename'] = 'core/modules/system/system.module';
+    module_list(NULL, $module_list);
+    require_once DRUPAL_ROOT . '/' . $module_list['system']['filename'];
     // Ensure the configuration directories exist and are writable, or create
     // them. If the directories have not been specified in settings.php and
     // created manually already, and either directory cannot be created by the
@@ -149,7 +135,10 @@ function update_prepare_d8_bootstrap() {
     drupal_install_config_directories();
   }
 
-  // Bootstrap the database.
+  // Bootstrap the database. During this, the DRUPAL_BOOTSTRAP_PAGE_CACHE will
+  // try to read the cache but the cache tables might not be Drupal 8
+  // compatible yet. Use the null backend by default to avoid exceptions.
+  $GLOBALS['conf']['cache_classes'] = array('cache' => 'Drupal\Core\Cache\NullBackend');
   drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
 
   // If the site has not updated to Drupal 8 yet, check to make sure that it is
@@ -364,8 +353,8 @@ function update_prepare_d8_bootstrap() {
 
       // Populate a fixed module list (again, why did it get lost?) to avoid
       // errors due to the drupal_alter() in _system_rebuild_module_data().
-      $module_list['system'] = 'core/modules/system/system.module';
-      drupal_container()->get('module_handler')->setModuleList($module_list);
+      $module_list['system']['filename'] = 'core/modules/system/system.module';
+      module_list(NULL, $module_list);
       $module_data = _system_rebuild_module_data();
 
       // Migrate each extension into configuration, varying by the extension's
@@ -389,13 +378,7 @@ function update_prepare_d8_bootstrap() {
         }
         $schema_store->set($record->name, $record->schema_version);
       }
-      $sorted_modules = module_config_sort($module_config->get('enabled'));
-      $module_config->set('enabled', $sorted_modules)->save();
-      $sorted_with_filenames = array();
-      foreach (array_keys($sorted_modules) as $m) {
-        $sorted_with_filenames[$m] = drupal_get_filename('module', $m);
-      }
-      drupal_container()->get('module_handler')->setModuleList($sorted_with_filenames);
+      $module_config->set('enabled', module_config_sort($module_config->get('enabled')))->save();
       $disabled_modules->save();
       $theme_config->save();
       $disabled_themes->save();
@@ -405,6 +388,8 @@ function update_prepare_d8_bootstrap() {
       update_prepare_stored_includes();
       // Update the environment for the language bootstrap if needed.
       update_prepare_d8_language();
+      // Prime the classloader.
+      system_list('module_enabled');
 
       // Change language column to langcode in url_alias.
       if (db_table_exists('url_alias') && db_field_exists('url_alias', 'language')) {
@@ -648,7 +633,6 @@ function update_module_enable(array $modules) {
     // installed module is always 0. Using 8000 here would be inconsistent
     // since $module_update_8000() may involve a schema change, and we want
     // to install the schema as it was before any updates were added.
-    module_load_install($module);
     $function = $module . '_schema_0';
     if (function_exists($function)) {
       $schema = $function();
diff --git a/core/lib/Drupal/Core/Ajax/AjaxResponse.php b/core/lib/Drupal/Core/Ajax/AjaxResponse.php
index 111c1ed..d87c4a6 100644
--- a/core/lib/Drupal/Core/Ajax/AjaxResponse.php
+++ b/core/lib/Drupal/Core/Ajax/AjaxResponse.php
@@ -9,6 +9,7 @@
 
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Request;
+use Drupal\Component\Utility\NestedArray;
 
 /**
  * JSON response object for AJAX requests.
@@ -133,8 +134,8 @@ protected function ajaxRender(Request $request) {
     // Prepend a command to merge changes and additions to Drupal.settings.
     $scripts = drupal_add_js();
     if (!empty($scripts['settings'])) {
-      $settings = drupal_merge_js_settings($scripts['settings']['data']);
-      $this->addCommand(new SettingsCommand($settings, TRUE));
+      $settings = $scripts['settings'];
+      $this->addCommand(new SettingsCommand(NestedArray::mergeDeepArray($settings['data']), TRUE), TRUE);
     }
 
     $commands = $this->commands;
diff --git a/core/lib/Drupal/Core/CacheDecorator/AliasManagerCacheDecorator.php b/core/lib/Drupal/Core/CacheDecorator/AliasManagerCacheDecorator.php
index 01264c2..ae5c8bc 100644
--- a/core/lib/Drupal/Core/CacheDecorator/AliasManagerCacheDecorator.php
+++ b/core/lib/Drupal/Core/CacheDecorator/AliasManagerCacheDecorator.php
@@ -26,11 +26,11 @@ class AliasManagerCacheDecorator implements CacheDecoratorInterface, AliasManage
   protected $cache;
 
   /**
-   * The cache key to use when caching system paths.
+   * Stack of request paths for use as cids when caching system paths.
    *
-   * @var string
+   * @var array
    */
-  protected $cacheKey;
+  protected $cacheKeys = array();
 
   /**
    * Holds an array of previously cached paths based on a request path.
@@ -58,7 +58,7 @@ public function __construct(AliasManagerInterface $alias_manager, CacheBackendIn
    * Implements \Drupal\Core\CacheDecorator\CacheDecoratorInterface::setCacheKey().
    */
   public function setCacheKey($key) {
-    $this->cacheKey = $key;
+    $this->cacheKeys[] = $key;
   }
 
   /**
@@ -73,11 +73,15 @@ public function writeCache() {
     $path_lookups = $this->getPathLookups();
     // Check if the system paths for this page were loaded from cache in this
     // request to avoid writing to cache on every request.
-    if ($this->cacheNeedsWriting && !empty($path_lookups) && !empty($this->cacheKey)) {
+    if ($this->cacheNeedsWriting && !empty($path_lookups) && !empty($this->cacheKeys)) {
+      // Use the system path of the current request for the cache ID (cid).
+      $cid = end($this->cacheKeys);
       // Set the path cache to expire in 24 hours.
       $expire = REQUEST_TIME + (60 * 60 * 24);
-      $this->cache->set($this->cacheKey, $path_lookups, $expire);
+      $this->cache->set($cid, $path_lookups, $expire);
     }
+    // We are at the end of the request, so pop off the last request path.
+    array_pop($this->cacheKeys);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
index 2dd7ace..b472b8f 100644
--- a/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
+++ b/core/lib/Drupal/Core/Config/Entity/ConfigStorageController.php
@@ -244,10 +244,6 @@ public function create(array $values) {
       $entity->{$this->uuidKey} = $uuid->generate();
     }
 
-    // Modules might need to add or change the data initially held by the new
-    // entity object, for instance to fill-in default values.
-    $this->invokeHook('create', $entity);
-
     return $entity;
   }
 
diff --git a/core/lib/Drupal/Core/CoreBundle.php b/core/lib/Drupal/Core/CoreBundle.php
index bc6afef..e9d6d2f 100644
--- a/core/lib/Drupal/Core/CoreBundle.php
+++ b/core/lib/Drupal/Core/CoreBundle.php
@@ -10,7 +10,7 @@
 use Drupal\Core\DependencyInjection\Compiler\RegisterKernelListenersPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterAccessChecksPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterMatchersPass;
-use Drupal\Core\DependencyInjection\Compiler\RegisterRouteFiltersPass;
+use Drupal\Core\DependencyInjection\Compiler\RegisterNestedMatchersPass;
 use Drupal\Core\DependencyInjection\Compiler\RegisterSerializationClassesPass;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
 use Symfony\Component\DependencyInjection\ContainerInterface;
@@ -77,12 +77,6 @@ public function build(ContainerBuilder $container) {
       ->setFactoryClass('Drupal\Component\Utility\Settings')
       ->setFactoryMethod('getSingleton');
 
-    // Register the State k/v store as a service.
-    $container->register('state', 'Drupal\Core\KeyValueStore\KeyValueStoreInterface')
-      ->setFactoryService(new Reference('keyvalue'))
-      ->setFactoryMethod('get')
-      ->addArgument('state');
-
     // Register the Queue factory.
     $container
       ->register('queue', 'Drupal\Core\Queue\QueueFactory')
@@ -120,20 +114,6 @@ public function build(ContainerBuilder $container) {
       ->addArgument(new Reference('service_container'));
     $container->register('controller_resolver', 'Drupal\Core\ControllerResolver')
       ->addArgument(new Reference('service_container'));
-
-    $container
-      ->register('cache.cache', 'Drupal\Core\Cache\CacheBackendInterface')
-      ->setFactoryClass('Drupal\Core\Cache\CacheFactory')
-      ->setFactoryMethod('get')
-      ->addArgument('cache');
-    $container
-      ->register('cache.bootstrap', 'Drupal\Core\Cache\CacheBackendInterface')
-      ->setFactoryClass('Drupal\Core\Cache\CacheFactory')
-      ->setFactoryMethod('get')
-      ->addArgument('bootstrap');
-
-    $this->registerModuleHandler($container);
-
     $container->register('http_kernel', 'Drupal\Core\HttpKernel')
       ->addArgument(new Reference('event_dispatcher'))
       ->addArgument(new Reference('service_container'))
@@ -153,7 +133,6 @@ public function build(ContainerBuilder $container) {
       ->addArgument(new Reference('lock'));
 
     $this->registerTwig($container);
-    $this->registerRouting($container);
 
     // Add the entity query factory.
     $container->register('entity.query', 'Drupal\Core\Entity\Query\QueryFactory')
@@ -164,8 +143,14 @@ public function build(ContainerBuilder $container) {
     $container->register('router.builder', 'Drupal\Core\Routing\RouteBuilder')
       ->addArgument(new Reference('router.dumper'))
       ->addArgument(new Reference('lock'))
-      ->addArgument(new Reference('event_dispatcher'))
-      ->addArgument(new Reference('module_handler'));
+      ->addArgument(new Reference('event_dispatcher'));
+
+
+    $container->register('matcher', 'Drupal\Core\Routing\ChainMatcher');
+    $container->register('legacy_url_matcher', 'Drupal\Core\LegacyUrlMatcher')
+      ->addTag('chained_matcher');
+    $container->register('nested_matcher', 'Drupal\Core\Routing\NestedMatcher')
+      ->addTag('chained_matcher', array('priority' => 5));
 
     $container
       ->register('cache.path', 'Drupal\Core\Cache\CacheBackendInterface')
@@ -190,15 +175,26 @@ public function build(ContainerBuilder $container) {
     $container->register('password', 'Drupal\Core\Password\PhpassHashedPassword')
       ->addArgument(16);
 
-    // The following services are tagged as 'route_filter' services and are
-    // processed in the RegisterRouteFiltersPass compiler pass.
+    // The following services are tagged as 'nested_matcher' services and are
+    // processed in the RegisterNestedMatchersPass compiler pass. Each one
+    // needs to be set on the matcher using a different method, so we use a
+    // tag attribute, 'method', which can be retrieved and passed to the
+    // addMethodCall() method that gets called on the matcher service in the
+    // compiler pass.
+    $container->register('path_matcher', 'Drupal\Core\Routing\PathMatcher')
+      ->addArgument(new Reference('database'))
+      ->addTag('nested_matcher', array('method' => 'setInitialMatcher'));
+    $container->register('http_method_matcher', 'Drupal\Core\Routing\HttpMethodMatcher')
+      ->addTag('nested_matcher', array('method' => 'addPartialMatcher'));
     $container->register('mime_type_matcher', 'Drupal\Core\Routing\MimeTypeMatcher')
-      ->addTag('route_filter');
+      ->addTag('nested_matcher', array('method' => 'addPartialMatcher'));
+    $container->register('first_entry_final_matcher', 'Drupal\Core\Routing\FirstEntryFinalMatcher')
+      ->addTag('nested_matcher', array('method' => 'setFinalMatcher'));
 
     $container->register('router_processor_subscriber', 'Drupal\Core\EventSubscriber\RouteProcessorSubscriber')
       ->addTag('event_subscriber');
     $container->register('router_listener', 'Symfony\Component\HttpKernel\EventListener\RouterListener')
-      ->addArgument(new Reference('router'))
+      ->addArgument(new Reference('matcher'))
       ->addTag('event_subscriber');
     $container->register('content_negotiation', 'Drupal\Core\ContentNegotiation');
     $container->register('view_subscriber', 'Drupal\Core\EventSubscriber\ViewSubscriber')
@@ -230,7 +226,6 @@ public function build(ContainerBuilder $container) {
       ->setScope('request')
       ->addTag('event_subscriber');
     $container->register('request_close_subscriber', 'Drupal\Core\EventSubscriber\RequestCloseSubscriber')
-      ->addArgument(new Reference('module_handler'))
       ->addTag('event_subscriber');
     $container->register('config_global_override_subscriber', 'Drupal\Core\EventSubscriber\ConfigGlobalOverrideSubscriber')
       ->addTag('event_subscriber');
@@ -254,15 +249,12 @@ public function build(ContainerBuilder $container) {
     $container->register('serializer.normalizer.list', 'Drupal\Core\Serialization\ListNormalizer')->addTag('normalizer');
     $container->register('serializer.normalizer.typed_data', 'Drupal\Core\Serialization\TypedDataNormalizer')->addTag('normalizer');
     $container->register('serializer.encoder.json', 'Drupal\Core\Serialization\JsonEncoder')->addTag('encoder');
-    $container->register('serializer.encoder.xml', 'Drupal\Core\Serialization\XmlEncoder')->addTag('encoder');
 
     $container->register('flood', 'Drupal\Core\Flood\DatabaseBackend')
       ->addArgument(new Reference('database'));
 
     $container->addCompilerPass(new RegisterMatchersPass());
-    $container->addCompilerPass(new RegisterRouteFiltersPass());
-    // Add a compiler pass for registering event subscribers.
-    $container->addCompilerPass(new RegisterKernelListenersPass(), PassConfig::TYPE_AFTER_REMOVING);
+    $container->addCompilerPass(new RegisterNestedMatchersPass());
     // Add a compiler pass for adding Normalizers and Encoders to Serializer.
     $container->addCompilerPass(new RegisterSerializationClassesPass());
     // Add a compiler pass for registering event subscribers.
@@ -271,61 +263,6 @@ public function build(ContainerBuilder $container) {
   }
 
   /**
-   * Registers the module handler.
-   */
-  protected function registerModuleHandler(ContainerBuilder $container) {
-    // The ModuleHandler manages enabled modules and provides the ability to
-    // invoke hooks in all enabled modules.
-    if ($container->getParameter('kernel.environment') == 'install') {
-      // During installation we use the non-cached version.
-      $container->register('module_handler', 'Drupal\Core\Extension\ModuleHandler')
-        ->addArgument('%container.modules%');
-    }
-    else {
-      $container->register('module_handler', 'Drupal\Core\Extension\CachedModuleHandler')
-        ->addArgument('%container.modules%')
-        ->addArgument(new Reference('state'))
-        ->addArgument(new Reference('cache.bootstrap'));
-    }
-  }
-
-  /**
-   * Registers the various services for the routing system.
-   *
-   * @param \Symfony\Component\DependencyInjection\ContainerBuilder $container
-   */
-  protected function registerRouting(ContainerBuilder $container) {
-    $container->register('router.request_context', 'Symfony\Component\Routing\RequestContext')
-      ->addMethodCall('fromRequest', array(new Reference('request')));
-
-    $container->register('router.route_provider', 'Drupal\Core\Routing\RouteProvider')
-      ->addArgument(new Reference('database'));
-    $container->register('router.matcher.final_matcher', 'Drupal\Core\Routing\UrlMatcher');
-    $container->register('router.matcher', 'Symfony\Cmf\Component\Routing\NestedMatcher\NestedMatcher')
-      ->addArgument(new Reference('router.route_provider'))
-      ->addMethodCall('setFinalMatcher', array(new Reference('router.matcher.final_matcher')));
-    $container->register('router.generator', 'Drupal\Core\Routing\UrlGenerator')
-      ->addArgument(new Reference('router.route_provider'))
-      ->addArgument(new Reference('path.alias_manager.cached'));
-    $container->register('router.dynamic', 'Symfony\Cmf\Component\Routing\DynamicRouter')
-      ->addArgument(new Reference('router.request_context'))
-      ->addArgument(new Reference('router.matcher'))
-      ->addArgument(new Reference('router.generator'));
-
-    $container->register('legacy_generator', 'Drupal\Core\Routing\NullGenerator');
-    $container->register('legacy_url_matcher', 'Drupal\Core\LegacyUrlMatcher');
-    $container->register('legacy_router', 'Symfony\Cmf\Component\Routing\DynamicRouter')
-            ->addArgument(new Reference('router.request_context'))
-            ->addArgument(new Reference('legacy_url_matcher'))
-            ->addArgument(new Reference('legacy_generator'));
-
-    $container->register('router', 'Symfony\Cmf\Component\Routing\ChainRouter')
-      ->addMethodCall('setContext', array(new Reference('router.request_context')))
-      ->addMethodCall('add', array(new Reference('router.dynamic')))
-      ->addMethodCall('add', array(new Reference('legacy_router')));
-  }
-
-  /**
    * Registers Twig services.
    */
   protected function registerTwig(ContainerBuilder $container) {
diff --git a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterRouteFiltersPass.php b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterNestedMatchersPass.php
similarity index 65%
rename from core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterRouteFiltersPass.php
rename to core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterNestedMatchersPass.php
index de9d222..b245952 100644
--- a/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterRouteFiltersPass.php
+++ b/core/lib/Drupal/Core/DependencyInjection/Compiler/RegisterNestedMatchersPass.php
@@ -14,7 +14,7 @@
 /**
  * Adds services tagged 'nested_matcher' to the tagged_matcher service.
  */
-class RegisterRouteFiltersPass implements CompilerPassInterface {
+class RegisterNestedMatchersPass implements CompilerPassInterface {
 
   /**
    * Adds services tagged 'nested_matcher' to the tagged_matcher service.
@@ -23,12 +23,13 @@ class RegisterRouteFiltersPass implements CompilerPassInterface {
    *   The container to process.
    */
   public function process(ContainerBuilder $container) {
-    if (!$container->hasDefinition('router.matcher')) {
+    if (!$container->hasDefinition('nested_matcher')) {
       return;
     }
-    $nested = $container->getDefinition('router.matcher');
-    foreach ($container->findTaggedServiceIds('route_filter') as $id => $attributes) {
-      $nested->addMethodCall('addRouteFilter', array(new Reference($id)));
+    $nested = $container->getDefinition('nested_matcher');
+    foreach ($container->findTaggedServiceIds('nested_matcher') as $id => $attributes) {
+      $method = $attributes[0]['method'];
+      $nested->addMethodCall($method, array(new Reference($id)));
     }
   }
 }
diff --git a/core/lib/Drupal/Core/DependencyInjection/UpdateBundle.php b/core/lib/Drupal/Core/DependencyInjection/UpdateBundle.php
deleted file mode 100644
index 539affd..0000000
--- a/core/lib/Drupal/Core/DependencyInjection/UpdateBundle.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\DependencyInjection\UpdateBundle.
- */
-
-namespace Drupal\Core\DependencyInjection;
-
-use Symfony\Component\DependencyInjection\ContainerBuilder;
-use Symfony\Component\HttpKernel\Bundle\Bundle;
-
-/**
- * Bundle class for update.php service overrides.
- *
- * This bundle is manually added by update.php via $conf['container_bundles']
- * and required to prevent various services from trying to retrieve data from
- * storages that do not exist yet.
- */
-class UpdateBundle extends Bundle {
-
-  /**
-   * Implements \Symfony\Component\HttpKernel\Bundle\BundleInterface::build().
-   */
-  public function build(ContainerBuilder $container) {
-    // Disable the Lock service.
-    $container
-      ->register('lock', 'Drupal\Core\Lock\NullLockBackend');
-
-    // Prevent config from accessing {cache_config}.
-    // @see $conf['cache_classes'], update_prepare_d8_bootstrap()
-    $container
-      ->register('config.storage', 'Drupal\Core\Config\FileStorage')
-      ->addArgument(config_get_config_directory(CONFIG_ACTIVE_DIRECTORY));
-  }
-
-}
diff --git a/core/lib/Drupal/Core/DrupalKernel.php b/core/lib/Drupal/Core/DrupalKernel.php
index d56f503..112198c 100644
--- a/core/lib/Drupal/Core/DrupalKernel.php
+++ b/core/lib/Drupal/Core/DrupalKernel.php
@@ -150,6 +150,39 @@ public function boot() {
   }
 
   /**
+   * Overrides Kernel::getRootDir().
+   *
+   * It sets the value to the same as DRUPAL_ROOT.
+   */
+  public function getRootDir() {
+    return DRUPAL_ROOT;
+  }
+
+  /**
+   * Overrides Kernel::getCacheDir().
+   *
+   * It sets a sensible default cache directory for Drupal.
+   */
+  public function getCacheDir() {
+    if (!is_dir($dir = variable_get('file_public_path', conf_path() . '/files') . '/cache/' . $this->environment)) {
+      mkdir($dir, 0700, TRUE);
+    }
+    return $dir;
+  }
+
+  /**
+   * Overrides Kernel::getLogDir().
+   *
+   * It sets a sensible default log directory for Drupal.
+   */
+  public function getLogDir() {
+    if (!is_dir($dir = variable_get('file_public_path', conf_path() . '/files') . '/logs/' . $this->environment)) {
+      mkdir($dir, 0700, TRUE);
+    }
+    return $dir;
+  }
+
+  /**
    * Returns an array of available bundles.
    *
    * @return array
@@ -223,9 +256,6 @@ protected function moduleData($module) {
 
   /**
    * Implements Drupal\Core\DrupalKernelInterface::updateModules().
-   *
-   * @todo Remove obsolete $module_list parameter. Only $module_filenames is
-   *   needed.
    */
   public function updateModules(array $module_list, array $module_filenames = array()) {
     $this->newModuleList = $module_list;
diff --git a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
index 2f75cdb..3ccc88d 100644
--- a/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
+++ b/core/lib/Drupal/Core/Entity/DatabaseStorageControllerNG.php
@@ -104,11 +104,6 @@ public function create(array $values) {
       $uuid = new Uuid();
       $entity->{$this->uuidKey}->value = $uuid->generate();
     }
-
-    // Modules might need to add or change the data initially held by the new
-    // entity object, for instance to fill-in default values.
-    $this->invokeHook('create', $entity);
-
     return $entity;
   }
 
diff --git a/core/lib/Drupal/Core/Entity/Entity.php b/core/lib/Drupal/Core/Entity/Entity.php
index 9389085..5660a4d 100644
--- a/core/lib/Drupal/Core/Entity/Entity.php
+++ b/core/lib/Drupal/Core/Entity/Entity.php
@@ -154,9 +154,8 @@ public function uri() {
     // A bundle-specific callback takes precedence over the generic one for the
     // entity type.
     $entity_info = $this->entityInfo();
-    $bundles = entity_get_bundles($this->entityType);
-    if (isset($bundles[$bundle]['uri_callback'])) {
-      $uri_callback = $bundles[$bundle]['uri_callback'];
+    if (isset($entity_info['bundles'][$bundle]['uri_callback'])) {
+      $uri_callback = $entity_info['bundles'][$bundle]['uri_callback'];
     }
     elseif (isset($entity_info['uri_callback'])) {
       $uri_callback = $entity_info['uri_callback'];
@@ -255,9 +254,7 @@ public function getIterator() {
    */
   public function access($operation = 'view', \Drupal\user\Plugin\Core\Entity\User $account = NULL) {
     $method = $operation . 'Access';
-    return drupal_container()->get('plugin.manager.entity')
-      ->getAccessController($this->entityType)
-      ->$method($this, LANGUAGE_DEFAULT, $account);
+    return entity_access_controller($this->entityType)->$method($this, LANGUAGE_DEFAULT, $account);
   }
 
   /**
@@ -328,7 +325,7 @@ public function getTranslationLanguages($include_default = TRUE) {
    * Implements EntityInterface::save().
    */
   public function save() {
-    return drupal_container()->get('plugin.manager.entity')->getStorageController($this->entityType)->save($this);
+    return entity_get_controller($this->entityType)->save($this);
   }
 
   /**
@@ -336,7 +333,7 @@ public function save() {
    */
   public function delete() {
     if (!$this->isNew()) {
-      drupal_container()->get('plugin.manager.entity')->getStorageController($this->entityType)->delete(array($this->id() => $this));
+      entity_get_controller($this->entityType)->delete(array($this->id() => $this));
     }
   }
 
diff --git a/core/lib/Drupal/Core/Entity/EntityManager.php b/core/lib/Drupal/Core/Entity/EntityManager.php
index c760707..affdd80 100644
--- a/core/lib/Drupal/Core/Entity/EntityManager.php
+++ b/core/lib/Drupal/Core/Entity/EntityManager.php
@@ -109,6 +109,49 @@
  *   Elements:
  *   - bundle: The name of the property that contains the name of the bundle
  *     object.
+ * - bundles: An array describing all bundles for this object type. Keys are
+ *   bundle machine names, as found in the objects' 'bundle' property
+ *   (defined in the 'entity_keys' entry for the entity type in the
+ *   EntityManager). Elements:
+ *   - label: The human-readable name of the bundle.
+ *   - uri_callback: The same as the 'uri_callback' key defined for the entity
+ *     type in the EntityManager, but for the bundle only. When determining
+ *     the URI of an entity, if a 'uri_callback' is defined for both the
+ *     entity type and the bundle, the one for the bundle is used.
+ *   - admin: An array of information that allows Field UI pages to attach
+ *     themselves to the existing administration pages for the bundle.
+ *     Elements:
+ *     - path: the path of the bundle's main administration page, as defined
+ *       in hook_menu(). If the path includes a placeholder for the bundle,
+ *       the 'bundle argument', 'bundle helper' and 'real path' keys below
+ *       are required.
+ *     - bundle argument: The position of the placeholder in 'path', if any.
+ *     - real path: The actual path (no placeholder) of the bundle's main
+ *       administration page. This will be used to generate links.
+ *     - access callback: As in hook_menu(). 'user_access' will be assumed if
+ *       no value is provided.
+ *     - access arguments: As in hook_menu().
+ * - view_modes: An array describing the view modes for the entity type. View
+ *   modes let entities be displayed differently depending on the context.
+ *   For instance, a node can be displayed differently on its own page
+ *   ('full' mode), on the home page or taxonomy listings ('teaser' mode), or
+ *   in an RSS feed ('rss' mode). Modules taking part in the display of the
+ *   entity (notably the Field API) can adjust their behavior depending on
+ *   the requested view mode. An additional 'default' view mode is available
+ *   for all entity types. This view mode is not intended for actual entity
+ *   display, but holds default display settings. For each available view
+ *   mode, administrators can configure whether it should use its own set of
+ *   field display settings, or just replicate the settings of the 'default'
+ *   view mode, thus reducing the amount of display configurations to keep
+ *   track of. Keys of the array are view mode names. Each view mode is
+ *   described by an array with the following key/value pairs:
+ *   - label: The human-readable name of the view mode.
+ *   - custom_settings: A boolean specifying whether the view mode should by
+ *     default use its own custom field display settings. If FALSE, entities
+ *     displayed in this view mode will reuse the 'default' display settings
+ *     by default (e.g. right after the module exposing the view mode is
+ *     enabled), but administrators can later use the Field UI to apply custom
+ *     display settings specific to the view mode.
  * - menu_base_path: (optional) The base menu router path to which the entity
  *   administration user interface responds. It can be used to generate UI
  *   links and to attach additional router items to the entity UI in a generic
@@ -158,13 +201,6 @@ class EntityManager extends PluginManagerBase {
   protected $cacheTags = array('entity_info' => TRUE);
 
   /**
-   * Contains instantiated controllers keyed by controller type and entity type.
-   *
-   * @var array
-   */
-  protected $controllers = array();
-
-  /**
    * The default values for optional keys of the entity plugin definition.
    *
    * @var array
@@ -186,6 +222,8 @@ class EntityManager extends PluginManagerBase {
     'access_controller_class' => 'Drupal\Core\Entity\EntityAccessController',
     'static_cache' => TRUE,
     'translation' => array(),
+    'bundles' => array(),
+    'view_modes' => array(),
   );
 
   /**
@@ -241,6 +279,17 @@ public function processDefinition(&$definition, $plugin_id) {
       return;
     }
 
+    foreach ($definition['view_modes'] as $view_mode => $view_mode_info) {
+      $definition['view_modes'][$view_mode] += array(
+        'custom_settings' => FALSE,
+      );
+    }
+
+    // If no bundle key is provided, assume a single bundle, named after
+    // the entity type.
+    if (empty($definition['entity_keys']['bundle']) && empty($definition['bundles'])) {
+      $definition['bundles'] = array($plugin_id => array('label' => $definition['label']));
+    }
     // Prepare entity schema fields SQL info for
     // Drupal\Core\Entity\DatabaseStorageControllerInterface::buildQuery().
     if (isset($definition['base_table'])) {
@@ -254,129 +303,4 @@ public function processDefinition(&$definition, $plugin_id) {
     }
   }
 
-  /**
-   * Returns an entity controller class.
-   *
-   * @param string $entity_type
-   *   The name of the entity type
-   * @param string $controller_type
-   *   The name of the controller.
-   * @param string|null $nested
-   *   (optional) If this controller definition is nested, the name of the key.
-   *   Defaults to NULL.
-   *
-   * @return string
-   *   The class name for this controller instance.
-   */
-  public function getControllerClass($entity_type, $controller_type, $nested = NULL) {
-    $definition = $this->getDefinition($entity_type);
-    if (empty($definition[$controller_type])) {
-      throw new \InvalidArgumentException(sprintf('The entity (%s) did not specify a %s.', $entity_type, $controller_type));
-    }
-
-    $class = $definition[$controller_type];
-
-    // Some class definitions can be nested.
-    if (isset($nested)) {
-      if (empty($class[$nested])) {
-        throw new \InvalidArgumentException(sprintf("Missing '%s: %s' for entity '%s'", $controller_type, $nested, $entity_type));
-      }
-
-      $class = $class[$nested];
-    }
-
-    if (!class_exists($class)) {
-      throw new \InvalidArgumentException(sprintf('Entity (%s) %s "%s" does not exist.', $entity_type, $controller_type, $class));
-    }
-
-    return $class;
-  }
-
-  /**
-   * Creates a new storage controller instance.
-   *
-   * @param string $entity_type
-   *   The entity type for this storage controller.
-   *
-   * @return \Drupal\Core\Entity\EntityStorageControllerInterface
-   *   A storage controller instance.
-   */
-  public function getStorageController($entity_type) {
-    if (!isset($this->controllers['storage'][$entity_type])) {
-      $class = $this->getControllerClass($entity_type, 'controller_class');
-      $this->controllers['storage'][$entity_type] = new $class($entity_type);
-    }
-    return $this->controllers['storage'][$entity_type];
-  }
-
-  /**
-   * Creates a new list controller instance.
-   *
-   * @param string $entity_type
-   *   The entity type for this list controller.
-   *
-   * @return \Drupal\Core\Entity\EntityListControllerInterface
-   *   A list controller instance.
-   */
-  public function getListController($entity_type) {
-    if (!isset($this->controllers['listing'][$entity_type])) {
-      $class = $this->getControllerClass($entity_type, 'list_controller_class');
-      $this->controllers['listing'][$entity_type] = new $class($entity_type, $this->getStorageController($entity_type));
-    }
-    return $this->controllers['listing'][$entity_type];
-  }
-
-  /**
-   * Creates a new form controller instance.
-   *
-   * @param string $entity_type
-   *   The entity type for this form controller.
-   * @param string $operation
-   *   The name of the operation to use, e.g., 'default'.
-   *
-   * @return \Drupal\Core\Entity\EntityFormControllerInterface
-   *   A form controller instance.
-   */
-  public function getFormController($entity_type, $operation) {
-    if (!isset($this->controllers['form'][$operation][$entity_type])) {
-      $class = $this->getControllerClass($entity_type, 'form_controller_class', $operation);
-      $this->controllers['form'][$operation][$entity_type] = new $class($operation);
-    }
-    return $this->controllers['form'][$operation][$entity_type];
-  }
-
-  /**
-   * Creates a new render controller instance.
-   *
-   * @param string $entity_type
-   *   The entity type for this render controller.
-   *
-   * @return \Drupal\Core\Entity\EntityRenderControllerInterface.
-   *   A render controller instance.
-   */
-  public function getRenderController($entity_type) {
-    if (!isset($this->controllers['render'][$entity_type])) {
-      $class = $this->getControllerClass($entity_type, 'render_controller_class');
-      $this->controllers['render'][$entity_type] = new $class($entity_type);
-    }
-    return $this->controllers['render'][$entity_type];
-  }
-
-  /**
-   * Creates a new access controller instance.
-   *
-   * @param string $entity_type
-   *   The entity type for this access controller.
-   *
-   * @return \Drupal\Core\Entity\EntityRenderControllerInterface.
-   *   A access controller instance.
-   */
-  public function getAccessController($entity_type) {
-    if (!isset($this->controllers['access'][$entity_type])) {
-      $class = $this->getControllerClass($entity_type, 'access_controller_class');
-      $this->controllers['access'][$entity_type] = new $class($entity_type);
-    }
-    return $this->controllers['access'][$entity_type];
-  }
-
 }
diff --git a/core/lib/Drupal/Core/Entity/EntityNG.php b/core/lib/Drupal/Core/Entity/EntityNG.php
index ef133e1..99a29ca 100644
--- a/core/lib/Drupal/Core/Entity/EntityNG.php
+++ b/core/lib/Drupal/Core/Entity/EntityNG.php
@@ -216,7 +216,7 @@ public function getPropertyDefinition($name) {
    */
   public function getPropertyDefinitions() {
     if (!isset($this->fieldDefinitions)) {
-      $this->fieldDefinitions = drupal_container()->get('plugin.manager.entity')->getStorageController($this->entityType)->getFieldDefinitions(array(
+      $this->fieldDefinitions = entity_get_controller($this->entityType)->getFieldDefinitions(array(
         'entity type' => $this->entityType,
         'bundle' => $this->bundle,
       ));
diff --git a/core/lib/Drupal/Core/Entity/Field/Type/EntityTranslation.php b/core/lib/Drupal/Core/Entity/Field/Type/EntityTranslation.php
index 89616e9..b4fe089 100644
--- a/core/lib/Drupal/Core/Entity/Field/Type/EntityTranslation.php
+++ b/core/lib/Drupal/Core/Entity/Field/Type/EntityTranslation.php
@@ -195,10 +195,8 @@ public function access($operation = 'view', \Drupal\user\Plugin\Core\Entity\User
     $method = $operation . 'Access';
     // @todo Add a way to set and get the langcode so that's more obvious what
     // we're doing here.
-    $langcode = substr($this->getName(), 1);
-    return drupal_container()->get('plugin.manager.entity')
-      ->getAccessController($this->parent->entityType())
-      ->$method($this->parent, $langcode, $account);
+    $langocde = substr($this->getName(), 1);
+    return entity_access_controller($this->parent->entityType())->$method($this->parent, $langocde, $account);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/Field/Type/EntityWrapper.php b/core/lib/Drupal/Core/Entity/Field/Type/EntityWrapper.php
index 0410dff..ffc9fd1 100644
--- a/core/lib/Drupal/Core/Entity/Field/Type/EntityWrapper.php
+++ b/core/lib/Drupal/Core/Entity/Field/Type/EntityWrapper.php
@@ -90,7 +90,7 @@ public function setValue($value) {
       $value = $value->id();
     }
     elseif (isset($value) && !(is_scalar($value) && !empty($this->definition['constraints']['entity type']))) {
-      throw new InvalidArgumentException('Value is not a valid entity.');
+      throw new InvalidArgumentException('Value is no valid entity.');
     }
 
     $source = $this->getIdSource();
@@ -174,7 +174,7 @@ public function getPropertyDefinition($name) {
    */
   public function getPropertyDefinitions() {
     // @todo: Support getting definitions if multiple bundles are specified.
-    return drupal_container()->get('plugin.manager.entity')->getStorageController($this->entityType)->getFieldDefinitions($this->definition['constraints']);
+    return entity_get_controller($this->entityType)->getFieldDefinitions($this->definition['constraints']);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Entity/Query/QueryFactory.php b/core/lib/Drupal/Core/Entity/Query/QueryFactory.php
index d9b57bc..9957892 100644
--- a/core/lib/Drupal/Core/Entity/Query/QueryFactory.php
+++ b/core/lib/Drupal/Core/Entity/Query/QueryFactory.php
@@ -33,7 +33,7 @@ function __construct(ContainerInterface $container) {
    * @return QueryInterface
    */
   public function get($entity_type, $conjunction = 'AND') {
-    $service_name = drupal_container()->get('plugin.manager.entity')->getStorageController($entity_type)->getQueryServicename();
+    $service_name = entity_get_controller($entity_type)->getQueryServicename();
     return $this->container->get($service_name)->get($entity_type, $conjunction);
   }
 
diff --git a/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php
index 420780a..4cfd0b6 100644
--- a/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/AccessSubscriber.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\Core\EventSubscriber;
 
-use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -39,13 +38,13 @@ public function __construct(AccessManager $access_manager) {
    */
   public function onKernelRequestAccessCheck(GetResponseEvent $event) {
     $request = $event->getRequest();
-    if (!$request->attributes->has(RouteObjectInterface::ROUTE_OBJECT)) {
+    if (!$request->attributes->has('_route')) {
       // If no Route is available it is likely a static resource and access is
       // handled elsewhere.
       return;
     }
 
-    $this->accessManager->check($request->attributes->get(RouteObjectInterface::ROUTE_OBJECT));
+    $this->accessManager->check($request->attributes->get('_route'));
   }
 
   /**
diff --git a/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php
index be0e779..8f0359d 100644
--- a/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/PathSubscriber.php
@@ -8,7 +8,6 @@
 namespace Drupal\Core\EventSubscriber;
 
 use Drupal\Core\CacheDecorator\AliasManagerCacheDecorator;
-use Symfony\Component\HttpKernel\HttpKernelInterface;
 use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\Event\GetResponseEvent;
 use Symfony\Component\HttpKernel\Event\PostResponseEvent;
@@ -36,11 +35,7 @@ public function onKernelRequestPathResolve(GetResponseEvent $event) {
     $path = $this->extractPath($request);
     $path = $this->aliasManager->getSystemPath($path);
     $this->setPath($request, $path);
-    // If this is the master request, set the cache key for the caching of all
-    // system paths looked up during the request.
-    if ($event->getRequestType() == HttpKernelInterface::MASTER_REQUEST) {
-      $this->aliasManager->setCacheKey($path);
-    }
+    $this->aliasManager->setCacheKey($path);
   }
 
   /**
diff --git a/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php b/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php
index eb295bd..8d5f87a 100644
--- a/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php
+++ b/core/lib/Drupal/Core/EventSubscriber/RequestCloseSubscriber.php
@@ -7,8 +7,6 @@
 
 namespace Drupal\Core\EventSubscriber;
 
-use Drupal\Core\Extension\ModuleHandlerInterface;
-use Drupal\Core\Extension\CachedModuleHandlerInterface;
 use Symfony\Component\HttpKernel\KernelEvents;
 use Symfony\Component\HttpKernel\Event\PostResponseEvent;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
@@ -19,18 +17,6 @@
 class RequestCloseSubscriber implements EventSubscriberInterface {
 
   /**
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
-   * Constructor.
-   */
-  function __construct(ModuleHandlerInterface $module_handler) {
-    $this->moduleHandler = $module_handler;
-  }
-
-  /**
    * Performs end of request tasks.
    *
    * @todo The body of this function has just been copied almost verbatim from
@@ -42,15 +28,8 @@ function __construct(ModuleHandlerInterface $module_handler) {
    *   The Event to process.
    */
   public function onTerminate(PostResponseEvent $event) {
-    $this->moduleHandler->invokeAll('exit');
-    $request_method = $event->getRequest()->getMethod();
-    // Check whether we need to write the module implementations cache. We do
-    // not want to cache hooks which are only invoked on HTTP POST requests
-    // since these do not need to be optimized as tightly, and not doing so
-    // keeps the cache entry smaller.
-    if (($request_method == 'GET' || $request_method == 'HEAD') && $this->moduleHandler instanceof CachedModuleHandlerInterface) {
-      $this->moduleHandler->writeCache();
-    }
+    module_invoke_all('exit');
+    module_implements_write_cache();
     system_run_automated_cron();
   }
 
diff --git a/core/lib/Drupal/Core/Extension/CachedModuleHandler.php b/core/lib/Drupal/Core/Extension/CachedModuleHandler.php
deleted file mode 100644
index a3f3eac..0000000
--- a/core/lib/Drupal/Core/Extension/CachedModuleHandler.php
+++ /dev/null
@@ -1,167 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\Core\Extension\CachedModuleHandler.
- */
-
-namespace Drupal\Core\Extension;
-
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
-
-/**
- * Class that manages enabled modules in a Drupal installation.
- */
-class CachedModuleHandler extends ModuleHandler implements CachedModuleHandlerInterface {
-
-  /**
-   * State key/value store.
-   *
-   * @var \Drupal\Core\KeyValueStore\KeyValueStoreInterface
-   */
-  protected $state;
-
-  /**
-   * Cache backend for storing enabled modules.
-   *
-   * @var \Drupal\Core\Cache\CacheBackendInterface
-   */
-  protected $bootstrapCache;
-
-  /**
-   * Whether the cache needs to be written.
-   *
-   * @var boolean
-   */
-  protected $cacheNeedsWriting = FALSE;
-
-  /**
-   * Constructs a new CachedModuleHandler object.
-   */
-  public function __construct(array $module_list = array(), KeyValueStoreInterface $state, CacheBackendInterface $bootstrap_cache) {
-    parent::__construct($module_list);
-    $this->state = $state;
-    $this->bootstrapCache = $bootstrap_cache;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::getBootstrapModules().
-   */
-  public function getBootstrapModules() {
-    if (isset($this->bootstrapModules)) {
-      return $this->bootstrapModules;
-    }
-    if ($cached = $this->bootstrapCache->get('bootstrap_modules')) {
-      $bootstrap_list = $cached->data;
-    }
-    else {
-      $bootstrap_list = $this->state->get('system.module.bootstrap') ?: array();
-      $this->bootstrapCache->set('bootstrap_modules', $bootstrap_list);
-    }
-    $this->bootstrapModules = array_keys($bootstrap_list);
-    return $this->bootstrapModules;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::resetImplementations().
-   */
-  public function resetImplementations() {
-    // We maintain a persistent cache of hook implementations in addition to the
-    // static cache to avoid looping through every module and every hook on each
-    // request. Benchmarks show that the benefit of this caching outweighs the
-    // additional database hit even when using the default database caching
-    // backend and only a small number of modules are enabled. The cost of the
-    // $this->bootstrapCache->get() is more or less constant and reduced further when
-    // non-database caching backends are used, so there will be more significant
-    // gains when a large number of modules are installed or hooks invoked, since
-    // this can quickly lead to module_hook() being called several thousand times
-    // per request.
-    parent::resetImplementations();
-    $this->bootstrapCache->set('module_implements', array());
-    $this->bootstrapCache->delete('hook_info');
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\CachedModuleHandlerInterface::writeCache().
-   */
-  public function writeCache() {
-    if ($this->cacheNeedsWriting) {
-      $this->bootstrapCache->set('module_implements', $this->implementations);
-      $this->cacheNeedsWriting = FALSE;
-    }
-  }
-
-  /**
-   * Overrides \Drupal\Core\Extension\ModuleHandler::getImplementationInfo().
-   */
-  protected function getImplementationInfo($hook) {
-    if (!isset($this->implementations)) {
-      $this->implementations = $this->getCachedImplementationInfo();
-    }
-    if (!isset($this->implementations[$hook])) {
-      // The hook is not cached, so ensure that whether or not it has
-      // implementations, the cache is updated at the end of the request.
-      $this->cacheNeedsWriting = TRUE;
-      $this->implementations[$hook] = parent::getImplementationInfo($hook);
-    }
-    else {
-      foreach ($this->implementations[$hook] as $module => $group) {
-        // If this hook implementation is stored in a lazy-loaded file, include
-        // that file first.
-        if ($group) {
-          $this->loadInclude($module, 'inc', "$module.$group");
-        }
-        // It is possible that a module removed a hook implementation without the
-        // implementations cache being rebuilt yet, so we check whether the
-        // function exists on each request to avoid undefined function errors.
-        // Since module_hook() may needlessly try to load the include file again,
-        // function_exists() is used directly here.
-        if (!function_exists($module . '_' . $hook)) {
-          // Clear out the stale implementation from the cache and force a cache
-          // refresh to forget about no longer existing hook implementations.
-          unset($this->implementations[$hook][$module]);
-          $this->cacheNeedsWriting = TRUE;
-        }
-      }
-    }
-    return $this->implementations[$hook];
-  }
-
-  /**
-   * Overrides \Drupal\Core\Extension\ModuleHandler::getHookInfo().
-   */
-  protected function getHookInfo() {
-    // When this function is indirectly invoked from bootstrap_invoke_all() prior
-    // to all modules being loaded, we do not want to cache an incomplete
-    // hook_hookInfo() result, so instead return an empty array. This requires
-    // bootstrap hook implementations to reside in the .module file, which is
-    // optimal for performance anyway.
-    if (!$this->loaded) {
-      return array();
-    }
-    if (!isset($this->hookInfo)) {
-      if ($cache = $this->bootstrapCache->get('hook_info')) {
-        $this->hookInfo = $cache->data;
-      }
-      else {
-        $this->hookInfo = parent::getHookInfo();
-        $this->bootstrapCache->set('hook_info', $this->hookInfo);
-      }
-    }
-    return $this->hookInfo;
-  }
-
-  /**
-   * Retrieves hook implementation info from the cache.
-   */
-  protected function getCachedImplementationInfo() {
-    if ($cache = $this->bootstrapCache->get('module_implements')) {
-      return $cache->data;
-    }
-    else {
-      return array();
-    }
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Extension/CachedModuleHandlerInterface.php b/core/lib/Drupal/Core/Extension/CachedModuleHandlerInterface.php
deleted file mode 100644
index cca18dc..0000000
--- a/core/lib/Drupal/Core/Extension/CachedModuleHandlerInterface.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\Core\Extension\CachedModuleHandlerInterface.
- */
-
-namespace Drupal\Core\Extension;
-
-/**
- * Interface for cacheable module handlers.
- */
-interface CachedModuleHandlerInterface extends ModuleHandlerInterface {
-
-  /**
-   * Write the hook implementation info to the cache.
-   */
-  public function writeCache();
-
-}
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
deleted file mode 100644
index 8e1cdb6..0000000
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ /dev/null
@@ -1,522 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\Core\Extension\ModuleHandler.
- */
-
-namespace Drupal\Core\Extension;
-
-use Drupal\Component\Graph\Graph;
-use Drupal\Component\Utility\NestedArray;
-use Drupal\Core\Cache\CacheBackendInterface;
-use Drupal\Core\KeyValueStore\KeyValueStoreInterface;
-
-/**
- * Class that manages enabled modules in a Drupal installation.
- */
-class ModuleHandler implements ModuleHandlerInterface {
-
-  /**
-   * List of loaded files.
-   *
-   * @var array
-   *   An associative array whose keys are file paths of loaded files, relative
-   *   to the application's root directory.
-   */
-  protected $loadedFiles;
-
-  /**
-   * List of enabled bootstrap modules.
-   *
-   * @var array
-   */
-  protected $bootstrapModules;
-
-  /**
-   * List of enabled modules.
-   *
-   * @var array
-   *   An associative array whose keys are the names of the modules and whose
-   *   values are the module filenames.
-   */
-  protected $moduleList;
-
-  /**
-   * Boolean indicating whether modules have been loaded.
-   *
-   * @var bool
-   */
-  protected $loaded = FALSE;
-
-  /**
-   * List of hook implementations keyed by hook name.
-   *
-   * @var array
-   */
-  protected $implementations;
-
-  /**
-   * Information returned by hook_hook_info() implementations.
-   *
-   * @var array
-   */
-  protected $hookInfo;
-
-  /**
-   * List of alter hook implementations keyed by hook name(s).
-   *
-   * @var array
-   */
-  protected $alterFunctions;
-
-  /**
-   * Constructs a ModuleHandler object.
-   *
-   * @param array $module_list
-   *   An associative array whose keys are the names of enabled modules and
-   *   whose values are the module filenames. This is normally the
-   *   %container.modules% parameter being set up by DrupalKernel.
-   *
-   * @see \Drupal\Core\DrupalKernel
-   * @see \Drupal\Core\CoreBundle
-   */
-  public function __construct(array $module_list = array()) {
-    $this->moduleList = $module_list;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::load().
-   */
-  public function load($name) {
-    if (isset($this->loadedFiles[$name])) {
-      return TRUE;
-    }
-
-    if (isset($this->moduleList[$name])) {
-      $filename = $this->moduleList[$name];
-      include_once DRUPAL_ROOT . '/' . $filename;
-      $this->loadedFiles[$name] = TRUE;
-      return TRUE;
-    }
-    return FALSE;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::loadAll().
-   */
-  public function loadAll() {
-    if (!$this->loaded) {
-      foreach ($this->moduleList as $module => $filename) {
-        $this->load($module);
-      }
-      $this->loaded = TRUE;
-    }
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::reload().
-   */
-  public function reload() {
-    $this->loaded = FALSE;
-    $this->loadAll();
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::loadBootstrapModules().
-   */
-  public function loadBootstrapModules() {
-    if (!$this->loaded) {
-      foreach ($this->getBootstrapModules() as $module) {
-        $this->load($module);
-      }
-    }
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::isLoaded().
-   */
-  public function isLoaded() {
-    return $this->loaded;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::getModuleList().
-   */
-  public function getModuleList() {
-    return $this->moduleList;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::setModuleList().
-   */
-  public function setModuleList(array $module_list = array()) {
-    $this->moduleList = $module_list;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::getBootstrapModules().
-   */
-  public function getBootstrapModules() {
-    // The basic module handler does not know anything about how to retrieve a
-    // list of bootstrap modules.
-    return array();
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::buildModuleDependencies().
-   */
-  public function buildModuleDependencies(array $modules) {
-    foreach ($modules as $name => $module) {
-      $graph[$module->name]['edges'] = array();
-      if (isset($module->info['dependencies']) && is_array($module->info['dependencies'])) {
-        foreach ($module->info['dependencies'] as $dependency) {
-          $dependency_data = $this->parseDependency($dependency);
-          $graph[$module->name]['edges'][$dependency_data['name']] = $dependency_data;
-        }
-      }
-    }
-    $graph_object = new Graph($graph);
-    $graph = $graph_object->searchAndSort();
-    foreach ($graph as $module_name => $data) {
-      $modules[$module_name]->required_by = isset($data['reverse_paths']) ? $data['reverse_paths'] : array();
-      $modules[$module_name]->requires = isset($data['paths']) ? $data['paths'] : array();
-      $modules[$module_name]->sort = $data['weight'];
-    }
-    return $modules;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::moduleExists().
-   */
-  public function moduleExists($module) {
-    return isset($this->moduleList[$module]);
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::loadAllIncludes().
-   */
-  public function loadAllIncludes($type, $name = NULL) {
-    foreach ($this->moduleList as $module => $filename) {
-      $this->loadInclude($module, $type, $name);
-    }
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::loadInclude().
-   */
-  public function loadInclude($module, $type, $name = NULL) {
-    if ($type == 'install') {
-      // Make sure the installation API is available
-      include_once DRUPAL_ROOT . '/core/includes/install.inc';
-    }
-
-    $name = $name ?: $module;
-    $file = DRUPAL_ROOT . '/' . dirname($this->moduleList[$module]) . "/$name.$type";
-    if (is_file($file)) {
-      require_once $file;
-      return $file;
-    }
-
-    return FALSE;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::getImplementations().
-   */
-  public function getImplementations($hook) {
-    $implementations = $this->getImplementationInfo($hook);
-    return array_keys($implementations);
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::resetImplementations().
-   */
-  public function resetImplementations() {
-    $this->implementations = NULL;
-    $this->hookInfo = NULL;
-    $this->alterFunctions = NULL;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::implementsHook().
-   */
-  public function implementsHook($module, $hook) {
-    $function = $module . '_' . $hook;
-    if (function_exists($function)) {
-      return TRUE;
-    }
-    // If the hook implementation does not exist, check whether it lives in an
-    // optional include file registered via hook_hook_info().
-    $hook_info = $this->getHookInfo();
-    if (isset($hook_info[$hook]['group'])) {
-      $this->loadInclude($module, 'inc', $module . '.' . $hook_info[$hook]['group']);
-      if (function_exists($function)) {
-        return TRUE;
-      }
-    }
-    return FALSE;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::invokeAll().
-   */
-  public function invokeAll($hook, $args = array()) {
-    $return = array();
-    $implementations = $this->getImplementations($hook);
-    foreach ($implementations as $module) {
-      $function = $module . '_' . $hook;
-      if (function_exists($function)) {
-        $result = call_user_func_array($function, $args);
-        if (isset($result) && is_array($result)) {
-          $return = NestedArray::mergeDeep($return, $result);
-        }
-        elseif (isset($result)) {
-          $return[] = $result;
-        }
-      }
-    }
-
-    return $return;
-  }
-
-  /**
-   * Implements \Drupal\Core\Extension\ModuleHandlerInterface::alter().
-   */
-  public function alter($type, &$data, &$context1 = NULL, &$context2 = NULL) {
-    // Most of the time, $type is passed as a string, so for performance,
-    // normalize it to that. When passed as an array, usually the first item in
-    // the array is a generic type, and additional items in the array are more
-    // specific variants of it, as in the case of array('form', 'form_FORM_ID').
-    if (is_array($type)) {
-      $cid = implode(',', $type);
-      $extra_types = $type;
-      $type = array_shift($extra_types);
-      // Allow if statements in this function to use the faster isset() rather
-      // than !empty() both when $type is passed as a string, or as an array with
-      // one item.
-      if (empty($extra_types)) {
-        unset($extra_types);
-      }
-    }
-    else {
-      $cid = $type;
-    }
-
-    // Some alter hooks are invoked many times per page request, so store the
-    // list of functions to call, and on subsequent calls, iterate through them
-    // quickly.
-    if (!isset($this->alterFunctions[$cid])) {
-      $this->alterFunctions[$cid] = array();
-      $hook = $type . '_alter';
-      $modules = $this->getImplementations($hook);
-      if (!isset($extra_types)) {
-        // For the more common case of a single hook, we do not need to call
-        // function_exists(), since $this->getImplementations() returns only modules with
-        // implementations.
-        foreach ($modules as $module) {
-          $this->alterFunctions[$cid][] = $module . '_' . $hook;
-        }
-      }
-      else {
-        // For multiple hooks, we need $modules to contain every module that
-        // implements at least one of them.
-        $extra_modules = array();
-        foreach ($extra_types as $extra_type) {
-          $extra_modules = array_merge($extra_modules, $this->getImplementations($extra_type . '_alter'));
-        }
-        // If any modules implement one of the extra hooks that do not implement
-        // the primary hook, we need to add them to the $modules array in their
-        // appropriate order. $this->getImplementations() can only return ordered
-        // implementations of a single hook. To get the ordered implementations
-        // of multiple hooks, we mimic the $this->getImplementations() logic of first
-        // ordering by $this->getModuleList(), and then calling
-        // $this->alter('module_implements').
-        if (array_diff($extra_modules, $modules)) {
-          // Merge the arrays and order by getModuleList().
-          $modules = array_intersect(array_keys($this->moduleList), array_merge($modules, $extra_modules));
-          // Since $this->getImplementations() already took care of loading the necessary
-          // include files, we can safely pass FALSE for the array values.
-          $implementations = array_fill_keys($modules, FALSE);
-          // Let modules adjust the order solely based on the primary hook. This
-          // ensures the same module order regardless of whether this if block
-          // runs. Calling $this->alter() recursively in this way does not result
-          // in an infinite loop, because this call is for a single $type, so we
-          // won't end up in this code block again.
-          $this->alter('module_implements', $implementations, $hook);
-          $modules = array_keys($implementations);
-        }
-        foreach ($modules as $module) {
-          // Since $modules is a merged array, for any given module, we do not
-          // know whether it has any particular implementation, so we need a
-          // function_exists().
-          $function = $module . '_' . $hook;
-          if (function_exists($function)) {
-            $this->alterFunctions[$cid][] = $function;
-          }
-          foreach ($extra_types as $extra_type) {
-            $function = $module . '_' . $extra_type . '_alter';
-            if (function_exists($function)) {
-              $this->alterFunctions[$cid][] = $function;
-            }
-          }
-        }
-      }
-      // Allow the theme to alter variables after the theme system has been
-      // initialized.
-      global $theme, $base_theme_info;
-      if (isset($theme)) {
-        $theme_keys = array();
-        foreach ($base_theme_info as $base) {
-          $theme_keys[] = $base->name;
-        }
-        $theme_keys[] = $theme;
-        foreach ($theme_keys as $theme_key) {
-          $function = $theme_key . '_' . $hook;
-          if (function_exists($function)) {
-            $this->alterFunctions[$cid][] = $function;
-          }
-          if (isset($extra_types)) {
-            foreach ($extra_types as $extra_type) {
-              $function = $theme_key . '_' . $extra_type . '_alter';
-              if (function_exists($function)) {
-                $this->alterFunctions[$cid][] = $function;
-              }
-            }
-          }
-        }
-      }
-    }
-
-    foreach ($this->alterFunctions[$cid] as $function) {
-      $function($data, $context1, $context2);
-    }
-  }
-
-  /**
-   * Provides information about modules' implementations of a hook.
-   *
-   * @param string $hook
-   *   The name of the hook (e.g. "help" or "menu").
-   *
-   * @return array
-   *   An array whose keys are the names of the modules which are implementing
-   *   this hook and whose values are either an array of information from
-   *   hook_hook_info() or FALSE if the implementation is in the module file.
-   */
-  protected function getImplementationInfo($hook) {
-    if (isset($this->implementations[$hook])) {
-      return $this->implementations[$hook];
-    }
-    $this->implementations[$hook] = array();
-    $hook_info = $this->getHookInfo();
-    foreach ($this->moduleList as $module => $filename) {
-      $include_file = isset($hook_info[$hook]['group']) && $this->loadInclude($module, 'inc', $module . '.' . $hook_info[$hook]['group']);
-      // Since $this->hookImplements() may needlessly try to load the include
-      // file again, function_exists() is used directly here.
-      if (function_exists($module . '_' . $hook)) {
-        $this->implementations[$hook][$module] = $include_file ? $hook_info[$hook]['group'] : FALSE;
-      }
-    }
-    // Allow modules to change the weight of specific implementations but avoid
-    // an infinite loop.
-    if ($hook != 'module_implements_alter') {
-      $this->alter('module_implements', $this->implementations[$hook], $hook);
-    }
-    return $this->implementations[$hook];
-  }
-
-  /**
-   * Retrieves a list of hooks that are declared through hook_hook_info().
-   *
-   * @return
-   *   An associative array whose keys are hook names and whose values are an
-   *   associative array containing a group name. The structure of the array
-   *   is the same as the return value of hook_hook_info().
-   *
-   * @see hook_hook_info()
-   */
-  protected function getHookInfo() {
-    if ($this->hookInfo) {
-      return $this->hookInfo;
-    }
-    $this->hookInfo = array();
-    // We can't use $this->invokeAll() here or it would cause an infinite
-    // loop.
-    foreach ($this->moduleList as $module => $filename) {
-      $function = $module . '_hook_info';
-      if (function_exists($function)) {
-        $result = $function();
-        if (isset($result) && is_array($result)) {
-          $this->hookInfo = NestedArray::mergeDeep($this->hookInfo, $result);
-        }
-      }
-    }
-    // We can't use $this->alter() for the same reason as above.
-    foreach ($this->moduleList as $module => $filename) {
-      $function = $module . '_hook_info_alter';
-      if (function_exists($function)) {
-        $function($this->hookInfo);
-      }
-    }
-    return $this->hookInfo;
-  }
-
-  /**
-   * Parses a dependency for comparison by drupal_check_incompatibility().
-   *
-   * @param $dependency
-   *   A dependency string, for example 'foo (>=8.x-4.5-beta5, 3.x)'.
-   *
-   * @return
-   *   An associative array with three keys:
-   *   - 'name' includes the name of the thing to depend on (e.g. 'foo').
-   *   - 'original_version' contains the original version string (which can be
-   *     used in the UI for reporting incompatibilities).
-   *   - 'versions' is a list of associative arrays, each containing the keys
-   *     'op' and 'version'. 'op' can be one of: '=', '==', '!=', '<>', '<',
-   *     '<=', '>', or '>='. 'version' is one piece like '4.5-beta3'.
-   *   Callers should pass this structure to drupal_check_incompatibility().
-   *
-   * @see drupal_check_incompatibility()
-   */
-  protected function parseDependency($dependency) {
-    // We use named subpatterns and support every op that version_compare
-    // supports. Also, op is optional and defaults to equals.
-    $p_op = '(?P<operation>!=|==|=|<|<=|>|>=|<>)?';
-    // Core version is always optional: 8.x-2.x and 2.x is treated the same.
-    $p_core = '(?:' . preg_quote(DRUPAL_CORE_COMPATIBILITY) . '-)?';
-    $p_major = '(?P<major>\d+)';
-    // By setting the minor version to x, branches can be matched.
-    $p_minor = '(?P<minor>(?:\d+|x)(?:-[A-Za-z]+\d+)?)';
-    $value = array();
-    $parts = explode('(', $dependency, 2);
-    $value['name'] = trim($parts[0]);
-    if (isset($parts[1])) {
-      $value['original_version'] = ' (' . $parts[1];
-      foreach (explode(',', $parts[1]) as $version) {
-        if (preg_match("/^\s*$p_op\s*$p_core$p_major\.$p_minor/", $version, $matches)) {
-          $op = !empty($matches['operation']) ? $matches['operation'] : '=';
-          if ($matches['minor'] == 'x') {
-            // Drupal considers "2.x" to mean any version that begins with
-            // "2" (e.g. 2.0, 2.9 are all "2.x"). PHP's version_compare(),
-            // on the other hand, treats "x" as a string; so to
-            // version_compare(), "2.x" is considered less than 2.0. This
-            // means that >=2.x and <2.x are handled by version_compare()
-            // as we need, but > and <= are not.
-            if ($op == '>' || $op == '<=') {
-              $matches['major']++;
-            }
-            // Equivalence can be checked by adding two restrictions.
-            if ($op == '=' || $op == '==') {
-              $value['versions'][] = array('op' => '<', 'version' => ($matches['major'] + 1) . '.x');
-              $op = '>=';
-            }
-          }
-          $value['versions'][] = array('op' => $op, 'version' => $matches['major'] . '.' . $matches['minor']);
-        }
-      }
-    }
-    return $value;
-  }
-}
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php b/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
deleted file mode 100644
index 7cb8418..0000000
--- a/core/lib/Drupal/Core/Extension/ModuleHandlerInterface.php
+++ /dev/null
@@ -1,238 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\Core\Extension\ModuleHandlerInterface.
- */
-
-namespace Drupal\Core\Extension;
-
-/**
- * Interface for classes that manage a set of enabled modules.
- *
- * Classes implementing this interface work with a fixed list of modules and are
- * responsible for loading module files and maintaining information about module
- * dependencies and hook implementations.
- */
-interface ModuleHandlerInterface {
-
-  /**
-   * Includes a module's .module file.
-   *
-   * This prevents including a module more than once.
-   *
-   * @param string $name
-   *   The name of the module to load.
-   *
-   * @return bool
-   *   TRUE if the item is loaded or has already been loaded.
-   */
-  public function load($name);
-
-  /**
-   * Loads all enabled modules.
-   */
-  public function loadAll();
-
-  /**
-   * Loads all enabled bootstrap modules.
-   */
-  public function loadBootstrapModules();
-
-  /**
-   * Returns whether all modules have been loaded.
-   *
-   * @return bool
-   *   A Boolean indicating whether all modules have been loaded. This means all
-   *   modules; the load status of bootstrap modules cannot be checked.
-   */
-  public function isLoaded();
-
-  /**
-   * Reloads all enabled modules.
-   */
-  public function reload();
-
-  /**
-   * Returns a list of currently active modules.
-   *
-   * @return array
-   *   An associative array whose keys are the names of the modules and whose
-   *   values are the module filenames.
-   */
-  public function getModuleList();
-
-  /**
-   * Explicitly sets the moduleList property to the passed in array of modules.
-   *
-   * @param array $module_list
-   *   An associative array whose keys are the names of the modules and whose
-   *   values are the module filenames.
-   */
-  public function setModuleList(array $module_list = array());
-
-  /**
-   * Retrieves the list of bootstrap modules.
-   */
-  public function getBootstrapModules();
-
-  /**
-   * Determines which modules require and are required by each module.
-   *
-   * @param array $modules
-   *   An array of module objects keyed by module name. Each object contains
-   *   information discovered during a Drupal\Core\SystemListing scan.
-   *
-   * @return
-   *   The same array with the new keys for each module:
-   *   - requires: An array with the keys being the modules that this module
-   *     requires.
-   *   - required_by: An array with the keys being the modules that will not work
-   *     without this module.
-   *
-   * @see \Drupal\Core\SystemListing
-   */
-  public function buildModuleDependencies(array $modules);
-
-  /**
-   * Determines whether a given module is enabled.
-   *
-   * @param string $module
-   *   The name of the module (without the .module extension).
-   *
-   * @return bool
-   *   TRUE if the module is both installed and enabled.
-   */
-  public function moduleExists($module);
-
-  /**
-   * Loads an include file for each enabled module.
-   *
-   * @param string $type
-   *   The include file's type (file extension).
-   * @param string $name
-   *   (optional) The base file name (without the $type extension). If omitted,
-   *   each module's name is used; i.e., "$module.$type" by default.
-   */
-  public function loadAllIncludes($type, $name = NULL);
-
-  /**
-   * Loads a module include file.
-   *
-   * Examples:
-   * @code
-   *   // Load node.admin.inc from the node module.
-   *   $this->loadInclude('node', 'inc', 'node.admin');
-   *   // Load content_types.inc from the node module.
-   *   $this->loadInclude('node', 'inc', ''content_types');
-   * @endcode
-   *
-   * @param string $module
-   *   The module to which the include file belongs.
-   * @param string $type
-   *   The include file's type (file extension).
-   * @param string $name
-   *   (optional) The base file name (without the $type extension). If omitted,
-   *   $module is used; i.e., resulting in "$module.$type" by default.
-   *
-   * @return string|false
-   *   The name of the included file, if successful; FALSE otherwise.
-   */
-  public function loadInclude($module, $type, $name = NULL);
-
-  /**
-   * Determines which modules are implementing a hook.
-   *
-   * @param string $hook
-   *   The name of the hook (e.g. "help" or "menu").
-   *
-   * @return array
-   *   An array with the names of the modules which are implementing this hook.
-   */
-  public function getImplementations($hook);
-
-  /**
-   * Resets the cached list of hook implementations.
-   */
-  public function resetImplementations();
-
-  /**
-   * Returns whether a given module implements a given hook.
-   *
-   * @param string $module
-   *   The name of the module (without the .module extension).
-   * @param string $hook
-   *   The name of the hook (e.g. "help" or "menu").
-   *
-   * @return bool
-   *   TRUE if the module is both installed and enabled, and the hook is
-   *   implemented in that module.
-   */
-  public function implementsHook($module, $hook);
-
-  /**
-   * Invokes a hook in all enabled modules that implement it.
-   *
-   * @param string $hook
-   *   The name of the hook to invoke.
-   * @param ...
-   *   Arguments to pass to the hook.
-   *
-   * @return array
-   *   An array of return values of the hook implementations. If modules return
-   *   arrays from their implementations, those are merged into one array.
-   */
-  public function invokeAll($hook, $args = array());
-
-  /**
-   * Passes alterable variables to specific hook_TYPE_alter() implementations.
-   *
-   * This dispatch function hands off the passed-in variables to type-specific
-   * hook_TYPE_alter() implementations in modules. It ensures a consistent
-   * interface for all altering operations.
-   *
-   * A maximum of 2 alterable arguments is supported. In case more arguments need
-   * to be passed and alterable, modules provide additional variables assigned by
-   * reference in the last $context argument:
-   * @code
-   *   $context = array(
-   *     'alterable' => &$alterable,
-   *     'unalterable' => $unalterable,
-   *     'foo' => 'bar',
-   *   );
-   *   $this->alter('mymodule_data', $alterable1, $alterable2, $context);
-   * @endcode
-   *
-   * Note that objects are always passed by reference in PHP5. If it is absolutely
-   * required that no implementation alters a passed object in $context, then an
-   * object needs to be cloned:
-   * @code
-   *   $context = array(
-   *     'unalterable_object' => clone $object,
-   *   );
-   *   $this->alter('mymodule_data', $data, $context);
-   * @endcode
-   *
-   * @param string|array $type
-   *   A string describing the type of the alterable $data. 'form', 'links',
-   *   'node_content', and so on are several examples. Alternatively can be an
-   *   array, in which case hook_TYPE_alter() is invoked for each value in the
-   *   array, ordered first by module, and then for each module, in the order of
-   *   values in $type. For example, when Form API is using $this->alter() to
-   *   execute both hook_form_alter() and hook_form_FORM_ID_alter()
-   *   implementations, it passes array('form', 'form_' . $form_id) for $type.
-   * @param mixed $data
-   *   The variable that will be passed to hook_TYPE_alter() implementations to be
-   *   altered. The type of this variable depends on the value of the $type
-   *   argument. For example, when altering a 'form', $data will be a structured
-   *   array. When altering a 'profile', $data will be an object.
-   * @param mixed $context1
-   *   (optional) An additional variable that is passed by reference.
-   * @param mixed $context2
-   *   (optional) An additional variable that is passed by reference. If more
-   *   context needs to be provided to implementations, then this should be an
-   *   associative array as described above.
-   */
-  public function alter($type, &$data, &$context1 = NULL, &$context2 = NULL);
-
-}
diff --git a/core/lib/Drupal/Core/HttpKernel.php b/core/lib/Drupal/Core/HttpKernel.php
index ca0c002..c1f7c5b 100644
--- a/core/lib/Drupal/Core/HttpKernel.php
+++ b/core/lib/Drupal/Core/HttpKernel.php
@@ -12,7 +12,6 @@
 
 namespace Drupal\Core;
 
-use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
 use Symfony\Component\HttpFoundation\StreamedResponse;
@@ -154,7 +153,7 @@ public function render($controller, array $options = array())
                 $options['attributes']['_format'] = $request->getRequestFormat();
             }
 
-            $options['attributes'][RouteObjectInterface::ROUTE_OBJECT] = '_internal';
+            $options['attributes']['_route'] = '_internal';
             $subRequest = $request->duplicate($options['query'], null, $options['attributes']);
             $subRequest->setMethod('GET');
         }
diff --git a/core/lib/Drupal/Core/LegacyUrlMatcher.php b/core/lib/Drupal/Core/LegacyUrlMatcher.php
index c1175ab..48987a9 100644
--- a/core/lib/Drupal/Core/LegacyUrlMatcher.php
+++ b/core/lib/Drupal/Core/LegacyUrlMatcher.php
@@ -150,12 +150,6 @@ protected function convertDrupalItem($router_item) {
       '_controller' => $router_item['page_callback']
     );
 
-    // A few menu items have a fake page callback temporarily. Skip those,
-    // we aren't going to route them.
-    if ($router_item['page_callback'] == 'NOT_USED') {
-      throw new ResourceNotFoundException();
-    }
-
     // @todo menu_get_item() does not unserialize page arguments when the access
     //   is denied. Remove this temporary hack that always does that.
     if (!is_array($router_item['page_arguments'])) {
diff --git a/core/lib/Drupal/Core/Plugin/Discovery/CacheDecorator.php b/core/lib/Drupal/Core/Plugin/Discovery/CacheDecorator.php
index a199171..40d8b96 100644
--- a/core/lib/Drupal/Core/Plugin/Discovery/CacheDecorator.php
+++ b/core/lib/Drupal/Core/Plugin/Discovery/CacheDecorator.php
@@ -155,12 +155,7 @@ protected function setCachedDefinitions($definitions) {
    * Implements \Drupal\Component\Plugin\Discovery\CachedDiscoveryInterface::clearCachedDefinitions().
    */
   public function clearCachedDefinitions() {
-    // If there are any cache tags, clear cache based on those.
-    if (!empty($this->cacheTags)) {
-      cache($this->cacheBin)->deleteTags($this->cacheTags);
-    }
-    // Otherwise, just delete the specified cache key.
-    else if (isset($this->cacheKey)) {
+    if (isset($this->cacheKey)) {
       cache($this->cacheBin)->delete($this->cacheKey);
     }
     $this->definitions = NULL;
diff --git a/core/lib/Drupal/Core/Routing/ChainMatcher.php b/core/lib/Drupal/Core/Routing/ChainMatcher.php
new file mode 100644
index 0000000..23410bf
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/ChainMatcher.php
@@ -0,0 +1,165 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\ChainMatcher.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
+use Symfony\Component\Routing\Exception\ResourceNotFoundException;
+use Symfony\Component\Routing\Exception\RouteNotFoundException;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+use Symfony\Component\Routing\RequestContextAwareInterface;
+use Symfony\Component\Routing\RequestContext;
+
+/**
+ * Aggregates multiple matchers together in series.
+ *
+ * The RequestContext is entirely unused. It's included only to satisfy the
+ * interface needed for RouterListener.  Hopefully we can remove it later.
+ */
+class ChainMatcher implements RequestMatcherInterface, RequestContextAwareInterface {
+
+  /**
+   * Array of RequestMatcherInterface objects to be checked in order.
+   *
+   * @var array
+   */
+  protected $matchers = array();
+
+  /**
+   * Array of RequestMatcherInterface objects, sorted.
+   *
+   * @var type
+   */
+  protected $sortedMatchers = array();
+
+  /**
+   * The request context for this matcher.
+   *
+   * This is unused.  It's just to satisfy the interface.
+   *
+   * @var Symfony\Component\Routing\RequestContext
+   */
+  protected $context;
+
+  /**
+   * Constructor.
+   */
+  public function __construct() {
+    // We will not actually use this object, but it's needed to conform to
+    // the interface.
+    $this->context = new RequestContext();
+  }
+
+  /**
+   * Sets the request context.
+   *
+   * This method is just to satisfy the interface, and is largely vestigial.
+   * The request context object does not contain the information we need, so
+   * we will use the original request object.
+   *
+   * @param Symfony\Component\Routing\RequestContext $context
+   *   The context.
+   */
+  public function setContext(RequestContext $context) {
+    $this->context = $context;
+  }
+
+  /**
+   * Gets the request context.
+   *
+   * This method is just to satisfy the interface, and is largely vestigial.
+   * The request context object does not contain the information we need, so
+   * we will use the original request object.
+   *
+   * @return Symfony\Component\Routing\RequestContext
+   *   The context.
+   */
+  public function getContext() {
+    return $this->context;
+  }
+
+  /**
+   * Matches a request against all queued matchers.
+   *
+   * @param Request $request The request to match
+   *
+   * @return array An array of parameters
+   *
+   * @throws \Symfony\Component\Routing\Exception\ResourceNotFoundException
+   *   If no matching resource could be found
+   * @throws \Symfony\Component\Routing\Exception\MethodNotAllowedException
+   *   If a matching resource was found but the request method is not allowed
+   */
+  public function matchRequest(Request $request) {
+    $methodNotAllowed = null;
+
+    foreach ($this->all() as $matcher) {
+      try {
+        return $matcher->matchRequest($request);
+      } catch (ResourceNotFoundException $e) {
+        // Needs special care
+      } catch (MethodNotAllowedException $e) {
+        $methodNotAllowed = $e;
+      }
+    }
+
+    throw $methodNotAllowed ?: new ResourceNotFoundException("None of the matchers in the chain matched this request.");
+  }
+
+  /**
+    * Adds a Matcher to the index.
+    *
+    * @param MatcherInterface $matcher
+    *   The matcher to add.
+    * @param int $priority
+    *   (optional) The priority of the matcher. Higher number matchers will be checked
+    *   first. Default to 0.
+    */
+  public function add(RequestMatcherInterface $matcher, $priority = 0) {
+    if (empty($this->matchers[$priority])) {
+      $this->matchers[$priority] = array();
+    }
+
+    $this->matchers[$priority][] = $matcher;
+    $this->sortedMatchers = array();
+  }
+
+  /**
+    * Sorts the matchers and flattens them.
+    *
+    * @return array
+    *   An array of RequestMatcherInterface objects.
+    */
+  public function all() {
+    if (empty($this->sortedMatchers)) {
+      $this->sortedMatchers = $this->sortMatchers();
+    }
+
+    return $this->sortedMatchers;
+  }
+
+  /**
+    * Sort matchers by priority.
+    *
+    * The highest priority number is the highest priority (reverse sorting).
+    *
+    * @return \Symfony\Component\Routing\RequestMatcherInterface[]
+    *   An array of Matcher objects in the order they should be used.
+    */
+  protected function sortMatchers() {
+    $sortedMatchers = array();
+    krsort($this->matchers);
+
+    foreach ($this->matchers as $matchers) {
+      $sortedMatchers = array_merge($sortedMatchers, $matchers);
+    }
+
+    return $sortedMatchers;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Routing/CompiledRoute.php b/core/lib/Drupal/Core/Routing/CompiledRoute.php
index b457afd..c5cdde8 100644
--- a/core/lib/Drupal/Core/Routing/CompiledRoute.php
+++ b/core/lib/Drupal/Core/Routing/CompiledRoute.php
@@ -8,12 +8,11 @@
 namespace Drupal\Core\Routing;
 
 use Symfony\Component\Routing\Route;
-use Symfony\Component\Routing\CompiledRoute as SymfonyCompiledRoute;
 
 /**
- * A compiled route contains derived information from a route object.
+ * Description of CompiledRoute
  */
-class CompiledRoute extends SymfonyCompiledRoute {
+class CompiledRoute {
 
   /**
    * The fitness of this route.
@@ -44,12 +43,14 @@ class CompiledRoute extends SymfonyCompiledRoute {
   protected $route;
 
   /**
-   * Constructs a new compiled route object.
+   * The regular expression to match placeholders out of this path.
    *
-   * This is a ridiculously long set of constructor parameters, but as this
-   * object is little more than a collection of values it's not a serious
-   * problem. The parent Symfony class does the same, as well, making it
-   * difficult to override differently.
+   * @var string
+   */
+  protected $regex;
+
+  /**
+   * Constructs a new CompiledRoute object.
    *
    * @param \Symfony\Component\Routing\Route $route
    *   A original Route instance.
@@ -59,30 +60,15 @@ class CompiledRoute extends SymfonyCompiledRoute {
    *   The pattern outline for this route.
    * @param int $num_parts
    *   The number of parts in the path.
-   * @param string $staticPrefix
-   *   The static prefix of the compiled route
    * @param string $regex
-   *   The regular expression to use to match this route
-   * @param array $tokens
-   *   An array of tokens to use to generate URL for this route
-   * @param array $pathVariables
-   *   An array of path variables
-   * @param string|null $hostnameRegex
-   *   Hostname regex
-   * @param array $hostnameTokens
-   *   Hostname tokens
-   * @param array $hostnameVariables
-   *   An array of hostname variables
-   * @param array $variables
-   *   An array of variables (variables defined in the path and in the hostname patterns)
+   *   The regular expression to match placeholders out of this path.
    */
-  public function __construct(Route $route, $fit, $pattern_outline, $num_parts, $staticPrefix, $regex, array $tokens, array $pathVariables, $hostnameRegex = null, array $hostnameTokens = array(), array $hostnameVariables = array(), array $variables = array()) {
-    parent::__construct($staticPrefix, $regex, $tokens, $pathVariables, $hostnameRegex, $hostnameTokens, $hostnameVariables, $variables);
-
+  public function __construct(Route $route, $fit, $pattern_outline, $num_parts, $regex) {
     $this->route = $route;
     $this->fit = $fit;
     $this->patternOutline = $pattern_outline;
     $this->numParts = $num_parts;
+    $this->regex = $regex;
   }
 
   /**
@@ -124,6 +110,16 @@ public function getPatternOutline() {
   }
 
   /**
+   * Returns the placeholder regex.
+   *
+   * @return string
+   *   The regex to locate placeholders in this pattern.
+   */
+  public function getRegex() {
+    return $this->regex;
+  }
+
+  /**
    * Returns the Route instance.
    *
    * @return Route
diff --git a/core/lib/Drupal/Core/Routing/FinalMatcherInterface.php b/core/lib/Drupal/Core/Routing/FinalMatcherInterface.php
new file mode 100644
index 0000000..8b85c21
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/FinalMatcherInterface.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\FinalMatcherInterface.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * A FinalMatcher returns only one route from a collection of candidate routes.
+ */
+interface FinalMatcherInterface {
+
+  /**
+   * Sets the route collection this matcher should use.
+   *
+   * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   The collection against which to match.
+   *
+   * @return \Drupal\Core\Routing\FinalMatcherInterface
+   *   The current matcher.
+   */
+  public function setCollection(RouteCollection $collection);
+
+  /**
+   * Matches a request against multiple routes.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   A Request object against which to match.
+   *
+   * @return array
+   *   An array of parameters.
+   */
+  public function matchRequest(Request $request);
+}
diff --git a/core/lib/Drupal/Core/Routing/FirstEntryFinalMatcher.php b/core/lib/Drupal/Core/Routing/FirstEntryFinalMatcher.php
new file mode 100644
index 0000000..cc1adde
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/FirstEntryFinalMatcher.php
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\FirstEntryFinalMatcher.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * Final matcher that simply returns the first item in the remaining routes.
+ *
+ * This class simply matches the first remaining route.
+ */
+class FirstEntryFinalMatcher implements FinalMatcherInterface {
+
+  /**
+   * The RouteCollection this matcher should match against.
+   *
+   * @var RouteCollection
+   */
+  protected $routes;
+
+  /**
+   * Sets the route collection this matcher should use.
+   *
+   * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   The collection against which to match.
+   *
+   * @return \Drupal\Core\Routing\FinalMatcherInterface
+   *   The current matcher.
+   */
+  public function setCollection(RouteCollection $collection) {
+    $this->routes = $collection;
+
+    return $this;
+  }
+
+  /**
+   * Implements Drupal\Core\Routing\FinalMatcherInterface::matchRequest().
+   */
+  public function matchRequest(Request $request) {
+    // Return whatever the first route in the collection is.
+    foreach ($this->routes as $name => $route) {
+      $path = '/' . $request->attributes->get('system_path');
+
+      $route->setOption('compiler_class', '\Drupal\Core\Routing\RouteCompiler');
+      $compiled = $route->compile();
+
+      preg_match($compiled->getRegex(), $path, $matches);
+
+      $route->setOption('_name', $name);
+      return array_merge($this->mergeDefaults($matches, $route->getDefaults()), array('_route' => $route));
+    }
+  }
+
+  /**
+   * Get merged default parameters.
+   *
+   * @param array $params
+   *  The parameters.
+   * @param array $defaults
+   *   The defaults.
+   *
+   * @return array
+   *   Merged default parameters.
+   */
+  protected function mergeDefaults($params, $defaults) {
+    $parameters = $defaults;
+    foreach ($params as $key => $value) {
+      if (!is_int($key)) {
+        $parameters[$key] = $value;
+      }
+    }
+
+    return $parameters;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Routing/HttpMethodMatcher.php b/core/lib/Drupal/Core/Routing/HttpMethodMatcher.php
new file mode 100644
index 0000000..5064353
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/HttpMethodMatcher.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\HttpMethodMatcher.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\RouteCollection;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+
+/**
+ * This class filters routes based on their HTTP Method.
+ */
+class HttpMethodMatcher extends PartialMatcher {
+
+  /**
+   * Matches a request against multiple routes.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   A Request object against which to match.
+   *
+   * @return \Symfony\Component\Routing\RouteCollection
+   *   A RouteCollection of matched routes.
+   */
+  public function matchRequestPartial(Request $request) {
+    $possible_methods = array();
+
+    $method = $request->getMethod();
+
+    $collection = new RouteCollection();
+
+    foreach ($this->routes->all() as $name => $route) {
+      // _method could be a |-delimited list of allowed methods, or null. If
+      // null, we accept any method.
+      $allowed_methods = array_filter(explode('|', strtoupper($route->getRequirement('_method'))));
+      if (empty($allowed_methods) || in_array($method, $allowed_methods)) {
+        $collection->add($name, $route);
+      }
+      else {
+        // Build a list of methods that would have matched. Note that we only
+        // need to do this if a route doesn't match, because if even one route
+        // passes then we'll never throw the exception that needs this array.
+        $possible_methods += $allowed_methods;
+      }
+    }
+
+    if (!count($collection->all())) {
+      throw new MethodNotAllowedException(array_unique($possible_methods));
+    }
+
+    return $collection;
+  }
+
+}
+
diff --git a/core/lib/Drupal/Core/Routing/InitialMatcherInterface.php b/core/lib/Drupal/Core/Routing/InitialMatcherInterface.php
new file mode 100644
index 0000000..53bc8e7
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/InitialMatcherInterface.php
@@ -0,0 +1,27 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\InitialMatcherInterface.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * A PartialMatcher works like a UrlMatcher, but will return multiple candidate routes.
+ */
+interface InitialMatcherInterface {
+
+  /**
+   * Matches a request against multiple routes.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   A Request object against which to match.
+   *
+   * @return \Symfony\Component\Routing\RouteCollection
+   *   A RouteCollection of matched routes.
+   */
+  public function matchRequestPartial(Request $request);
+}
diff --git a/core/lib/Drupal/Core/Routing/MatcherDumper.php b/core/lib/Drupal/Core/Routing/MatcherDumper.php
index be304cf..48b2d8c 100644
--- a/core/lib/Drupal/Core/Routing/MatcherDumper.php
+++ b/core/lib/Drupal/Core/Routing/MatcherDumper.php
@@ -8,6 +8,7 @@
 namespace Drupal\Core\Routing;
 
 use Symfony\Component\Routing\Matcher\Dumper\MatcherDumperInterface;
+use Symfony\Component\Routing\Route;
 use Symfony\Component\Routing\RouteCollection;
 
 use Drupal\Core\Database\Connection;
diff --git a/core/lib/Drupal/Core/Routing/MimeTypeMatcher.php b/core/lib/Drupal/Core/Routing/MimeTypeMatcher.php
index 031b2a2..a36bef2 100644
--- a/core/lib/Drupal/Core/Routing/MimeTypeMatcher.php
+++ b/core/lib/Drupal/Core/Routing/MimeTypeMatcher.php
@@ -10,41 +10,46 @@
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpKernel\Exception\UnsupportedMediaTypeHttpException;
 use Symfony\Component\Routing\RouteCollection;
-use Symfony\Cmf\Component\Routing\NestedMatcher\RouteFilterInterface;
 
 /**
  * This class filters routes based on the media type in HTTP Accept headers.
  */
-class MimeTypeMatcher implements RouteFilterInterface {
-
+class MimeTypeMatcher extends PartialMatcher {
 
   /**
-   * Implements \Symfony\Cmf\Component\Routing\NestedMatcher\RouteFilterInterface::filter()
+   * Matches a request against multiple routes.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   A Request object against which to match.
+   *
+   * @return \Symfony\Component\Routing\RouteCollection
+   *   A RouteCollection of matched routes.
    */
-  public function filter(RouteCollection $collection, Request $request) {
+  public function matchRequestPartial(Request $request) {
+
     // Generates a list of Symfony formats matching the acceptable MIME types.
     // @todo replace by proper content negotiation library.
     $acceptable_mime_types = $request->getAcceptableContentTypes();
     $acceptable_formats = array_map(array($request, 'getFormat'), $acceptable_mime_types);
 
-    $filtered_collection = new RouteCollection();
+    $collection = new RouteCollection();
 
-    foreach ($collection as $name => $route) {
+    foreach ($this->routes->all() as $name => $route) {
       // _format could be a |-delimited list of supported formats.
       $supported_formats = array_filter(explode('|', $route->getRequirement('_format')));
       // The route partially matches if it doesn't care about format, if it
       // explicitly allows any format, or if one of its allowed formats is
       // in the request's list of acceptable formats.
       if (empty($supported_formats) || in_array('*/*', $acceptable_mime_types) || array_intersect($acceptable_formats, $supported_formats)) {
-        $filtered_collection->add($name, $route);
+        $collection->add($name, $route);
       }
     }
 
-    if (!count($filtered_collection)) {
+    if (!count($collection)) {
       throw new UnsupportedMediaTypeHttpException();
     }
 
-    return $filtered_collection;
+    return $collection;
   }
 
 }
diff --git a/core/lib/Drupal/Core/Routing/NestedMatcher.php b/core/lib/Drupal/Core/Routing/NestedMatcher.php
new file mode 100644
index 0000000..ff53715
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/NestedMatcher.php
@@ -0,0 +1,199 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\NestedMatcher.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\Routing\RequestContext;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * The nested matcher layers multiple partial matchers together.
+ */
+class NestedMatcher implements NestedMatcherInterface {
+
+  /**
+   * The final matcher.
+   *
+   * @var Symfony\Component\Routing\Matcher\RequestMatcherInterface
+   */
+  protected $finalMatcher;
+
+  /**
+   * An array of PartialMatchers.
+   *
+   * @var array
+   */
+  protected $partialMatchers = array();
+
+  /**
+   * Array of PartialMatcherInterface objects, sorted.
+   *
+   * @var type
+   */
+  protected $sortedMatchers = array();
+
+  /**
+   * The initial matcher to match against.
+   *
+   * @var Drupal\core\Routing\InitialMatcherInterface
+   */
+  protected $initialMatcher;
+
+  /**
+   * The request context.
+   *
+   * @var Symfony\Component\Routing\RequestContext
+   */
+  protected $context;
+
+  /**
+   * Adds a partial matcher to the matching plan.
+   *
+   * Partial matchers will be run in the order in which they are added.
+   *
+   * @param \Drupal\Core\Routing\PartialMatcherInterface $matcher
+   *   A partial matcher.
+   * @param int $priority
+   *   (optional) The priority of the matcher. Higher number matchers will be checked
+   *   first. Default to 0.
+   *
+   * @return NestedMatcherInterface
+   *   The current matcher.
+   */
+  public function addPartialMatcher(PartialMatcherInterface $matcher, $priority = 0) {
+    if (empty($this->matchers[$priority])) {
+      $this->matchers[$priority] = array();
+    }
+
+    $this->matchers[$priority][] = $matcher;
+    $this->sortedMatchers = array();
+  }
+
+  /**
+   * Sets the final matcher for the matching plan.
+   *
+   * @param \Drupal\Core\Routing\FinalMatcherInterface $final
+   *   The matcher that will be called last to ensure only a single route is
+   *   found.
+   *
+   * @return \Drupal\Core\Routing\NestedMatcherInterface
+   *   The current matcher.
+   */
+  public function setFinalMatcher(FinalMatcherInterface $final) {
+    $this->finalMatcher = $final;
+
+    return $this;
+  }
+
+  /**
+   * Sets the first matcher for the matching plan.
+   *
+   * Partial matchers will be run in the order in which they are added.
+   *
+   * @param \Drupal\Core\Routing\InitialMatcherInterface $matcher
+   *   An initial matcher.  It is responsible for its own configuration and
+   *   initial route collection
+   *
+   * @return \Drupal\Core\Routing\NestedMatcherInterface
+   *   The current matcher.
+   */
+  public function setInitialMatcher(InitialMatcherInterface $initial) {
+    $this->initialMatcher = $initial;
+
+    return $this;
+  }
+
+  /**
+   * Tries to match a request with a set of routes.
+   *
+   * If the matcher can not find information, it must throw one of the
+   * exceptions documented below.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   The request to match.
+   *
+   * @return array
+   *   An array of parameters.
+   *
+   * @throws ResourceNotFoundException
+   *   If no matching resource could be found.
+   * @throws MethodNotAllowedException
+   *   If a matching resource was found but the request method is not allowed.
+   */
+  public function matchRequest(Request $request) {
+    $collection = $this->initialMatcher->matchRequestPartial($request);
+
+    foreach ($this->getPartialMatchers() as $matcher) {
+      if ($collection) {
+        $matcher->setCollection($collection);
+      }
+      $collection = $matcher->matchRequestPartial($request);
+    }
+
+    $attributes = $this->finalMatcher->setCollection($collection)->matchRequest($request);
+
+    return $attributes;
+  }
+
+  /**
+    * Sorts the matchers and flattens them.
+    *
+    * @return array
+    *   An array of RequestMatcherInterface objects.
+    */
+  public function getPartialMatchers() {
+    if (empty($this->sortedMatchers)) {
+      $this->sortedMatchers = $this->sortMatchers();
+    }
+
+    return $this->sortedMatchers;
+  }
+
+  /**
+    * Sort matchers by priority.
+    *
+    * The highest priority number is the highest priority (reverse sorting).
+    *
+    * @return \Symfony\Component\Routing\RequestMatcherInterface[]
+    *   An array of Matcher objects in the order they should be used.
+    */
+  protected function sortMatchers() {
+    $sortedMatchers = array();
+    krsort($this->matchers);
+
+    foreach ($this->matchers as $matchers) {
+      $sortedMatchers = array_merge($sortedMatchers, $matchers);
+    }
+
+    return $sortedMatchers;
+  }
+
+  /**
+   * Sets the request context.
+   *
+   * This method is unused. It is here only to satisfy the interface.
+   *
+   * @param \Symfony\Component\Routing\RequestContext $context
+   *   The context
+   */
+  public function setContext(RequestContext $context) {
+    $this->context = $context;
+  }
+
+  /**
+   * Gets the request context.
+   *
+   * This method is unused. It is here only to satisfy the interface.
+   *
+   * @return \Symfony\Component\Routing\RequestContext
+   *   The context
+   */
+  public function getContext() {
+    return $this->context;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Routing/NestedMatcherInterface.php b/core/lib/Drupal/Core/Routing/NestedMatcherInterface.php
new file mode 100644
index 0000000..6ae0995
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/NestedMatcherInterface.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\NestedMatcherInterface.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
+
+/**
+ * A NestedMatcher allows for multiple-stage resolution of a route.
+ */
+interface NestedMatcherInterface extends RequestMatcherInterface {
+
+  /**
+   * Sets the first matcher for the matching plan.
+   *
+   * Partial matchers will be run in the order in which they are added.
+   *
+   * @param \Drupal\Core\Routing\InitialMatcherInterface $matcher
+   *   An initial matcher.  It is responsible for its own configuration and
+   *   initial route collection
+   *
+   * @return \Drupal\Core\Routing\NestedMatcherInterface
+   *   The current matcher.
+   */
+  public function setInitialMatcher(InitialMatcherInterface $initial);
+
+  /**
+   * Adds a partial matcher to the matching plan.
+   *
+   * Partial matchers will be run in the order in which they are added.
+   *
+   * @param \Drupal\Core\Routing\PartialMatcherInterface $matcher
+   *   A partial matcher.
+   * @param int $priority
+   *   (optional) The priority of the matcher. Higher number matchers will be checked
+   *   first. Default to 0.
+   *
+   * @return NestedMatcherInterface
+   *   The current matcher.
+   */
+  public function addPartialMatcher(PartialMatcherInterface $matcher, $priority = 0);
+
+  /**
+   * Sets the final matcher for the matching plan.
+   *
+   * @param \Drupal\Core\Routing\FinalMatcherInterface $final
+   *   The matcher that will be called last to ensure only a single route is
+   *   found.
+   *
+   * @return \Drupal\Core\Routing\NestedMatcherInterface
+   *   The current matcher.
+   */
+  public function setFinalMatcher(FinalMatcherInterface $final);
+}
diff --git a/core/lib/Drupal/Core/Routing/NullGenerator.php b/core/lib/Drupal/Core/Routing/NullGenerator.php
deleted file mode 100644
index 7228514..0000000
--- a/core/lib/Drupal/Core/Routing/NullGenerator.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\Core\Routing\NullGenerator.
- */
-
-namespace Drupal\Core\Routing;
-use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
-use Symfony\Component\Routing\RequestContext;
-use Symfony\Component\Routing\Exception\RouteNotFoundException;
-
-/**
- * No-op implementation of a Url Generator, needed for backward compatibility.
- */
-class NullGenerator implements UrlGeneratorInterface {
-
-  /**
-   * Implements Symfony\Component\Routing\Generator\UrlGeneratorInterface::generate();
-   */
-  public function generate($name, $parameters = array(), $absolute = FALSE) {
-    throw new RouteNotFoundException();
-  }
-
-  /**
-   * Implements Symfony\Component\Routing\RequestContextAwareInterface::setContext();
-   */
-  public function setContext(RequestContext $context) {
-  }
-
-  /**
-   * Implements Symfony\Component\Routing\RequestContextAwareInterface::getContext();
-   */
-  public function getContext() {
-  }
-}
diff --git a/core/lib/Drupal/Core/Routing/PartialMatcher.php b/core/lib/Drupal/Core/Routing/PartialMatcher.php
new file mode 100644
index 0000000..d28f9ac
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/PartialMatcher.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\PartialMatcher.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * Utility base class for partial matchers.
+ */
+abstract class PartialMatcher implements PartialMatcherInterface {
+
+  /**
+   * The RouteCollection this matcher should match against.
+   *
+   * @var \Symfony\Component\Routing\RouteCollection
+   */
+  protected $routes;
+
+  /**
+   * Sets the route collection this matcher should use.
+   *
+   * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   The collection against which to match.
+   *
+   * @return \Drupal\Core\Routing\PartialMatcherInterface
+   *   The current matcher.
+   */
+  public function setCollection(RouteCollection $collection) {
+    $this->routes = $collection;
+
+    return $this;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Routing/PartialMatcherInterface.php b/core/lib/Drupal/Core/Routing/PartialMatcherInterface.php
new file mode 100644
index 0000000..0d180c6
--- /dev/null
+++ b/core/lib/Drupal/Core/Routing/PartialMatcherInterface.php
@@ -0,0 +1,39 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\Core\Routing\PathMatcherInterface.
+ */
+
+namespace Drupal\Core\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * A PartialMatcher works like a UrlMatcher, but will return multiple candidate routes.
+ */
+interface PartialMatcherInterface {
+
+  /**
+   * Sets the route collection this matcher should use.
+   *
+   * @param \Symfony\Component\Routing\RouteCollection $collection
+   *   The collection against which to match.
+   *
+   * @return \Drupal\Core\Routing\PartialMatcherInterface
+   *   The current matcher.
+   */
+  public function setCollection(RouteCollection $collection);
+
+  /**
+   * Matches a request against multiple routes.
+   *
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   A Request object against which to match.
+   *
+   * @return \Symfony\Component\Routing\RouteCollection
+   *   A RouteCollection of matched routes.
+   */
+  public function matchRequestPartial(Request $request);
+}
diff --git a/core/lib/Drupal/Core/Routing/RouteProvider.php b/core/lib/Drupal/Core/Routing/PathMatcher.php
similarity index 52%
rename from core/lib/Drupal/Core/Routing/RouteProvider.php
rename to core/lib/Drupal/Core/Routing/PathMatcher.php
index 0e4e572..9b5bd5e 100644
--- a/core/lib/Drupal/Core/Routing/RouteProvider.php
+++ b/core/lib/Drupal/Core/Routing/PathMatcher.php
@@ -2,22 +2,21 @@
 
 /**
  * @file
- * Contains Drupal\Core\Routing\RouteProvider.
+ * Definition of Drupal\Core\Routing\PathMatcher.
  */
 
 namespace Drupal\Core\Routing;
 
-use Symfony\Cmf\Component\Routing\RouteProviderInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\RouteCollection;
 use Symfony\Component\Routing\Exception\ResourceNotFoundException;
 
-use \Drupal\Core\Database\Connection;
+use Drupal\Core\Database\Connection;
 
 /**
- * A Route Provider front-end for all Drupal-stored routes.
+ * Initial matcher to match a route against a built database, by path.
  */
-class RouteProvider implements RouteProviderInterface {
+class PathMatcher implements InitialMatcherInterface {
 
   /**
    * The database connection from which to read route information.
@@ -34,13 +33,6 @@ class RouteProvider implements RouteProviderInterface {
   protected $tableName;
 
   /**
-   * A cache of already-loaded routes, keyed by route name.
-   *
-   * @var array
-   */
-  protected $routes;
-
-  /**
    * Constructs a new PathMatcher.
    *
    * @param \Drupal\Core\Database\Connection $connection
@@ -54,31 +46,15 @@ public function __construct(Connection $connection, $table = 'router') {
   }
 
   /**
-   * Finds routes that may potentially match the request.
-   *
-   * This may return a mixed list of class instances, but all routes returned
-   * must extend the core symfony route. The classes may also implement
-   * RouteObjectInterface to link to a content document.
+   * Matches a request against multiple routes.
    *
-   * This method may not throw an exception based on implementation specific
-   * restrictions on the url. That case is considered a not found - returning
-   * an empty array. Exceptions are only used to abort the whole request in
-   * case something is seriously broken, like the storage backend being down.
+   * @param \Symfony\Component\HttpFoundation\Request $request
+   *   A Request object against which to match.
    *
-   * Note that implementations may not implement an optimal matching
-   * algorithm, simply a reasonable first pass.  That allows for potentially
-   * very large route sets to be filtered down to likely candidates, which
-   * may then be filtered in memory more completely.
-   *
-   * @param Request $request A request against which to match.
-   *
-   * @return \Symfony\Component\Routing\RouteCollection with all urls that
-   *      could potentially match $request. Empty collection if nothing can
-   *      match.
-   *
-   * @todo Should this method's found routes also be included in the cache?
+   * @return \Symfony\Component\Routing\RouteCollection
+   *   A RouteCollection of matched routes.
    */
-  public function getRouteCollectionForRequest(Request $request) {
+  public function matchRequestPartial(Request $request) {
 
     // The 'system_path' has language prefix stripped and path alias resolved,
     // whereas getPathInfo() returns the requested path. In Drupal, the request
@@ -121,61 +97,6 @@ public function getRouteCollectionForRequest(Request $request) {
   }
 
   /**
-   * Find the route using the provided route name (and parameters)
-   *
-   * @param string $name the route name to fetch
-   * @param array $parameters the parameters as they are passed to the
-   *      UrlGeneratorInterface::generate call
-   *
-   * @return \Symfony\Component\Routing\Route
-   *
-   * @throws \Symfony\Component\Routing\Exception\RouteNotFoundException if
-   *      there is no route with that name in this repository
-   */
-  public function getRouteByName($name, $parameters = array()) {
-    $routes = $this->getRoutesByNames(array($name), $parameters);
-    if (empty($routes)) {
-      throw new RouteNotFoundException(sprintf('Route "%s" does not exist.', $name));
-    }
-
-    return reset($routes);
-  }
-
-  /**
-   * Find many routes by their names using the provided list of names
-   *
-   * Note that this method may not throw an exception if some of the routes
-   * are not found. It will just return the list of those routes it found.
-   *
-   * This method exists in order to allow performance optimizations. The
-   * simple implementation could be to just repeatedly call
-   * $this->getRouteByName()
-   *
-   * @param array $names the list of names to retrieve
-   * @param array $parameters the parameters as they are passed to the
-   *      UrlGeneratorInterface::generate call. (Only one array, not one for
-   *      each entry in $names.
-   *
-   * @return \Symfony\Component\Routing\Route[] iterable thing with the keys
-   *      the names of the $names argument.
-   */
-  public function getRoutesByNames($names, $parameters = array()) {
-
-    $routes_to_load = array_diff($names, array_keys($this->routes));
-
-    $result = $this->connection->query('SELECT name, route FROM {' . $this->connection->escapeTable($this->table) . '} WHERE name IN :names', array(':names' => $routes_to_load));
-    $routes = $result->fetchAllKeyed();
-
-    $return = array();
-    foreach ($routes as $name => $route) {
-      $this->routes[$name] = unserialize($route);
-    }
-
-    return array_intersect_key($this->routes, $names);
-
-  }
-
-  /**
    * Returns an array of path pattern outlines that could match the path parts.
    *
    * @param array $parts
@@ -224,5 +145,4 @@ public function getCandidateOutlines(array $parts) {
     }
     return $ancestors;
   }
-
 }
diff --git a/core/lib/Drupal/Core/Routing/RouteBuilder.php b/core/lib/Drupal/Core/Routing/RouteBuilder.php
index 232e47e..6f7a86e 100644
--- a/core/lib/Drupal/Core/Routing/RouteBuilder.php
+++ b/core/lib/Drupal/Core/Routing/RouteBuilder.php
@@ -13,7 +13,6 @@
 use Symfony\Component\Routing\RouteCollection;
 use Symfony\Component\Routing\Route;
 
-use Drupal\Core\Extension\ModuleHandlerInterface;
 use Drupal\Core\Lock\LockBackendInterface;
 
 /**
@@ -46,13 +45,6 @@ class RouteBuilder {
   protected $dispatcher;
 
   /**
-   * The extension handler for retieving the list of enabled modules.
-   *
-   * @var \Drupal\Core\Extension\ModuleHandlerInterface
-   */
-  protected $moduleHandler;
-
-  /**
    * Construcs the RouteBuilder using the passed MatcherDumperInterface.
    *
    * @param \Symfony\Component\Routing\Matcher\Dumper\MatcherDumperInterface $dumper
@@ -62,11 +54,10 @@ class RouteBuilder {
    * @param \Symfony\Component\EventDispatcherEventDispatcherInterface
    *   The event dispatcher to notify of routes.
    */
-  public function __construct(MatcherDumperInterface $dumper, LockBackendInterface $lock, EventDispatcherInterface $dispatcher, ModuleHandlerInterface $module_handler) {
+  public function __construct(MatcherDumperInterface $dumper, LockBackendInterface $lock, EventDispatcherInterface $dispatcher) {
     $this->dumper = $dumper;
     $this->lock = $lock;
     $this->dispatcher = $dispatcher;
-    $this->moduleHandler = $module_handler;
   }
 
   /**
@@ -85,9 +76,11 @@ public function rebuild() {
 
     // We need to manually call each module so that we can know which module
     // a given item came from.
-    foreach ($this->moduleHandler->getModuleList() as $module => $filename) {
+    // @todo Use an injected Extension service rather than module_list():
+    //   http://drupal.org/node/1331486.
+    foreach (module_list() as $module) {
       $collection = new RouteCollection();
-      $routing_file = DRUPAL_ROOT . '/' . dirname($filename) . '/' . $module . '.routing.yml';
+      $routing_file = DRUPAL_ROOT . '/' . drupal_get_path('module', $module) . '/' . $module . '.routing.yml';
       if (file_exists($routing_file)) {
         $routes = $parser->parse(file_get_contents($routing_file));
         if (!empty($routes)) {
diff --git a/core/lib/Drupal/Core/Routing/RouteCompiler.php b/core/lib/Drupal/Core/Routing/RouteCompiler.php
index c71c5ca..2585d74 100644
--- a/core/lib/Drupal/Core/Routing/RouteCompiler.php
+++ b/core/lib/Drupal/Core/Routing/RouteCompiler.php
@@ -9,12 +9,11 @@
 
 use Symfony\Component\Routing\RouteCompilerInterface;
 use Symfony\Component\Routing\Route;
-use Symfony\Component\Routing\RouteCompiler as SymfonyRouteCompiler;
 
 /**
  * Compiler to generate derived information from a Route necessary for matching.
  */
-class RouteCompiler extends SymfonyRouteCompiler implements RouteCompilerInterface {
+class RouteCompiler implements RouteCompilerInterface {
 
   /**
    * The maximum number of path elements for a route pattern;
@@ -29,11 +28,6 @@ class RouteCompiler extends SymfonyRouteCompiler implements RouteCompilerInterfa
   /**
    * Compiles the current route instance.
    *
-   * Because so much of the parent class is private, we need to call the parent
-   * class's compile() method and then dissect its return value to build our
-   * new compiled object.  If upstream gets refactored so we can subclass more
-   * easily then this may not be necessary.
-   *
    * @param \Symfony\Component\Routing\Route $route
    *   A Route instance.
    *
@@ -42,29 +36,142 @@ class RouteCompiler extends SymfonyRouteCompiler implements RouteCompilerInterfa
    */
   public function compile(Route $route) {
 
-    $symfony_compiled = parent::compile($route);
-
-    // The Drupal-specific compiled information.
     $stripped_path = $this->getPathWithoutDefaults($route);
+
     $fit = $this->getFit($stripped_path);
+
     $pattern_outline = $this->getPatternOutline($stripped_path);
+
     $num_parts = count(explode('/', trim($pattern_outline, '/')));
 
-    return new CompiledRoute(
-      $route,
-      $fit,
-      $pattern_outline,
-      $num_parts,
-      // These are the Symfony compiled parts.
-      $symfony_compiled->getStaticPrefix(),
-      $symfony_compiled->getRegex(),
-      $symfony_compiled->getTokens(),
-      $symfony_compiled->getPathVariables(),
-      $symfony_compiled->getHostnameRegex(),
-      $symfony_compiled->getHostnameTokens(),
-      $symfony_compiled->getHostnameVariables(),
-      $symfony_compiled->getVariables()
-      );
+    $regex = $this->getRegex($route, $route->getPattern());
+
+    return new CompiledRoute($route, $fit, $pattern_outline, $num_parts, $regex);
+  }
+
+  /**
+   * Generates a regular expression that will match this pattern.
+   *
+   * This regex can be used in preg_match() to extract values inside {}.
+   *
+   * This algorithm was lifted directly from Symfony's RouteCompiler class.
+   * It is not factored out nicely there, so we cannot simply subclass it.
+   * @todo Refactor Symfony's RouteCompiler so that it's useful to subclass.
+   *
+   * @param \Symfony\Component\Routing\Route $route
+   *   The route object.
+   * @param string $pattern
+   *   The pattern for which we want a matching regex.
+   *
+   * @return string
+   *   A regular expression that will match a path against this route.
+   *
+   * @throws \LogicException
+   */
+  public function getRegex(Route $route, $pattern) {
+    $len = strlen($pattern);
+    $tokens = array();
+    $variables = array();
+    $pos = 0;
+    preg_match_all('#.\{(\w+)\}#', $pattern, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
+    foreach ($matches as $match) {
+      if ($text = substr($pattern, $pos, $match[0][1] - $pos)) {
+        $tokens[] = array('text', $text);
+      }
+
+      $pos = $match[0][1] + strlen($match[0][0]);
+      $var = $match[1][0];
+
+      if ($req = $route->getRequirement($var)) {
+        $regexp = $req;
+      }
+      else {
+        // Use the character preceding the variable as a separator
+        $separators = array($match[0][0][0]);
+
+        if ($pos !== $len) {
+          // Use the character following the variable as the separator when available
+          $separators[] = $pattern[$pos];
+        }
+        $regexp = sprintf('[^%s]+', preg_quote(implode('', array_unique($separators)), self::REGEX_DELIMITER));
+      }
+
+      $tokens[] = array('variable', $match[0][0][0], $regexp, $var);
+
+      if (in_array($var, $variables)) {
+        throw new \LogicException(sprintf('Route pattern "%s" cannot reference variable name "%s" more than once.', $route->getPattern(), $var));
+      }
+
+      $variables[] = $var;
+    }
+
+    if ($pos < $len) {
+      $tokens[] = array('text', substr($pattern, $pos));
+    }
+
+    // find the first optional token
+    $first_optional = INF;
+    for ($i = count($tokens) - 1; $i >= 0; $i--) {
+        $token = $tokens[$i];
+        if ('variable' === $token[0] && $route->hasDefault($token[3])) {
+            $first_optional = $i;
+        } else {
+            break;
+        }
+    }
+
+    // compute the matching regexp
+    $regexp = '';
+    for ($i = 0, $nbToken = count($tokens); $i < $nbToken; $i++) {
+        $regexp .= $this->computeRegexp($tokens, $i, $first_optional);
+    }
+
+    return self::REGEX_DELIMITER.'^'.$regexp.'$'.self::REGEX_DELIMITER.'s';
+  }
+
+  /**
+   * Computes the regexp used to match a specific token. It can be static text or a subpattern.
+   *
+   * @param array $tokens
+   *   The route tokens
+   * @param integer $index
+   *   The index of the current token
+   * @param integer $first_optional
+   *   The index of the first optional token
+   *
+   * @return string
+   *   The regexp pattern for a single token
+   */
+  private function computeRegexp(array $tokens, $index, $first_optional) {
+    $token = $tokens[$index];
+    if ('text' === $token[0]) {
+      // Text tokens
+      return preg_quote($token[1], self::REGEX_DELIMITER);
+    }
+    else {
+      // Variable tokens
+      if (0 === $index && 0 === $first_optional) {
+        // When the only token is an optional variable token, the separator is
+        // required.
+        return sprintf('%s(?<%s>%s)?', preg_quote($token[1], self::REGEX_DELIMITER), $token[3], $token[2]);
+      }
+      else {
+        $regexp = sprintf('%s(?<%s>%s)', preg_quote($token[1], self::REGEX_DELIMITER), $token[3], $token[2]);
+        if ($index >= $first_optional) {
+          // Enclose each optional token in a subpattern to make it optional.
+          // "?:" means it is non-capturing, i.e. the portion of the subject
+          // string that matched the optional subpattern is not passed back.
+          $regexp = "(?:$regexp";
+          $nbTokens = count($tokens);
+          if ($nbTokens - 1 == $index) {
+            // Close the optional subpatterns.
+            $regexp .= str_repeat(")?", $nbTokens - $first_optional - (0 === $first_optional ? 1 : 0));
+          }
+        }
+
+        return $regexp;
+      }
+    }
   }
 
   /**
diff --git a/core/lib/Drupal/Core/Routing/UrlGenerator.php b/core/lib/Drupal/Core/Routing/UrlGenerator.php
deleted file mode 100644
index 75779a2..0000000
--- a/core/lib/Drupal/Core/Routing/UrlGenerator.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\Core\Routing\UrlGenerator.
- */
-
-namespace Drupal\Core\Routing;
-
-use Symfony\Component\HttpKernel\Log\LoggerInterface;
-
-use Symfony\Cmf\Component\Routing\ProviderBasedGenerator;
-use Symfony\Cmf\Component\Routing\RouteProviderInterface;
-
-use Drupal\Core\Path\AliasManagerInterface;
-
-/**
- * A Generator creates URL strings based on a specified route.
- */
-class UrlGenerator extends ProviderBasedGenerator {
-
-  /**
-   * The alias manager that will be used to alias generated URLs.
-   *
-   * @var AliasManagerInterface
-   */
-  protected $aliasManager;
-
-  /**
-   *  Constructs a new generator object.
-   *
-   * @param \Symfony\Cmf\Component\Routing\RouteProviderInterface $provider
-   *   The route provider to be searched for routes.
-   * @param \Drupal\Core\Path\AliasManagerInterface $alias_manager
-   *   The alias manager responsible for path aliasing.
-   * @param \Symfony\Component\HttpKernel\Log\LoggerInterface $logger
-   *   An optional logger for recording errors.
-   */
-  public function __construct(RouteProviderInterface $provider, AliasManagerInterface $alias_manager, LoggerInterface $logger = NULL) {
-    parent::__construct($provider, $logger);
-
-    $this->aliasManager = $alias_manager;
-  }
-
-  /**
-   * Implements Symfony\Component\Routing\Generator\UrlGeneratorInterface::generate();
-   */
-  public function generate($name, $parameters = array(), $absolute = FALSE) {
-    $path = parent::generate($name, $parameters, $absolute);
-
-    // This method is expected to return a path with a leading /, whereas
-    // the alias manager has no leading /.
-    $path = '/' . $this->aliasManager->getPathAlias(trim($path, '/'));
-
-    return $path;
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Routing/UrlMatcher.php b/core/lib/Drupal/Core/Routing/UrlMatcher.php
deleted file mode 100644
index ae5fc7d..0000000
--- a/core/lib/Drupal/Core/Routing/UrlMatcher.php
+++ /dev/null
@@ -1,36 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\Core\Routing\UrlMatcher.
- */
-
-namespace Drupal\Core\Routing;
-
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\Routing\RouteCollection;
-use Symfony\Component\Routing\RequestContext;
-use Symfony\Cmf\Component\Routing\NestedMatcher\UrlMatcher as BaseUrlMatcher;
-
-/**
- * Drupal-specific URL Matcher; handles the Drupal "system path" mapping.
- */
-class UrlMatcher extends BaseUrlMatcher {
-
-  /**
-   * Constructs a new UrlMatcher.
-   *
-   * The parent class has a constructor we need to skip, so just override it
-   * with a no-op.
-   */
-  public function __construct() {}
-
-  public function finalMatch(RouteCollection $collection, Request $request) {
-    $this->routes = $collection;
-    $context = new RequestContext();
-    $context->fromRequest($request);
-    $this->setContext($context);
-    return $this->match('/' . $request->attributes->get('system_path'));
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Serialization/XmlEncoder.php b/core/lib/Drupal/Core/Serialization/XmlEncoder.php
deleted file mode 100644
index 7235af3..0000000
--- a/core/lib/Drupal/Core/Serialization/XmlEncoder.php
+++ /dev/null
@@ -1,72 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\Serialization\XmlEncoder.
- */
-
-namespace Drupal\Core\Serialization;
-
-use Symfony\Component\Serializer\Encoder\EncoderInterface;
-use Symfony\Component\Serializer\Encoder\DecoderInterface;
-use Symfony\Component\Serializer\Encoder\SerializerAwareEncoder;
-use Symfony\Component\Serializer\Encoder\XmlEncoder as BaseXmlEncoder;
-
-/**
- * Adds XML support for serializer.
- *
- * This acts as a wrapper class for Symfony's XmlEncoder so that it is not
- * implementing NormalizationAwareInterface, and can be normalized externally.
- */
-class XmlEncoder extends SerializerAwareEncoder implements EncoderInterface, DecoderInterface {
-
-  /**
-   * The formats that this Encoder supports.
-   *
-   * @var array
-   */
-  static protected $format = array('xml');
-
-  /**
-   * An instance of the Symfony XmlEncoder to perform the actual encoding.
-   *
-   * @var \Symfony\Component\Serializer\Encoder\XmlEncoder
-   */
-  protected $baseEncoder;
-
-  /**
-   * Constucts the XmlEncoder object, creating a BaseXmlEncoder class also.
-   */
-  public function __construct() {
-    $this->baseEncoder = new BaseXmlEncoder();
-  }
-
-  /**
-   * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::encode().
-   */
-  public function encode($data, $format){
-    $normalized = $this->serializer->normalize($data, $format);
-    return $this->baseEncoder->encode($normalized, $format);
-  }
-
-  /**
-   * Implements \Symfony\Component\Serializer\Encoder\JsonEncoder::supportsEncoding().
-   */
-  public function supportsEncoding($format) {
-    return in_array($format, static::$format);
-  }
-
-  /**
-   * Implements \Symfony\Component\Serializer\Encoder\EncoderInterface::decode().
-   */
-  public function decode($data, $format){
-    return $this->baseEncoder->decode($data, $format);
-  }
-
-  /**
-   * Implements \Symfony\Component\Serializer\Encoder\JsonEncoder::supportsDecoding().
-   */
-  public function supportsDecoding($format) {
-    return in_array($format, static::$format);
-  }
-}
diff --git a/core/lib/Drupal/Core/Utility/ThemeRegistry.php b/core/lib/Drupal/Core/Utility/ThemeRegistry.php
index eb2dd80..bc9691c 100644
--- a/core/lib/Drupal/Core/Utility/ThemeRegistry.php
+++ b/core/lib/Drupal/Core/Utility/ThemeRegistry.php
@@ -42,14 +42,12 @@ class ThemeRegistry extends CacheArray {
    *   The bin to cache the array.
    * @param array $tags
    *   (optional) The tags to specify for the cache item.
-   * @param bool $modules_loaded
-   *   Whether all modules have already been loaded.
    */
-  function __construct($cid, $bin, $tags, $modules_loaded = FALSE) {
+  function __construct($cid, $bin, $tags) {
     $this->cid = $cid;
     $this->bin = $bin;
     $this->tags = $tags;
-    $this->persistable = $modules_loaded && $_SERVER['REQUEST_METHOD'] == 'GET';
+    $this->persistable = module_load_all(NULL) && $_SERVER['REQUEST_METHOD'] == 'GET';
 
     $data = array();
     if ($this->persistable && $cached = cache($this->bin)->get($this->cid)) {
diff --git a/core/misc/.gitignore b/core/misc/.gitignore
deleted file mode 100644
index 889e559..0000000
--- a/core/misc/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-ckeditor/samples
diff --git a/core/misc/ckeditor/CHANGES.md b/core/misc/ckeditor/CHANGES.md
deleted file mode 100644
index 4370e54..0000000
--- a/core/misc/ckeditor/CHANGES.md
+++ /dev/null
@@ -1,56 +0,0 @@
-CKEditor 4 Changelog
-====================
-
-## CKEditor 4.0.1
-
-Fixed issues:
-
-* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in new Moono skin.
-* Accessibility issues (mainly on inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844).
-* Magic-line:
-    * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic-line.
-    * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic-line support for forms.
-    * [#9573](http://dev.ckeditor.com/ticket/9573): Magic-line doesn't disappear on `mouseout` in the specific case.
-* [#9754](http://dev.ckeditor.com/ticket/9754): [Webkit] Cut & paste simple unformatted text generates inline wrapper in Webkits.
-* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS-Word.
-* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging.
-* Context menu:
-    * [#9712](http://dev.ckeditor.com/ticket/9712): Context menu open destroys editor focus.
-    * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over floating toolbar.
-    * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates JS error in inline mode when editor attached to header element.
-* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing window.
-* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div based editor puts editing area under bottom UI space.
-* [#9528](http://dev.ckeditor.com/ticket/9528): Host page's `box-sizing` style shouldn't influence editor UI elements.
-* [#9503](http://dev.ckeditor.com/ticket/9503): Forms plugin adds context menu listeners only on supported input types. Added support for `tel, email, search` and `url` input types.
-* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in narrow window.
-* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog doesn't populate width correctly.
-* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in nested table removes outer table cell.
-* [#9815](http://dev.ckeditor.com/ticket/9815): Can't edit dialog fields on editor initialized in jQuery UI modal dialog.
-* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialogs do not show completely in small window.
-* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a div stay permanently even after user exists editing the div.
-* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing format combo by clicking on its button.
-* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when `border-width` style is specified.
-* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read only mode.
-* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected image.
-* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>`.
-* [#9709](http://dev.ckeditor.com/ticket/9709): PasteFromWord should not depend on configuration from other styles.
-* [#9726](http://dev.ckeditor.com/ticket/9726): Removed color dialog dependency from table tools.
-* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly on Accessibility Instructions dialog.
-* [#9771](http://dev.ckeditor.com/ticket/9771): [Webkit & Opera] Fixed scrolling issues when pasting.
-* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] onChange isn't fired for checkboxes in dialogs.
-* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When we open toolbar menu for the first time & press down arrow key, focus goes to next toolbar button instead of menu options.
-* [#9847](http://dev.ckeditor.com/ticket/9847): Elements path shouldn't be initialized on inline editor.
-* [#9853](http://dev.ckeditor.com/ticket/9853): `Editor#addRemoveFormatFilter` is exposed before it really works.
-* [#8893](http://dev.ckeditor.com/ticket/8893): Value of `pasteFromWordCleanupFile` config is now taken from instance configuration.
-* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "live preview" checkbox from UI color picker.
-
-
-## CKEditor 4.0
-
-The first stable release of the new CKEditor 4 code line.
-
-The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever
-possible. The list of relevant changes can be found in the [API Changes page of
-the CKEditor 4 documentation][1].
-
-[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes""
diff --git a/core/misc/ckeditor/LICENSE.md b/core/misc/ckeditor/LICENSE.md
deleted file mode 100644
index cf70e61..0000000
--- a/core/misc/ckeditor/LICENSE.md
+++ /dev/null
@@ -1,1264 +0,0 @@
-Software License Agreement
-==========================
-
-CKEditor - The text editor for Internet - http://ckeditor.com
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-
-Licensed under the terms of any of the following licenses at your
-choice:
-
- - GNU General Public License Version 2 or later (the "GPL")
-   http://www.gnu.org/licenses/gpl.html
-   (See Appendix A)
-
- - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
-   http://www.gnu.org/licenses/lgpl.html
-   (See Appendix B)
-
- - Mozilla Public License Version 1.1 or later (the "MPL")
-   http://www.mozilla.org/MPL/MPL-1.1.html
-   (See Appendix C)
-
-You are not required to, but if you want to explicitly declare the
-license you have chosen to be bound to when using, reproducing,
-modifying and distributing this software, just include a text file
-titled "legal.txt" in your version of this software, indicating your
-license choice. In any case, your choice will not restrict any
-recipient of your version of this software to use, reproduce, modify
-and distribute this software under any of the above licenses.
-
-Sources of Intellectual Property Included in CKEditor
------------------------------------------------------
-
-Where not otherwise indicated, all CKEditor content is authored by
-CKSource engineers and consists of CKSource-owned intellectual
-property. In some specific instances, CKEditor will incorporate work
-done by developers outside of CKSource with their express permission.
-
-Trademarks
-----------
-
-CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
-and product names are trademarks, registered trademarks or service
-marks of their respective holders.
-
----
-
-Appendix A: The GPL License
----------------------------
-
-GNU GENERAL PUBLIC LICENSE
-Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software-to make sure the software is free for all its users.  This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it.  (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.)  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
-  To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have.  You must make sure that they, too, receive or can get the
-source code.  And you must show them these terms so they know their
-rights.
-
-  We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
-  Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software.  If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
-  Finally, any free program is threatened constantly by software
-patents.  We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary.  To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-GNU GENERAL PUBLIC LICENSE
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License.  The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language.  (Hereinafter, translation is included without limitation in
-the term "modification".)  Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-  1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-  2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) You must cause the modified files to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    b) You must cause any work that you distribute or publish, that in
-    whole or in part contains or is derived from the Program or any
-    part thereof, to be licensed as a whole at no charge to all third
-    parties under the terms of this License.
-
-    c) If the modified program normally reads commands interactively
-    when run, you must cause it, when started running for such
-    interactive use in the most ordinary way, to print or display an
-    announcement including an appropriate copyright notice and a
-    notice that there is no warranty (or else, saying that you provide
-    a warranty) and that users may redistribute the program under
-    these conditions, and telling the user how to view a copy of this
-    License.  (Exception: if the Program itself is interactive but
-    does not normally print such an announcement, your work based on
-    the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-    a) Accompany it with the complete corresponding machine-readable
-    source code, which must be distributed under the terms of Sections
-    1 and 2 above on a medium customarily used for software interchange; or,
-
-    b) Accompany it with a written offer, valid for at least three
-    years, to give any third party, for a charge no more than your
-    cost of physically performing source distribution, a complete
-    machine-readable copy of the corresponding source code, to be
-    distributed under the terms of Sections 1 and 2 above on a medium
-    customarily used for software interchange; or,
-
-    c) Accompany it with the information you received as to the offer
-    to distribute corresponding source code.  (This alternative is
-    allowed only for noncommercial distribution and only if you
-    received the program in object code or executable form with such
-    an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it.  For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable.  However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License.  Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-  5. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Program or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-  6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-  7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded.  In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-  9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation.  If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-  10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission.  For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this.  Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-NO WARRANTY
-
-  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-
-Appendix B: The LGPL License
-----------------------------
-
-GNU LESSER GENERAL PUBLIC LICENSE
-Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL.  It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-Preamble
-
-  The licenses for most software are designed to take away your
-freedom to share and change it.  By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software-to make sure the software is free for all its users.
-
-  This license, the Lesser General Public License, applies to some
-specially designated software packages-typically libraries-of the
-Free Software Foundation and other authors who decide to use it.  You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
-  When we speak of free software, we are referring to freedom of use,
-not price.  Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
-  To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights.  These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
-  For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you.  You must make sure that they, too, receive or can get the source
-code.  If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it.  And you must show them these terms so they know their rights.
-
-  We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
-  To protect each distributor, we want to make it very clear that
-there is no warranty for the free library.  Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
-  Finally, software patents pose a constant threat to the existence of
-any free program.  We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder.  Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
-  Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License.  This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License.  We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
-  When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library.  The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom.  The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
-  We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License.  It also provides other free software developers Less
-of an advantage over competing non-free programs.  These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries.  However, the Lesser license provides advantages in certain
-special circumstances.
-
-  For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard.  To achieve this, non-free programs must be
-allowed to use the library.  A more frequent case is that a free
-library does the same job as widely used non-free libraries.  In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
-  In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software.  For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
-  Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.  Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library".  The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-GNU LESSER GENERAL PUBLIC LICENSE
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-  0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
-  A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
-  The "Library", below, refers to any such software library or work
-which has been distributed under these terms.  A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language.  (Hereinafter, translation is
-included without limitation in the term "modification".)
-
-  "Source code" for a work means the preferred form of the work for
-making modifications to it.  For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
-  Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope.  The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it).  Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-  1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
-  You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-  2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-    a) The modified work must itself be a software library.
-
-    b) You must cause the files modified to carry prominent notices
-    stating that you changed the files and the date of any change.
-
-    c) You must cause the whole of the work to be licensed at no
-    charge to all third parties under the terms of this License.
-
-    d) If a facility in the modified Library refers to a function or a
-    table of data to be supplied by an application program that uses
-    the facility, other than as an argument passed when the facility
-    is invoked, then you must make a good faith effort to ensure that,
-    in the event an application does not supply such function or
-    table, the facility still operates, and performs whatever part of
-    its purpose remains meaningful.
-
-    (For example, a function in a library to compute square roots has
-    a purpose that is entirely well-defined independent of the
-    application.  Therefore, Subsection 2d requires that any
-    application-supplied function or table used by this function must
-    be optional: if the application does not supply it, the square
-    root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole.  If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works.  But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-  3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library.  To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License.  (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.)  Do not make any other change in
-these notices.
-
-  Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
-  This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-  4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
-  If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-  5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library".  Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
-  However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library".  The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
-  When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library.  The
-threshold for this to be true is not precisely defined by law.
-
-  If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work.  (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
-  Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-  6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
-  You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License.  You must supply a copy of this License.  If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License.  Also, you must do one
-of these things:
-
-    a) Accompany the work with the complete corresponding
-    machine-readable source code for the Library including whatever
-    changes were used in the work (which must be distributed under
-    Sections 1 and 2 above); and, if the work is an executable linked
-    with the Library, with the complete machine-readable "work that
-    uses the Library", as object code and/or source code, so that the
-    user can modify the Library and then relink to produce a modified
-    executable containing the modified Library.  (It is understood
-    that the user who changes the contents of definitions files in the
-    Library will not necessarily be able to recompile the application
-    to use the modified definitions.)
-
-    b) Use a suitable shared library mechanism for linking with the
-    Library.  A suitable mechanism is one that (1) uses at run time a
-    copy of the library already present on the user's computer system,
-    rather than copying library functions into the executable, and (2)
-    will operate properly with a modified version of the library, if
-    the user installs one, as long as the modified version is
-    interface-compatible with the version that the work was made with.
-
-    c) Accompany the work with a written offer, valid for at
-    least three years, to give the same user the materials
-    specified in Subsection 6a, above, for a charge no more
-    than the cost of performing this distribution.
-
-    d) If distribution of the work is made by offering access to copy
-    from a designated place, offer equivalent access to copy the above
-    specified materials from the same place.
-
-    e) Verify that the user has already received a copy of these
-    materials or that you have already sent this user a copy.
-
-  For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it.  However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
-  It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system.  Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-  7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-    a) Accompany the combined library with a copy of the same work
-    based on the Library, uncombined with any other library
-    facilities.  This must be distributed under the terms of the
-    Sections above.
-
-    b) Give prominent notice with the combined library of the fact
-    that part of it is a work based on the Library, and explaining
-    where to find the accompanying uncombined form of the same work.
-
-  8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License.  Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License.  However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-  9. You are not required to accept this License, since you have not
-signed it.  However, nothing else grants you permission to modify or
-distribute the Library or its derivative works.  These actions are
-prohibited by law if you do not accept this License.  Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-  10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions.  You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-  11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all.  For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices.  Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-  12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded.  In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-  13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number.  If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation.  If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-  14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission.  For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this.  Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-NO WARRANTY
-
-  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-
-Appendix C: The MPL License
----------------------------
-
-MOZILLA PUBLIC LICENSE
-Version 1.1
-
-1. Definitions.
-
-     1.0.1. "Commercial Use" means distribution or otherwise making the
-     Covered Code available to a third party.
-
-     1.1. "Contributor" means each entity that creates or contributes to
-     the creation of Modifications.
-
-     1.2. "Contributor Version" means the combination of the Original
-     Code, prior Modifications used by a Contributor, and the Modifications
-     made by that particular Contributor.
-
-     1.3. "Covered Code" means the Original Code or Modifications or the
-     combination of the Original Code and Modifications, in each case
-     including portions thereof.
-
-     1.4. "Electronic Distribution Mechanism" means a mechanism generally
-     accepted in the software development community for the electronic
-     transfer of data.
-
-     1.5. "Executable" means Covered Code in any form other than Source
-     Code.
-
-     1.6. "Initial Developer" means the individual or entity identified
-     as the Initial Developer in the Source Code notice required by Exhibit
-     A.
-
-     1.7. "Larger Work" means a work which combines Covered Code or
-     portions thereof with code not governed by the terms of this License.
-
-     1.8. "License" means this document.
-
-     1.8.1. "Licensable" means having the right to grant, to the maximum
-     extent possible, whether at the time of the initial grant or
-     subsequently acquired, any and all of the rights conveyed herein.
-
-     1.9. "Modifications" means any addition to or deletion from the
-     substance or structure of either the Original Code or any previous
-     Modifications. When Covered Code is released as a series of files, a
-     Modification is:
-          A. Any addition to or deletion from the contents of a file
-          containing Original Code or previous Modifications.
-
-          B. Any new file that contains any part of the Original Code or
-          previous Modifications.
-
-     1.10. "Original Code" means Source Code of computer software code
-     which is described in the Source Code notice required by Exhibit A as
-     Original Code, and which, at the time of its release under this
-     License is not already Covered Code governed by this License.
-
-     1.10.1. "Patent Claims" means any patent claim(s), now owned or
-     hereafter acquired, including without limitation,  method, process,
-     and apparatus claims, in any patent Licensable by grantor.
-
-     1.11. "Source Code" means the preferred form of the Covered Code for
-     making modifications to it, including all modules it contains, plus
-     any associated interface definition files, scripts used to control
-     compilation and installation of an Executable, or source code
-     differential comparisons against either the Original Code or another
-     well known, available Covered Code of the Contributor's choice. The
-     Source Code can be in a compressed or archival form, provided the
-     appropriate decompression or de-archiving software is widely available
-     for no charge.
-
-     1.12. "You" (or "Your")  means an individual or a legal entity
-     exercising rights under, and complying with all of the terms of, this
-     License or a future version of this License issued under Section 6.1.
-     For legal entities, "You" includes any entity which controls, is
-     controlled by, or is under common control with You. For purposes of
-     this definition, "control" means (a) the power, direct or indirect,
-     to cause the direction or management of such entity, whether by
-     contract or otherwise, or (b) ownership of more than fifty percent
-     (50%) of the outstanding shares or beneficial ownership of such
-     entity.
-
-2. Source Code License.
-
-     2.1. The Initial Developer Grant.
-     The Initial Developer hereby grants You a world-wide, royalty-free,
-     non-exclusive license, subject to third party intellectual property
-     claims:
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Initial Developer to use, reproduce,
-          modify, display, perform, sublicense and distribute the Original
-          Code (or portions thereof) with or without Modifications, and/or
-          as part of a Larger Work; and
-
-          (b) under Patents Claims infringed by the making, using or
-          selling of Original Code, to make, have made, use, practice,
-          sell, and offer for sale, and/or otherwise dispose of the
-          Original Code (or portions thereof).
-
-          (c) the licenses granted in this Section 2.1(a) and (b) are
-          effective on the date Initial Developer first distributes
-          Original Code under the terms of this License.
-
-          (d) Notwithstanding Section 2.1(b) above, no patent license is
-          granted: 1) for code that You delete from the Original Code; 2)
-          separate from the Original Code;  or 3) for infringements caused
-          by: i) the modification of the Original Code or ii) the
-          combination of the Original Code with other software or devices.
-
-     2.2. Contributor Grant.
-     Subject to third party intellectual property claims, each Contributor
-     hereby grants You a world-wide, royalty-free, non-exclusive license
-
-          (a)  under intellectual property rights (other than patent or
-          trademark) Licensable by Contributor, to use, reproduce, modify,
-          display, perform, sublicense and distribute the Modifications
-          created by such Contributor (or portions thereof) either on an
-          unmodified basis, with other Modifications, as Covered Code
-          and/or as part of a Larger Work; and
-
-          (b) under Patent Claims infringed by the making, using, or
-          selling of  Modifications made by that Contributor either alone
-          and/or in combination with its Contributor Version (or portions
-          of such combination), to make, use, sell, offer for sale, have
-          made, and/or otherwise dispose of: 1) Modifications made by that
-          Contributor (or portions thereof); and 2) the combination of
-          Modifications made by that Contributor with its Contributor
-          Version (or portions of such combination).
-
-          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
-          effective on the date Contributor first makes Commercial Use of
-          the Covered Code.
-
-          (d)    Notwithstanding Section 2.2(b) above, no patent license is
-          granted: 1) for any code that Contributor has deleted from the
-          Contributor Version; 2)  separate from the Contributor Version;
-          3)  for infringements caused by: i) third party modifications of
-          Contributor Version or ii)  the combination of Modifications made
-          by that Contributor with other software  (except as part of the
-          Contributor Version) or other devices; or 4) under Patent Claims
-          infringed by Covered Code in the absence of Modifications made by
-          that Contributor.
-
-3. Distribution Obligations.
-
-     3.1. Application of License.
-     The Modifications which You create or to which You contribute are
-     governed by the terms of this License, including without limitation
-     Section 2.2. The Source Code version of Covered Code may be
-     distributed only under the terms of this License or a future version
-     of this License released under Section 6.1, and You must include a
-     copy of this License with every copy of the Source Code You
-     distribute. You may not offer or impose any terms on any Source Code
-     version that alters or restricts the applicable version of this
-     License or the recipients' rights hereunder. However, You may include
-     an additional document offering the additional rights described in
-     Section 3.5.
-
-     3.2. Availability of Source Code.
-     Any Modification which You create or to which You contribute must be
-     made available in Source Code form under the terms of this License
-     either on the same media as an Executable version or via an accepted
-     Electronic Distribution Mechanism to anyone to whom you made an
-     Executable version available; and if made available via Electronic
-     Distribution Mechanism, must remain available for at least twelve (12)
-     months after the date it initially became available, or at least six
-     (6) months after a subsequent version of that particular Modification
-     has been made available to such recipients. You are responsible for
-     ensuring that the Source Code version remains available even if the
-     Electronic Distribution Mechanism is maintained by a third party.
-
-     3.3. Description of Modifications.
-     You must cause all Covered Code to which You contribute to contain a
-     file documenting the changes You made to create that Covered Code and
-     the date of any change. You must include a prominent statement that
-     the Modification is derived, directly or indirectly, from Original
-     Code provided by the Initial Developer and including the name of the
-     Initial Developer in (a) the Source Code, and (b) in any notice in an
-     Executable version or related documentation in which You describe the
-     origin or ownership of the Covered Code.
-
-     3.4. Intellectual Property Matters
-          (a) Third Party Claims.
-          If Contributor has knowledge that a license under a third party's
-          intellectual property rights is required to exercise the rights
-          granted by such Contributor under Sections 2.1 or 2.2,
-          Contributor must include a text file with the Source Code
-          distribution titled "LEGAL" which describes the claim and the
-          party making the claim in sufficient detail that a recipient will
-          know whom to contact. If Contributor obtains such knowledge after
-          the Modification is made available as described in Section 3.2,
-          Contributor shall promptly modify the LEGAL file in all copies
-          Contributor makes available thereafter and shall take other steps
-          (such as notifying appropriate mailing lists or newsgroups)
-          reasonably calculated to inform those who received the Covered
-          Code that new knowledge has been obtained.
-
-          (b) Contributor APIs.
-          If Contributor's Modifications include an application programming
-          interface and Contributor has knowledge of patent licenses which
-          are reasonably necessary to implement that API, Contributor must
-          also include this information in the LEGAL file.
-
-               (c)    Representations.
-          Contributor represents that, except as disclosed pursuant to
-          Section 3.4(a) above, Contributor believes that Contributor's
-          Modifications are Contributor's original creation(s) and/or
-          Contributor has sufficient rights to grant the rights conveyed by
-          this License.
-
-     3.5. Required Notices.
-     You must duplicate the notice in Exhibit A in each file of the Source
-     Code.  If it is not possible to put such notice in a particular Source
-     Code file due to its structure, then You must include such notice in a
-     location (such as a relevant directory) where a user would be likely
-     to look for such a notice.  If You created one or more Modification(s)
-     You may add your name as a Contributor to the notice described in
-     Exhibit A.  You must also duplicate this License in any documentation
-     for the Source Code where You describe recipients' rights or ownership
-     rights relating to Covered Code.  You may choose to offer, and to
-     charge a fee for, warranty, support, indemnity or liability
-     obligations to one or more recipients of Covered Code. However, You
-     may do so only on Your own behalf, and not on behalf of the Initial
-     Developer or any Contributor. You must make it absolutely clear than
-     any such warranty, support, indemnity or liability obligation is
-     offered by You alone, and You hereby agree to indemnify the Initial
-     Developer and every Contributor for any liability incurred by the
-     Initial Developer or such Contributor as a result of warranty,
-     support, indemnity or liability terms You offer.
-
-     3.6. Distribution of Executable Versions.
-     You may distribute Covered Code in Executable form only if the
-     requirements of Section 3.1-3.5 have been met for that Covered Code,
-     and if You include a notice stating that the Source Code version of
-     the Covered Code is available under the terms of this License,
-     including a description of how and where You have fulfilled the
-     obligations of Section 3.2. The notice must be conspicuously included
-     in any notice in an Executable version, related documentation or
-     collateral in which You describe recipients' rights relating to the
-     Covered Code. You may distribute the Executable version of Covered
-     Code or ownership rights under a license of Your choice, which may
-     contain terms different from this License, provided that You are in
-     compliance with the terms of this License and that the license for the
-     Executable version does not attempt to limit or alter the recipient's
-     rights in the Source Code version from the rights set forth in this
-     License. If You distribute the Executable version under a different
-     license You must make it absolutely clear that any terms which differ
-     from this License are offered by You alone, not by the Initial
-     Developer or any Contributor. You hereby agree to indemnify the
-     Initial Developer and every Contributor for any liability incurred by
-     the Initial Developer or such Contributor as a result of any such
-     terms You offer.
-
-     3.7. Larger Works.
-     You may create a Larger Work by combining Covered Code with other code
-     not governed by the terms of this License and distribute the Larger
-     Work as a single product. In such a case, You must make sure the
-     requirements of this License are fulfilled for the Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
-     If it is impossible for You to comply with any of the terms of this
-     License with respect to some or all of the Covered Code due to
-     statute, judicial order, or regulation then You must: (a) comply with
-     the terms of this License to the maximum extent possible; and (b)
-     describe the limitations and the code they affect. Such description
-     must be included in the LEGAL file described in Section 3.4 and must
-     be included with all distributions of the Source Code. Except to the
-     extent prohibited by statute or regulation, such description must be
-     sufficiently detailed for a recipient of ordinary skill to be able to
-     understand it.
-
-5. Application of this License.
-
-     This License applies to code to which the Initial Developer has
-     attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
-     6.1. New Versions.
-     Netscape Communications Corporation ("Netscape") may publish revised
-     and/or new versions of the License from time to time. Each version
-     will be given a distinguishing version number.
-
-     6.2. Effect of New Versions.
-     Once Covered Code has been published under a particular version of the
-     License, You may always continue to use it under the terms of that
-     version. You may also choose to use such Covered Code under the terms
-     of any subsequent version of the License published by Netscape. No one
-     other than Netscape has the right to modify the terms applicable to
-     Covered Code created under this License.
-
-     6.3. Derivative Works.
-     If You create or use a modified version of this License (which you may
-     only do in order to apply it to code which is not already Covered Code
-     governed by this License), You must (a) rename Your license so that
-     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
-     "MPL", "NPL" or any confusingly similar phrase do not appear in your
-     license (except to note that your license differs from this License)
-     and (b) otherwise make it clear that Your version of the license
-     contains terms which differ from the Mozilla Public License and
-     Netscape Public License. (Filling in the name of the Initial
-     Developer, Original Code or Contributor in the notice described in
-     Exhibit A shall not of themselves be deemed to be modifications of
-     this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
-     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
-     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
-     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
-     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
-     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
-     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
-     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
-     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
-     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
-     8.1.  This License and the rights granted hereunder will terminate
-     automatically if You fail to comply with terms herein and fail to cure
-     such breach within 30 days of becoming aware of the breach. All
-     sublicenses to the Covered Code which are properly granted shall
-     survive any termination of this License. Provisions which, by their
-     nature, must remain in effect beyond the termination of this License
-     shall survive.
-
-     8.2.  If You initiate litigation by asserting a patent infringement
-     claim (excluding declatory judgment actions) against Initial Developer
-     or a Contributor (the Initial Developer or Contributor against whom
-     You file such action is referred to as "Participant")  alleging that:
-
-     (a)  such Participant's Contributor Version directly or indirectly
-     infringes any patent, then any and all rights granted by such
-     Participant to You under Sections 2.1 and/or 2.2 of this License
-     shall, upon 60 days notice from Participant terminate prospectively,
-     unless if within 60 days after receipt of notice You either: (i)
-     agree in writing to pay Participant a mutually agreeable reasonable
-     royalty for Your past and future use of Modifications made by such
-     Participant, or (ii) withdraw Your litigation claim with respect to
-     the Contributor Version against such Participant.  If within 60 days
-     of notice, a reasonable royalty and payment arrangement are not
-     mutually agreed upon in writing by the parties or the litigation claim
-     is not withdrawn, the rights granted by Participant to You under
-     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
-     the 60 day notice period specified above.
-
-     (b)  any software, hardware, or device, other than such Participant's
-     Contributor Version, directly or indirectly infringes any patent, then
-     any rights granted to You by such Participant under Sections 2.1(b)
-     and 2.2(b) are revoked effective as of the date You first made, used,
-     sold, distributed, or had made, Modifications made by that
-     Participant.
-
-     8.3.  If You assert a patent infringement claim against Participant
-     alleging that such Participant's Contributor Version directly or
-     indirectly infringes any patent where such claim is resolved (such as
-     by license or settlement) prior to the initiation of patent
-     infringement litigation, then the reasonable value of the licenses
-     granted by such Participant under Sections 2.1 or 2.2 shall be taken
-     into account in determining the amount or value of any payment or
-     license.
-
-     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
-     all end user license agreements (excluding distributors and resellers)
-     which have been validly granted by You or any distributor hereunder
-     prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
-     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
-     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
-     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
-     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
-     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
-     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
-     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
-     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
-     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
-     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
-     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
-     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
-     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
-     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
-     The Covered Code is a "commercial item," as that term is defined in
-     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
-     software" and "commercial computer software documentation," as such
-     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
-     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
-     all U.S. Government End Users acquire Covered Code with only those
-     rights set forth herein.
-
-11. MISCELLANEOUS.
-
-     This License represents the complete agreement concerning subject
-     matter hereof. If any provision of this License is held to be
-     unenforceable, such provision shall be reformed only to the extent
-     necessary to make it enforceable. This License shall be governed by
-     California law provisions (except to the extent applicable law, if
-     any, provides otherwise), excluding its conflict-of-law provisions.
-     With respect to disputes in which at least one party is a citizen of,
-     or an entity chartered or registered to do business in the United
-     States of America, any litigation relating to this License shall be
-     subject to the jurisdiction of the Federal Courts of the Northern
-     District of California, with venue lying in Santa Clara County,
-     California, with the losing party responsible for costs, including
-     without limitation, court costs and reasonable attorneys' fees and
-     expenses. The application of the United Nations Convention on
-     Contracts for the International Sale of Goods is expressly excluded.
-     Any law or regulation which provides that the language of a contract
-     shall be construed against the drafter shall not apply to this
-     License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
-     As between Initial Developer and the Contributors, each party is
-     responsible for claims and damages arising, directly or indirectly,
-     out of its utilization of rights under this License and You agree to
-     work with Initial Developer and Contributors to distribute such
-     responsibility on an equitable basis. Nothing herein is intended or
-     shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
-     Initial Developer may designate portions of the Covered Code as
-     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
-     Developer permits you to utilize portions of the Covered Code under
-     Your choice of the NPL or the alternative licenses, if any, specified
-     by the Initial Developer in the file described in Exhibit A.
-
-EXHIBIT A -Mozilla Public License.
-
-     ``The contents of this file are subject to the Mozilla Public License
-     Version 1.1 (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.mozilla.org/MPL/
-
-     Software distributed under the License is distributed on an "AS IS"
-     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
-     License for the specific language governing rights and limitations
-     under the License.
-
-     The Original Code is ______________________________________.
-
-     The Initial Developer of the Original Code is ________________________.
-     Portions created by ______________________ are Copyright (C) ______
-     _______________________. All Rights Reserved.
-
-     Contributor(s): ______________________________________.
-
-     Alternatively, the contents of this file may be used under the terms
-     of the _____ license (the  "[___] License"), in which case the
-     provisions of [______] License are applicable instead of those
-     above.  If you wish to allow use of your version of this file only
-     under the terms of the [____] License and not to allow others to use
-     your version of this file under the MPL, indicate your decision by
-     deleting  the provisions above and replace  them with the notice and
-     other provisions required by the [___] License.  If you do not delete
-     the provisions above, a recipient may use your version of this file
-     under either the MPL or the [___] License."
-
-     [NOTE: The text of this Exhibit A may differ slightly from the text of
-     the notices in the Source Code files of the Original Code. You should
-     use the text of this Exhibit A rather than the text found in the
-     Original Code Source Code for Your Modifications.]
diff --git a/core/misc/ckeditor/README.md b/core/misc/ckeditor/README.md
deleted file mode 100644
index 68f930b..0000000
--- a/core/misc/ckeditor/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-CKEditor 4
-==========
-
-Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.  
-http://ckeditor.com - See LICENSE.md for license information.
-
-CKEditor is a text editor to be used inside web pages. It's not a replacement
-for desktop text editors like Word or OpenOffice, but a component to be used as
-part of web applications and websites.
-
-## Documentation
-
-The full editor documentation is available online at the following address:
-http://docs.ckeditor.com
-
-## Installation
-
-Installing CKEditor is an easy task. Just follow these simple steps:
-
- 1. **Download** the latest version from the CKEditor website:
-    http://ckeditor.com. You should have already completed this step, but be
-    sure you have the very latest version.
- 2. **Extract** (decompress) the downloaded file into the root of your website.
-
-**Note:** CKEditor is by default installed in the `ckeditor` folder. You can
-place the files in whichever you want though.
-
-## Checking Your Installation
-
-The editor comes with a few sample pages that can be used to verify that
-installation proceeded properly. Take a look at the `samples` directory.
-
-To test your installation, just call the following page at your website:
-
-	http://<your site>/<CKEditor installation path>/samples/index.html
-
-For example:
-
-	http://www.example.com/ckeditor/samples/index.html
diff --git a/core/misc/ckeditor/build-config.js b/core/misc/ckeditor/build-config.js
deleted file mode 100644
index 1095106..0000000
--- a/core/misc/ckeditor/build-config.js
+++ /dev/null
@@ -1,140 +0,0 @@
-﻿
-/**
- * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.html or http://ckeditor.com/license
- */
-
-/**
- * This file was added automatically by CKEditor builder.
- * You may re-use it at any time at http://ckeditor.com/builder to build CKEditor again.
- * 
- * NOTE: 
- *    This file is not used by CKEditor, you may remove it.
- *    Changing this file will not change your CKEditor configuration.
- */
-
-var CKBUILDER_CONFIG = {
-	skin: 'moono',
-	preset: 'standard',
-	ignore: [
-		'dev',
-		'.gitignore',
-		'.gitattributes',
-		'README.md',
-		'.mailmap'
-	],
-	plugins : {
-		'about' : 1,
-		'a11yhelp' : 1,
-		'basicstyles' : 1,
-		'blockquote' : 1,
-		'clipboard' : 1,
-		'contextmenu' : 1,
-		'resize' : 1,
-		'toolbar' : 1,
-		'elementspath' : 1,
-		'enterkey' : 1,
-		'entities' : 1,
-		'filebrowser' : 1,
-		'floatingspace' : 1,
-		'format' : 1,
-		'htmlwriter' : 1,
-		'horizontalrule' : 1,
-		'wysiwygarea' : 1,
-		'image' : 1,
-		'indent' : 1,
-		'link' : 1,
-		'list' : 1,
-		'magicline' : 1,
-		'maximize' : 1,
-		'pastetext' : 1,
-		'pastefromword' : 1,
-		'removeformat' : 1,
-		'sourcearea' : 1,
-		'specialchar' : 1,
-		'stylescombo' : 1,
-		'tab' : 1,
-		'table' : 1,
-		'tabletools' : 1,
-		'undo' : 1,
-		'dialog' : 1,
-		'dialogui' : 1,
-		'menu' : 1,
-		'floatpanel' : 1,
-		'panel' : 1,
-		'button' : 1,
-		'popup' : 1,
-		'richcombo' : 1,
-		'listblock' : 1,
-		'fakeobjects' : 1,
-		'justify' : 1,
-		'placeholder' : 1,
-		'showblocks' : 1,
-		'showborders' : 1,
-		'tableresize' : 1
-	},
-	languages : {
-		'af' : 1,
-		'ar' : 1,
-		'eu' : 1,
-		'bn' : 1,
-		'bs' : 1,
-		'bg' : 1,
-		'ca' : 1,
-		'zh-cn' : 1,
-		'zh' : 1,
-		'hr' : 1,
-		'cs' : 1,
-		'da' : 1,
-		'nl' : 1,
-		'en' : 1,
-		'en-au' : 1,
-		'en-ca' : 1,
-		'en-gb' : 1,
-		'eo' : 1,
-		'et' : 1,
-		'fo' : 1,
-		'fi' : 1,
-		'fr' : 1,
-		'fr-ca' : 1,
-		'gl' : 1,
-		'ka' : 1,
-		'de' : 1,
-		'el' : 1,
-		'gu' : 1,
-		'he' : 1,
-		'hi' : 1,
-		'hu' : 1,
-		'is' : 1,
-		'it' : 1,
-		'ja' : 1,
-		'km' : 1,
-		'ko' : 1,
-		'ku' : 1,
-		'lv' : 1,
-		'lt' : 1,
-		'mk' : 1,
-		'ms' : 1,
-		'mn' : 1,
-		'no' : 1,
-		'nb' : 1,
-		'fa' : 1,
-		'pl' : 1,
-		'pt-br' : 1,
-		'pt' : 1,
-		'ro' : 1,
-		'ru' : 1,
-		'sr' : 1,
-		'sr-latn' : 1,
-		'sk' : 1,
-		'sl' : 1,
-		'es' : 1,
-		'sv' : 1,
-		'th' : 1,
-		'tr' : 1,
-		'ug' : 1,
-		'uk' : 1,
-		'vi' : 1,
-		'cy' : 1,
-	}
-};
\ No newline at end of file
diff --git a/core/misc/ckeditor/ckeditor.js b/core/misc/ckeditor/ckeditor.js
deleted file mode 100644
index a56d05b..0000000
--- a/core/misc/ckeditor/ckeditor.js
+++ /dev/null
@@ -1,812 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var b={timestamp:"D08E",version:"4.0.1",revision:"d02739be4b",rnd:Math.floor(900*Math.random())+100,_:{pending:[]},status:"unloaded",basePath:function(){var a=window.CKEDITOR_BASEPATH||"";if(!a)for(var b=document.getElementsByTagName("script"),d=0;d<b.length;d++){var c=b[d].src.match(/(^|.*[\\\/])ckeditor(?:_basic)?(?:_source)?.js(?:\?.*)?$/i);if(c){a=c[1];break}}-1==a.indexOf(":/")&&(a=0===a.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+a:location.href.match(/^[^\?]*\/(?:)/)[0]+
-a);if(!a)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return a}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",a,
-!1),b()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),b())}catch(d){}}function b(){for(var a;a=d.shift();)a()}var d=[];return function(b){d.push(b);"complete"===document.readyState&&setTimeout(a,1);if(1==d.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",a);window.attachEvent("onload",a);b=!1;try{b=
-!window.frameElement}catch(e){}if(document.documentElement.doScroll&&b){var c=function(){try{document.documentElement.doScroll("left")}catch(b){setTimeout(c,1);return}a()};c()}}}}()},c=window.CKEDITOR_GETURL;if(c){var a=b.url;b.url=function(f){return c.call(b,f)||a.call(b,f)}}return b}());
-CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(b){var c=CKEDITOR.event.prototype,a;for(a in c)b[a]==void 0&&(b[a]=c[a])},CKEDITOR.event.prototype=function(){function b(f){var b=c(this);return b[f]||(b[f]=new a(f))}var c=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},a=function(a){this.name=a;this.listeners=[]};a.prototype={getListenerIndex:function(a){for(var b=0,d=this.listeners;b<d.length;b++)if(d[b].fn==a)return b;return-1}};
-return{define:function(a,e){var d=b.call(this,a);CKEDITOR.tools.extend(d,e,true)},on:function(a,e,d,c,k){function h(b,l,o,n){b={name:a,sender:this,editor:b,data:l,listenerData:c,stop:o,cancel:n,removeListener:m};return e.call(d,b)===false?false:b.data}function m(){o.removeListener(a,e)}var n=b.call(this,a);if(n.getListenerIndex(e)<0){n=n.listeners;d||(d=this);isNaN(k)&&(k=10);var o=this;h.fn=e;h.priority=k;for(var l=n.length-1;l>=0;l--)if(n[l].priority<=k){n.splice(l+1,0,h);return{removeListener:m}}n.unshift(h)}return{removeListener:m}},
-once:function(){var a=arguments[1];arguments[1]=function(b){b.removeListener();return a.apply(this,arguments)};return this.on.apply(this,arguments)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,b=function(){a=1},d=0,g=function(){d=1};return function(k,h,m){var n=c(this)[k],k=a,o=d;a=d=0;if(n){var l=n.listeners;if(l.length)for(var l=l.slice(0),j,q=0;q<l.length;q++){if(n.errorProof)try{j=l[q].call(this,
-m,h,b,g)}catch(y){}else j=l[q].call(this,m,h,b,g);j===false?d=1:typeof j!="undefined"&&(h=j);if(a||d)break}}h=d?false:typeof h=="undefined"?true:h;a=k;d=o;return h}}(),fireOnce:function(a,b,d){b=this.fire(a,b,d);delete c(this)[a];return b},removeListener:function(a,b){var d=c(this)[a];if(d){var g=d.getListenerIndex(b);g>=0&&d.listeners.splice(g,1)}},removeAllListeners:function(){var a=c(this),b;for(b in a)delete a[b]},hasListeners:function(a){return(a=c(this)[a])&&a.listeners.length>0}}}());
-CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(b,c){b in{instanceReady:1,loaded:1}&&(this[b]=true);return CKEDITOR.event.prototype.fire.call(this,b,c,this)},CKEDITOR.editor.prototype.fireOnce=function(b,c){b in{instanceReady:1,loaded:1}&&(this[b]=true);return CKEDITOR.event.prototype.fireOnce.call(this,b,c,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype));
-CKEDITOR.env||(CKEDITOR.env=function(){var b=navigator.userAgent.toLowerCase(),c=window.opera,a={ie:eval("/*@cc_on!@*/false"),opera:!!c&&c.version,webkit:b.indexOf(" applewebkit/")>-1,air:b.indexOf(" adobeair/")>-1,mac:b.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat",mobile:b.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(b),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,b=window.location.hostname;return a!=b&&a!="["+b+"]"},secure:location.protocol==
-"https:"};a.gecko=navigator.product=="Gecko"&&!a.webkit&&!a.opera;if(a.webkit)b.indexOf("chrome")>-1?a.chrome=true:a.safari=true;var f=0;if(a.ie){f=a.quirks||!document.documentMode?parseFloat(b.match(/msie (\d+)/)[1]):document.documentMode;a.ie9Compat=f==9;a.ie8Compat=f==8;a.ie7Compat=f==7;a.ie6Compat=f<7||a.quirks}if(a.gecko){var e=b.match(/rv:([\d\.]+)/);if(e){e=e[1].split(".");f=e[0]*1E4+(e[1]||0)*100+(e[2]||0)*1}}a.opera&&(f=parseFloat(c.version()));a.air&&(f=parseFloat(b.match(/ adobeair\/(\d+)/)[1]));
-a.webkit&&(f=parseFloat(b.match(/ applewebkit\/(\d+)/)[1]));a.version=f;a.isCompatible=a.iOS&&f>=534||!a.mobile&&(a.ie&&f>6||a.gecko&&f>=10801||a.opera&&f>=9.5||a.air&&f>=1||a.webkit&&f>=522||false);a.cssClass="cke_browser_"+(a.ie?"ie":a.gecko?"gecko":a.opera?"opera":a.webkit?"webkit":"unknown");if(a.quirks)a.cssClass=a.cssClass+" cke_browser_quirks";if(a.ie){a.cssClass=a.cssClass+(" cke_browser_ie"+(a.quirks||a.version<7?"6":a.version));if(a.quirks)a.cssClass=a.cssClass+" cke_browser_iequirks"}if(a.gecko)if(f<
-10900)a.cssClass=a.cssClass+" cke_browser_gecko18";else if(f<=11E3)a.cssClass=a.cssClass+" cke_browser_gecko19";if(a.air)a.cssClass=a.cssClass+" cke_browser_air";return a}());
-"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var b=document.createElement("script");b.type="text/javascript";b.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(b)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(b){(this._.pending||(this._.pending=[])).push(b)};(function(){CKEDITOR.domReady(function(){var b=
-CKEDITOR.loadFullCore,c=CKEDITOR.loadFullCoreTimeout;if(b){CKEDITOR.status="basic_ready";b&&b._load?b():c&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},c*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={};
-(function(){var b=[],c=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.opera?"-o-":CKEDITOR.env.ie?"-ms-":"";CKEDITOR.on("reset",function(){b=[]});CKEDITOR.tools={arrayCompare:function(a,b){if(!a&&!b)return true;if(!a||!b||a.length!=b.length)return false;for(var e=0;e<a.length;e++)if(a[e]!=b[e])return false;return true},clone:function(a){var b;if(a&&a instanceof Array){b=[];for(var e=0;e<a.length;e++)b[e]=this.clone(a[e]);return b}if(a===null||typeof a!="object"||a instanceof
-String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp)return a;b=new a.constructor;for(e in a)b[e]=this.clone(a[e]);return b},capitalize:function(a){return a.charAt(0).toUpperCase()+a.substring(1).toLowerCase()},extend:function(a){var b=arguments.length,e,d;if(typeof(e=arguments[b-1])=="boolean")b--;else if(typeof(e=arguments[b-2])=="boolean"){d=arguments[b-1];b=b-2}for(var c=1;c<b;c++){var k=arguments[c],h;for(h in k)if(e===true||a[h]==void 0)if(!d||h in d)a[h]=
-k[h]}return a},prototypedCopy:function(a){var b=function(){};b.prototype=a;return new b},isArray:function(a){return!!a&&a instanceof Array},isEmpty:function(a){for(var b in a)if(a.hasOwnProperty(b))return false;return true},cssVendorPrefix:function(a,b,e){if(e)return c+a+":"+b+";"+a+":"+b;e={};e[a]=b;e[c+a]=b;return e},cssStyleToDomStyle:function(){var a=document.createElement("div").style,b=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a==
-"float"?b:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),b,e=[],c=0;c<a.length;c++)if(b=a[c])/@import|[{}]/.test(b)?e.push("<style>"+b+"</style>"):e.push('<link type="text/css" rel=stylesheet href="'+b+'">');return e.join("")},htmlEncode:function(a){return(""+a).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;")},htmlEncodeAttr:function(a){return a.replace(/"/g,"&quot;").replace(/</g,"&lt;").replace(/>/g,"&gt;")},getNextNumber:function(){var a=
-0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,b){var e=b(a);e.prototype=a.prototype;return e},setTimeout:function(a,b,e,c,g){g||(g=window);e||(e=g);return g.setTimeout(function(){c?a.apply(e,[].concat(c)):a.apply(e)},b||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(b){return b.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(b){return b.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;
-return function(b){return b.replace(a,"")}}(),indexOf:function(a,b){if(typeof b=="function")for(var c=0,d=a.length;c<d;c++){if(b(a[c]))return c}else{if(a.indexOf)return a.indexOf(b);c=0;for(d=a.length;c<d;c++)if(a[c]===b)return c}return-1},search:function(a,b){var c=CKEDITOR.tools.indexOf(a,b);return c>=0?a[c]:null},bind:function(a,b){return function(){return a.apply(b,arguments)}},createClass:function(a){var b=a.$,c=a.base,d=a.privates||a._,g=a.proto,a=a.statics;!b&&(b=function(){c&&this.base.apply(this,
-arguments)});if(d)var k=b,b=function(){var a=this._||(this._={}),b;for(b in d){var f=d[b];a[b]=typeof f=="function"?CKEDITOR.tools.bind(f,this):f}k.apply(this,arguments)};if(c){b.prototype=this.prototypedCopy(c.prototype);b.prototype.constructor=b;b.base=c;b.baseProto=c.prototype;b.prototype.base=function(){this.base=c.prototype.base;c.apply(this,arguments);this.base=arguments.callee}}g&&this.extend(b.prototype,g,true);a&&this.extend(b,a,true);return b},addFunction:function(a,f){return b.push(function(){return a.apply(f||
-this,arguments)})-1},removeFunction:function(a){b[a]=null},callFunction:function(a){var f=b[a];return f&&f.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=/^-?\d+\.?\d*px$/,b;return function(c){b=CKEDITOR.tools.trim(c+"")+"px";return a.test(b)?b:c||""}}(),convertToPx:function(){var a;return function(b){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);
-CKEDITOR.document.getBody().append(a)}if(!/%$/.test(b)){a.setStyle("width",b);return a.$.clientWidth}return b}}(),repeat:function(a,b){return Array(b+1).join(a)},tryThese:function(){for(var a,b=0,c=arguments.length;b<c;b++){var d=arguments[b];try{a=d();break}catch(g){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var b=arguments,c=this;window.setTimeout(function(){a.apply(c,b)},0)}},normalizeCssText:function(a,b){var c=[],
-d,g=CKEDITOR.tools.parseCssText(a,true,b);for(d in g)c.push(d+":"+g[d]);c.sort();return c.length?c.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,function(a,b,c,g){a=[b,c,g];for(b=0;b<3;b++)a[b]=("0"+parseInt(a[b],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,b,c){var d={};if(c){c=new CKEDITOR.dom.element("span");c.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(c.getAttribute("style")||"")}if(!a||
-a==";")return d;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,e){if(b){c=c.toLowerCase();c=="font-family"&&(e=e.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,","));e=CKEDITOR.tools.trim(e)}d[c]=e});return d}}})();
-CKEDITOR.dtd=function(){var b=CKEDITOR.tools.extend,c=function(a,b){for(var f=CKEDITOR.tools.clone(a),l=1;l<arguments.length;l++){var b=arguments[l],j;for(j in b)delete f[j]}return f},a={},f={},e={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},g={},k={"#":1},h={center:1,dir:1,noframes:1};
-b(a,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},k,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});b(f,e,a,h);c={a:c(a,{a:1,button:1}),abbr:a,address:f,
-area:g,article:b({style:1},f),aside:b({style:1},f),audio:b({source:1,track:1},f),b:a,base:g,bdi:a,bdo:a,blockquote:f,body:f,br:g,button:c(a,{a:1,button:1}),canvas:a,caption:f,cite:a,code:a,col:g,colgroup:{col:1},command:g,datalist:b({option:1},a),dd:f,del:a,details:b({summary:1},f),dfn:a,div:b({style:1},f),dl:{dt:1,dd:1},dt:f,em:a,embed:g,fieldset:b({legend:1},f),figcaption:f,figure:b({figcaption:1},f),footer:f,form:f,h1:a,h2:a,h3:a,h4:a,h5:a,h6:a,head:b({title:1,base:1},d),header:f,hgroup:{h1:1,
-h2:1,h3:1,h4:1,h5:1,h6:1},hr:g,html:b({head:1,body:1},f,d),i:a,iframe:k,img:g,input:g,ins:a,kbd:a,keygen:g,label:a,legend:a,li:f,link:g,map:f,mark:a,menu:b({li:1},f),meta:g,meter:c(a,{meter:1}),nav:f,noscript:b({link:1,meta:1,style:1},a),object:b({param:1},a),ol:{li:1},optgroup:{option:1},option:k,output:a,p:a,param:g,pre:a,progress:c(a,{progress:1}),q:a,rp:a,rt:a,ruby:b({rp:1,rt:1},a),s:a,samp:a,script:k,section:b({style:1},f),select:{optgroup:1,option:1},small:a,source:g,span:a,strong:a,style:k,
-sub:a,summary:a,sup:a,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:f,textarea:k,tfoot:{tr:1},th:f,thead:{tr:1},time:c(a,{time:1}),title:k,tr:{th:1,td:1},track:g,u:a,ul:{li:1},"var":a,video:b({source:1,track:1},f),wbr:g,acronym:a,applet:b({param:1},f),basefont:g,big:a,center:f,dialog:g,dir:{li:1},font:a,isindex:g,noframes:f,strike:a,tt:a};b(c,{$block:b({audio:1,dd:1,dt:1,li:1,video:1},e,h),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,div:1,dl:1,
-fieldset:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1},$inline:a,$list:{dl:1,ol:1,
-ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:b({body:1,head:1,html:1},c.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,
-sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return c}();CKEDITOR.dom.event=function(b){this.$=b};
-CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var b=this.getKey();if(this.$.ctrlKey||this.$.metaKey)b=b+CKEDITOR.CTRL;this.$.shiftKey&&(b=b+CKEDITOR.SHIFT);this.$.altKey&&(b=b+CKEDITOR.ALT);return b},preventDefault:function(b){var c=this.$;c.preventDefault?c.preventDefault():c.returnValue=false;b&&this.stopPropagation()},stopPropagation:function(){var b=this.$;b.stopPropagation?b.stopPropagation():b.cancelBubble=true},getTarget:function(){var b=
-this.$.target||this.$.srcElement;return b?new CKEDITOR.dom.node(b):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var b=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(b.documentElement.scrollLeft||b.body.scrollLeft),y:this.$.pageY||this.$.clientY+(b.documentElement.scrollTop||b.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2;
-CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(b){if(b)this.$=b};
-CKEDITOR.dom.domObject.prototype=function(){var b=function(b,a){return function(f){typeof CKEDITOR!="undefined"&&b.fire(a,new CKEDITOR.dom.event(f))}};return{getPrivate:function(){var b;if(!(b=this.getCustomData("_")))this.setCustomData("_",b={});return b},on:function(c){var a=this.getCustomData("_cke_nativeListeners");if(!a){a={};this.setCustomData("_cke_nativeListeners",a)}if(!a[c]){a=a[c]=b(this,c);this.$.addEventListener?this.$.addEventListener(c,a,!!CKEDITOR.event.useCapture):this.$.attachEvent&&
-this.$.attachEvent("on"+c,a)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(b){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(b)){var a=this.getCustomData("_cke_nativeListeners"),f=a&&a[b];if(f){this.$.removeEventListener?this.$.removeEventListener(b,f,false):this.$.detachEvent&&this.$.detachEvent("on"+b,f);delete a[b]}}},removeAllListeners:function(){var b=this.getCustomData("_cke_nativeListeners"),a;for(a in b){var f=b[a];this.$.detachEvent?
-this.$.detachEvent("on"+a,f):this.$.removeEventListener&&this.$.removeEventListener(a,f,false);delete b[a]}}}}();
-(function(b){var c={};CKEDITOR.on("reset",function(){c={}});b.equals=function(a){try{return a&&a.$===this.$}catch(b){return false}};b.setCustomData=function(a,b){var e=this.getUniqueId();(c[e]||(c[e]={}))[a]=b;return this};b.getCustomData=function(a){var b=this.$["data-cke-expando"];return(b=b&&c[b])&&a in b?b[a]:null};b.removeCustomData=function(a){var b=this.$["data-cke-expando"],b=b&&c[b],e,d;if(b){e=b[a];d=a in b;delete b[a]}return d?e:null};b.clearCustomData=function(){this.removeAllListeners();
-var a=this.$["data-cke-expando"];a&&delete c[a]};b.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(b)})(CKEDITOR.dom.domObject.prototype);
-CKEDITOR.dom.node=function(b){return b?new CKEDITOR.dom[b.nodeType==CKEDITOR.NODE_DOCUMENT?"document":b.nodeType==CKEDITOR.NODE_ELEMENT?"element":b.nodeType==CKEDITOR.NODE_TEXT?"text":b.nodeType==CKEDITOR.NODE_COMMENT?"comment":b.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](b):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11;
-CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16;
-CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(b,c){b.append(this,c);return b},clone:function(b,c){var a=this.$.cloneNode(b),f=function(a){a["data-cke-expando"]&&(a["data-cke-expando"]=false);if(a.nodeType==CKEDITOR.NODE_ELEMENT){c||a.removeAttribute("id",false);if(b)for(var a=a.childNodes,d=0;d<a.length;d++)f(a[d])}};f(a);return new CKEDITOR.dom.node(a)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(b){b.$.parentNode.insertBefore(this.$,
-b.$.nextSibling);return b},insertBefore:function(b){b.$.parentNode.insertBefore(this.$,b.$);return b},insertBeforeMe:function(b){this.$.parentNode.insertBefore(b.$,this.$);return b},getAddress:function(b){for(var c=[],a=this.getDocument().$.documentElement,f=this.$;f&&f!=a;){var e=f.parentNode;e&&c.unshift(this.getIndex.call({$:f},b));f=e}return c},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(b){var c=this.$,a=-1,
-f;if(!this.$.parentNode)return a;do if(!b||!(c!=this.$&&c.nodeType==CKEDITOR.NODE_TEXT&&(f||!c.nodeValue))){a++;f=c.nodeType==CKEDITOR.NODE_TEXT}while(c=c.previousSibling);return a},getNextSourceNode:function(b,c,a){if(a&&!a.call)var f=a,a=function(a){return!a.equals(f)};var b=!b&&this.getFirst&&this.getFirst(),e;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&a&&a(this,true)===false)return null;b=this.getNext()}for(;!b&&(e=(e||this).getParent());){if(a&&a(e,true)===false)return null;b=e.getNext()}return!b||
-a&&a(b)===false?null:c&&c!=b.type?b.getNextSourceNode(false,c,a):b},getPreviousSourceNode:function(b,c,a){if(a&&!a.call)var f=a,a=function(a){return!a.equals(f)};var b=!b&&this.getLast&&this.getLast(),e;if(!b){if(this.type==CKEDITOR.NODE_ELEMENT&&a&&a(this,true)===false)return null;b=this.getPrevious()}for(;!b&&(e=(e||this).getParent());){if(a&&a(e,true)===false)return null;b=e.getPrevious()}return!b||a&&a(b)===false?null:c&&b.type!=c?b.getPreviousSourceNode(false,c,a):b},getPrevious:function(b){var c=
-this.$,a;do a=(c=c.previousSibling)&&c.nodeType!=10&&new CKEDITOR.dom.node(c);while(a&&b&&!b(a));return a},getNext:function(b){var c=this.$,a;do a=(c=c.nextSibling)&&new CKEDITOR.dom.node(c);while(a&&b&&!b(a));return a},getParent:function(b){var c=this.$.parentNode;return c&&(c.nodeType==CKEDITOR.NODE_ELEMENT||b&&c.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(c):null},getParents:function(b){var c=this,a=[];do a[b?"push":"unshift"](c);while(c=c.getParent());return a},getCommonAncestor:function(b){if(b.equals(this))return this;
-if(b.contains&&b.contains(this))return b;var c=this.contains?this:this.getParent();do if(c.contains(b))return c;while(c=c.getParent());return null},getPosition:function(b){var c=this.$,a=b.$;if(c.compareDocumentPosition)return c.compareDocumentPosition(a);if(c==a)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&b.type==CKEDITOR.NODE_ELEMENT){if(c.contains){if(c.contains(a))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(a.contains(c))return CKEDITOR.POSITION_IS_CONTAINED+
-CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in c)return c.sourceIndex<0||a.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:c.sourceIndex<a.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var c=this.getAddress(),b=b.getAddress(),a=Math.min(c.length,b.length),f=0;f<=a-1;f++)if(c[f]!=b[f]){if(f<a)return c[f]<b[f]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return c.length<b.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+
-CKEDITOR.POSITION_FOLLOWING},getAscendant:function(b,c){var a=this.$,f;if(!c)a=a.parentNode;for(;a;){if(a.nodeName&&(f=a.nodeName.toLowerCase(),typeof b=="string"?f==b:f in b))return new CKEDITOR.dom.node(a);a=a.parentNode}return null},hasAscendant:function(b,c){var a=this.$;if(!c)a=a.parentNode;for(;a;){if(a.nodeName&&a.nodeName.toLowerCase()==b)return true;a=a.parentNode}return false},move:function(b,c){b.append(this.remove(),c)},remove:function(b){var c=this.$,a=c.parentNode;if(a){if(b)for(;b=
-c.firstChild;)a.insertBefore(c.removeChild(b),c);a.removeChild(c)}return this},replace:function(b){this.insertBefore(b);b.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var b;this.getFirst&&(b=this.getFirst());){if(b.type==CKEDITOR.NODE_TEXT){var c=CKEDITOR.tools.ltrim(b.getText()),a=b.getLength();if(c){if(c.length<a){b.split(a-c.length);this.$.removeChild(this.$.firstChild)}}else{b.remove();continue}}break}},rtrim:function(){for(var b;this.getLast&&(b=this.getLast());){if(b.type==
-CKEDITOR.NODE_TEXT){var c=CKEDITOR.tools.rtrim(b.getText()),a=b.getLength();if(c){if(c.length<a){b.split(c.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{b.remove();continue}}break}if(!CKEDITOR.env.ie&&!CKEDITOR.env.opera)(b=this.$.lastChild)&&(b.type==1&&b.nodeName.toLowerCase()=="br")&&b.parentNode.removeChild(b)},isReadOnly:function(){var b=this;this.type!=CKEDITOR.NODE_ELEMENT&&(b=this.getParent());if(b&&typeof b.$.isContentEditable!="undefined")return!(b.$.isContentEditable||
-b.data("cke-editable"));for(;b;){if(b.data("cke-editable"))break;if(b.getAttribute("contentEditable")=="false")return true;if(b.getAttribute("contentEditable")=="true")break;b=b.getParent()}return!b}});CKEDITOR.dom.window=function(b){CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject;
-CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var b=this.$.document,c=b.compatMode=="CSS1Compat";return{width:(c?b.documentElement.clientWidth:b.body.clientWidth)||0,height:(c?b.documentElement.clientHeight:b.body.clientHeight)||0}},getScrollPosition:function(){var b=this.$;if("pageXOffset"in b)return{x:b.pageXOffset||0,y:b.pageYOffset||0};b=b.document;return{x:b.documentElement.scrollLeft||b.body.scrollLeft||0,y:b.documentElement.scrollTop||
-b.body.scrollTop||0}},getFrame:function(){var b=this.$.frameElement;return b?new CKEDITOR.dom.element.get(b):null}});CKEDITOR.dom.document=function(b){CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject;
-CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(b){if(this.$.createStyleSheet)this.$.createStyleSheet(b);else{var c=new CKEDITOR.dom.element("link");c.setAttributes({rel:"stylesheet",type:"text/css",href:b});this.getHead().append(c)}},appendStyleText:function(b){if(this.$.createStyleSheet){var c=this.$.createStyleSheet("");c.cssText=b}else{var a=new CKEDITOR.dom.element("style",this);a.append(new CKEDITOR.dom.text(b,this));this.getHead().append(a)}return c||
-a.$.sheet},createElement:function(b,c){var a=new CKEDITOR.dom.element(b,this);if(c){c.attributes&&a.setAttributes(c.attributes);c.styles&&a.setStyles(c.styles)}return a},createText:function(b){return new CKEDITOR.dom.text(b,this)},focus:function(){this.getWindow().focus()},getActive:function(){return new CKEDITOR.dom.element(this.$.activeElement)},getById:function(b){return(b=this.$.getElementById(b))?new CKEDITOR.dom.element(b):null},getByAddress:function(b,c){for(var a=this.$.documentElement,f=
-0;a&&f<b.length;f++){var e=b[f];if(c)for(var d=-1,g=0;g<a.childNodes.length;g++){var k=a.childNodes[g];if(!(c===true&&k.nodeType==3&&k.previousSibling&&k.previousSibling.nodeType==3)){d++;if(d==e){a=k;break}}}else a=a.childNodes[e]}return a?new CKEDITOR.dom.node(a):null},getElementsByTag:function(b,c){if((!CKEDITOR.env.ie||document.documentMode>8)&&c)b=c+":"+b;return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(b))},getHead:function(){var b=this.$.getElementsByTagName("head")[0];return b=
-b?new CKEDITOR.dom.element(b):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){var b=new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView);return(this.getWindow=function(){return b})()},write:function(b){this.$.open("text/html","replace");CKEDITOR.env.isCustomDomain()&&(this.$.domain=document.domain);
-this.$.write(b);this.$.close()}});CKEDITOR.dom.nodeList=function(b){this.$=b};CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(b){if(b<0||b>=this.$.length)return null;return(b=this.$[b])?new CKEDITOR.dom.node(b):null}};CKEDITOR.dom.element=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createElement(b));CKEDITOR.dom.domObject.call(this,b)};
-CKEDITOR.dom.element.get=function(b){return(b=typeof b=="string"?document.getElementById(b)||document.getElementsByName(b)[0]:b)&&(b.$?b:new CKEDITOR.dom.element(b))};CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(b,c){var a=new CKEDITOR.dom.element("div",c);a.setHtml(b);return a.getFirst().remove()};
-CKEDITOR.dom.element.setMarker=function(b,c,a,f){var e=c.getCustomData("list_marker_id")||c.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=c.getCustomData("list_marker_names")||c.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");b[e]=c;d[a]=1;return c.setCustomData(a,f)};CKEDITOR.dom.element.clearAllMarkers=function(b){for(var c in b)CKEDITOR.dom.element.clearMarkers(b,b[c],1)};
-CKEDITOR.dom.element.clearMarkers=function(b,c,a){var f=c.getCustomData("list_marker_names"),e=c.getCustomData("list_marker_id"),d;for(d in f)c.removeCustomData(d);c.removeCustomData("list_marker_names");if(a){c.removeCustomData("list_marker_id");delete b[e]}};
-(function(){function b(a){for(var b=0,e=0,d=c[a].length;e<d;e++)b=b+(parseInt(this.getComputedStyle(c[a][e])||0,10)||0);return b}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var b=this.$.className;b&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)","").test(b)||(b=b+(" "+a)));this.$.className=b||a},removeClass:function(a){var b=this.getAttribute("class");if(b){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(b))(b=b.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",
-b):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,b){typeof a=="string"&&(a=this.getDocument().createElement(a));b?this.$.insertBefore(a.$,this.$.firstChild):this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var b=new CKEDITOR.dom.element("div",this.getDocument());b.setHtml(a);b.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=
-void 0?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(){for(var a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=CKEDITOR.env.opera?this.getDocument().createText(""):this.getDocument().createElement("br");CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}},breakParent:function(a){var b=new CKEDITOR.dom.range(this.getDocument());b.setStartAfter(this);b.setEndAfter(a);
-a=b.extractContents();b.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var b=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?b.contains(a.getParent().$):b!=a.$&&b.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(a){}}return function(b){b?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,
-""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&(a.height=a.bottom-a.top);return a},setHtml:function(){var a=function(a){return this.$.innerHTML=a};return CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{return this.$.innerHTML=
-a}catch(b){this.$.innerHTML="";var c=new CKEDITOR.dom.element("body",this.getDocument());c.$.innerHTML=a;for(c=c.getChildren();c.count();)this.append(c.getItem(0));return a}}:a}(),setText:function(a){CKEDITOR.dom.element.prototype.setText=this.$.innerText!=void 0?function(a){return this.$.innerText=a}:function(a){return this.$.textContent=a};return this.setText(a)},getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?
-function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a);return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?
-this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){var b=this.getWindow().$.getComputedStyle(this.$,null);return b?b.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,
-getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a==void 0){a=parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||
-null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&!(document.documentMode>8)){var b=this.$.scopeName;b!="HTML"&&(a=b.toLowerCase()+":"+a)}return(this.getName=function(){return a})()},getValue:function(){return this.$.value},getFirst:function(a){var b=this.$.firstChild;(b=b&&new CKEDITOR.dom.node(b))&&(a&&!a(b))&&(b=b.getNext(a));return b},getLast:function(a){var b=this.$.lastChild;(b=b&&new CKEDITOR.dom.node(b))&&(a&&!a(b))&&
-(b=b.getPrevious(a));return b},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var b=0;b<arguments.length;b++)if(arguments[b]==a)return true;return false},isEditable:function(a){var b=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[b]||CKEDITOR.dtd.$empty[b]||this.is("a")&&
-(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[b]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var b=this.clone(0,1),a=a.clone(0,1);b.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(b.$.isEqualNode){b.$.style.cssText=CKEDITOR.tools.normalizeCssText(b.$.style.cssText);
-a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return b.$.isEqualNode(a.$)}b=b.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var c=this.getParent();if(c.type==CKEDITOR.NODE_ELEMENT){c=c.clone();c.setHtml(b);b=c.getHtml();c.setHtml(a);a=c.getHtml()}}return b==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",b,c;if(a&&(CKEDITOR.env.webkit||CKEDITOR.env.opera)){b=
-this.getWindow();if(!b.equals(CKEDITOR.document.getWindow())&&(c=b.$.frameElement))a=(new CKEDITOR.dom.element(c)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),b=0,c=a.count();b<c;b++){var d=a.getItem(b);if(!(d.type==CKEDITOR.NODE_ELEMENT&&d.data("cke-bookmark"))&&(d.type==CKEDITOR.NODE_ELEMENT&&!d.isEmptyInlineRemoveable()||d.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(d.getText())))return false}return true},
-hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(){for(var a=this.$.attributes,b=0;b<a.length;b++){var c=a[b];switch(c.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(c.specified)return true}}return false}:function(){var a=this.$.attributes,b=a.length,c={"data-cke-expando":1,_moz_dirty:1};return b>0&&(b>2||!c[a[0].nodeName]||b==2&&!c[a[1].nodeName])},hasAttribute:function(){function a(a){a=this.$.attributes.getNamedItem(a);
-return!(!a||!a.specified)}return CKEDITOR.env.ie&&CKEDITOR.env.version<8?function(b){return b=="name"?!!this.$.name:a.call(this,b)}:a}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,b){var c=this.$,a=a.$;if(c!=a){var d;if(b)for(;d=c.lastChild;)a.insertBefore(c.removeChild(d),a.firstChild);else for(;d=c.firstChild;)a.appendChild(c.removeChild(d))}},mergeSiblings:function(){function a(a,b,c){if(b&&b.type==CKEDITOR.NODE_ELEMENT){for(var g=[];b.data("cke-bookmark")||b.isEmptyInlineRemoveable();){g.push(b);
-b=c?b.getNext():b.getPrevious();if(!b||b.type!=CKEDITOR.NODE_ELEMENT)return}if(a.isIdentical(b)){for(var k=c?a.getLast():a.getFirst();g.length;)g.shift().move(a,!c);b.moveChildren(a,!c);b.remove();k&&k.type==CKEDITOR.NODE_ELEMENT&&k.mergeSiblings()}}}return function(b){if(b===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a,
-b){this.$.setAttribute(a,b);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(b,c){b=="class"?this.$.className=c:b=="style"?this.$.style.cssText=c:b=="tabindex"?this.$.tabIndex=c:b=="checked"?this.$.checked=c:b=="contenteditable"?a.call(this,"contentEditable",c):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(b,c){if(b=="src"&&c.match(/^http:\/\//))try{a.apply(this,arguments)}catch(d){}else a.apply(this,arguments);
-return this}:a}(),setAttributes:function(a){for(var b in a)this.setAttribute(b,a[b]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var b=0;b<
-a.length;b++)this.removeAttribute(a[b]);else for(b in a)a.hasOwnProperty(b)&&this.removeAttribute(b)},removeStyle:function(a){var b=this.$.style;if(!b.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var c=["top","left","right","bottom"],d;a=="border"&&(d=["color","style","width"]);for(var b=[],g=0;g<c.length;g++)if(d)for(var k=0;k<d.length;k++)b.push([a,c[g],d[k]].join("-"));else b.push([a,c[g]].join("-"));for(a=0;a<b.length;a++)this.removeStyle(b[a])}else{b.removeProperty?b.removeProperty(a):
-b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,b){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=b;return this},setStyles:function(a){for(var b in a)this.setStyle(b,a[b]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select",
-"none"));if(CKEDITOR.env.ie||CKEDITOR.env.opera){this.setAttribute("unselectable","on");for(var a,b=this.getElementsByTag("*"),c=0,d=b.count();c<d;c++){a=b.getItem(c);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var b=0,c=0,d=this.getDocument(),g=d.getBody(),k=d.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var h=
-this.$.getBoundingClientRect(),m=d.$.documentElement,n=m.clientTop||g.$.clientTop||0,o=m.clientLeft||g.$.clientLeft||0,l=true;if(CKEDITOR.env.ie){l=d.getDocumentElement().contains(this);d=d.getBody().contains(this);l=k&&d||!k&&l}if(l){b=h.left+(!k&&m.scrollLeft||g.$.scrollLeft);b=b-o;c=h.top+(!k&&m.scrollTop||g.$.scrollTop);c=c-n}}else{g=this;for(d=null;g&&!(g.getName()=="body"||g.getName()=="html");){b=b+(g.$.offsetLeft-g.$.scrollLeft);c=c+(g.$.offsetTop-g.$.scrollTop);if(!g.equals(this)){b=b+(g.$.clientLeft||
-0);c=c+(g.$.clientTop||0)}for(;d&&!d.equals(g);){b=b-d.$.scrollLeft;c=c-d.$.scrollTop;d=d.getParent()}d=g;g=(h=g.$.offsetParent)?new CKEDITOR.dom.element(h):null}}if(a){g=this.getWindow();d=a.getWindow();if(!g.equals(d)&&g.$.frameElement){a=(new CKEDITOR.dom.element(g.$.frameElement)).getDocumentPosition(a);b=b+a.x;c=c+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!k){b=b+(this.$.clientLeft?1:0);c=c+(this.$.clientTop?1:0)}return{x:b,y:c}},scrollIntoView:function(a){var b=
-this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var d=c.$.frameElement;d&&(b=new CKEDITOR.dom.element(d))}catch(g){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var d,g,k,h;function m(b,l){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,l);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+l}}
-function n(a,b){var o={x:0,y:0};if(!a.is(l?"body":"html")){var j=a.$.getBoundingClientRect();o.x=j.left;o.y=j.top}j=a.getWindow();if(!j.equals(b)){j=n(CKEDITOR.dom.element.get(j.$.frameElement),b);o.x=o.x+j.x;o.y=o.y+j.y}return o}function o(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());k=a.getDocument();var l=k.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=l?k.getBody():k.getDocumentElement());k=a.getWindow();g=n(this,k);var j=n(a,k),q=this.$.offsetHeight;
-d=this.$.offsetWidth;var y=a.$.clientHeight,z=a.$.clientWidth;k=g.x-o(this,"left")-j.x||0;h=g.y-o(this,"top")-j.y||0;d=g.x+d+o(this,"right")-(j.x+z)||0;g=g.y+q+o(this,"bottom")-(j.y+y)||0;if(h<0||g>0)m(0,b===true?h:b===false?g:h<0?h:g);if(c&&(k<0||d>0))m(k<0?k:d,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled");
-break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},
-copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},d=0;d<c.length;d++){var g=c[d],k=g.nodeName.toLowerCase(),h;if(!(k in b))if(k=="checked"&&(h=this.getAttribute(k)))a.setAttribute(k,h);else if(g.specified||CKEDITOR.env.ie&&g.nodeValue&&k=="value"){h=this.getAttribute(k);if(h===null)h=g.nodeValue;a.setAttribute(k,h)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,
-b);this.copyAttributes(a);this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$}},getChild:function(){function a(a,b){var c=a.childNodes;if(b>=0&&b<c.length)return c[b]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",
-function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,
-b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null}});var c={width:["border-left-width","border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,e){if(typeof c=="number"){if(e&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,
-c){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(e=e-b.call(this,a));return e}})();CKEDITOR.dom.documentFragment=function(b){b=b||CKEDITOR.document;this.$=b.type==CKEDITOR.NODE_DOCUMENT?b.$.createDocumentFragment():b};
-CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(b){b=b.$;b.parentNode.insertBefore(this.$,b.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});
-(function(){function b(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,n=c.startContainer;d=c.endContainer;var o=c.startOffset,l=c.endOffset,j,q=this.guard,f=this.type,e=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var i=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),s=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(l):d.getNext();this._.guardLTR=function(a,b){return(!b||!i.equals(a))&&(!s||
-!a.equals(s))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var A=n.type==CKEDITOR.NODE_ELEMENT?n:n.getParent(),B=n.type==CKEDITOR.NODE_ELEMENT?o?n.getChild(o-1):null:n.getPrevious();this._.guardRTL=function(a,b){return(!b||!A.equals(a))&&(!B||!a.equals(B))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var p=a?this._.guardRTL:this._.guardLTR;j=q?function(a,b){return p(a,b)===false?false:q(a,b)}:p;if(this.current)d=this.current[e](false,f,j);else{if(a)d.type==
-CKEDITOR.NODE_ELEMENT&&(d=l>0?d.getChild(l-1):j(d,true)===false?null:d.getPreviousSourceNode(true,f,j));else{d=n;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(o)))d=j(n,true)===false?null:n.getNextSourceNode(true,f,j)}d&&j(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[e](false,f,j)}this.end();return this.current=null}function c(a){for(var c,d=null;c=b.call(this,a);)d=c;return d}
-CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},next:function(){return b.call(this)},previous:function(){return b.call(this,1)},checkForward:function(){return b.call(this,0,1)!==false},checkBackward:function(){return b.call(this,1,1)!==false},lastForward:function(){return c.call(this)},lastBackward:function(){return c.call(this,1)},reset:function(){delete this.current;this._={}}}});var a={block:1,"list-item":1,table:1,"table-row-group":1,
-"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,"table-caption":1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(b){b=b?CKEDITOR.tools.extend({},CKEDITOR.dtd.$block,b||{}):CKEDITOR.dtd.$block;return this.getComputedStyle("float")=="none"&&a[this.getComputedStyle("display")]||b[this.getName()]};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=
-function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var n,o;n=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(o=d.getParent())&&c(o);n=a?n:n||c(d);return!!(b^n)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=
-function(a){var b=CKEDITOR.dom.walker.whitespaces();return function(c){if(b(c))c=1;else{c.type==CKEDITOR.NODE_TEXT&&(c=c.getParent());c=!c.$.offsetHeight}return!!(a^c)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!e(a)&&!d(a)}return function(c){var d=!CKEDITOR.env.ie?c.is&&c.is("br"):c.getText&&f.test(c.getText());if(d){d=c.getParent();c=c.getNext(b);d=d.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&
-c.isBlockBoundary())}return!!(a^d)}};var f=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,e=CKEDITOR.dom.walker.whitespaces(),d=CKEDITOR.dom.walker.bookmark();CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(d(a)||e(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty));return a&&(!CKEDITOR.env.ie?a.is&&a.is("br"):a.getText&&f.test(a.getText()))?a:false}})();
-CKEDITOR.dom.range=function(b){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var c=b instanceof CKEDITOR.dom.document;this.document=c?b:b.getDocument();this.root=c?b.getBody():b};
-(function(){function b(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(true),c=CKEDITOR.dom.walker.bogus();return function(q){if(l(q)||b(q))return true;if(c(q)&&!a)return a=true;return q.type==CKEDITOR.NODE_TEXT&&(q.hasAscendant("pre")||CKEDITOR.tools.trim(q.getText()).length)||q.type==CKEDITOR.NODE_ELEMENT&&!q.is(d)?false:true}}function c(a){var b=CKEDITOR.dom.walker.whitespaces(),l=CKEDITOR.dom.walker.bookmark(1);return function(c){return l(c)||b(c)?true:!a&&g(c)||
-c.type==CKEDITOR.NODE_ELEMENT&&c.is(CKEDITOR.dtd.$removeEmpty)}}function a(a){return!k(a)&&!h(a)}var f=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},e=function(a,b,l,c){a.optimizeBookmark();var d=a.startContainer,g=a.endContainer,f=a.startOffset,i=a.endOffset,e,k;if(g.type==CKEDITOR.NODE_TEXT)g=g.split(i);else if(g.getChildCount()>0)if(i>=g.getChildCount()){g=g.append(a.document.createText(""));k=true}else g=g.getChild(i);
-if(d.type==CKEDITOR.NODE_TEXT){d.split(f);d.equals(g)&&(g=d.getNext())}else if(f)if(f>=d.getChildCount()){d=d.append(a.document.createText(""));e=true}else d=d.getChild(f).getPrevious();else{d=d.append(a.document.createText(""),1);e=true}var f=d.getParents(),i=g.getParents(),h,p,m;for(h=0;h<f.length;h++){p=f[h];m=i[h];if(!p.equals(m))break}for(var u=l,r,D,v,t=h;t<f.length;t++){r=f[t];u&&!r.equals(d)&&(D=u.append(r.clone()));for(r=r.getNext();r;){if(r.equals(i[t])||r.equals(g))break;v=r.getNext();
-if(b==2)u.append(r.clone(true));else{r.remove();b==1&&u.append(r)}r=v}u&&(u=D)}u=l;for(l=h;l<i.length;l++){r=i[l];b>0&&!r.equals(g)&&(D=u.append(r.clone()));if(!f[l]||r.$.parentNode!=f[l].$.parentNode)for(r=r.getPrevious();r;){if(r.equals(f[l])||r.equals(d))break;v=r.getPrevious();if(b==2)u.$.insertBefore(r.$.cloneNode(true),u.$.firstChild);else{r.remove();b==1&&u.$.insertBefore(r.$,u.$.firstChild)}r=v}u&&(u=D)}if(b==2){p=a.startContainer;if(p.type==CKEDITOR.NODE_TEXT){p.$.data=p.$.data+p.$.nextSibling.data;
-p.$.parentNode.removeChild(p.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(p&&m&&(d.$.parentNode!=p.$.parentNode||g.$.parentNode!=m.$.parentNode)){b=m.getIndex();e&&m.$.parentNode==d.$.parentNode&&b--;if(c&&p.type==CKEDITOR.NODE_ELEMENT){c=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none">&nbsp;</span>',a.document);c.insertAfter(p);p.mergeSiblings(false);
-a.moveToBookmark({startNode:c})}else a.setStart(m.getParent(),b)}a.collapse(true)}e&&d.remove();k&&g.$.parentNode&&g.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},g=CKEDITOR.dom.walker.bogus(),k=new CKEDITOR.dom.walker.whitespaces,h=new CKEDITOR.dom.walker.bookmark,m=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/;CKEDITOR.dom.range.prototype={clone:function(){var a=new CKEDITOR.dom.range(this.root);
-a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,2,a);return a},deleteContents:function(a){this.collapsed||
-e(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||e(this,1,b,a);return b},createBookmark:function(a){var b,l,c,d,g=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("&nbsp;");if(a){c="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",c+(g?"C":"S"))}if(!g){l=b.clone();l.setHtml("&nbsp;");a&&l.setAttribute("id",c+"E");d=this.clone();d.collapse();d.insertNode(l)}d=
-this.clone();d.collapse(true);d.insertNode(b);if(l){this.setStartAfter(b);this.setEndBefore(l)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?c+(g?"C":"S"):b,endNode:a?c+"E":l,serializable:a,collapsed:g}},createBookmark2:function(a){var b=this.startContainer,l=this.endContainer,c=this.startOffset,d=this.endOffset,g=this.collapsed,f,i;if(!b||!l)return{start:0,end:0};if(a){if(b.type==CKEDITOR.NODE_ELEMENT){if((f=b.getChild(c))&&f.type==CKEDITOR.NODE_TEXT&&c>0&&f.getPrevious().type==
-CKEDITOR.NODE_TEXT){b=f;c=0}f&&f.type==CKEDITOR.NODE_ELEMENT&&(c=f.getIndex(1))}for(;b.type==CKEDITOR.NODE_TEXT&&(i=b.getPrevious())&&i.type==CKEDITOR.NODE_TEXT;){b=i;c=c+i.getLength()}if(!g){if(l.type==CKEDITOR.NODE_ELEMENT){if((f=l.getChild(d))&&f.type==CKEDITOR.NODE_TEXT&&d>0&&f.getPrevious().type==CKEDITOR.NODE_TEXT){l=f;d=0}f&&f.type==CKEDITOR.NODE_ELEMENT&&(d=f.getIndex(1))}for(;l.type==CKEDITOR.NODE_TEXT&&(i=l.getPrevious())&&i.type==CKEDITOR.NODE_TEXT;){l=i;d=d+i.getLength()}}}return{start:b.getAddress(a),
-end:g?null:l.getAddress(a),startOffset:c,endOffset:d,normalized:a,collapsed:g,is2:true}},moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),l=a.startOffset,c=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,l);c?this.setEnd(c,a):this.collapse(true)}else{b=(l=a.serializable)?this.document.getById(a.startNode):a.startNode;a=l?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);
-a.remove()}else this.collapse(true)}},getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,l=this.startOffset,c=this.endOffset,d;if(a.type==CKEDITOR.NODE_ELEMENT){d=a.getChildCount();if(d>l)a=a.getChild(l);else if(d<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){d=b.getChildCount();if(d>c)b=b.getChild(c).getPreviousSourceNode(true);else if(d<1)b=b.getPreviousSourceNode();
-else{for(b=b.$;b.lastChild;)b=b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var l=this.startContainer,c=this.endContainer,l=l.equals(c)?a&&l.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?l.getChild(this.startOffset):l:l.getCommonAncestor(c);return b&&!l.is?l.getParent():l},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=
-a.getLength()&&this.setStartAfter(a):this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,
-j=this.startOffset,d=this.collapsed;if((!a||d)&&c&&c.type==CKEDITOR.NODE_TEXT){if(j)if(j>=c.getLength()){j=c.getIndex()+1;c=c.getParent()}else{var g=c.split(j),j=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(g,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{j=c.getIndex();c=c.getParent()}this.setStart(c,j);if(d){this.collapse(true);return}}c=this.endContainer;j=this.endOffset;if(!b&&!d&&c&&c.type==
-CKEDITOR.NODE_TEXT){if(j){j>=c.getLength()||c.split(j);j=c.getIndex()+1}else j=c.getIndex();c=c.getParent();this.setEnd(c,j)}},enlarge:function(a,b){switch(a){case CKEDITOR.ENLARGE_INLINE:var c=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var j=this.getCommonAncestor(),d=this.root,g,f,i,e,h,k=false,p,m;p=this.startContainer;m=this.startOffset;if(p.type==CKEDITOR.NODE_TEXT){if(m){p=!CKEDITOR.tools.trim(p.substring(0,m)).length&&p;k=!!p}if(p&&!(e=p.getPrevious()))i=p.getParent()}else{m&&
-(e=p.getChild(m-1)||p.getLast());e||(i=p)}for(;i||e;){if(i&&!e){!h&&i.equals(j)&&(h=true);if(c?i.isBlockBoundary():!d.contains(i))break;if(!k||i.getComputedStyle("display")!="inline"){k=false;h?g=i:this.setStartBefore(i)}e=i.getPrevious()}for(;e;){p=false;if(e.type==CKEDITOR.NODE_COMMENT)e=e.getPrevious();else{if(e.type==CKEDITOR.NODE_TEXT){m=e.getText();/[^\s\ufeff]/.test(m)&&(e=null);p=/[\s\ufeff]$/.test(m)}else if((e.$.offsetWidth>0||b&&e.is("br"))&&!e.data("cke-bookmark"))if(k&&CKEDITOR.dtd.$removeEmpty[e.getName()]){m=
-e.getText();if(/[^\s\ufeff]/.test(m))e=null;else for(var u=e.$.getElementsByTagName("*"),r=0,D;D=u[r++];)if(!CKEDITOR.dtd.$removeEmpty[D.nodeName.toLowerCase()]){e=null;break}e&&(p=!!m.length)}else e=null;p&&(k?h?g=i:i&&this.setStartBefore(i):k=true);if(e){p=e.getPrevious();if(!i&&!p){i=e;e=null;break}e=p}else i=null}}i&&(i=i.getParent())}p=this.endContainer;m=this.endOffset;i=e=null;h=k=false;if(p.type==CKEDITOR.NODE_TEXT){p=!CKEDITOR.tools.trim(p.substring(m)).length&&p;k=!(p&&p.getLength());if(p&&
-!(e=p.getNext()))i=p.getParent()}else(e=p.getChild(m))||(i=p);for(;i||e;){if(i&&!e){!h&&i.equals(j)&&(h=true);if(c?i.isBlockBoundary():!d.contains(i))break;if(!k||i.getComputedStyle("display")!="inline"){k=false;h?f=i:i&&this.setEndAfter(i)}e=i.getNext()}for(;e;){p=false;if(e.type==CKEDITOR.NODE_TEXT){m=e.getText();/[^\s\ufeff]/.test(m)&&(e=null);p=/^[\s\ufeff]/.test(m)}else if(e.type==CKEDITOR.NODE_ELEMENT){if((e.$.offsetWidth>0||b&&e.is("br"))&&!e.data("cke-bookmark"))if(k&&CKEDITOR.dtd.$removeEmpty[e.getName()]){m=
-e.getText();if(/[^\s\ufeff]/.test(m))e=null;else{u=e.$.getElementsByTagName("*");for(r=0;D=u[r++];)if(!CKEDITOR.dtd.$removeEmpty[D.nodeName.toLowerCase()]){e=null;break}}e&&(p=!!m.length)}else e=null}else p=1;p&&k&&(h?f=i:this.setEndAfter(i));if(e){p=e.getNext();if(!i&&!p){i=e;e=null;break}e=p}else i=null}i&&(i=i.getParent())}if(g&&f){j=g.contains(f)?f:g;this.setStartBefore(j);this.setEndAfter(j)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:i=new CKEDITOR.dom.range(this.root);
-d=this.root;i.setStartAt(d,CKEDITOR.POSITION_AFTER_START);i.setEnd(this.startContainer,this.startOffset);i=new CKEDITOR.dom.walker(i);var v,t,w=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),I=function(a){var b=w(a);b||(v=a);return b},c=function(a){var b=I(a);!b&&(a.is&&a.is("br"))&&(t=a);return b};i.guard=I;i=i.lastBackward();v=v||d;this.setStartAt(v,!v.is("br")&&(!i&&this.checkStartOfBlock()||i&&v.contains(i))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);
-if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){i=this.clone();i=new CKEDITOR.dom.walker(i);var G=CKEDITOR.dom.walker.whitespaces(),C=CKEDITOR.dom.walker.bookmark();i.evaluator=function(a){return!G(a)&&!C(a)};if((i=i.previous())&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("br"))break}i=this.clone();i.collapse();i.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);i=new CKEDITOR.dom.walker(i);i.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?c:I;v=null;i=i.lastForward();v=v||d;this.setEndAt(v,!i&&this.checkEndOfBlock()||i&&
-v.contains(i)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);t&&this.setEndAfter(t)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,j=this.clone(),d=this.startContainer,g=this.endContainer,f=this.startOffset,e=this.endOffset,k=1,h=1;if(d&&d.type==CKEDITOR.NODE_TEXT)if(f)if(f>=d.getLength())j.setStartAfter(d);else{j.setStartBefore(d);k=0}else j.setStartBefore(d);if(g&&g.type==CKEDITOR.NODE_TEXT)if(e)if(e>=g.getLength())j.setEndAfter(g);else{j.setEndAfter(g);
-h=0}else j.setEndBefore(g);var j=new CKEDITOR.dom.walker(j),m=CKEDITOR.dom.walker.bookmark();j.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var p;j.guard=function(b,j){if(m(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||j&&b.equals(p)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary())return false;!j&&b.type==CKEDITOR.NODE_ELEMENT&&(p=b);return true};if(k)(d=j[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":
-"next"]())&&this.setStartAt(d,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(h){j.reset();(j=j[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(j,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!k&&!h)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},
-moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer=
-a;this.endOffset=b}f(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}f(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),
-a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}f(this)},setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==
-CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}f(this)},fixBlock:function(a,b){var c=this.createBookmark(),j=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(j);j.trim();CKEDITOR.env.ie||j.appendBogus();this.insertNode(j);this.moveToBookmark(c);return j},splitBlock:function(a){var b=
-new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),j=b.block,d=c.block,g=null;if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!j){j=this.fixBlock(true,a);d=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}d||(d=this.fixBlock(false,a))}a=j&&this.checkStartOfBlock();b=d&&this.checkEndOfBlock();this.deleteContents();if(j&&j.equals(d))if(b){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root);
-this.moveToPosition(d,CKEDITOR.POSITION_AFTER_END);d=null}else if(a){g=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(j,CKEDITOR.POSITION_BEFORE_START);j=null}else{d=this.splitElement(j);!CKEDITOR.env.ie&&!j.is("ul","ol")&&j.appendBogus()}return{previousBlock:j,nextBlock:d,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:g}},splitElement:function(a){if(!this.collapsed)return null;this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);
-b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(j){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||j.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),l=this[b?"endPath":"startPath"](),d=l.block||l.blockLimit,o;d&&!d.equals(l.root)&&!d.getFirst(a(d));){o=
-d.getParent();this[b?"setEndAt":"setStartAt"](d,CKEDITOR.POSITION_AFTER_END);d.remove(1);d=o}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var l=b==CKEDITOR.START,d=this.clone();d.collapse(l);d[l?"setStartAt":"setEndAt"](a,l?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);
-d.evaluator=c(l);return d[l?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var a=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.ltrim(a.substring(0,c));m.test(a)&&this.trim(0,1)}this.trim();a=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(a.block||a.blockLimit,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkBackward()},checkEndOfBlock:function(){var a=
-this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&a.type==CKEDITOR.NODE_TEXT){a=CKEDITOR.tools.rtrim(a.substring(c));m.test(a)&&this.trim(1,0)}this.trim();a=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(a.block||a.blockLimit,CKEDITOR.POSITION_BEFORE_END);a=new CKEDITOR.dom.walker(c);a.evaluator=b();return a.checkForward()},getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);
-c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")=="false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=
-b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(b,c){if(b.type==CKEDITOR.NODE_ELEMENT&&!b.isEditable(false)){this.moveToPosition(b,c?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var l=0;b;){if(b.type==CKEDITOR.NODE_TEXT){c&&this.checkEndOfBlock()&&m.test(b.getText())?this.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(b,c?CKEDITOR.POSITION_AFTER_END:
-CKEDITOR.POSITION_BEFORE_START);l=1;break}if(b.type==CKEDITOR.NODE_ELEMENT)if(b.isEditable()){this.moveToPosition(b,c?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);l=1}else c&&(b.is("br")&&this.checkEndOfBlock())&&this.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);var d=b,g=l,f=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(f=d[c?"getLast":"getFirst"](a));!g&&!f&&(f=d[c?"getPrevious":"getNext"](a));b=f}return!!l},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},
-moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=
-this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",this.document),b,c,d,g=this.clone();g.optimize();if(d=g.startContainer.type==CKEDITOR.NODE_TEXT){c=g.startContainer.getText();b=g.startContainer.split(g.startOffset);
-a.insertAfter(g.startContainer)}else g.insertNode(a);a.scrollIntoView();if(d){g.startContainer.setText(c);b.remove()}a.remove()}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;
-(function(){function b(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function c(a,b,c){for(a=a.getNextSourceNode(b,null,c);!f(a);)a=a.getNextSourceNode(b,null,c);return a}var a=/^[\r\n\t ]+$/,f=CKEDITOR.dom.walker.bookmark(false,true),e=CKEDITOR.dom.walker.whitespaces(true),d=function(a){return f(a)&&e(a)};b.prototype={getNextParagraph:function(b){b=b||"p";if(!CKEDITOR.dtd[this.range.root.getName()][b])return null;var e,
-h,m,n,o,l;if(!this._.started){h=this.range.clone();h.shrink(CKEDITOR.NODE_ELEMENT,true);n=h.endContainer.hasAscendant("pre",true)||h.startContainer.hasAscendant("pre",true);h.enlarge(this.forceBrBreak&&!n||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!h.collapsed){n=new CKEDITOR.dom.walker(h.clone());var j=CKEDITOR.dom.walker.bookmark(true,true);n.evaluator=j;this._.nextNode=n.next();n=new CKEDITOR.dom.walker(h.clone());n.evaluator=j;n=n.previous();this._.lastNode=
-n.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&this._.lastNode.getParent().isBlockBoundary()){j=this.range.clone();j.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END);if(j.checkEndOfBlock()){j=new CKEDITOR.dom.elementPath(j.endContainer,j.root);this._.lastNode=(j.block||j.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode){this._.lastNode=this._.docEndMarker=h.document.createText("");this._.lastNode.insertAfter(n)}h=
-null}this._.started=1}j=this._.nextNode;n=this._.lastNode;for(this._.nextNode=null;j;){var q=0,y=j.hasAscendant("pre"),z=j.type!=CKEDITOR.NODE_ELEMENT,i=0;if(z)j.type==CKEDITOR.NODE_TEXT&&a.test(j.getText())&&(z=0);else{var s=j.getName();if(j.isBlockBoundary(this.forceBrBreak&&!y&&{br:1})){if(s=="br")z=1;else if(!h&&!j.getChildCount()&&s!="hr"){e=j;m=j.equals(n);break}if(h){h.setEndAt(j,CKEDITOR.POSITION_BEFORE_START);if(s!="br")this._.nextNode=j}q=1}else{if(j.getFirst()){if(!h){h=this.range.clone();
-h.setStartAt(j,CKEDITOR.POSITION_BEFORE_START)}j=j.getFirst();continue}z=1}}if(z&&!h){h=this.range.clone();h.setStartAt(j,CKEDITOR.POSITION_BEFORE_START)}m=(!q||z)&&j.equals(n);if(h&&!q)for(;!j.getNext(d)&&!m;){s=j.getParent();if(s.isBlockBoundary(this.forceBrBreak&&!y&&{br:1})){q=1;z=0;m||s.equals(n);h.setEndAt(s,CKEDITOR.POSITION_BEFORE_END);break}j=s;z=1;m=j.equals(n);i=1}z&&h.setEndAt(j,CKEDITOR.POSITION_AFTER_END);j=c(j,i,n);if((m=!j)||q&&h)break}if(!e){if(!h){this._.docEndMarker&&this._.docEndMarker.remove();
-return this._.nextNode=null}e=new CKEDITOR.dom.elementPath(h.startContainer,h.root);j=e.blockLimit;q={div:1,th:1,td:1};e=e.block;if(!e&&j&&!this.enforceRealBlocks&&q[j.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!j.equals(h.root))e=j;else if(!e||this.enforceRealBlocks&&e.getName()=="li"){e=this.range.document.createElement(b);h.extractContents().appendTo(e);e.trim();h.insertNode(e);o=l=true}else if(e.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){e=e.clone(false);h.extractContents().appendTo(e);
-e.trim();l=h.splitBlock();o=!l.wasStartOfBlock;l=!l.wasEndOfBlock;h.insertNode(e)}}else if(!m)this._.nextNode=e.equals(n)?null:c(h.getBoundaryNodes().endNode,1,n)}if(o)(h=e.getPrevious())&&h.type==CKEDITOR.NODE_ELEMENT&&(h.getName()=="br"?h.remove():h.getLast()&&h.getLast().$.nodeName.toLowerCase()=="br"&&h.getLast().remove());if(l)(h=e.getLast())&&h.type==CKEDITOR.NODE_ELEMENT&&h.getName()=="br"&&(CKEDITOR.env.ie||h.getPrevious(f)||h.getNext(f))&&h.remove();if(!this._.nextNode)this._.nextNode=m||
-e.equals(n)||!n?null:c(e,1,n);return e}};CKEDITOR.dom.range.prototype.createIterator=function(){return new b(this)}})();
-CKEDITOR.command=function(b,c){this.uiItems=[];this.exec=function(a){if(this.state==CKEDITOR.TRISTATE_DISABLED)return false;this.editorFocus&&b.focus();return this.fire("exec")===false?true:c.exec.call(this,b,a)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}this.enable();return this.fire("refresh",{editor:a,path:b})===false?true:c.refresh&&c.refresh.apply(this,arguments)!==false};CKEDITOR.tools.extend(this,
-c,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!c.context,state:CKEDITOR.TRISTATE_OFF});CKEDITOR.event.call(this)};
-CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(b){if(this.state==b)return false;this.previousState=this.state;this.state=b;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&
-this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3;
-CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};
-(function(){CKEDITOR.focusManager=function(b){if(b.focusManager)return b.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:b};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(){this._.timer&&clearTimeout(this._.timer);if(!this.hasFocus&&!this._.locked){var b=CKEDITOR.currentInstance;b&&b.focusManager.blur(1);this.hasFocus=true;(b=this._.editor.container)&&b.addClass("cke_focus");this._.editor.fire("focus")}},lock:function(){this._.locked=
-1},unlock:function(){delete this._.locked},blur:function(b){function c(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var a=CKEDITOR.focusManager._.blurDelay;b||!a?c.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;c.call(this)},a,this)}},add:function(b,c){var a=b.getCustomData("focusmanager");if(!a||a!=this){a&&a.remove(b);var a=
-"focus",f="blur";if(c)if(CKEDITOR.env.ie){a="focusin";f="focusout"}else CKEDITOR.event.useCapture=1;var e={blur:function(){b.equals(this.currentActive)&&this.blur()},focus:function(){this.currentActive=b;this.focus()}};b.on(a,e.focus,this);b.on(f,e.blur,this);if(c)CKEDITOR.event.useCapture=0;b.setCustomData("focusmanager",this);b.setCustomData("focusmanager_handlers",e)}},remove:function(b){b.removeCustomData("focusmanager");var c=b.removeCustomData("focusmanager_handlers");b.removeListener("blur",
-c.blur);b.removeListener("focus",c.focus)}}})();CKEDITOR.keystrokeHandler=function(b){if(b.keystrokeHandler)return b.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:b};return this};
-(function(){var b,c=function(a){var a=a.data,c=a.getKeystroke(),d=this.keystrokes[c],g=this._.editor;b=g.fire("key",{keyCode:c})===false;if(!b){d&&(b=g.execCommand(d,{from:"keystrokeHandler"})!==false);b||(b=!!this.blockedKeystrokes[c])}b&&a.preventDefault(true);return!b},a=function(a){if(b){b=false;a.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(b){b.on("keydown",c,this);if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)b.on("keypress",a,this)}}})();
-(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,sk:1,sl:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,uk:1,vi:1,"zh-cn":1,zh:1},load:function(b,c,a){if(!b||!CKEDITOR.lang.languages[b])b=this.detect(c,b);this[b]?a(b,this[b]):CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+
-b+".js"),function(){a(b,this[b])},this)},detect:function(b,c){var a=this.languages,c=c||navigator.userLanguage||navigator.language||b,f=c.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),e=f[1],f=f[2];a[e+"-"+f]?e=e+"-"+f:a[e]||(e=null);CKEDITOR.lang.detect=e?function(){return e}:function(a){return a};return e||b}}})();
-CKEDITOR.scriptLoader=function(){var b={},c={};return{load:function(a,f,e,d){var g=typeof a=="string";g&&(a=[a]);e||(e=CKEDITOR);var k=a.length,h=[],m=[],n=function(a){f&&(g?f.call(e,a):f.call(e,h,m))};if(k===0)n(true);else{var o=function(a,b){(b?h:m).push(a);if(--k<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");n(b)}},l=function(a,l){b[a]=1;var d=c[a];delete c[a];for(var j=0;j<d.length;j++)d[j](a,l)},j=function(a){if(b[a])o(a,true);else{var d=c[a]||(c[a]=[]);d.push(o);if(!(d.length>
-1)){var j=new CKEDITOR.dom.element("script");j.setAttributes({type:"text/javascript",src:a});if(f)if(CKEDITOR.env.ie)j.$.onreadystatechange=function(){if(j.$.readyState=="loaded"||j.$.readyState=="complete"){j.$.onreadystatechange=null;l(a,true)}};else{j.$.onload=function(){setTimeout(function(){l(a,true)},0)};j.$.onerror=function(){l(a,false)}}j.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var q=0;q<k;q++)j(a[q])}}}}();
-CKEDITOR.resourceManager=function(b,c){this.basePath=b;this.fileName=c;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}};
-CKEDITOR.resourceManager.prototype={add:function(b,c){if(this.registered[b])throw'[CKEDITOR.resourceManager.add] The resource name "'+b+'" is already registered.';var a=this.registered[b]=c||{};a.name=b;a.path=this.getPath(b);CKEDITOR.fire(b+CKEDITOR.tools.capitalize(this.fileName)+"Ready",a);return this.get(b)},get:function(b){return this.registered[b]||null},getPath:function(b){var c=this.externals[b];return CKEDITOR.getUrl(c&&c.dir||this.basePath+b+"/")},getFilePath:function(b){var c=this.externals[b];
-return CKEDITOR.getUrl(this.getPath(b)+(c&&typeof c.file=="string"?c.file:this.fileName+".js"))},addExternal:function(b,c,a){for(var b=b.split(","),f=0;f<b.length;f++)this.externals[b[f]]={dir:c,file:a}},load:function(b,c,a){CKEDITOR.tools.isArray(b)||(b=b?[b]:[]);for(var f=this.loaded,e=this.registered,d=[],g={},k={},h=0;h<b.length;h++){var m=b[h];if(m)if(!f[m]&&!e[m]){var n=this.getFilePath(m);d.push(n);n in g||(g[n]=[]);g[n].push(m)}else k[m]=this.get(m)}CKEDITOR.scriptLoader.load(d,function(b,
-l){if(l.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+g[l[0]].join(",")+'" was not found at "'+l[0]+'".';for(var d=0;d<b.length;d++)for(var e=g[b[d]],h=0;h<e.length;h++){var m=e[h];k[m]=this.get(m);f[m]=1}c.call(a,k)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin");
-CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(b){var c={};return function(a,f,e){var d={},g=function(a){b.call(this,a,function(a){CKEDITOR.tools.extend(d,a);var b=[],k;for(k in a){var o=a[k],l=o&&o.requires;if(!c[k]){if(o.icons)for(var j=o.icons.split(","),q=0;q<j.length;q++)CKEDITOR.skin.addIcon(j[q],o.path+"icons/"+j[q]+".png");c[k]=1}if(l){l.split&&(l=l.split(","));for(o=0;o<l.length;o++)d[l[o]]||b.push(l[o])}}if(b.length)g.call(this,b);else{for(k in d){o=d[k];if(o.onLoad&&
-!o.onLoad._called){o.onLoad()===false&&delete d[k];o.onLoad._called=1}}f&&f.call(e||window,d)}},this)};g.call(this,a)}});CKEDITOR.plugins.setLang=function(b,c,a){var f=this.get(b),b=f.langEntries||(f.langEntries={}),f=f.lang||(f.lang=[]);f.split&&(f=f.split(","));CKEDITOR.tools.indexOf(f,c)==-1&&f.push(c);b[c]=a};CKEDITOR.ui=function(b){if(b.ui)return b.ui;this.items={};this.instances={};this.editor=b;this._={handlers:{}};return this};
-CKEDITOR.ui.prototype={add:function(b,c,a){a.name=b.toLowerCase();var f=this.items[b]={type:c,command:a.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(f,a)},get:function(b){return this.instances[b]},create:function(b){var c=this.items[b],a=c&&this._.handlers[c.type],f=c&&c.command&&this.editor.getCommand(c.command),a=a&&a.create.apply(this,c.args);this.instances[b]=a;f&&f.uiItems.push(a);if(a&&!a.type)a.type=c.type;return a},addHandler:function(b,c){this._.handlers[b]=
-c},space:function(b){return CKEDITOR.document.getById(this.spaceId(b))},spaceId:function(b){return this.editor.id+"_"+b}};CKEDITOR.event.implementOn(CKEDITOR.ui);
-(function(){function b(b,j,o){CKEDITOR.event.call(this);b=b&&CKEDITOR.tools.clone(b);if(j!==void 0){if(j instanceof CKEDITOR.dom.element){if(!o)throw Error("One of the element mode must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&o==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(o==CKEDITOR.ELEMENT_MODE_INLINE&&!j.is(CKEDITOR.dtd.$editable)||o==CKEDITOR.ELEMENT_MODE_REPLACE&&
-j.is(CKEDITOR.dtd.$nonBodyContent))throw Error('The specified element mode is not supported on element: "'+j.getName()+'".');this.element=j;this.elementMode=o;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(j.getId()||j.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||c();this.id=CKEDITOR.tools.getNextId();this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this);this.focusManager=
-new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("mode",a);this.on("readOnly",a);this.on("selectionChange",f);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){d(this,b)},0,this)}function c(){do var a="editor"+ ++n;while(CKEDITOR.instances[a]);return a}function a(){var a,b=this.commands,c=this.mode;if(c)for(var d in b){a=b[d];
-a[a.startDisabled?"disable":this.readOnly&&!a.readOnly?"disable":a.modes[c]?"enable":"disable"]()}}function f(a){var b=this.commands,c=a.editor,d=a.data.path,o;for(o in b){a=b[o];a.contextSensitive&&a.refresh(c,d)}}function e(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=o[b]||(o[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b||!e(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.load(b,function(){c.fn=CKEDITOR.editorConfig?
-CKEDITOR.editorConfig:function(){};e(a)});return true}function d(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}a.readOnly=!(!a.config.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.isReadOnly():a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.getAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&!CKEDITOR.dtd[a.element.getName()].p;a.tabIndex=
-a.config.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;if(a.config.skin)CKEDITOR.skinName=a.config.skin;a.fireOnce("configLoaded");a.dataProcessor=new CKEDITOR.htmlDataProcessor(a);g(a)});if(b&&b.customConfig!=void 0)a.config.customConfig=b.customConfig;e(a)||a.fireOnce("customConfigLoaded")}function g(a){CKEDITOR.skin.loadPart("editor",function(){k(a)})}function k(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);
-if(CKEDITOR.env.gecko&&CKEDITOR.env.version<10900&&a.lang.dir=="rtl")a.lang.dir="ltr";if(!a.config.contentsLangDirection)a.config.contentsLangDirection=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");h(a)})}function h(a){var b=a.config,c=b.plugins,d=b.extraPlugins,o=b.removePlugins;if(d)var e=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(e,""),c=c+(","+d);if(o)var g=RegExp("(?:^|,)(?:"+o.replace(/\s*,\s*/g,"|")+")(?=,|$)",
-"g"),c=c.replace(g,"");CKEDITOR.env.air&&(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],o=[],e=[];a.plugins=c;for(var f in c){var i=c[f],h=i.lang,q=null,t=i.requires,k;CKEDITOR.tools.isArray(t)&&(t=t.join(","));if(t&&(k=t.match(g)))for(;t=k.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[t,f]);if(h&&!a.lang[f]){h.split&&(h=h.split(","));
-if(CKEDITOR.tools.indexOf(h,a.langCode)>=0)q=a.langCode;else{q=a.langCode.replace(/-.*/,"");q=q!=a.langCode&&CKEDITOR.tools.indexOf(h,q)>=0?q:CKEDITOR.tools.indexOf(h,"en")>=0?"en":h[0]}if(!i.langEntries||!i.langEntries[q])e.push(CKEDITOR.getUrl(i.path+"lang/"+q+".js"));else{a.lang[f]=i.langEntries[q];q=null}}o.push(q);d.push(i)}CKEDITOR.scriptLoader.load(e,function(){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var g=0;g<d.length;g++){var f=d[g];e===0&&(o[g]&&f.lang&&f.langEntries)&&
-(a.lang[f.name]=f.langEntries[o[g]]);if(f[c[e]])f[c[e]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(g=0;g<a.config.blockedKeystrokes.length;g++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[g]]=1;a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function m(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?
-a.setValue(b):a.setHtml(b);return true}return false}b.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=b;var n=0,o={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){return this.commands[a]=new CKEDITOR.command(this,b)},destroy:function(a){this.fire("beforeDestroy");!a&&m.call(this);this.editable(null);this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",null,this)},elementPath:function(a){return(a=a||this.getSelection().getStartElement())?
-new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==true){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec",d)!==true)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&
-this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},
-setData:function(a,b,c){if(b)this.on("dataReady",function(a){a.removeListener();b.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==void 0||a;if(this.readOnly!=a){this.readOnly=a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",
-a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return m.call(this)},setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,o=b.length;o--;){c=b[o];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}}})})();
-CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}};
-(function(){var b=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,c={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(a){for(var f,e,d=0,g;f=this._.htmlPartsRegex.exec(a);){e=f.index;if(e>d){d=a.substring(d,e);if(g)g.push(d);else this.onText(d)}d=
-this._.htmlPartsRegex.lastIndex;if(e=f[1]){e=e.toLowerCase();if(g&&CKEDITOR.dtd.$cdata[e]){this.onCDATA(g.join(""));g=null}if(!g){this.onTagClose(e);continue}}if(g)g.push(f[0]);else if(e=f[3]){e=e.toLowerCase();if(!/="/.test(e)){var k={},h;f=f[4];var m=!!(f&&f.charAt(f.length-1)=="/");if(f)for(;h=b.exec(f);){var n=h[1].toLowerCase();h=h[2]||h[3]||h[4]||"";k[n]=!h&&c[n]?n:h}this.onTagOpen(e,k,m);!g&&CKEDITOR.dtd.$cdata[e]&&(g=[])}}else if(e=f[2])this.onComment(e)}if(a.length>d)this.onText(a.substring(d,
-a.length))}}})();
-CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(b){this._.output.push("<",b)},openTagClose:function(b,c){c?this._.output.push(" />"):this._.output.push(">")},attribute:function(b,c){typeof c=="string"&&(c=CKEDITOR.tools.htmlEncodeAttr(c));this._.output.push(" ",b,'="',c,'"')},closeTag:function(b){this._.output.push("</",b,">")},text:function(b){this._.output.push(b)},comment:function(b){this._.output.push("<\!--",b,"--\>")},write:function(b){this._.output.push(b)},
-reset:function(){this._.output=[];this._.indent=false},getHtml:function(b){var c=this._.output.join("");b&&this.reset();return c}}});CKEDITOR.htmlParser.comment=function(b){this.value=b;this._={isBlockLike:false}};CKEDITOR.htmlParser.comment.prototype={type:CKEDITOR.NODE_COMMENT,writeHtml:function(b,c){var a=this.value;if(c){if(!(a=c.onComment(a,this)))return;if(typeof a!="string"){a.parent=this.parent;a.writeHtml(b,c);return}}b.comment(a)}};
-(function(){CKEDITOR.htmlParser.text=function(b){this.value=b;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype={type:CKEDITOR.NODE_TEXT,writeHtml:function(b,c){var a=this.value;(!c||(a=c.onText(a,this)))&&b.text(a)}}})();(function(){CKEDITOR.htmlParser.cdata=function(b){this.value=b};CKEDITOR.htmlParser.cdata.prototype={type:CKEDITOR.NODE_TEXT,writeHtml:function(b){b.write(this.value)}}})();
-CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}};
-(function(){function b(a){return a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var c=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),a={ol:1,ul:1},f=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1});CKEDITOR.htmlParser.fragment.fromHtml=function(e,d,g){function k(a){var b;if(y.length>0)for(var c=0;c<y.length;c++){var d=y[c],l=d.name,o=CKEDITOR.dtd[l],j=i.name&&
-CKEDITOR.dtd[i.name];if((!j||j[l])&&(!a||!o||o[a]||!CKEDITOR.dtd[a])){if(!b){h();b=1}d=d.clone();d.parent=i;i=d;y.splice(c,1);c--}else if(l==i.name){n(i,i.parent,1);c--}}}function h(){for(;z.length;)n(z.shift(),i)}function m(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))?c.value=d:a.children.length=b-1}}function n(a,c,d){var c=c||i||q,l=i;if(a.previous===void 0){if(o(c,a)){i=c;
-j.onTagOpen(g,{});a.returnPoint=c=i}m(a);(!b(a)||a.children.length)&&c.add(a);a.name=="pre"&&(A=false);a.name=="textarea"&&(s=false)}if(a.returnPoint){i=a.returnPoint;delete a.returnPoint}else i=d?c:l}function o(a,b){if((a==q||a.name=="body")&&g&&(!a.name||CKEDITOR.dtd[a.name][g])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&&!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function l(a,b){return a in CKEDITOR.dtd.$listItem||
-a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var j=new CKEDITOR.htmlParser,q=d instanceof CKEDITOR.htmlParser.element?d:typeof d=="string"?new CKEDITOR.htmlParser.element(d):new CKEDITOR.htmlParser.fragment,y=[],z=[],i=q,s=q.name=="textarea",A=q.name=="pre";j.onTagOpen=function(d,o,g,e){o=new CKEDITOR.htmlParser.element(d,o);if(o.isUnknown&&g)o.isEmpty=true;o.isOptionalClose=e;if(b(o))y.push(o);else{if(d=="pre")A=true;else{if(d=="br"&&A){i.add(new CKEDITOR.htmlParser.text("\n"));
-return}d=="textarea"&&(s=true)}if(d=="br")z.push(o);else{for(;;){e=(g=i.name)?CKEDITOR.dtd[g]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f;if(!o.isUnknown&&!i.isUnknown&&!e[d])if(i.isOptionalClose)j.onTagClose(g);else if(d in a&&g in a){g=i.children;(g=g[g.length-1])&&g.name=="li"||n(g=new CKEDITOR.htmlParser.element("li"),i);!o.returnPoint&&(o.returnPoint=i);i=g}else if(d in CKEDITOR.dtd.$listItem&&!l(d,g))j.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(g in c&&!l(d,g)){!o.returnPoint&&
-(o.returnPoint=i);i=i.parent}else{g in CKEDITOR.dtd.$inline&&y.unshift(i);if(i.parent)n(i,i.parent,1);else{o.isOrphan=1;break}}else break}k(d);h();o.parent=i;o.isEmpty?n(o):i=o}}};j.onTagClose=function(a){for(var b=y.length-1;b>=0;b--)if(a==y[b].name){y.splice(b,1);return}for(var c=[],d=[],o=i;o!=q&&o.name!=a;){o._.isBlockLike||d.unshift(o);c.push(o);o=o.returnPoint||o.parent}if(o!=q){for(b=0;b<c.length;b++){var l=c[b];n(l,l.parent)}i=o;o._.isBlockLike&&h();n(o,o.parent);if(o==i)i=i.parent;y=y.concat(d)}a==
-"body"&&(g=false)};j.onText=function(b){if((!i._.hasInlineStarted||z.length)&&!A&&!s){b=CKEDITOR.tools.ltrim(b);if(b.length===0)return}var d=i.name,l=d?CKEDITOR.dtd[d]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):f;if(!s&&!l["#"]&&d in c){j.onTagOpen(d in a?"li":d=="dl"?"dd":d=="table"?"tr":d=="tr"?"td":"");j.onText(b)}else{h();k();!A&&!s&&(b=b.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));b=new CKEDITOR.htmlParser.text(b);if(o(i,b))this.onTagOpen(g,{},0,1);i.add(b)}};j.onCDATA=function(a){i.add(new CKEDITOR.htmlParser.cdata(a))};
-j.onComment=function(a){h();k();i.add(new CKEDITOR.htmlParser.comment(a))};j.parse(e);for(h(!CKEDITOR.env.ie&&1);i!=q;)n(i,i.parent,1);m(q);return q};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length===0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;
-this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},writeHtml:function(a,b){var c;this.filterChildren=function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml.call(this,a,b);a=a.getHtml();this.children=(new CKEDITOR.htmlParser.fragment.fromHtml(a)).children;c=1};b&&b.onRoot(this);this.writeChildrenHtml(a,c?null:b)},writeChildrenHtml:function(a,b,c){if(c&&!this.parent&&b)b.onRoot(this);
-for(c=0;c<this.children.length;c++)this.children[c].writeHtml(a,b)}}})();
-(function(){function b(a,b){for(var c=0;a&&c<b.length;c++)var e=b[c],a=a.replace(e[0],e[1]);return a}function c(a,b,c){typeof b=="function"&&(b=[b]);var e,f;f=a.length;var n=b&&b.length;if(n){for(e=0;e<f&&a[e].pri<c;e++);for(f=n-1;f>=0;f--)if(n=b[f]){n.pri=c;a.splice(e,0,n)}}}function a(a,b,c){if(b)for(var e in b){var m=a[e];a[e]=f(m,b[e],c);m||a.$length++}}function f(a,b,f){if(b){b.pri=f;if(a){if(a.splice)c(a,b,f);else{a=a.pri>f?[b,a]:[a,b];a.filter=e}return a}return b.filter=b}}function e(a){for(var b=
-a.type||a instanceof CKEDITOR.htmlParser.fragment,c=0;c<this.length;c++){if(b)var e=a.type,f=a.name;var n=this[c].apply(window,arguments);if(n===false)return n;if(b){if(n&&(n.name!=f||n.type!=e))return n}else if(typeof n!="string")return n;n!=void 0&&(a=n)}return a}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(a){this._={elementNames:[],attributeNames:[],elements:{$length:0},attributes:{$length:0}};a&&this.addRules(a,10)},proto:{addRules:function(b,e){typeof e!="number"&&(e=10);
-c(this._.elementNames,b.elementNames,e);c(this._.attributeNames,b.attributeNames,e);a(this._.elements,b.elements,e);a(this._.attributes,b.attributes,e);this._.text=f(this._.text,b.text,e)||this._.text;this._.comment=f(this._.comment,b.comment,e)||this._.comment;this._.root=f(this._.root,b.root,e)||this._.root},onElementName:function(a){return b(a,this._.elementNames)},onAttributeName:function(a){return b(a,this._.attributeNames)},onText:function(a){var b=this._.text;return b?b.filter(a):a},onComment:function(a,
-b){var c=this._.comment;return c?c.filter(a,b):a},onRoot:function(a){var b=this._.root;return b?b.filter(a):a},onElement:function(a){for(var b=[this._.elements["^"],this._.elements[a.name],this._.elements.$],c,e=0;e<3;e++)if(c=b[e]){c=c.filter(a,this);if(c===false)return null;if(c&&c!=a)return this.onNode(c);if(a.parent&&!a.name)break}return a},onNode:function(a){var b=a.type;return b==CKEDITOR.NODE_ELEMENT?this.onElement(a):b==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a.value)):
-b==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a.value)):null},onAttribute:function(a,b,c){if(b=this._.attributes[b]){a=b.filter(c,a,this);if(a===false)return false;if(typeof a!="undefined")return a}return c}}})})();
-(function(){function b(b,c){function o(a){return a||CKEDITOR.env.ie?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function l(b,c){return function(l){if(l.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=[],g=a(l),i,K;if(g)for(j(g,1)&&e.push(g);g;){if(d(g)&&(i=f(g))&&j(i))if((K=f(i))&&!d(K))e.push(i);else{var h=i,q=o(t),m=h.parent.children,y=CKEDITOR.tools.indexOf(m,h);m.splice(y+1,0,q);m=h.next;h.next=q;q.previous=h;q.parent=h.parent;q.next=m;k(i)}g=g.previous}for(g=
-0;g<e.length;g++)k(e[g]);if(e=CKEDITOR.env.opera&&!b||(typeof c=="function"?c(l)!==false:c))if(!t&&CKEDITOR.env.ie&&l.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)e=false;else if(!t&&CKEDITOR.env.ie&&(document.documentMode>7||l.name in CKEDITOR.dtd.tr||l.name in CKEDITOR.dtd.$listItem))e=false;else{e=a(l);e=!e||l.name=="form"&&e.name=="input"}e&&l.add(o(b))}}}function j(a,b){if((!t||!CKEDITOR.env.ie)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==
-CKEDITOR.NODE_TEXT&&(c=a.value.match(s))){if(c.index){g(a,new CKEDITOR.htmlParser.text(a.value.substring(0,c.index)));a.value=c[0]}if(CKEDITOR.env.ie&&t&&(!b||a.parent.name in h))return true;if(!t)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var i={elements:{}},t=c=="html",h=CKEDITOR.tools.extend({},E),q;for(q in h)"#"in B[q]||delete h[q];for(q in h)i.elements[q]=l(t,b.config.fillEmptyBlocks!==false);i.root=l(t);i.elements.br=function(a){return function(b){if(b.parent.type!=
-CKEDITOR.NODE_DOCUMENT_FRAGMENT){var c=b.attributes;if("data-cke-bogus"in c||"data-cke-eol"in c)delete c["data-cke-bogus"];else{for(c=b.next;c&&e(c);)c=c.next;var l=f(b);if(!c&&d(b.parent)){b=b.parent;c=o(a);l=b.children[b.children.length-1];b.children.push(c);c.parent=b;if(l){l.next=c;c.previous=l}}else d(c)&&(l&&!d(l))&&g(c,o(a))}}}}(t);return i}function c(a){return a.enterMode!=CKEDITOR.ENTER_BR&&a.autoParagraph!==false?a.enterMode==CKEDITOR.ENTER_DIV?"div":"p":false}function a(a){for(a=a.children[a.children.length-
-1];a&&e(a);)a=a.previous;return a}function f(a){for(a=a.previous;a&&e(a);)a=a.previous;return a}function e(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in E||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function g(a,b){var c=a.parent.children,d=CKEDITOR.tools.indexOf(c,a);c.splice(d,0,b);c=a.previous;a.previous=b;b.next=a;b.parent=a.parent;if(c){b.previous=
-c;c.next=b}}function k(a){var b=a.parent.children,c=CKEDITOR.tools.indexOf(b,a),d=a.previous,a=a.next;d&&(d.next=a);a&&(a.previous=d);b.splice(c,1)}function h(a){var b=a.parent;return b?CKEDITOR.tools.indexOf(b.children,a):-1}function m(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function n(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}function o(a){return a.replace(v,
-function(a,b,c){return"<"+b+c.replace(t,function(a,b){return!/^on/.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function l(a){return a.replace(w,function(a){return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function j(a){return a.replace(I,function(a,b){return decodeURIComponent(b)})}function q(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g,function(a){return"<\!--"+A+"{C}"+encodeURIComponent(a).replace(/--/g,
-"%2D%2D")+"--\>"})}function y(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function z(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function i(a,b){for(var c=[],d=b.config.protectedSource,o=b._.dataStore||(b._.dataStore={id:1}),l=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,
-/<noscript[\s\S]*?<\/noscript>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),j=0;j<d.length;j++)a=a.replace(d[j],function(a){a=a.replace(l,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(l,function(a,b,d){return"<\!--"+A+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g,"%2D%2D")+"--\>"});return a.replace(/(['"]).*?\1/g,function(a){return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,
-function(a,b){o[o.id]=decodeURIComponent(b);return"{cke_protected_"+o.id++ +"}"})})}CKEDITOR.htmlDataProcessor=function(a){var c,d;this.editor=a;this.dataFilter=c=new CKEDITOR.htmlParser.filter;this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(u);c.addRules(b(a,"data"));d.addRules(r);d.addRules(b(a,"html"))};CKEDITOR.htmlDataProcessor.prototype={toHtml:function(a,b,d){var a=i(a,this.editor),a=o(a),a=l(a),a=a.replace(G,"$1cke:$2"),a=a.replace(Q,
-"<cke:$1$2></cke:$1>"),a=CKEDITOR.env.opera?a:a.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),e=this.editor.editable(),f;!b&&b!==null&&(b=e.getName());e=b||e.getName();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&e=="pre"){e="div";a="<pre>"+a+"</pre>";f=1}e=this.editor.document.createElement(e);e.setHtml("a"+a);a=e.getHtml().substr(1);a=a.replace(RegExp(" data-cke-"+CKEDITOR.rnd+"-","ig")," ");f&&(a=a.replace(/^<pre>|<\/pre>$/gi,""));a=a.replace(C,"$1$2");a=j(a);a=y(a);a=CKEDITOR.htmlParser.fragment.fromHtml(a,
-b,d===false?false:c(this.editor.config));b=new CKEDITOR.htmlParser.basicWriter;a.writeChildrenHtml(b,this.dataFilter,1);a=b.getHtml(true);return a=q(a)},toDataFormat:function(a){var b=this.editor.editable(),d=this.writer,a=CKEDITOR.htmlParser.fragment.fromHtml(a,b.getName(),c(this.editor.config));d.reset();a.writeChildrenHtml(d,this.htmlFilter,1);d=d.getHtml(true);d=y(d);return d=z(d,this.editor)}};var s=/(?:&nbsp;|\xa0)$/,A="{cke_protected}",B=CKEDITOR.dtd,p=["caption","colgroup","col","thead","tfoot",
-"tbody"],E=CKEDITOR.tools.extend({},B.$blockLimit,B.$block),u={elements:{},attributeNames:[[/^on/,"data-cke-pa-on"]]},r={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,o=0;o<c.length;o++){d="data-cke-saved-"+c[o];d in b&&delete b[c[o]]}}return a},table:function(a){a.children.slice(0).sort(function(a,
-b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(p,a.name);d=CKEDITOR.tools.indexOf(p,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=h(a);d=h(b)}return c>d?1:-1})},embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;c&&(a.attributes.width=c);b&&(a.attributes.height=b)}},param:function(a){a.children=[];a.isEmpty=true;return a},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false},
-span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},style:function(a){var b=a.children[0];b&&b.value&&(b.value=CKEDITOR.tools.trim(b.value));if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];b&&(b.value=a.attributes["data-cke-title"]||"")}},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,
-""))||false}}};if(CKEDITOR.env.ie)r.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};for(var D in{input:1,textarea:1}){u.elements[D]=m;r.elements[D]=n}var v=/<(a|area|img|input|source)\b([^>]*)>/gi,t=/\b(on\w+|href|src|name)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,w=/(?:<style(?=[ >])[^>]*>[\s\S]*<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,I=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,G=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,
-C=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,Q=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();
-CKEDITOR.htmlParser.element=function(b,c){this.name=b;this.attributes=c||{};this.children=[];var a=b||"",f=a.match(/^cke:(.*)/);f&&(a=f[1]);a=!(!CKEDITOR.dtd.$nonBodyContent[a]&&!CKEDITOR.dtd.$block[a]&&!CKEDITOR.dtd.$listItem[a]&&!CKEDITOR.dtd.$tableContent[a]&&!(CKEDITOR.dtd.$nonEditable[a]||a=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[b];this.isUnknown=!CKEDITOR.dtd[b];this._={isBlockLike:a,hasInlineStarted:this.isEmpty||!a}};
-CKEDITOR.htmlParser.cssStyle=function(b){var c={};((b instanceof CKEDITOR.htmlParser.element?b.attributes.style:b)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,b,e){b=="font-family"&&(e=e.replace(/["']/g,""));c[b.toLowerCase()]=e});return{rules:c,populate:function(a){var b=this.toString();if(b)a instanceof CKEDITOR.dom.element?a.setAttribute("style",b):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=b:a.style=b},toString:function(){var a=[],b;
-for(b in c)c[b]&&a.push(b,":",c[b],";");return a.join("")}}};
-(function(){var b=function(b,a){b=b[0];a=a[0];return b<a?-1:b>a?1:0};CKEDITOR.htmlParser.element.prototype={type:CKEDITOR.NODE_ELEMENT,add:CKEDITOR.htmlParser.fragment.prototype.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},writeHtml:function(c,a){var f=this.attributes,e=this,d=e.name,g,k,h,m;e.filterChildren=function(){if(!m){var b=new CKEDITOR.htmlParser.basicWriter;CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.call(e,b,a);e.children=(new CKEDITOR.htmlParser.fragment.fromHtml(b.getHtml(),
-e.clone(),0)).children;m=1}};if(a){if(!this.parent)a.onRoot(this);for(;;){if(!(d=a.onElementName(d)))return;e.name=d;if(!(e=a.onElement(e)))return;e.parent=this.parent;if(e.name==d)break;if(e.type!=CKEDITOR.NODE_ELEMENT){e.writeHtml(c,a);return}d=e.name;if(!d){for(var d=0,n=this.children.length;d<n;d++)this.children[d].parent=e.parent;this.writeChildrenHtml.call(e,c,m?null:a);return}}f=e.attributes}c.openTag(d,f);for(var n=[],o=0;o<2;o++)for(g in f){k=g;h=f[g];if(o==1)n.push([g,h]);else if(a){for(;;)if(k=
-a.onAttributeName(g))if(k!=g){delete f[g];g=k}else break;else{delete f[g];break}k&&((h=a.onAttribute(e,k,h))===false?delete f[k]:f[k]=h)}}c.sortAttributes&&n.sort(b);f=n.length;for(o=0;o<f;o++){g=n[o];c.attribute(g[0],g[1])}c.openTagClose(d,e.isEmpty);if(!e.isEmpty){this.writeChildrenHtml.call(e,c,m?null:a);c.closeTag(d)}},writeChildrenHtml:function(b,a){CKEDITOR.htmlParser.fragment.prototype.writeChildrenHtml.apply(this,arguments)}}})();
-(function(){var b={};CKEDITOR.template=function(c){if(b[c])this.output=b[c];else{var a=c.replace(/'/g,"\\'").replace(/{([^}]+)}/g,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=b[c]=Function("data","buffer","return buffer?buffer.push('"+a+"'):['"+a+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document);
-CKEDITOR.add=function(b){CKEDITOR.instances[b.name]=b;b.on("focus",function(){if(CKEDITOR.currentInstance!=b){CKEDITOR.currentInstance=b;CKEDITOR.fire("currentInstance")}});b.on("blur",function(){if(CKEDITOR.currentInstance==b){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,b)};CKEDITOR.remove=function(b){delete CKEDITOR.instances[b.name]};
-(function(){var b={};CKEDITOR.addTemplate=function(c,a){var f=b[c];if(f)return f;f={name:c,source:a};CKEDITOR.fire("template",f);return b[c]=new CKEDITOR.template(f.source)};CKEDITOR.getTemplate=function(c){return b[c]}})();(function(){var b=[];CKEDITOR.addCss=function(c){b.push(c)};CKEDITOR.getCss=function(){return b.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2;
-CKEDITOR.TRISTATE_DISABLED=0;
-(function(){CKEDITOR.inline=function(b,c){if(!CKEDITOR.env.isCompatible)return null;b=CKEDITOR.dom.element.get(b);if(b.getEditor())throw'The editor instance "'+b.getEditor().name+'" is already attached to the provided element.';var a=new CKEDITOR.editor(c,b,CKEDITOR.ELEMENT_MODE_INLINE);a.setData(b.getHtml(),null,true);a.on("loaded",function(){a.fire("uiReady");a.editable(b);a.container=b;a.setData(a.getData(1));a.fire("contentDom");a.mode="wysiwyg";a.fire("mode");a.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",
-null,a);a.resetDirty()},null,null,1E4);a.on("destroy",function(){a.element.clearCustomData();delete a.element});return a};CKEDITOR.inlineAll=function(){var b,c,a;for(a in CKEDITOR.dtd.$editable)for(var f=CKEDITOR.document.getElementsByTag(a),e=0,d=f.count();e<d;e++){b=f.getItem(e);if(b.getAttribute("contenteditable")=="true"){c={element:b,config:{}};CKEDITOR.fire("inline",c)!==false&&CKEDITOR.inline(b,c.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();
-CKEDITOR.replaceClass="ckeditor";
-(function(){function b(b,e,k,h){if(!CKEDITOR.env.isCompatible)return null;b=CKEDITOR.dom.element.get(b);if(b.getEditor())throw'The editor instance "'+b.getEditor().name+'" is already attached to the provided element.';var m=new CKEDITOR.editor(e,b,h);h==CKEDITOR.ELEMENT_MODE_REPLACE&&b.setStyle("visibility","hidden");k&&m.setData(k,null,true);m.on("loaded",function(){a(m);h==CKEDITOR.ELEMENT_MODE_REPLACE&&m.config.autoUpdateElement&&f(m);m.setMode(m.config.startupMode,function(){m.fireOnce("instanceReady");
-CKEDITOR.fire("instanceReady",null,m);m.resetDirty()})});m.on("destroy",c);return m}function c(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&b.show();delete this.element}}function a(a){var b=a.name,c=a.element,f=a.elementMode,m=a.fire("uiSpace",{space:"top",html:""}).html,n=a.fireOnce("uiSpace",{space:"bottom",html:""}).html;e||(e=CKEDITOR.addTemplate("maincontainer",'<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+
-CKEDITOR.env.cssClass+'"  dir="{langDir}" lang="{langCode}" role="application" aria-labelledby="cke_{name}_arialbl"><span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span><{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'));b=CKEDITOR.dom.element.createFromHtml(e.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.lang.editor,
-topHtml:m?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+m+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:n?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+n+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(f==CKEDITOR.ELEMENT_MODE_REPLACE){c.hide();b.insertAfter(c)}else c.append(b);a.container=b;m&&a.ui.space("top").unselectable();n&&a.ui.space("bottom").unselectable();c=
-a.config.width;f=a.config.height;c&&b.setStyle("width",CKEDITOR.tools.cssLength(c));f&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(f));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}function f(a){var b=a.element;if(a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&b.is("textarea")){var c=b.$.form&&new CKEDITOR.dom.element(b.$.form);if(c){var e=function(){a.updateElement()};c.on("submit",e);if(!c.$.submit.nodeName&&!c.$.submit.length)c.$.submit=
-CKEDITOR.tools.override(c.$.submit,function(b){return function(){a.updateElement();b.apply?b.apply(this,arguments):b()}});a.on("destroy",function(){c.removeListener("submit",e)})}}}CKEDITOR.replace=function(a,c){return b(a,c,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(a,c,e){return b(a,c,e,CKEDITOR.ELEMENT_MODE_APPENDTO)};CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var c=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]==
-"string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){c={};if(arguments[0](e,c)===false)continue}this.replace(e,c)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var c=this,e=this._.modes;if(!(a==c.mode||!e||!e[a])){c.fire("beforeSetMode",a);if(c.mode){var f=c.checkDirty();c._.previousMode=c.mode;c.fire("beforeModeUnload");c.editable(0);
-c.ui.space("contents").setHtml("");c.mode=""}this._.modes[a](function(){c.mode=a;if(f!==void 0){c.mayBeDirty=true;!f&&c.resetDirty()}setTimeout(function(){c.fire("mode");b&&b.call(c)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,c,e){var f=this.container,n=this.ui.space("contents"),o=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,e=e?f.getChild(1):f;e.setSize("width",a,true);o&&(o.style.width="1%");n.setStyle("height",Math.max(b-(c?0:(e.$.offsetHeight||0)-(n.$.clientHeight||
-0)),0)+"px");o&&(o.style.width="100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};var e;CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg";
-(function(){function b(b){var c=b.editor,d=c.editable(),e=b.data.path,f=e.blockLimit,g=b.data.selection.getRanges()[0],i=c.config.enterMode;if(CKEDITOR.env.gecko){var h=e.block||e.blockLimit||e.root,m=h&&h.getLast(a);h&&(h.isBlockBoundary()&&(!m||!(m.type==CKEDITOR.NODE_ELEMENT&&m.isBlockBoundary()))&&!h.is("pre")&&!h.getBogus())&&h.appendBogus()}if(c.config.autoParagraph!==false&&i!=CKEDITOR.ENTER_BR&&g.collapsed&&d.equals(f)&&!e.block){d=g.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);e=new CKEDITOR.dom.walker(d);
-e.guard=function(b){return!a(b)||b.type==CKEDITOR.NODE_COMMENT||b.isReadOnly()};if(!e.checkForward()||d.checkStartOfBlock()&&d.checkEndOfBlock()){c=g.fixBlock(true,c.config.enterMode==CKEDITOR.ENTER_DIV?"div":"p");if(CKEDITOR.env.ie)(c=c.getFirst(a))&&(c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText()).match(/^(?:&nbsp;|\xa0)$/))&&c.remove();g.select();b.cancel()}}}function c(a){var b=a.data.getTarget();if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}
-function a(a){return h(a)&&m(a)}function f(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function e(b){var c,d=b.getRanges()[0],b=b.root,e=d.startPath(),f={table:1,ul:1,ol:1,dl:1},g=CKEDITOR.dom.walker.bogus();if(e.contains(f)){var i=d.clone();i.collapse(1);i.setStartAt(b,CKEDITOR.POSITION_AFTER_START);i=new CKEDITOR.dom.walker(i);e=function(b,d){return function(b,o){o&&(b.type==
-CKEDITOR.NODE_ELEMENT&&b.is(f))&&(c=b);if(a(b)&&!o&&(!d||!g(b)))return false}};i.guard=e(i);i.checkBackward();if(c){i=d.clone();i.collapse();i.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);i=new CKEDITOR.dom.walker(i);i.guard=e(i,1);c=0;i.checkForward();return c}}return null}function d(a){a.editor.focus();a.editor.fire("saveSnapshot")}function g(a,b){var c=a.editor;!b&&c.getSelection().scrollIntoView();setTimeout(function(){c.fire("saveSnapshot")},0)}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,
-$:function(a,b){this.base(b.$||b);this.editor=a;this.hasFocus=false;this.setup()},proto:{focus:function(){this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]();CKEDITOR.env.safari&&!this.isInline()&&(CKEDITOR.document.getActive().equals(this.getWindow().getFrame())||this.getWindow().focus())},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a=a=="focus"?"focusin":"focusout";b=f(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,
-c)},attachListener:function(a,b,c,d,e,f){!this._.listeners&&(this._.listeners=[]);var g=Array.prototype.slice.call(arguments,1);this._.listeners.push(a.on.apply(a,g))},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c,b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&
-(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){d(this);n(this,b=="text"?"text":"html",a)},insertText:function(a){d(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre",true)?CKEDITOR.ENTER_BR:b.config.enterMode,b=c==CKEDITOR.ENTER_BR,e=CKEDITOR.tools,
-a=e.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"&nbsp;&nbsp; &nbsp;"),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var f=/\n{2}/g;if(f.test(a))var g="<"+c+">",i="</"+c+">",a=g+a.replace(f,function(){return i+g})+i}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return e.repeat(a,2)}));a=a.replace(/^ | $/g,"&nbsp;");a=a.replace(/(>|\s) /g,function(a,b){return b+"&nbsp;"}).replace(/ (?=<)/g,"&nbsp;");n(this,"text",a)},insertElement:function(b){d(this);for(var c=
-this.editor,e=c.config.enterMode,f=c.getSelection(),h=f.getRanges(),m=b.getName(),i=CKEDITOR.dtd.$block[m],n,k,B,p=h.length-1;p>=0;p--){n=h[p];if(!n.checkReadOnly()){n.deleteContents(1);k=!p&&b||b.clone(1);var E,u;if(i)for(;(E=n.getCommonAncestor(0,1))&&(u=CKEDITOR.dtd[E.getName()])&&(!u||!u[m]);)if(E.getName()in CKEDITOR.dtd.span)n.splitElement(E);else if(n.checkStartOfBlock()&&n.checkEndOfBlock()){n.setStartBefore(E);n.collapse(true);E.remove()}else n.splitBlock(e==CKEDITOR.ENTER_DIV?"div":"p",
-c.editable());n.insertNode(k);B||(B=k)}}if(B){n.moveToPosition(B,CKEDITOR.POSITION_AFTER_END);if(i)if((b=B.getNext(a))&&b.type==CKEDITOR.NODE_ELEMENT&&b.is(CKEDITOR.dtd.$block))b.getDtd()["#"]?n.moveToElementEditStart(b):n.moveToElementEditEnd(B);else if(!b&&e!=CKEDITOR.ENTER_BR){b=n.fixBlock(true,e==CKEDITOR.ENTER_DIV?"div":"p");n.moveToElementEditStart(b)}}f.selectRanges([n]);g(this,CKEDITOR.env.opera)},setData:function(a,b){!b&&this.editor.dataProcessor&&(a=this.editor.dataProcessor.toHtml(a));
-this.setHtml(a);this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();!a&&this.editor.dataProcessor&&(b=this.editor.dataProcessor.toDataFormat(b));return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",
-function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(k,function(a,b){return b}));a.setData(b,null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||
-this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?
-"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(a){CKEDITOR.env.opera&&CKEDITOR.document.getActive().equals(this.isInline()?this:this.getWindow().getFrame())?a.cancel():this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=
-true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var b=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);var d=a.config.contentsLangDirection;this.getDirection(1)!=d&&this.changeAttr("dir",d);var f=CKEDITOR.getCss();if(f){d=b.getHead();if(!d.getCustomData("stylesheet")){f=b.appendStyleText(f);f=new CKEDITOR.dom.element(f.ownerNode||
-f.owningElement);d.setCustomData("stylesheet",f);f.data("cke-temp",1)}}d=b.getCustomData("stylesheet_ref")||0;b.setCustomData("stylesheet_ref",d+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=a.data,b=a.getTarget();b.is("a")&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.keyCode,d;if(c in{8:1,46:1}){var l=a.getSelection(),b=l.getRanges()[0],
-f=b.startPath(),j,g,m,c=c==8;if(l=e(l)){a.fire("saveSnapshot");b.moveToPosition(l,CKEDITOR.POSITION_BEFORE_START);l.remove();b.select();a.fire("saveSnapshot");d=1}else if(b.collapsed)if((j=f.block)&&b[c?"checkStartOfBlock":"checkEndOfBlock"]()&&(m=j[c?"getPrevious":"getNext"](h))&&m.is("table")){a.fire("saveSnapshot");b[c?"checkEndOfBlock":"checkStartOfBlock"]()&&j.remove();b["moveToElementEdit"+(c?"End":"Start")](m);b.select();a.fire("saveSnapshot");d=1}else if(f.blockLimit&&f.blockLimit.is("td")&&
-(g=f.blockLimit.getAscendant("table"))&&b.checkBoundaryOfElement(g,c?CKEDITOR.START:CKEDITOR.END)&&(m=g[c?"getPrevious":"getNext"](h))){a.fire("saveSnapshot");b["moveToElementEdit"+(c?"End":"Start")](m);b.checkStartOfBlock()&&b.checkEndOfBlock()?m.remove():b.select();a.fire("saveSnapshot");d=1}else if((g=f.contains(["td","th","caption"]))&&b.checkBoundaryOfElement(g,c?CKEDITOR.START:CKEDITOR.END))if((m=g[c?"getPreviousSourceNode":"getNextSourceNode"](1,CKEDITOR.NODE_ELEMENT))&&!m.isReadOnly()&&b.root.contains(m)){b[c?
-"moveToElementEditEnd":"moveToElementEditStart"](m);b.select();d=1}}return!d});CKEDITOR.env.ie&&this.attachListener(this,"click",c);!CKEDITOR.env.ie&&!CKEDITOR.env.opera&&this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();
-if(!b.getOuterHtml().replace(k,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());
-a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var k=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,
-h=CKEDITOR.dom.walker.whitespaces(true),m=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(a){var c=a.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(a){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty();
-c.fire("lockSnapshot");b(a);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=this.lang.editor+", "+this.name;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);a.changeAttr("title",c);if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var d=CKEDITOR.tools.getNextId(),e=CKEDITOR.dom.element.createFromHtml('<span id="'+d+'" class="cke_voice_label">'+
-this.lang.common.editorHelp+"</span>");c.append(e);a.changeAttr("aria-describedby",d)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var n=function(){function b(a){return a.type==CKEDITOR.NODE_ELEMENT}function c(a,d){var e,f,j,g,t=[],h=d.range.startContainer;e=d.range.startPath();for(var h=i[h.getName()],m=0,n=a.getChildren(),q=n.count(),k=-1,z=-1,y=0,s=e.contains(i.$list);m<q;++m){e=n.getItem(m);if(b(e)){j=e.getName();
-if(s&&j in CKEDITOR.dtd.$list)t=t.concat(c(e,d));else{g=!!h[j];if(j=="br"&&e.data("cke-eol")&&(!m||m==q-1)){y=(f=m?t[m-1].node:n.getItem(m+1))&&(!b(f)||!f.is("br"));f=f&&b(f)&&i.$block[f.getName()]}k==-1&&!g&&(k=m);g||(z=m);t.push({isElement:1,isLineBreak:y,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:j,allowed:g});f=y=0}}else t.push({isElement:0,node:e,allowed:1})}if(k>-1)t[k].firstNotAllowed=1;if(z>-1)t[z].lastNotAllowed=1;return t}function d(a,c){var e=[],f=a.getChildren(),l=f.count(),
-g,t=0,h=i[c],m=!a.is(i.$inline)||a.is("br");for(m&&e.push(" ");t<l;t++){g=f.getItem(t);b(g)&&!g.is(h)?e=e.concat(d(g,c)):e.push(g)}m&&e.push(" ");return e}function e(a){return a&&b(a)&&(a.is(i.$removeEmpty)||a.is("a")&&!a.isBlockBoundary())}function f(a,c,d,e){var l=a.clone(),j,g;l.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((j=(new CKEDITOR.dom.walker(l)).next())&&b(j)&&m[j.getName()]&&(g=j.getPrevious())&&b(g)&&!g.getParent().equals(a.startContainer)&&d.contains(g)&&e.contains(j)&&j.isIdentical(g)){j.moveChildren(g);
-j.remove();f(a,c,d,e)}}function h(a,c){function d(a,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&b(a)&&a.is("br")){a.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,a[a.length-1]);if(f&&d(f,a[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var i=CKEDITOR.dtd,m={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},n={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},k=CKEDITOR.tools.extend({},i.$inline);delete k.br;
-return function(m,s,u){var r=m.editor;m.getDocument();var D=r.getSelection().getRanges()[0];if(!D.checkReadOnly()){var v=(new CKEDITOR.dom.elementPath(D.startContainer,D.root)).blockLimit||D.root,s={type:s,editable:m,editor:r,range:D,blockLimit:v,mergeCandidates:[],zombies:[]},r=s.range,v=s.mergeCandidates,t,w,I,G,C;if(s.type=="text"&&r.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){w=CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",r.document);r.insertNode(w);r.setStartAfter(w)}I=new CKEDITOR.dom.elementPath(r.startContainer);
-s.endPath=G=new CKEDITOR.dom.elementPath(r.endContainer);if(!r.collapsed){t=G.block||G.blockLimit;var Q=r.getCommonAncestor();t&&(!t.equals(Q)&&!t.contains(Q)&&r.checkEndOfBlock())&&s.zombies.push(t);r.deleteContents()}for(;(C=b(r.startContainer)&&r.startContainer.getChild(r.startOffset-1))&&b(C)&&C.isBlockBoundary()&&I.contains(C);)r.moveToPosition(C,CKEDITOR.POSITION_BEFORE_END);f(r,s.blockLimit,I,G);if(w){r.setEndBefore(w);r.collapse();w.remove()}w=r.startPath();if(t=w.contains(e,false,1)){r.splitElement(t);
-s.inlineStylesRoot=t;s.inlineStylesPeak=w.lastElement}w=r.createBookmark();(t=w.startNode.getPrevious(a))&&b(t)&&e(t)&&v.push(t);(t=w.startNode.getNext(a))&&b(t)&&e(t)&&v.push(t);for(t=w.startNode;(t=t.getParent())&&e(t);)v.push(t);r.moveToBookmark(w);if(u){C=u;u=s.range;if(s.type=="text"&&s.inlineStylesRoot){w=C;C=s.inlineStylesPeak;r=C.getDocument().createText("{cke-peak}");for(v=s.inlineStylesRoot.getParent();!C.equals(v);){r=r.appendTo(C.clone());C=C.getParent()}C=r.getOuterHtml().replace("{cke-peak}",
-w)}w=s.blockLimit.getName();if(/^\s+|\s+$/.test(C)&&"span"in CKEDITOR.dtd[w]){var K='<span data-cke-marker="1">&nbsp;</span>';C=K+C+K}C=s.editor.dataProcessor.toHtml(C,null,false);w=u.document.createElement("body");w.setHtml(C);if(K){w.getFirst().remove();w.getLast().remove()}if((K=u.startPath().block)&&!(K.getChildCount()==1&&K.getBogus()))a:{var F;if(w.getChildCount()==1&&b(F=w.getFirst())&&F.is(n)){K=F.getElementsByTag("*");u=0;for(r=K.count();u<r;u++){C=K.getItem(u);if(!C.is(k))break a}F.moveChildren(F.getParent(1));
-F.remove()}}s.dataWrapper=w;F=s.range;var K=F.document,x,u=s.blockLimit;w=0;var J;C=[];var H,N,v=r=0,L,O;I=F.startContainer;t=s.endPath.elements[0];var P;G=t.getPosition(I);Q=!!t.getCommonAncestor(I)&&G!=CKEDITOR.POSITION_IDENTICAL&&!(G&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);I=c(s.dataWrapper,s);for(h(I,F);w<I.length;w++){G=I[w];if(x=G.isLineBreak){x=F;L=u;var M=void 0,R=void 0;if(G.hasBlockSibling)x=1;else{M=x.startContainer.getAscendant(i.$block,1);if(!M||!M.is({div:1,p:1}))x=
-0;else{R=M.getPosition(L);if(R==CKEDITOR.POSITION_IDENTICAL||R==CKEDITOR.POSITION_CONTAINS)x=0;else{L=x.splitElement(M);x.moveToPosition(L,CKEDITOR.POSITION_AFTER_START);x=1}}}}if(x)v=w>0;else{x=F.startPath();if(!G.isBlock&&(N=s.editor.config.enterMode!=CKEDITOR.ENTER_BR&&s.editor.config.autoParagraph!==false?s.editor.config.enterMode==CKEDITOR.ENTER_DIV?"div":"p":false)&&!x.block&&x.blockLimit&&x.blockLimit.equals(F.root)){N=K.createElement(N);!CKEDITOR.env.ie&&N.appendBogus();F.insertNode(N);!CKEDITOR.env.ie&&
-(J=N.getBogus())&&J.remove();F.moveToPosition(N,CKEDITOR.POSITION_BEFORE_END)}if((x=F.startPath().block)&&!x.equals(H)){if(J=x.getBogus()){J.remove();C.push(x)}H=x}G.firstNotAllowed&&(r=1);if(r&&G.isElement){x=F.startContainer;for(L=null;x&&!i[x.getName()][G.name];){if(x.equals(u)){x=null;break}L=x;x=x.getParent()}if(x){if(L){O=F.splitElement(L);s.zombies.push(O);s.zombies.push(L)}}else{L=u.getName();P=!w;x=w==I.length-1;L=d(G.node,L);for(var M=[],R=L.length,T=0,U=void 0,V=0,W=-1;T<R;T++){U=L[T];
-if(U==" "){if(!V&&(!P||T)){M.push(new CKEDITOR.dom.text(" "));W=M.length}V=1}else{M.push(U);V=0}}x&&W==M.length&&M.pop();P=M}}if(P){for(;x=P.pop();)F.insertNode(x);P=0}else F.insertNode(G.node);if(G.lastNotAllowed&&w<I.length-1){(O=Q?t:O)&&F.setEndAt(O,CKEDITOR.POSITION_AFTER_START);r=0}F.collapse()}}s.dontMoveCaret=v;s.bogusNeededBlocks=C}J=s.range;var S;O=s.bogusNeededBlocks;for(P=J.createBookmark();H=s.zombies.pop();)if(H.getParent()){N=J.clone();N.moveToElementEditStart(H);N.removeEmptyBlocksAtEnd()}if(O)for(;H=
-O.pop();)H.append(CKEDITOR.env.ie?J.document.createText(" "):J.document.createElement("br"));for(;H=s.mergeCandidates.pop();)H.mergeSiblings();J.moveToBookmark(P);if(!s.dontMoveCaret){for(H=b(J.startContainer)&&J.startContainer.getChild(J.startOffset-1);H&&b(H)&&!H.is(i.$empty);){if(H.isBlockBoundary())J.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END);else{if(e(H)&&H.getHtml().match(/(\s|&nbsp;)$/g)){S=null;break}S=J.clone();S.moveToPosition(H,CKEDITOR.POSITION_BEFORE_END)}H=H.getLast(a)}S&&J.moveToRange(S)}D.select();
-g(m)}}}()})();
-(function(){function b(){var a=this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){this.fire("selectionCheck",a);var b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}}function c(){k=true;if(!g){a.call(this);g=CKEDITOR.tools.setTimeout(a,200,this)}}function a(){g=null;if(k){CKEDITOR.tools.setTimeout(b,0,this);k=false}}function f(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:
-a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var c=a.startContainer,d=a.getPreviousNode(h,null,c),e=a.getNextNode(h,null,c);return b(d)||b(e,1)||!d&&!e&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function e(a){return a.getCustomData("cke-fillingChar")}function d(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&&
-e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=[e.anchorOffset,e.focusOffset];f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0]--;f&&d[1]--;var g;f=e;if(!f.isCollapsed){g=f.getRangeAt(0);g.setStart(f.anchorNode,f.anchorOffset);g.setEnd(f.focusNode,f.focusOffset);g=g.collapsed}g&&d.unshift(d.pop())}}c.setText(c.getText().replace(/\u200B/g,""));if(d){c=e.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);e.removeAllRanges();e.addRange(c)}}}
-var g,k,h=CKEDITOR.dom.walker.invisible(1);CKEDITOR.on("instanceCreated",function(a){function e(){var a=f.getSelection();a&&a.removeAllRanges()}var f=a.editor;f.define("selectionChange",{errorProof:1});f.on("contentDom",function(){var a=f.document,e=CKEDITOR.document,l=f.editable(),g=a.getBody(),o=a.getDocumentElement(),h=l.isInline();if(CKEDITOR.env.ie||CKEDITOR.env.opera||h){var n;l.attachListener(l,"focus",function(){f.unlockSelection(n);n=0},null,null,-1);var k,E=function(){k=f.getSelection(1);
-k.lock()};m?l.attachListener(l,"beforedeactivate",E,null,null,-1):l.attachListener(f,"selectionCheck",E,null,null,-1);l.attachListener(l,"blur",function(){f.lockSelection(k);n=1},null,null,-1);l.attachListener(l,"mousedown",function(){n=0})}if(CKEDITOR.env.ie&&!h){var u;l.attachListener(l,"mousedown",function(a){a.data.$.button==2&&f.document.$.selection.type=="None"&&(u=f.window.getScrollPosition())});l.attachListener(l,"mouseup",function(a){if(a.data.$.button==2&&u){f.document.$.documentElement.scrollLeft=
-u.x;f.document.$.documentElement.scrollTop=u.y}u=null});if(a.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)o.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=g.$.createTextRange();try{c.moveToPoint(a.x,a.y)}catch(e){}d.setEndPoint(l.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){o.removeListener("mousemove",b);e.removeListener("mouseup",c);o.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&
-a.$.y<o.$.clientHeight&&a.$.x<o.$.clientWidth){var d=g.$.createTextRange();try{d.moveToPoint(a.$.x,a.$.y)}catch(f){}var l=d.duplicate();o.on("mousemove",b);e.on("mouseup",c);o.on("mouseup",c)}});if(CKEDITOR.env.version>7){o.on("mousedown",function(a){if(a.data.getTarget().is("html")){e.on("mouseup",r);o.on("mouseup",r)}});var r=function(){e.removeListener("mouseup",r);o.removeListener("mouseup",r);var b=CKEDITOR.document.$.selection,c=b.createRange();b.type!="None"&&c.parentElement().ownerDocument==
-a.$&&c.select()}}}}l.attachListener(l,"selectionchange",b,f);l.attachListener(l,"keyup",c,f);l.attachListener(l,"focus",function(){f.forceNextSelectionCheck();f.selectionChange(1)});if(l.isInline()?CKEDITOR.env.webkit||CKEDITOR.env.gecko:CKEDITOR.env.opera){var D;l.attachListener(l,"mousedown",function(){D=1});l.attachListener(a.getDocumentElement(),"mouseup",function(){D&&c.call(f);D=0})}else l.attachListener(l,"mouseup",c,f);if(CKEDITOR.env.webkit)a.on("keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:d(f.editable())}},
-null,null,-1)});f.on("contentDomUnload",f.forceNextSelectionCheck,f);f.on("dataReady",function(){f.selectionChange(1)});CKEDITOR.env.ie9Compat&&f.on("beforeDestroy",e,null,null,9);CKEDITOR.env.webkit&&f.on("setData",e);f.on("contentDomUnload",function(){f.unlockSelection()})});CKEDITOR.on("instanceReady",function(a){var b=a.editor,c=b.editable();if(CKEDITOR.env.webkit){b.on("selectionChange",function(){var a=e(c);a&&(a.getCustomData("ready")?d(c):a.setCustomData("ready",1))},null,null,-1);b.on("beforeSetMode",
-function(){d(c)},null,null,-1);var f,g,a=function(){var a=b.document,d=e(c);if(d){a=a.$.defaultView.getSelection();a.type=="Caret"&&a.anchorNode==d.$&&(g=1);f=d.getText();d.setText(f.replace(/\u200B/g,""))}},h=function(){var a=b.document,d=e(c);if(d){d.setText(f);if(g){a.$.defaultView.getSelection().setPosition(d.$,d.getLength());g=0}}};b.on("beforeUndoImage",a);b.on("afterUndoImage",h);b.on("beforeGetData",a,null,null,0);b.on("getData",h)}});CKEDITOR.editor.prototype.selectionChange=function(a){(a?
-b:c).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if(this._.savedSelection&&!a)return this._.savedSelection;return(a=this.editable())?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;
-return true}return false};CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var m=
-typeof window.getSelection!="function";CKEDITOR.dom.selection=function(a){var b=a instanceof CKEDITOR.dom.element;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=b?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(CKEDITOR.env.webkit){a=this.document.getWindow().$.getSelection();if(a.type=="None"&&this.document.getActive().equals(this.root)||a.type=="Caret"&&a.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT){var c=new CKEDITOR.dom.range(this.root);c.moveToPosition(this.root,
-CKEDITOR.POSITION_AFTER_START);b=this.document.$.createRange();b.setStart(c.startContainer.$,c.startOffset);b.collapse(1);a.addRange(b)}}var a=this.getNative(),d;if(a)if(a.getRangeAt)d=(c=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(c.commonAncestorContainer);else{try{c=a.createRange()}catch(e){}d=c&&CKEDITOR.dom.element.get(c.item&&c.item(0)||c.parentElement())}if(!d||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=
-null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var n={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=m?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:m?function(){var a=this._.cache;if(a.type)return a.type;
-var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-
-c.startOffset==1&&n[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=m?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement(),e=d.ownerDocument;if(!d.hasChildNodes())return{container:d,offset:0};for(var f=d.children,g,j,h=b.duplicate(),o=0,m=f.length-1,n=-1,k,v;o<=m;){n=Math.floor((o+m)/2);g=f[n];h.moveToElementText(g);k=h.compareEndPoints("StartToStart",
-b);if(k>0)m=n-1;else if(k<0)o=n+1;else{if(CKEDITOR.env.ie9Compat&&g.tagName=="BR"){f=e.defaultView.getSelection();return{container:f[c?"anchorNode":"focusNode"],offset:f[c?"anchorOffset":"focusOffset"]}}return{container:d,offset:a(g)}}}if(n==-1||n==f.length-1&&k<0){h.moveToElementText(d);h.setEndPoint("StartToStart",b);e=h.text.replace(/(\r\n|\r)/g,"\n").length;f=d.childNodes;if(!e){g=f[f.length-1];return g.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:f.length}:{container:g,offset:g.nodeValue.length}}for(d=
-f.length;e>0&&d>0;){j=f[--d];if(j.nodeType==CKEDITOR.NODE_TEXT){v=j;e=e-j.nodeValue.length}}return{container:v,offset:-e}}h.collapse(k>0?true:false);h.setEndPoint(k>0?"StartToStart":"EndToStart",b);e=h.text.replace(/(\r\n|\r)/g,"\n").length;if(!e)return{container:d,offset:a(g)+(k>0?0:1)};for(;e>0;)try{j=g[k>0?"previousSibling":"nextSibling"];if(j.nodeType==CKEDITOR.NODE_TEXT){e=e-j.nodeValue.length;v=j}g=j}catch(t){return{container:d,offset:a(g)}}return{container:v,offset:k>0?-e:v.nodeValue.length+
-e}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=
-c.item(e),g=f.parentNode,l=0,a=new CKEDITOR.dom.range(this.root);l<g.childNodes.length&&g.childNodes[l]!=f;l++);a.setStart(new CKEDITOR.dom.node(g),l);a.setEnd(new CKEDITOR.dom.node(g),l+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};
-return function(b){var c=this._.cache;if(c.ranges&&!b)return c.ranges;if(!c.ranges)c.ranges=new CKEDITOR.dom.rangeList(a.call(this));if(b)for(var d=c.ranges,e=0;e<d.length;e++){var f=d[e];f.getCommonAncestor().isReadOnly()&&d.splice(e,1);if(!f.collapsed){if(f.startContainer.isReadOnly())for(var b=f.startContainer,g;b;){if((g=b.type==CKEDITOR.NODE_ELEMENT)&&b.is("body")||!b.isReadOnly())break;g&&b.getAttribute("contentEditable")=="false"&&f.setStartAfter(b);b=b.getParent()}b=f.startContainer;g=f.endContainer;
-var h=f.startOffset,m=f.endOffset,n=f.clone();b&&b.type==CKEDITOR.NODE_TEXT&&(h>=b.getLength()?n.setStartAfter(b):n.setStartBefore(b));g&&g.type==CKEDITOR.NODE_TEXT&&(m?n.setEndAfter(g):n.setEndBefore(g));b=new CKEDITOR.dom.walker(n);b.evaluator=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.isReadOnly()){var b=f.clone();f.setEndBefore(a);f.collapsed&&d.splice(e--,1);if(!(a.getPosition(n.endContainer)&CKEDITOR.POSITION_CONTAINS)){b.setStartAfter(a);b.collapsed||d.splice(e+1,0,b)}return true}return false};
-b.next()}}return c.ranges}}(),getStartElement:function(){var a=this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);
-else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},
-function(){for(var a=b.getRanges()[0],c,d,e=2;e&&(!(c=a.getEnclosedNode())||!(c.type==CKEDITOR.NODE_ELEMENT&&n[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=m?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();
-this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges();this.isLocked=0;this.reset();if(a)(a=b||c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={}},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){if(a.length)if(this.isLocked){var b=
-CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();!b.equals(this.root)&&b.focus()}else{if(m){var c=CKEDITOR.dom.walker.whitespaces(true),e=/\ufeff|\u00a0/,g={table:1,tbody:1,tr:1};if(a.length>1){b=a[a.length-1];a[0].setEnd(b.endContainer,b.endOffset)}var b=a[0],a=b.collapsed,h,i,k,A=b.getEnclosedNode();if(A&&A.type==CKEDITOR.NODE_ELEMENT&&A.getName()in n&&(!A.is("a")||!A.getText()))try{k=A.$.createControlRange();k.addElement(A.$);k.select();return}catch(B){}(b.startContainer.type==
-CKEDITOR.NODE_ELEMENT&&b.startContainer.getName()in g||b.endContainer.type==CKEDITOR.NODE_ELEMENT&&b.endContainer.getName()in g)&&b.shrink(CKEDITOR.NODE_ELEMENT,true);k=b.createBookmark();var g=k.startNode,p;if(!a)p=k.endNode;k=b.document.$.body.createTextRange();k.moveToElementText(g.$);k.moveStart("character",1);if(p){e=b.document.$.body.createTextRange();e.moveToElementText(p.$);k.setEndPoint("EndToEnd",e);k.moveEnd("character",-1)}else{h=g.getNext(c);i=g.hasAscendant("pre");h=!(h&&h.getText&&
-h.getText().match(e))&&(i||!g.hasPrevious()||g.getPrevious().is&&g.getPrevious().is("br"));i=b.document.createElement("span");i.setHtml("&#65279;");i.insertBefore(g);h&&b.document.createText("﻿").insertBefore(g)}b.setStartBefore(g);g.remove();if(a){if(h){k.moveStart("character",-1);k.select();b.document.$.selection.clear()}else k.select();b.moveToPosition(i,CKEDITOR.POSITION_BEFORE_START);i.remove()}else{b.setEndBefore(p);p.remove();k.select()}}else{p=this.getNative();if(!p)return;if(CKEDITOR.env.opera){b=
-this.document.$.createRange();b.selectNodeContents(this.root.$);p.addRange(b)}this.removeAllRanges();for(e=0;e<a.length;e++){if(e<a.length-1){b=a[e];k=a[e+1];i=b.clone();i.setStart(b.endContainer,b.endOffset);i.setEnd(k.startContainer,k.startOffset);if(!i.collapsed){i.shrink(CKEDITOR.NODE_ELEMENT,true);h=i.getCommonAncestor();i=i.getEnclosedNode();if(h.isReadOnly()||i&&i.isReadOnly()){k.setStart(b.startContainer,b.startOffset);a.splice(e--,1);continue}}}b=a[e];k=this.document.$.createRange();h=b.startContainer;
-if(CKEDITOR.env.opera&&b.collapsed&&h.type==CKEDITOR.NODE_ELEMENT){i=h.getChild(b.startOffset-1);c=h.getChild(b.startOffset);if(!i&&!c&&h.is(CKEDITOR.dtd.$removeEmpty)||i&&i.type==CKEDITOR.NODE_ELEMENT||c&&c.type==CKEDITOR.NODE_ELEMENT){b.insertNode(this.document.createText(""));b.collapse(1)}}if(b.collapsed&&CKEDITOR.env.webkit&&f(b)){h=this.root;d(h,false);i=h.getDocument().createText("​");h.setCustomData("cke-fillingChar",i);b.insertNode(i);if((h=i.getNext())&&!i.getPrevious()&&h.type==CKEDITOR.NODE_ELEMENT&&
-h.getName()=="br"){d(this.root);b.moveToPosition(h,CKEDITOR.POSITION_BEFORE_START)}else b.moveToPosition(i,CKEDITOR.POSITION_AFTER_END)}k.setStart(b.startContainer.$,b.startOffset);try{k.setEnd(b.endContainer.$,b.endOffset)}catch(E){if(E.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){b.collapse(1);k.setEnd(b.endContainer.$,b.endOffset)}else throw E;}p.addRange(k)}}this.reset();this.root.fire("selectionchange")}},createBookmarks:function(a){return this.getRanges().createBookmarks(a)},createBookmarks2:function(a){return this.getRanges().createBookmarks2(a)},
-selectBookmarks:function(a){for(var b=[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){var a=this.getNative();try{a&&a[m?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}})();
-CKEDITOR.editor.prototype.attachStyleStateChange=function(b,c){var a=this._.styleStateChangeCallbacks;if(!a){a=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(b){for(var c=0;c<a.length;c++){var d=a[c],g=d.style.checkActive(b.data.path)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,g)}})}a.push({style:b,fn:c})};CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;
-(function(){function b(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function c(a){var c=a.document;if(a.collapsed){c=y(this,c);a.insertNode(c);a.moveToPosition(c,CKEDITOR.POSITION_BEFORE_END)}else{var d=this.element,e=this._.definition,f,g=e.ignoreReadonly,h=g||e.includeReadonly;h==void 0&&(h=a.root.getCustomData("cke_includeReadonly"));var j=CKEDITOR.dtd[d]||
-(f=true,CKEDITOR.dtd.span);a.enlarge(CKEDITOR.ENLARGE_INLINE,1);a.trim();var m=a.createBookmark(),i=m.startNode,n=m.endNode,k=i,o;if(!g){var q=a.getCommonAncestor(),g=b(i,q),q=b(n,q);g&&(k=g.getNextSourceNode(true));q&&(n=q)}for(k.getPosition(n)==CKEDITOR.POSITION_FOLLOWING&&(k=0);k;){g=false;if(k.equals(n)){k=null;g=true}else{var p=k.type,r=p==CKEDITOR.NODE_ELEMENT?k.getName():null,q=r&&k.getAttribute("contentEditable")=="false",s=r&&k.getAttribute("data-nostyle");if(r&&k.data("cke-bookmark")){k=
-k.getNextSourceNode(true);continue}if(!r||j[r]&&!s&&(!q||h)&&(k.getPosition(n)|CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED)==CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED&&(!e.childRule||e.childRule(k))){var u=k.getParent();if(u&&((u.getDtd()||CKEDITOR.dtd.span)[d]||f)&&(!e.parentRule||e.parentRule(u))){if(!o&&(!r||!CKEDITOR.dtd.$removeEmpty[r]||(k.getPosition(n)|CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|
-CKEDITOR.POSITION_IS_CONTAINED)==CKEDITOR.POSITION_PRECEDING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED)){o=a.clone();o.setStartBefore(k)}if(p==CKEDITOR.NODE_TEXT||q||p==CKEDITOR.NODE_ELEMENT&&!k.getChildCount()){for(var p=k,v;(g=!p.getNext(D))&&(v=p.getParent(),j[v.getName()])&&(v.getPosition(i)|CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED)==CKEDITOR.POSITION_FOLLOWING+CKEDITOR.POSITION_IDENTICAL+CKEDITOR.POSITION_IS_CONTAINED&&(!e.childRule||
-e.childRule(v));)p=v;o.setEndAfter(p)}}else g=true}else g=true;k=k.getNextSourceNode(s||q&&!h)}if(g&&o&&!o.collapsed){for(var g=y(this,c),q=g.hasAttributes(),s=o.getCommonAncestor(),p={},r={},u={},z={},A,B,E;g&&s;){if(s.getName()==d){for(A in e.attributes)if(!z[A]&&(E=s.getAttribute(B)))g.getAttribute(A)==E?r[A]=1:z[A]=1;for(B in e.styles)if(!u[B]&&(E=s.getStyle(B)))g.getStyle(B)==E?p[B]=1:u[B]=1}s=s.getParent()}for(A in r)g.removeAttribute(A);for(B in p)g.removeStyle(B);q&&!g.hasAttributes()&&(g=
-null);if(g){o.extractContents().appendTo(g);l.call(this,g);o.insertNode(g);g.mergeSiblings();CKEDITOR.env.ie||g.$.normalize()}else{g=new CKEDITOR.dom.element("span");o.extractContents().appendTo(g);o.insertNode(g);l.call(this,g);g.remove(true)}o=null}}a.moveToBookmark(m);a.shrink(CKEDITOR.SHRINK_TEXT)}}function a(a){a.enlarge(CKEDITOR.ENLARGE_INLINE,1);var b=a.createBookmark(),c=b.startNode;if(a.collapsed){for(var d=new CKEDITOR.dom.elementPath(c.getParent(),a.root),e,f=0,g;f<d.elements.length&&(g=
-d.elements[f]);f++){if(g==d.block||g==d.blockLimit)break;if(this.checkElementRemovable(g)){var h;if(a.collapsed&&(a.checkBoundaryOfElement(g,CKEDITOR.END)||(h=a.checkBoundaryOfElement(g,CKEDITOR.START)))){e=g;e.match=h?"start":"end"}else{g.mergeSiblings();g.getName()==this.element?o.call(this,g):j(g,s(this)[g.getName()])}}}if(e){g=c;for(f=0;;f++){h=d.elements[f];if(h.equals(e))break;else if(h.match)continue;else h=h.clone();h.append(g);g=h}g[e.match=="start"?"insertBefore":"insertAfter"](e)}}else{var m=
-b.endNode,l=this,d=function(){for(var a=new CKEDITOR.dom.elementPath(c.getParent()),b=new CKEDITOR.dom.elementPath(m.getParent()),d=null,e=null,f=0;f<a.elements.length;f++){var g=a.elements[f];if(g==a.block||g==a.blockLimit)break;l.checkElementRemovable(g)&&(d=g)}for(f=0;f<b.elements.length;f++){g=b.elements[f];if(g==b.block||g==b.blockLimit)break;l.checkElementRemovable(g)&&(e=g)}e&&m.breakParent(e);d&&c.breakParent(d)};d();for(e=c;!e.equals(m);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&
-this.checkElementRemovable(e)){e.getName()==this.element?o.call(this,e):j(e,s(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(c)){d();f=c.getNext()}}e=f}}a.moveToBookmark(b)}function f(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&z(a,this)}function e(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,
-c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&&a.removeStyle(e)}}function d(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document;d=c.getNextParagraph();)if(!d.isReadOnly()){var f=y(this,e,d);k(d,f)}a.moveToBookmark(b)}function g(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=
-this._.enterMode!=CKEDITOR.ENTER_BR;for(var d;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){var e=this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div");e&&d.copyAttributes(e);k(d,e)}else o.call(this,d);a.moveToBookmark(b)}function k(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=m(f,
-/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+|&nbsp;)/g," ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(g.getFirst());e=g.getFirst().remove()}else e.setHtml(f);b=e}else f?b=n(c?[a.getHtml()]:h(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,j;if((j=c.getPrevious(v))&&j.is&&j.is("pre")){d=m(j.getHtml(),/\n$/,"")+
-"\n\n"+m(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);j.remove()}}else c&&q(b)}function h(a){a.getName();var b=[];m(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function m(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,
-b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function n(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=m(e,/^[ \t]*\n/,""),e=m(e,/\n$/,""),e=m(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?"&nbsp;":b?" "+CKEDITOR.tools.repeat("&nbsp;",a.length-1):CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("&nbsp;",
-a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function o(a){var b=this._.definition,c=b.attributes,b=b.styles,d=s(this)[a.getName()],e=CKEDITOR.tools.isEmpty(c)&&CKEDITOR.tools.isEmpty(b),f;for(f in c)if(!((f=="class"||this._.definition.fullMatch)&&a.getAttribute(f)!=A(f,c[f]))){e=a.hasAttribute(f);a.removeAttribute(f)}for(var g in b)if(!(this._.definition.fullMatch&&a.getStyle(g)!=A(g,b[g],true))){e=e||!!a.getStyle(g);a.removeStyle(g)}j(a,d,p[a.getName()]);
-e&&(this._.definition.alwaysRemoveElement?q(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==CKEDITOR.ENTER_BR&&!a.hasAttributes()?q(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function l(a){for(var b=s(this),c=a.getElementsByTag(this.element),d=c.count();--d>=0;)o.call(this,c.getItem(d));for(var e in b)if(e!=this.element){c=a.getElementsByTag(e);for(d=c.count()-1;d>=0;d--){var f=c.getItem(d);j(f,b[e])}}}function j(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=
-b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null||g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||q(a)}function q(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(v),d=a.getNext(v);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&
-c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&&d.mergeSiblings()}}}function y(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=z(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function z(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);
-return a}function i(a,b){for(var c in a)a[c]=a[c].replace(r,function(a,c){return b[c]})}function s(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function A(a,
-b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a,b);return d[c?"getStyle":"getAttribute"](a)}function B(a,b){for(var c=a.document,d=a.getRanges(),e=b?this.removeFromRange:this.applyToRange,f,g=d.createIterator();f=g.getNextRange();)e.call(this,f);a.selectRanges(d);c.removeCustomData("doc_processing_style")}var p={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,
-keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},E={a:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},u=/\s*(?:;\s*|$)/,r=/#\((.+?)\)/g,D=CKEDITOR.dom.walker.bookmark(0,1),v=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);i(a.attributes,b);i(a.styles,
-b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(p[c]?CKEDITOR.STYLE_BLOCK:E[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.editor.prototype.applyStyle=function(a){B.call(a,this.getSelection())};CKEDITOR.editor.prototype.removeStyle=function(a){B.call(a,this.getSelection(),1)};CKEDITOR.style.prototype={apply:function(a){B.call(this,a.getSelection())},
-remove:function(a){B.call(this,a.getSelection(),1)},applyToRange:function(a){return(this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?c:this.type==CKEDITOR.STYLE_BLOCK?d:this.type==CKEDITOR.STYLE_OBJECT?f:null).call(this,a)},removeFromRange:function(b){return(this.removeFromRange=this.type==CKEDITOR.STYLE_INLINE?a:this.type==CKEDITOR.STYLE_BLOCK?g:this.type==CKEDITOR.STYLE_OBJECT?e:null).call(this,b)},applyToObject:function(a){z(a,this)},checkActive:function(a){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||
-a.blockLimit,true);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var b=a.elements,c=0,d;c<b.length;c++){d=b[c];if(!(this.type==CKEDITOR.STYLE_INLINE&&(d==a.block||d==a.blockLimit))){if(this.type==CKEDITOR.STYLE_OBJECT){var e=d.getName();if(!(typeof this.element=="string"?e==this.element:e in this.element))continue}if(this.checkElementRemovable(d,true))return true}}}return false},checkApplicable:function(a){switch(this.type){case CKEDITOR.STYLE_OBJECT:return a.contains(this.element)}return true},
-checkElementMatch:function(a,b){var c=this._.definition;if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d==
-"string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e=="string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b){if(this.checkElementMatch(a,b))return true;var c=s(this)[a.getName()];if(c){var d;if(!(c=c.attributes))return true;for(var e=0;e<c.length;e++){d=
-c[e][0];if(d=a.getAttribute(d)){var f=c[e][1];if(f===null||typeof f=="string"&&d==f||f.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c=a.attributes&&a.attributes.style||
-"",d="";c.length&&(c=c.replace(u,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(u,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d}})();CKEDITOR.styleCommand=function(b){this.style=b};CKEDITOR.styleCommand.prototype.exec=function(b){b.focus();this.state==CKEDITOR.TRISTATE_OFF?b.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&b.removeStyle(this.style)};CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");
-CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(b,c,a){CKEDITOR.stylesSet.addExternal(b,c,"");CKEDITOR.stylesSet.load(b,a)};
-CKEDITOR.editor.prototype.getStylesSet=function(b){if(this._.stylesDefinitions)b(this._.stylesDefinitions);else{var c=this,a=c.config.stylesCombo_stylesSet||c.config.stylesSet||"default";if(a instanceof Array){c._.stylesDefinitions=a;b(a)}else{var a=a.split(":"),f=a[0];CKEDITOR.stylesSet.addExternal(f,a[1]?a.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(f,function(a){c._.stylesDefinitions=a[f];b(c._.stylesDefinitions)})}}};
-CKEDITOR.dom.comment=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createComment(b));CKEDITOR.dom.domObject.call(this,b)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});
-(function(){var b={},c;for(c in CKEDITOR.dtd.$blockLimit)c in CKEDITOR.dtd.$list||(b[c]=1);var a={};for(c in CKEDITOR.dtd.$block)c in CKEDITOR.dtd.$blockLimit||c in CKEDITOR.dtd.$empty||(a[c]=1);CKEDITOR.dom.elementPath=function(c,e){var d=null,g=null,k=[],e=e||c.getDocument().getBody(),h=c;do if(h.type==CKEDITOR.NODE_ELEMENT){k.push(h);if(!this.lastElement){this.lastElement=h;if(h.is(CKEDITOR.dtd.$object))continue}var m=h.getName();if(!g){!d&&a[m]&&(d=h);if(b[m]){var n;if(n=!d){if(m=m=="div"){a:{m=
-h.getChildren();n=0;for(var o=m.count();n<o;n++){var l=m.getItem(n);if(l.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[l.getName()]){m=true;break a}}m=false}m=!m&&!h.equals(e)}n=m}n?d=h:g=h}}if(h.equals(e))break}while(h=h.getParent());this.block=d;this.blockLimit=g;this.root=e;this.elements=k}})();
-CKEDITOR.dom.elementPath.prototype={compare:function(b){var c=this.elements,b=b&&b.elements;if(!b||c.length!=b.length)return false;for(var a=0;a<c.length;a++)if(!c[a].equals(b[a]))return false;return true},contains:function(b,c,a){var f;typeof b=="string"&&(f=function(a){return a.getName()==b});b instanceof CKEDITOR.dom.element?f=function(a){return a.equals(b)}:CKEDITOR.tools.isArray(b)?f=function(a){return CKEDITOR.tools.indexOf(b,a.getName())>-1}:typeof b=="function"?f=b:typeof b=="object"&&(f=
-function(a){return a.getName()in b});var e=this.elements,d=e.length;c&&d--;if(a){e=Array.prototype.slice.call(e,0);e.reverse()}for(c=0;c<d;c++)if(f(e[c]))return e[c];return null},isContextFor:function(b){var c;if(b in CKEDITOR.dtd.$block){c=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!c.getDtd()[b]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}};
-CKEDITOR.dom.text=function(b,c){typeof b=="string"&&(b=(c?c.$:document).createTextNode(b));this.$=b};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node;
-CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(b){this.$.nodeValue=b},split:function(b){var c=this.$.parentNode,a=c.childNodes.length,f=this.getLength(),e=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(b),e);if(c.childNodes.length==a)if(b>=f){d=e.createText("");d.insertAfter(this)}else{b=e.createText("");b.insertAfter(d);b.remove()}return d},substring:function(b,
-c){return typeof c!="number"?this.$.nodeValue.substr(b):this.$.nodeValue.substring(b,c)}});
-(function(){function b(a,b,c){var d=a.serializable,g=b[c?"endContainer":"startContainer"],k=c?"endOffset":"startOffset",h=d?b.document.getById(a.startNode):a.startNode,a=d?b.document.getById(a.endNode):a.endNode;if(g.equals(h.getPrevious())){b.startOffset=b.startOffset-g.getLength()-a.getPrevious().getLength();g=a.getNext()}else if(g.equals(a.getPrevious())){b.startOffset=b.startOffset-g.getLength();g=a.getNext()}g.equals(h.getParent())&&b[k]++;g.equals(a.getParent())&&b[k]++;b[c?"endContainer":"startContainer"]=
-g;return b}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,c)};var c={createIterator:function(){var a=this,b=CKEDITOR.dom.walker.bookmark(),c=[],d;return{getNextRange:function(g){d=d==void 0?0:d+1;var k=a[d];if(k&&a.length>1){if(!d)for(var h=a.length-1;h>=0;h--)c.unshift(a[h].createBookmark(true));if(g)for(var m=0;a[d+m+1];){for(var n=k.document,g=0,h=n.getById(c[m].endNode),n=n.getById(c[m+
-1].startNode);;){h=h.getNextSourceNode(false);if(n.equals(h))g=1;else if(b(h)||h.type==CKEDITOR.NODE_ELEMENT&&h.isBlockBoundary())continue;break}if(!g)break;m++}for(k.moveToBookmark(c.shift());m--;){h=a[++d];h.moveToBookmark(c.shift());k.setEnd(h.endContainer,h.endOffset)}}return k}}},createBookmarks:function(a){for(var c=[],e,d=0;d<this.length;d++){c.push(e=this[d].createBookmark(a,true));for(var g=d+1;g<this.length;g++){this[g]=b(e,this[g]);this[g]=b(e,this[g],true)}}return c},createBookmarks2:function(a){for(var b=
-[],c=0;c<this.length;c++)b.push(this[c].createBookmark2(a));return b},moveToBookmarks:function(a){for(var b=0;b<this.length;b++)this[b].moveToBookmark(a[b])}}})();
-(function(){function b(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function c(a){var c=CKEDITOR.skin["ua_"+a],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){a=a+("_"+c[e]);break}}return CKEDITOR.getUrl(b()+a+".css")}function a(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(c(a));d[a]=1}b&&b()}
-function f(a){var b=a.getById(g);if(!b){b=a.getHead().append("style");b.setAttribute("id",g);b.setAttribute("type","text/css")}return b}function e(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var g=0;g<a.length;g++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[g].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie?
-a[g].$.styleSheet.cssText=a[g].$.styleSheet.cssText+f:a[g].$.innerHTML=a[g].$.innerHTML+f}}var d={};CKEDITOR.skin={path:b,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(b()+"skin.js"),function(){a(c,d)}):a(c,d)},getPath:function(a){return CKEDITOR.getUrl(c(a))},icons:{},addIcon:function(a,b,c){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0})},getIconStyle:function(a,b,c,d){var e;if(a){a=a.toLowerCase();b&&
-(e=this.icons[a+"-rtl"]);e||(e=this.icons[a])}a=c||e&&e.path||"";d=d||e&&e.offset;return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=f(CKEDITOR.document);return(this.setUiColor=function(a){var c=CKEDITOR.skin.chameleon,d=[[h,a]];this.uiColor=a;e([b],c(this,"editor"),d);e(k,c(this,"panel"),d)}).call(this,a)}});var g="cke_ui_color",k=[],h=/\$color/g;
-CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=f(a);k.push(a);var c=b.getUiColor();c&&e([a],CKEDITOR.skin.chameleon(b,"panel"),[[h,c]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})();
-(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var b=CKEDITOR.dom.element.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;border: 1px solid;border-color: red blue;"></div>',CKEDITOR.document);b.appendTo(CKEDITOR.document.getHead());try{CKEDITOR.env.hc=b.getComputedStyle("border-top-color")==b.getComputedStyle("border-right-color")}catch(c){CKEDITOR.env.hc=false}b.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");
-CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(b=CKEDITOR._.pending){delete CKEDITOR._.pending;for(var a=0;a<b.length;a++){CKEDITOR.editor.prototype.constructor.apply(b[a][0],b[a][1]);CKEDITOR.add(b[a][0])}}})();/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8,opera";
-CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c,
-a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "),
-panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
-return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g,
-"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!=
-this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})},
-this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,e){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,{role:"presentation"},function(){var f=[],d=a.required?" cke_required":"";"horizontal"!=
-a.labelLayout?f.push('<label class="cke_dialog_ui_labeled_label'+d+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+' role="presentation">',e.call(this,b,a),"</div>"):(d={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+d+'" id="'+c.labelId+'" for="'+c.inputId+'"'+
-(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+e.call(this,b,a)+"</span>"}]},CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,d,f));return f.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var e=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+a.type,id:e,type:a.type};
-a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var f=this,i=!1;b.on("load",function(){f.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(i=true)});f.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&i){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);i=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var b=
-['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var f in c)b.push(f+'="'+c[f]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var e=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",f={};a.validate&&(this.validate=a.validate);f.rows=a.rows||5;f.cols=
-a.cols||20;"undefined"!=typeof a.inputStyle&&(f.style=a.inputStyle);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f["aria-labelledby"]=this._.labelId;this._.required&&(f["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea class="cke_dialog_ui_input_textarea" id="',c,'" '],b;for(b in f)a.push(b+'="'+CKEDITOR.tools.htmlEncode(f[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(e._["default"]),"</textarea></div>");return a.join("")})}},
-checkbox:function(b,a,d){if(!(3>arguments.length)){var e=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),f=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked="checked";if(typeof c.inputStyle!=
-"undefined")c.style=c.inputStyle;e.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,f,"input",null,g);f.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return f.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var e=[],c=this;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var f=
-[],d=[],g=a.id?a.id+"_radio":CKEDITOR.tools.getNextId()+"_radio",j=0;j<a.items.length;j++){var k=a.items[j],h=k[2]!==void 0?k[2]:k[0],l=k[1]!==void 0?k[1]:k[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]==l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style=
-m.inputStyle;e.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,q,"label",null,{id:n,"for":o.id},k[0]);f.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,e,f,d);return d.join("")});this._.children=e}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this);var e=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",
-e.click,e);a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(e.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var f=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button","aria-labelledby":f},'<span id="'+f+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},
-select:function(b,a,d){if(!(3>arguments.length)){var e=h.call(this,a);a.validate&&(this.validate=a.validate);e.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),d=[],i=[],g={id:e.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};d.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&d.push('style="width:'+
-a.width+'" ');d.push(">");if(a.size!=void 0)g.size=a.size;if(a.multiple!=void 0)g.multiple=a.multiple;p(c);for(var j=0,k;j<a.items.length&&(k=a.items[j]);j++)i.push('<option value="',CKEDITOR.tools.htmlEncode(k[1]!==void 0?k[1]:k[0]).replace(/"/g,"&quot;"),'" /> ',CKEDITOR.tools.htmlEncode(k[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;e.select=new CKEDITOR.ui.dialog.uiElement(b,c,d,"select",null,g,i.join(""));d.push("</div>");return d.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===
-a["default"]&&(a["default"]="");var e=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=CKEDITOR.env.isCustomDomain(),d=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="',
-e.frameId,'" title="',a.label,'" src="javascript:void('];d.push(b?"(function(){document.open();document.domain='"+document.domain+"';document.close();})()":"0");d.push(')"></iframe>');return d.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var e=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),f=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d=a["for"];if(!f||f.call(this,c)!==false){b.getContentElement(d[0],
-d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(e)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(e,c,f){if(!(3>arguments.length)){var i=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var j=c.focus;j&&(this.focus=function(){this.selectParentTab();"function"==typeof j&&j.call(this);this.fire("focus")},c.isFocusable&&
-(this.isFocusable=this.isFocusable),this.keyboardFocusable=!0);CKEDITOR.ui.dialog.uiElement.call(this,e,c,i,"span",null,null,"");i=i.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);f.push([g[1]," ",i[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,e,c){var f=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,e,"fieldset",null,null,function(){var a=[];f&&a.push("<legend"+(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+f+"</legend>");
-for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b=CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?
-"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},isEnabled:function(){return!this._.disabled},
-eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},focus:function(){var b=this.selectParentTab();
-setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,
-{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var e=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;e.$.text=b;e.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(e.$):c.add(e.$,null):c.add(e.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0<b.length;)b.remove(0);return this},keyboardFocusable:!0},
-n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this,arguments);b.on("load",
-function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,e,c=0;c<d.length&&(e=d[c]);c++)e.getElement().$.checked=e.getValue()==b;!a&&this.fire("change",{value:b})},getValue:function(){for(var b=
-this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&this.$.checked&&
-b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();
-return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,e=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):e(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();CKEDITOR.env.isCustomDomain()&&(d.$.domain=document.domain);var b="";e.size&&
-(b=e.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input";d.$.write(['<html dir="'+g+'" lang="'+j+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+g+'" lang="'+j+'" action="',CKEDITOR.tools.htmlEncode(e.action),'"><label id="',a.labelId,'" for="',h,'" style="display:none">',CKEDITOR.tools.htmlEncode(e.label),'</label><input id="',h,'" aria-labelledby="',a.labelId,'" type="file" name="',CKEDITOR.tools.htmlEncode(e.id||
-"cke_upload"),'" size="',CKEDITOR.tools.htmlEncode(0<b?b:""),'" /></form></body></html>',"<script>window.parent.CKEDITOR.tools.callFunction("+f+");","window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction("+i+")}<\/script>"].join(""));d.$.close();for(b=0;b<c.length;b++)c[b].enable()}var a=this._,d=CKEDITOR.document.getById(a.frameId).getFrameDocument(),e=a.definition,c=a.buttons,f=this.formLoadedNumber,i=this.formUnloadNumber,g=a.dialog._.editor.lang.dir,j=a.dialog._.editor.langCode;
-f||(f=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),i=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(f);CKEDITOR.tools.removeFunction(i)}));CKEDITOR.env.gecko?setTimeout(b,500):b()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=""},eventProcessors:{onChange:function(b,
-a){this._.domOnChangeRegistered||(this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype=new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",r);CKEDITOR.dialog.addUIElement("password",r);CKEDITOR.dialog.addUIElement("textarea",
-l);CKEDITOR.dialog.addUIElement("checkbox",l);CKEDITOR.dialog.addUIElement("radio",l);CKEDITOR.dialog.addUIElement("button",l);CKEDITOR.dialog.addUIElement("select",l);CKEDITOR.dialog.addUIElement("file",l);CKEDITOR.dialog.addUIElement("fileButton",l);CKEDITOR.dialog.addUIElement("html",l);CKEDITOR.dialog.addUIElement("fieldset",{build:function(b,a,d){for(var e=a.children,c,f=[],i=[],g=0;g<e.length&&(c=e[g]);g++){var h=[];f.push(h);i.push(CKEDITOR.dialog._.uiElementBuilders[c.type].build(b,c,h))}return new CKEDITOR.ui.dialog[a.type](b,
-i,f,d,a)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;
-(function(){function p(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function u(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function q(a,b){for(var c=a.$.getElementsByTagName("input"),
-e=0,d=c.length;e<d;e++){var g=new CKEDITOR.dom.element(c[e]);"text"==g.getAttribute("type").toLowerCase()&&(b?(g.setAttribute("value",g.getCustomData("fake_value")||""),g.removeCustomData("fake_value")):(g.setCustomData("fake_value",g.getAttribute("value")),g.setAttribute("value","")))}}function P(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute("aria-invalid"):c.setAttribute("aria-invalid",!0));a||(this.select?this.select():this.focus());b&&alert(b);this.fire("validated",{valid:a,msg:b})}
-function Q(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function R(a){var a=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",S).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close})),b=a.getChild([0,0,0,0,0]),c=b.getChild(0),e=b.getChild(1);if(CKEDITOR.env.ie&&!CKEDITOR.env.ie6Compat){var d=CKEDITOR.env.isCustomDomain(),
-d="javascript:void(function(){"+encodeURIComponent("document.open();"+(d?'document.domain="'+document.domain+'";':"")+"document.close();")+"}())";CKEDITOR.dom.element.createFromHtml('<iframe frameBorder="0" class="cke_iframe_shim" src="'+d+'" tabIndex="-1"></iframe>').appendTo(b.getParent())}c.unselectable();e.unselectable();return{element:a,parts:{dialog:a.getChild(0),title:c,close:e,tabs:b.getChild(2),contents:b.getChild([3,0,0,0]),footer:b.getChild([3,0,1,0])}}}function H(a,b,c){this.element=b;
-this.focusIndex=c;this.tabIndex=0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function T(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();c.on("resize",b);a.on("hide",function(){c.removeListener("resize",
-b)})}function I(a,b){this._={dialog:a};CKEDITOR.tools.extend(this,b)}function U(a){function b(b){var c=a.getSize(),h=CKEDITOR.document.getWindow().getViewPaneSize(),o=b.data.$.screenX,i=b.data.$.screenY,n=o-e.x,l=i-e.y;e={x:o,y:i};d.x+=n;d.y+=l;a.move(d.x+k[3]<f?-k[3]:d.x-k[1]>h.width-c.width-f?h.width-c.width+("rtl"==g.lang.dir?0:k[1]):d.x,d.y+k[0]<f?-k[0]:d.y-k[2]>h.height-c.height-f?h.height-c.height+k[2]:d.y,1);b.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mousemove",
-b);CKEDITOR.document.removeListener("mouseup",c);if(CKEDITOR.env.ie6Compat){var a=r.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var e=null,d=null;a.getElement().getFirst();var g=a.getParentEditor(),f=g.config.dialog_magnetDistance,k=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(f){e={x:f.data.$.screenX,y:f.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);d=
-a.getPosition();if(CKEDITOR.env.ie6Compat){var g=r.getChild(0).getFrameDocument();g.on("mousemove",b);g.on("mouseup",c)}f.data.preventDefault()},a)}function V(a){var b,c;function e(d){var e="rtl"==k.lang.dir,i=o.width,D=o.height,E=i+(d.data.$.screenX-b)*(e?-1:1)*(a._.moved?1:2),n=D+(d.data.$.screenY-c)*(a._.moved?1:2),x=a._.element.getFirst(),x=e&&x.getComputedStyle("right"),y=a.getPosition();y.y+n>h.height&&(n=h.height-y.y);if((e?x:y.x)+E>h.width)E=h.width-(e?x:y.x);if(f==CKEDITOR.DIALOG_RESIZE_WIDTH||
-f==CKEDITOR.DIALOG_RESIZE_BOTH)i=Math.max(g.minWidth||0,E-m);if(f==CKEDITOR.DIALOG_RESIZE_HEIGHT||f==CKEDITOR.DIALOG_RESIZE_BOTH)D=Math.max(g.minHeight||0,n-j);a.resize(i,D);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",e);i&&(i.remove(),i=null);if(CKEDITOR.env.ie6Compat){var a=r.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",e)}}var g=a.definition,f=g.resizable;
-if(f!=CKEDITOR.DIALOG_RESIZE_NONE){var k=a.getParentEditor(),m,j,h,o,i,n=CKEDITOR.tools.addFunction(function(f){o=a.getSize();var g=a.parts.contents;g.$.getElementsByTagName("iframe").length&&(i=CKEDITOR.dom.element.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>'),g.append(i));j=o.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.opera||CKEDITOR.env.ie&&CKEDITOR.env.quirks));m=o.width-a.parts.contents.getSize("width",
-1);b=f.screenX;c=f.screenY;h=CKEDITOR.document.getWindow().getViewPaneSize();CKEDITOR.document.on("mousemove",e);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(g=r.getChild(0).getFrameDocument(),g.on("mousemove",e),g.on("mouseup",d));f.preventDefault&&f.preventDefault()});a.on("load",function(){var b="";f==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":f==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('<div class="cke_resizer'+
-b+" cke_resizer_"+k.lang.dir+'" title="'+CKEDITOR.tools.htmlEncode(k.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+n+', event )">'+("ltr"==k.lang.dir?"◢":"◣")+"</div>");a.parts.footer.append(b,1)});k.on("destroy",function(){CKEDITOR.tools.removeFunction(n)})}}function F(a){a.data.preventDefault(1)}function J(a){var b=CKEDITOR.document.getWindow(),c=a.config,e=c.dialog_backgroundCoverColor||"white",d=c.dialog_backgroundCoverOpacity,g=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(e,
-d,g),f=w[c];if(f)f.show();else{g=['<div tabIndex="-1" style="position: ',CKEDITOR.env.ie6Compat?"absolute":"fixed","; z-index: ",g,"; top: 0px; left: 0px; ",!CKEDITOR.env.ie6Compat?"background-color: "+e:"",'" class="cke_dialog_background_cover">'];if(CKEDITOR.env.ie6Compat){var k=CKEDITOR.env.isCustomDomain(),e="<html><body style=\\'background-color:"+e+";\\'></body></html>";g.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:');g.push("void((function(){document.open();"+
-(k?"document.domain='"+document.domain+"';":"")+"document.write( '"+e+"' );document.close();})())");g.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>')}g.push("</div>");f=CKEDITOR.dom.element.createFromHtml(g.join(""));f.setOpacity(void 0!=d?d:0.5);f.on("keydown",F);f.on("keypress",F);f.on("keyup",F);f.appendTo(CKEDITOR.document.getBody());w[c]=f}a.focusManager.add(f);r=f;var a=function(){var a=b.getViewPaneSize();
-f.setStyles({width:a.width+"px",height:a.height+"px"})},m=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;f.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do a=c.getPosition(),c.move(a.x,a.y);while(c=c._.parentDialog)}};G=a;b.on("resize",a);a();(!CKEDITOR.env.mac||!CKEDITOR.env.webkit)&&f.focus();if(CKEDITOR.env.ie6Compat){var j=function(){m();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){j.prevScrollHandler=window.onscroll||function(){};
-window.onscroll=j},0);m()}}function K(a){r&&(a.focusManager.remove(r),a=CKEDITOR.document.getWindow(),r.hide(),a.removeListener("resize",G),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||null},0),G=null)}var s=CKEDITOR.tools.cssLength,S='<div class="cke cke_reset_all {editorId} {editorDialogClass}" dir="{langDir}" lang="{langCode}" role="application"><table class="cke_dialog '+CKEDITOR.env.cssClass+' cke_{langDir}" aria-labelledby="cke_dialog_title_{id}" style="position:absolute" role="dialog"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>';
-CKEDITOR.dialog=function(a,b){function c(){var a=l._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function e(a){var b=l._.focusList,a=a||0;if(!(1>b.length)){var c=l._.currentFocusIndex;try{b[c].getInputElement().$.blur()}catch(d){}for(var f=c=(c+a+b.length)%b.length;a&&!b[f].isFocusable()&&!(f=(f+a+b.length)%b.length,f==c););b[f].focus();"text"==b[f].type&&b[f].select()}}function d(b){if(l==
-CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),f="rtl"==a.lang.dir;o=i=0;if(9==c||c==CKEDITOR.SHIFT+9)c=c==CKEDITOR.SHIFT+9,l._.tabBarMode?(c=c?p.call(l):u.call(l),l.selectPage(c),l._.tabs[c][0].focus()):e(c?-1:1),o=1;else if(c==CKEDITOR.ALT+121&&!l._.tabBarMode&&1<l.getPageCount())l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus(),o=1;else if((37==c||39==c)&&l._.tabBarMode)c=c==(f?39:37)?p.call(l):u.call(l),l.selectPage(c),l._.tabs[c][0].focus(),o=1;else if((13==c||32==c)&&l._.tabBarMode)this.selectPage(this._.currentTabId),
-this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1),o=1;else if(13==c){c=b.data.getTarget();if(!c.is("a","button","select","textarea")&&(!c.is("input")||"button"!=c.$.type))(c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),o=1;i=1}else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),i=1;else return;g(b)}}function g(a){o?a.data.preventDefault(1):i&&a.data.stopPropagation()}var f=CKEDITOR.dialog._.dialogDefinitions[b],
-k=CKEDITOR.tools.clone(W),m=a.config.dialog_buttonsOrder||"OS",j=a.lang.dir,h={},o,i;("OS"==m&&CKEDITOR.env.mac||"rtl"==m&&"ltr"==j||"ltr"==m&&"rtl"==j)&&k.buttons.reverse();f=CKEDITOR.tools.extend(f(a),k);f=CKEDITOR.tools.clone(f);f=new L(this,f);k=R(a);this._={editor:a,element:k.element,name:b,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],
-currentFocusIndex:0,hasFocus:!1};this.parts=k.parts;CKEDITOR.tools.setTimeout(function(){a.fire("ariaWidget",this.parts.contents)},0,this);k={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};k["rtl"==j?"right":"left"]=0;this.parts.dialog.setStyles(k);CKEDITOR.event.call(this);this.definition=f=CKEDITOR.fire("dialogDefinition",{name:b,definition:f},a).definition;if(!("removeDialogTabs"in a._)&&a.config.removeDialogTabs){k=a.config.removeDialogTabs.split(";");for(j=0;j<
-k.length;j++)if(m=k[j].split(":"),2==m.length){var n=m[0];h[n]||(h[n]=[]);h[n].push(m[1])}a._.removeDialogTabs=h}if(a._.removeDialogTabs&&(h=a._.removeDialogTabs[b]))for(j=0;j<h.length;j++)f.removeContents(h[j]);if(f.onLoad)this.on("load",f.onLoad);if(f.onShow)this.on("show",f.onShow);if(f.onHide)this.on("hide",f.onHide);if(f.onOk)this.on("ok",function(b){a.fire("saveSnapshot");setTimeout(function(){a.fire("saveSnapshot")},0);!1===f.onOk.call(this,b)&&(b.data.hide=!1)});if(f.onCancel)this.on("cancel",
-function(a){!1===f.onCancel.call(this,a)&&(a.data.hide=!1)});var l=this,C=function(a){var b=l._.contents,c=!1,f;for(f in b)for(var d in b[f])if(c=a.call(this,b[f][d]))return};this.on("ok",function(a){C(function(b){if(b.validate){var c=b.validate(this),f="string"==typeof c||!1===c;f&&(a.data.hide=!1,a.stop());P.call(b,!f,"string"==typeof c?c:void 0);return f}})},this,null,0);this.on("cancel",function(b){C(function(c){if(c.isChanged())return confirm(a.lang.common.confirmCancel)||(b.data.hide=!1),!0})},
-this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=e;var v=this._.element;a.focusManager.add(v,1);this.on("show",function(){v.on("keydown",d,this);if(CKEDITOR.env.opera||CKEDITOR.env.gecko)v.on("keypress",g,this)});this.on("hide",function(){v.removeListener("keydown",d);(CKEDITOR.env.opera||CKEDITOR.env.gecko)&&v.removeListener("keypress",g);C(function(a){Q.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",
-d,this,null,0)});this.on("show",function(){c();if(a.config.dialog_startupFocusTab&&1<l._.pageCount)l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus();else if(!this._.hasFocus)if(this._.currentFocusIndex=-1,f.onFocus){var b=f.onFocus.call(this);b&&b.focus()}else e(1)},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);U(this);V(this);(new CKEDITOR.dom.text(f.title,CKEDITOR.document)).appendTo(this.parts.title);
-for(j=0;j<f.contents.length;j++)(h=f.contents[j])&&this.addPage(h);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();b.hasClass("cke_dialog_tab")&&(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf("_"))),this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1)),a.data.preventDefault())},this);j=[];h=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:f.buttons},j).getChild();this.parts.footer.setHtml(j.join(""));
-for(j=0;j<h.length;j++)this._.buttons[h[j].id]=h[j]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){if(!this._.contentSize||!(this._.contentSize.width==a&&this._.contentSize.height==b))CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor),this.fire("resize",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+"px",height:b+"px"}),"rtl"==this._.editor.lang.dir&&this._.position&&(this._.position.x=
-CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)),this._.contentSize={width:a,height:b}}}(),getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var e=this._.element.getFirst(),d="rtl"==this._.editor.lang.dir,g="fixed"==e.getComputedStyle("position");CKEDITOR.env.ie&&e.setStyle("zoom","100%");if(!g||!this._.position||!(this._.position.x==
-a&&this._.position.y==b))this._.position={x:a,y:b},g||(g=CKEDITOR.document.getWindow().getScrollPosition(),a+=g.x,b+=g.y),d&&(g=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width-g.width-a),b={top:(0<b?b:0)+"px"},b[d?"right":"left"]=(0<a?a:0)+"px",e.setStyles(b),c&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;!a.getParent()||!a.getParent().equals(CKEDITOR.document.getBody())?a.appendTo(CKEDITOR.document.getBody()):
-a.setStyle("display","block");if(CKEDITOR.env.gecko&&10900>CKEDITOR.env.version){var c=this.parts.dialog;c.setStyle("position","absolute");setTimeout(function(){c.setStyle("position","fixed")},0)}this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);
-this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,this._.parentDialog=null,J(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);a.on("keydown",M);a.on(CKEDITOR.env.opera?"keypress":"keyup",N);this._.hasFocus=!1;CKEDITOR.tools.setTimeout(function(){this.layout();
-T(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),e=(c.width-b.width)/2,d=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<d?d:0)>c.height||
-b.width+(0<e?e:0)>c.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:e,this._.moved?this._.position.y:d)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},
-commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(X(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();
-if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else K(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",M);a.removeListener(CKEDITOR.env.opera?"keypress":"keyup",N);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock()},0)}delete this._.parentDialog;
-this.foreach(function(a){a.resetInitValue&&a.resetInitValue()})}},addPage:function(a){var b=[],c=a.label?' title="'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",e=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");var d=CKEDITOR.env,g="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber(),
-c=CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"',0<this._.pageCount?" cke_last":"cke_first",c,a.hidden?' style="display:none"':"",' id="',g,'"',d.gecko&&10900<=d.version&&!d.hc?"":' href="javascript:void(0)"',' tabIndex="-1" hidefocus="true" role="tab">',a.label,"</a>"].join(""));b.setAttribute("aria-labelledby",g);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();g=this._.contents[a.id]={};for(d=e.getChild();e=
-d.shift();)g[e.id]=e,"function"==typeof e.getChild&&d.push.apply(d,e.getChild());b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);a.accessKey&&(O(this,this,"CTRL+"+a.accessKey,Y,Z),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)},selectPage:function(a){if(this._.currentTabId!=a&&!0!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var b in this._.tabs){var c=this._.tabs[b][0],e=this._.tabs[b][1];b!=a&&(c.removeClass("cke_dialog_tab_selected"),
-e.hide());e.setAttribute("aria-hidden",b!=a)}var d=this._.tabs[a];d[0].addClass("cke_dialog_tab_selected");CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?(q(d[1]),d[1].show(),setTimeout(function(){q(d[1],1)},0)):d[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(1===this._.pageCount?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(a){var b=this._.tabs[a]&&this._.tabs[a][0];b&&(1!=this._.pageCount&&
-b.isVisible())&&(a==this._.currentTabId&&this.selectPage(p.call(this)),b.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&&this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,b){var c=this._.contents[a];return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,
-b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a,b){if("undefined"==typeof b)b=this._.focusList.length,
-this._.focusList.push(new H(this,a,b));else{this._.focusList.splice(b,0,new H(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}}};CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){if(!this._.dialogDefinitions[a]||"function"==typeof b)this._.dialogDefinitions[a]=b},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},okButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"ok",
-type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",onClick:function(a){a=a.data.dialog;!1!==a.fire("ok",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),cancelButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;!1!==
-a.fire("cancel",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var W={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,
-buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},z=function(a,b,c){for(var e=0,d;d=a[e];e++)if(d.id==b||c&&d[c]&&(d=z(d[c],b,c)))return d;return null},A=function(a,b,c,e,d){if(c){for(var g=0,f;f=a[g];g++){if(f.id==c)return a.splice(g,0,b),b;if(e&&f[e]&&(f=A(f[e],b,c,e,!0)))return f}if(d)return null}a.push(b);return b},B=function(a,b,c){for(var e=0,d;d=a[e];e++){if(d.id==b)return a.splice(e,1);if(c&&d[c]&&(d=B(d[c],b,c)))return d}return null},L=function(a,b){this.dialog=a;for(var c=
-b.contents,e=0,d;d=c[e];e++)c[e]=d&&new I(a,d);CKEDITOR.tools.extend(this,b)};L.prototype={getContents:function(a){return z(this.contents,a)},getButton:function(a){return z(this.buttons,a)},addContents:function(a,b){return A(this.contents,a,b)},addButton:function(a,b){return A(this.buttons,a,b)},removeContents:function(a){B(this.contents,a)},removeButton:function(a){B(this.buttons,a)}};I.prototype={get:function(a){return z(this.elements,a,"children")},add:function(a,b){return A(this.elements,a,b,
-"children")},remove:function(a){B(this.elements,a,"children")}};var G,w={},r,t={},M=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);if((b=t[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault()},N=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);
-if((b=t[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},O=function(a,b,c,e,d){(t[c]||(t[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:d||a.accessKeyUp,keydown:e||a.accessKeyDown})},X=function(a){for(var b in t){for(var c=t[b],e=c.length-1;0<=e;e--)(c[e].dialog==a||c[e].uiElement==a)&&c.splice(e,1);0===c.length&&delete t[b]}},Z=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},
-Y=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,e,d,g,f){if(!(4>arguments.length)){var k=(e.call?e(b):e)||"div",m=["<",k," "],j=(d&&d.call?d(b):d)||{},h=(g&&g.call?g(b):g)||{},o=(f&&f.call?f.call(this,a,b):f)||"",i=this.domId=h.id||CKEDITOR.tools.getNextId()+"_uiElement";this.id=b.id;h.id=i;var n={};b.type&&(n["cke_dialog_ui_"+b.type]=1);b.className&&(n[b.className]=1);b.disabled&&(n.cke_disabled=1);for(var l=h["class"]&&h["class"].split?h["class"].split(" "):[],i=0;i<l.length;i++)l[i]&&
-(n[l[i]]=1);l=[];for(i in n)l.push(i);h["class"]=l.join(" ");b.title&&(h.title=b.title);n=(b.style||"").split(";");b.align&&(l=b.align,j["margin-left"]="left"==l?0:"auto",j["margin-right"]="right"==l?0:"auto");for(i in j)n.push(i+":"+j[i]);b.hidden&&n.push("display:none");for(i=n.length-1;0<=i;i--)""===n[i]&&n.splice(i,1);0<n.length&&(h.style=(h.style?h.style+"; ":"")+n.join("; "));for(i in h)m.push(i+'="'+CKEDITOR.tools.htmlEncode(h[i])+'" ');m.push(">",o,"</",k,">");c.push(m.join(""));(this._||
-(this._={})).dialog=a;"boolean"==typeof b.isChanged&&(this.isChanged=function(){return b.isChanged});"function"==typeof b.isChanged&&(this.isChanged=b.isChanged);"function"==typeof b.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}}));"function"==typeof b.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}}));CKEDITOR.event.implementOn(this);
-this.registerEvents(b);this.accessKeyUp&&(this.accessKeyDown&&b.accessKey)&&O(this,a,"CTRL+"+b.accessKey);var p=this;a.on("load",function(){var b=p.getInputElement();if(b){var c=p.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=false;a._.hasFocus=true;p.fire("focus");c&&this.addClass(c)});b.on("blur",function(){p.fire("blur");c&&this.removeClass(c)})}});this.keyboardFocusable&&(this.tabIndex=b.tabIndex||0,this.focusIndex=
-a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=p.focusIndex}));CKEDITOR.tools.extend(this,b)}},hbox:function(a,b,c,e,d){if(!(4>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.widths||null,k=d&&d.height||null,m,j={role:"presentation"};d&&d.align&&(j.align=d.align);CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"hbox"},e,"table",{},j,function(){var a=['<tbody><tr class="cke_dialog_ui_hbox">'];for(m=0;m<c.length;m++){var b="cke_dialog_ui_hbox_child",
-e=[];0===m&&(b="cke_dialog_ui_hbox_first");m==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('<td class="',b,'" role="presentation" ');f?f[m]&&e.push("width:"+s(f[m])):e.push("width:"+Math.floor(100/c.length)+"%");k&&e.push("height:"+s(k));d&&void 0!=d.padding&&e.push("padding:"+s(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[m].align)&&e.push("text-align:"+g[m].align);0<e.length&&a.push('style="'+e.join("; ")+'" ');a.push(">",c[m],"</td>")}a.push("</tr></tbody>");return a.join("")})}},vbox:function(a,
-b,c,e,d){if(!(3>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.width||null,k=d&&d.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"vbox"},e,"div",null,{role:"presentation"},function(){var b=['<table role="presentation" cellspacing="0" border="0" '];b.push('style="');d&&d.expand&&b.push("height:100%;");b.push("width:"+s(f||"100%"),";");b.push('"');b.push('align="',CKEDITOR.tools.htmlEncode(d&&d.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');
-b.push("><tbody>");for(var e=0;e<c.length;e++){var h=[];b.push('<tr><td role="presentation" ');f&&h.push("width:"+s(f||"100%"));k?h.push("height:"+s(k[e])):d&&d.expand&&h.push("height:"+Math.floor(100/c.length)+"%");d&&void 0!=d.padding&&h.push("padding:"+s(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[e].align)&&h.push("text-align:"+g[e].align);0<h.length&&b.push('style="',h.join("; "),'" ');b.push(' class="cke_dialog_ui_vbox_child">',c[e],"</td></tr>")}b.push("</tbody></table>");return b.join("")})}}}})();
-CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return!1},selectParentTab:function(){for(var a=this.getInputElement();(a=a.getParent())&&-1==a.$.className.search("cke_dialog_page_contents"););
-if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,e=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},d;for(d in a)if(c=d.match(b))this.eventProcessors[d]?this.eventProcessors[d].call(this,this._.dialog,a[d]):e(this,this._.dialog,c[1].toLowerCase(),a[d]);return this},eventProcessors:{onLoad:function(a,
-b){a.on("load",b,this)},onShow:function(a,b){a.on("show",b,this)},onHide:function(a,b){a.on("hide",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled");a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()},
-isFocusable:function(){return!this.isEnabled()||!this.isVisible()?!1:!0}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,
-c,e){for(var d=c.children,g,f=[],k=[],m=0;m<d.length&&(g=d[m]);m++){var j=[];f.push(j);k.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,j))}return new CKEDITOR.ui.dialog[c.type](a,k,f,e,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a;CKEDITOR.tools.extend(this,b,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){CKEDITOR.env.opera?CKEDITOR.tools.setTimeout(function(){a.openDialog(this.dialogName)},
-0,this):a.openDialog(this.dialogName)},canUndo:!1,editorFocus:CKEDITOR.env.ie||CKEDITOR.env.webkit};(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,e=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,g=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue():a[0],c=void 0,d=CKEDITOR.VALIDATE_AND,
-e=[],g;for(g=0;g<a.length;g++)if("function"==typeof a[g])e.push(a[g]);else break;g<a.length&&"string"==typeof a[g]&&(c=a[g],g++);g<a.length&&"number"==typeof a[g]&&(d=a[g]);var i=d==CKEDITOR.VALIDATE_AND?!0:!1;for(g=0;g<e.length;g++)i=d==CKEDITOR.VALIDATE_AND?i&&e[g](b):i||e[g](b);return!i?c:!0}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return!a.test(c)?b:!0}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,a)},number:function(a){return this.regex(c,
-a)},cssLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return g.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed",function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=
-CKEDITOR.dialog._.currentTop;)b.hide();for(var c in w)w[c].remove();w={}}var a=a.editor._.storedDialogs,d;for(d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,e=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&J(this);if("function"==typeof e)c=this._.storedDialogs||(this._.storedDialogs={}),c=c[a]||(c[a]=new CKEDITOR.dialog(this,a)),b&&b.call(c,c),c.show();else{if("failed"==e)throw K(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+
-a+'" failed when loading definition.');"string"==typeof e&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return c}})})();
-CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(p){p.on("contentDom",function(){var u=p.editable();u.attachListener(u,"dblclick",function(q){if(p.readOnly)return!1;q={element:q.data.getTarget()};p.fire("doubleclick",q);q.dialog&&p.openDialog(q.dialog);return 1})})}});CKEDITOR.plugins.add("about",{requires:"dialog",init:function(a){var b=a.addCommand("about",new CKEDITOR.dialogCommand("about"));b.modes={wysiwyg:1,source:1};b.canUndo=!1;b.readOnly=1;a.ui.addButton&&a.ui.addButton("About",{label:a.lang.about.title,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}});(function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{en:1,ar:1,bg:1,ca:1,et:1,cs:1,cy:1,da:1,de:1,el:1,eo:1,es:1,fa:1,fi:1,fr:1,gu:1,he:1,hi:1,hr:1,hu:1,it:1,ja:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,sk:1,sl:1,sv:1,tr:1,ug:1,uk:1,vi:1,"zh-cn":1},init:function(b){var c=this;b.addCommand("a11yHelp",{exec:function(){var a=b.langCode,a=c.availableLangs[a]?a:c.availableLangs[a.replace(/-.*/,"")]?a.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+
-"dialogs/lang/"+a+".js"),function(){b.lang.a11yhelp=c.langEntries[a];b.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});b.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js")}})})();CKEDITOR.plugins.add("basicstyles",{init:function(c){var f=0,a=function(a,d,b,e){e&&(e=new CKEDITOR.style(e),c.attachStyleStateChange(e,function(a){!c.readOnly&&c.getCommand(b).setState(a)}),c.addCommand(b,new CKEDITOR.styleCommand(e)),c.ui.addButton&&c.ui.addButton(a,{label:d,command:b,toolbar:"basicstyles,"+(f+=10)}))},d=c.config,b=c.lang.basicstyles;a("Bold",b.bold,"bold",d.coreStyles_bold);a("Italic",b.italic,"italic",d.coreStyles_italic);a("Underline",b.underline,"underline",d.coreStyles_underline);
-a("Strike",b.strike,"strike",d.coreStyles_strike);a("Subscript",b.subscript,"subscript",d.coreStyles_subscript);a("Superscript",b.superscript,"superscript",d.coreStyles_superscript);c.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};
-CKEDITOR.config.coreStyles_strike={element:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"};CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){var k={exec:function(g){var a=g.getCommand("blockquote").state,i=g.getSelection(),c=i&&i.getRanges(!0)[0];if(c){var h=i.createBookmarks();if(CKEDITOR.env.ie){var e=h[0].startNode,b=h[0].endNode,d;if(e&&"blockquote"==e.getParent().getName())for(d=e;d=d.getNext();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){e.move(d,!0);break}if(b&&"blockquote"==b.getParent().getName())for(d=b;d=d.getPrevious();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){b.move(d);break}}var f=c.createIterator();
-f.enlargeBr=g.config.enterMode!=CKEDITOR.ENTER_BR;if(a==CKEDITOR.TRISTATE_OFF){for(e=[];a=f.getNextParagraph();)e.push(a);1>e.length&&(a=g.document.createElement(g.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),b=h.shift(),c.insertNode(a),a.append(new CKEDITOR.dom.text("﻿",g.document)),c.moveToBookmark(b),c.selectNodeContents(a),c.collapse(!0),b=c.createBookmark(),e.push(a),h.unshift(b));d=e[0].getParent();c=[];for(b=0;b<e.length;b++)a=e[b],d=d.getCommonAncestor(a.getParent());for(a={table:1,tbody:1,
-tr:1,ol:1,ul:1};a[d.getName()];)d=d.getParent();for(b=null;0<e.length;){for(a=e.shift();!a.getParent().equals(d);)a=a.getParent();a.equals(b)||c.push(a);b=a}for(;0<c.length;)if(a=c.shift(),"blockquote"==a.getName()){for(b=new CKEDITOR.dom.documentFragment(g.document);a.getFirst();)b.append(a.getFirst().remove()),e.push(b.getLast());b.replace(a)}else e.push(a);c=g.document.createElement("blockquote");for(c.insertBefore(e[0]);0<e.length;)a=e.shift(),c.append(a)}else if(a==CKEDITOR.TRISTATE_ON){b=[];
-for(d={};a=f.getNextParagraph();){for(e=c=null;a.getParent();){if("blockquote"==a.getParent().getName()){c=a.getParent();e=a;break}a=a.getParent()}c&&(e&&!e.getCustomData("blockquote_moveout"))&&(b.push(e),CKEDITOR.dom.element.setMarker(d,e,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(d);a=[];e=[];for(d={};0<b.length;)f=b.shift(),c=f.getParent(),f.getPrevious()?f.getNext()?(f.breakParent(f.getParent()),e.push(f.getNext())):f.remove().insertAfter(c):f.remove().insertBefore(c),c.getCustomData("blockquote_processed")||
-(e.push(c),CKEDITOR.dom.element.setMarker(d,c,"blockquote_processed",!0)),a.push(f);CKEDITOR.dom.element.clearAllMarkers(d);for(b=e.length-1;0<=b;b--){c=e[b];a:{d=c;for(var f=0,k=d.getChildCount(),j=void 0;f<k&&(j=d.getChild(f));f++)if(j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary()){d=!1;break a}d=!0}d&&c.remove()}if(g.config.enterMode==CKEDITOR.ENTER_BR)for(c=!0;a.length;)if(f=a.shift(),"div"==f.getName()){b=new CKEDITOR.dom.documentFragment(g.document);c&&(f.getPrevious()&&!(f.getPrevious().type==
-CKEDITOR.NODE_ELEMENT&&f.getPrevious().isBlockBoundary()))&&b.append(g.document.createElement("br"));for(c=f.getNext()&&!(f.getNext().type==CKEDITOR.NODE_ELEMENT&&f.getNext().isBlockBoundary());f.getFirst();)f.getFirst().remove().appendTo(b);c&&b.append(g.document.createElement("br"));b.replace(f);c=!1}}i.selectBookmarks(h);g.focus()}},refresh:function(g,a){this.setState(g.elementPath(a.block||a.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote"};
-CKEDITOR.plugins.add("blockquote",{init:function(g){g.blockless||(g.addCommand("blockquote",k),g.ui.addButton&&g.ui.addButton("Blockquote",{label:g.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})})();(function(){function v(b){function a(){var e=b.editable();e.on(q,function(b){(!CKEDITOR.env.ie||!m)&&u(b)});CKEDITOR.env.ie&&e.on("paste",function(e){r||(f(),e.data.preventDefault(),u(e),l("paste")||b.openDialog("paste"))});CKEDITOR.env.ie&&(e.on("contextmenu",h,null,null,0),e.on("beforepaste",function(b){b.data&&!b.data.$.ctrlKey&&h()},null,null,0));e.on("beforecut",function(){!m&&j(b)});e.on("mouseup",function(){setTimeout(function(){s()},0)});e.on("keyup",s)}function d(e){return{type:e,canUndo:"cut"==
-e,startDisabled:!0,exec:function(){"cut"==this.type&&j();var e;var a=this.type;if(CKEDITOR.env.ie)e=l(a);else try{e=b.document.$.execCommand(a,!1,null)}catch(c){e=!1}e||alert(b.lang.clipboard[this.type+"Error"]);return e}}}function c(){return{canUndo:!1,async:!0,exec:function(b,a){var c=function(a,c){a&&g(a.type,a.dataValue,!!c);b.fire("afterCommandExec",{name:"paste",command:d,returnValue:!!a})},d=this;"string"==typeof a?c({type:"auto",dataValue:a},1):b.getClipboardData(c)}}}function f(){r=1;setTimeout(function(){r=
-0},100)}function h(){m=1;setTimeout(function(){m=0},10)}function l(e){var a=b.document,c=a.getBody(),d=!1,j=function(){d=!0};c.on(e,j);(7<CKEDITOR.env.version?a.$:a.$.selection.createRange()).execCommand(e);c.removeListener(e,j);return d}function g(e,a,c){e={type:e};if(c&&!b.fire("beforePaste",e)||!a)return!1;e.dataValue=a;return b.fire("paste",e)}function j(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var e=b.getSelection(),a,c,d;if(e.getType()==CKEDITOR.SELECTION_ELEMENT&&(a=e.getSelectedElement()))c=
-e.getRanges()[0],d=b.document.createText(""),d.insertBefore(a),c.setStartBefore(d),c.setEndAfter(a),e.selectRanges([c]),setTimeout(function(){a.getParent()&&(d.remove(),e.selectElement(a))},0)}}function k(a,c){var d=b.document,j=b.editable(),k=function(b){b.cancel()},f=CKEDITOR.env.gecko&&10902>=CKEDITOR.env.version;if(!d.getById("cke_pastebin")){var h=b.getSelection(),o=h.createBookmarks(),i=new CKEDITOR.dom.element(j.is("body")&&!CKEDITOR.env.ie&&!CKEDITOR.env.opera?"body":"div",d);i.setAttribute("id",
-"cke_pastebin");CKEDITOR.env.opera&&i.appendBogus();var g=0,d=d.getWindow();f?(i.insertAfter(o[0].startNode),i.setStyle("display","inline")):(CKEDITOR.env.webkit?(j.append(i),i.addClass("cke_editable"),g=(j.is("body")?j:CKEDITOR.dom.element.get(i.$.offsetParent)).getDocumentPosition().y):j.getAscendant(CKEDITOR.env.ie||CKEDITOR.env.opera?"body":"html",1).append(i),i.setStyles({position:"absolute",top:d.getScrollPosition().y-g+10+"px",width:"1px",height:Math.max(1,d.getViewPaneSize().height-20)+"px",
-overflow:"hidden",margin:0,padding:0}));(f=i.getParent().isReadOnly())?(i.setOpacity(0),i.setAttribute("contenteditable",!0)):i.setStyle("ltr"==b.config.contentsLangDirection?"left":"right","-1000px");b.on("selectionChange",k,null,null,0);f&&i.focus();f=new CKEDITOR.dom.range(i);f.selectNodeContents(i);var l=f.select();if(CKEDITOR.env.ie)var m=j.once("blur",function(){b.lockSelection(l)});var n=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){if(CKEDITOR.env.webkit||CKEDITOR.env.opera)CKEDITOR.document[CKEDITOR.env.webkit?
-"getBody":"getDocumentElement"]().$.scrollTop=n;m&&m.removeListener();CKEDITOR.env.ie&&j.focus();h.selectBookmarks(o);i.remove();var a;if(CKEDITOR.env.webkit&&(a=i.getFirst())&&a.is&&a.hasClass("Apple-style-span"))i=a;b.removeListener("selectionChange",k);c(i.getHtml())},0)}}function o(){if(CKEDITOR.env.ie){b.focus();f();var a=b.focusManager;a.lock();if(b.editable().fire(q)&&!l("paste"))return a.unlock(),!1;a.unlock()}else try{if(b.editable().fire(q)&&!b.document.$.execCommand("Paste",!1,null))throw 0;
-}catch(c){return!1}return!0}function p(a){if("wysiwyg"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();f();!CKEDITOR.env.ie&&a.fire("beforepaste");(CKEDITOR.env.opera||CKEDITOR.env.gecko&&10900>CKEDITOR.env.version)&&a.fire("paste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:b.fire("saveSnapshot"),setTimeout(function(){b.fire("saveSnapshot")},0)}}function u(a){var c={type:"auto"},d=b.fire("beforePaste",c);k(a,function(b){b=b.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,
-"");d&&g(c.type,b,0,1)})}function s(){if("wysiwyg"==b.mode){var a=n("Paste");b.getCommand("cut").setState(n("Cut"));b.getCommand("copy").setState(n("Copy"));b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function n(a){var c;if(t&&a in{Paste:1,Cut:1})return CKEDITOR.TRISTATE_DISABLED;if("Paste"==a){CKEDITOR.env.ie&&(m=1);try{c=b.document.$.queryCommandEnabled(a)||CKEDITOR.env.webkit}catch(d){}m=0}else a=b.getSelection(),c=a.getRanges(),c=a.type!=CKEDITOR.SELECTION_NONE&&!(1==c.length&&c[0].collapsed);
-return c?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}var m=0,r=0,t=0,q=CKEDITOR.env.ie?"beforepaste":"paste";(function(){b.on("key",p);b.on("contentDom",a);b.on("selectionChange",function(b){t=b.data.selection.getRanges()[0].checkReadOnly();s()});b.contextMenu&&b.contextMenu.addListener(function(b,a){t=a.getRanges()[0].checkReadOnly();return{cut:n("Cut"),copy:n("Copy"),paste:n("Paste")}})})();(function(){function a(c,d,j,e,f){var k=b.lang.clipboard[d];b.addCommand(d,j);b.ui.addButton&&b.ui.addButton(c,
-{label:k,command:d,toolbar:"clipboard,"+e});b.addMenuItems&&b.addMenuItem(d,{label:k,command:d,group:"clipboard",order:f})}a("Cut","cut",d("cut"),10,1);a("Copy","copy",d("copy"),20,4);a("Paste","paste",c(),30,8)})();b.getClipboardData=function(a,c){function d(a){a.removeListener();a.cancel();c(a.data)}function j(a){a.removeListener();a.cancel();g=!0;c({type:h,dataValue:a.data})}function f(){this.customTitle=a&&a.title}var k=!1,h="auto",g=!1;c||(c=a,a=null);b.on("paste",d,null,null,0);b.on("beforePaste",
-function(a){a.removeListener();k=true;h=a.data.type},null,null,1E3);!1===o()&&(b.removeListener("paste",d),k&&b.fire("pasteDialog",f)?(b.on("pasteDialogCommit",j),b.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",j);setTimeout(function(){g||c(null)},10)})):c(null))}}function w(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi)&&
-!b.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko||CKEDITOR.env.opera){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function x(b,a){function d(a){return CKEDITOR.tools.repeat("</p><p>",~~(a/2))+(1==a%2?"<br>":"")}a=a.replace(/\s+/g," ").replace(/> +</g,"><").replace(/<br ?\/>/gi,"<br>");a=a.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1<a.indexOf("<div>")&&
-(a=a.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,"<br>").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"<div></div>"),a.match(/<div>(<br>|)<\/div>/)&&(a="<p>"+a.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return d(a.split("</div><div>").length+1)})+"</p>"),a=a.replace(/<\/div><div>/g,"<br>"),a=a.replace(/<\/?div>/g,""));if((CKEDITOR.env.gecko||CKEDITOR.env.opera)&&b.enterMode!=CKEDITOR.ENTER_BR)CKEDITOR.env.gecko&&(a=a.replace(/^<br><br>$/,"<br>")),-1<a.indexOf("<br><br>")&&(a="<p>"+
-a.replace(/(<br>){2,}/g,function(a){return d(a.length/4)})+"</p>");return p(b,a)}function y(){var b=new CKEDITOR.htmlParser.filter,a={blockquote:1,dl:1,fieldset:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ol:1,p:1,table:1,ul:1},d=CKEDITOR.tools.extend({br:0},CKEDITOR.dtd.$inline),c={p:1,br:1,"cke:br":1},f=CKEDITOR.dtd,h=CKEDITOR.tools.extend({area:1,basefont:1,embed:1,iframe:1,map:1,object:1,param:1},CKEDITOR.dtd.$nonBodyContent,CKEDITOR.dtd.$cdata),l=function(a){delete a.name;a.add(new CKEDITOR.htmlParser.text(" "))},
-g=function(a){for(var b=a,c;(b=b.next)&&b.name&&b.name.match(/^h\d$/);){c=new CKEDITOR.htmlParser.element("cke:br");c.isEmpty=!0;for(a.add(c);c=b.children.shift();)a.add(c)}};b.addRules({elements:{h1:g,h2:g,h3:g,h4:g,h5:g,h6:g,img:function(a){var a=CKEDITOR.tools.trim(a.attributes.alt||""),b=" ";a&&!a.match(/(^http|\.(jpe?g|gif|png))/i)&&(b=" ["+a+"] ");return new CKEDITOR.htmlParser.text(b)},td:l,th:l,$:function(b){var k=b.name,g;if(h[k])return!1;delete b.attributes;if("br"==k)return b;if(a[k])b.name=
-"p";else if(d[k])delete b.name;else if(f[k]){g=new CKEDITOR.htmlParser.element("cke:br");g.isEmpty=!0;if(CKEDITOR.dtd.$empty[k])return g;b.add(g,0);g=g.clone();g.isEmpty=!0;b.add(g);delete b.name}c[b.name]||delete b.name;return b}}});return b}function z(b,a,d){var a=new CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,d);var a=c.getHtml(),a=a.replace(/\s*(<\/?[a-z:]+ ?\/?>)\s*/g,"$1").replace(/(<cke:br \/>){2,}/g,"<cke:br />").replace(/(<cke:br \/>)(<\/?p>|<br \/>)/g,
-"$2").replace(/(<\/?p>|<br \/>)(<cke:br \/>)/g,"$1").replace(/<(cke:)?br( \/)?>/g,"<br>").replace(/<p><\/p>/g,""),f=0,a=a.replace(/<\/?p>/g,function(a){if("<p>"==a){if(1<++f)return"</p><p>"}else if(0<--f)return"</p><p>";return a}).replace(/<p><\/p>/g,"");return p(b,a)}function p(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("<br>",2*(a.length/7))}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"<$1div>"));
-return a}CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(b){var a;v(b);CKEDITOR.dialog.add("paste",CKEDITOR.getUrl(this.path+"dialogs/paste.js"));b.on("paste",function(a){var b=a.data.dataValue,f=CKEDITOR.dtd.$block;-1<b.indexOf("Apple-")&&(b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi," "),"html"!=a.data.type&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"&nbsp;&nbsp; &nbsp;")})),-1<b.indexOf('<br class="Apple-interchange-newline">')&&
-(a.data.startsWithEOL=1,a.data.preSniffing="html",b=b.replace(/<br class="Apple-interchange-newline">/,"")),b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var h,l,g=new CKEDITOR.dom.element("div");for(g.setHtml(b);1==g.getChildCount()&&(h=g.getFirst())&&h.type==CKEDITOR.NODE_ELEMENT&&(h.hasClass("cke_editable")||h.hasClass("cke_contents"));)g=l=h;l&&(b=l.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b,
-c){if(c.toLowerCase()in f){a.data.preSniffing="html";return"<"+c}return b}):CKEDITOR.env.webkit?b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,c){if(c in f){a.data.endsWithEOL=1;return"</"+c+">"}return b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,null,3);b.on("paste",function(d){var d=d.data,c=d.type,f=d.dataValue,h,l=b.config.clipboard_defaultContentType||"html";h="html"==c||"html"==d.preSniffing?"html":w(f);"htmlifiedtext"==h?f=x(b.config,f):"text"==c&&"html"==
-h&&(f=z(b.config,f,a||(a=y(b))));d.startsWithEOL&&(f='<br data-cke-eol="1">'+f);d.endsWithEOL&&(f+='<br data-cke-eol="1">');"auto"==c&&(c="html"==h||"html"==l?"html":"text");d.type=c;d.dataValue=f;delete d.preSniffing;delete d.startsWithEOL;delete d.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;b.insertHtml(a.dataValue,a.type);setTimeout(function(){b.fire("afterPaste")},0)},null,null,1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}})})();(function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var e=CKEDITOR.addTemplate("panel",
-'<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>'),f=CKEDITOR.addTemplate("panel-frame",'<iframe id="{id}" class="cke_panel_frame" role="application" frameborder="0" src="{src}"></iframe>'),g=CKEDITOR.addTemplate("panel-frame-inner",'<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>');
-CKEDITOR.ui.panel.prototype={render:function(a,b){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),b=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&b.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});b=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(g.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+
-b+");"},c)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("key"+(CKEDITOR.env.opera?"press":"down"),function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&!1===this._.onKeyDown(b)?a.data.preventDefault():(27==b||b==("rtl"==c?39:37))&&this.onEscape&&!1===this.onEscape(b)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(b)}else a=this.document.getById(this.id);this._.holder=a}return a};var c=
-{editorId:a.id,id:this.id,langCode:a.langCode,dir:a.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":a.config.baseFloatZIndex+1};this.isFramed&&(c.frame=f.output({id:this.id+"_frame",src:"javascript:void(document.open(),"+(CKEDITOR.env.isCustomDomain()?"document.domain='"+document.domain+"',":"")+'document.close())">'}));var d=e.output(c);b&&b.push(d);return d},addBlock:function(a,b){b=this._.blocks[a]=b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(),
-b);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){var a=this._.blocks[a],b=this._.currentBlock,c=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");b&&(c.removeAttributes(b.attributes),b.hide());this._.currentBlock=a;c.setAttributes(a.attributes);CKEDITOR.fire("ariaWidget",c);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show();return a},destroy:function(){this.element&&
-this.element.remove()}};CKEDITOR.ui.panel.block=CKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement("div",{attributes:{tabIndex:-1,"class":"cke_panel_block",role:"presentation"},styles:{display:"none"}}));b&&CKEDITOR.tools.extend(this,b);this.attributes.title||(this.attributes.title=this.attributes["aria-label"]);this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(a){-1!=a&&(a=this.element.getElementsByTag("a").getItem(this._.focusIndex=
-a),(CKEDITOR.env.webkit||CKEDITOR.env.opera)&&a.getDocument().getWindow().focus(),a.focus(),this.onMark&&this.onMark(a))}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){(!this.onHide||!0!==this.onHide.call(this))&&this.element.setStyle("display","none")},onKeyDown:function(a){var b=this.keys[a];switch(b){case "next":for(var a=this._.focusIndex,b=this.element.getElementsByTag("a"),c;c=b.getItem(++a);)if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=
-a;c.focus();break}return!1;case "prev":a=this._.focusIndex;for(b=this.element.getElementsByTag("a");0<a&&(c=b.getItem(--a));)if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=a;c.focus();break}return!1;case "click":case "mouseup":return a=this._.focusIndex,(c=0<=a&&this.element.getElementsByTag("a").getItem(a))&&(c.$[b]?c.$[b]():c.$["on"+b]()),!1}return!0}}})})();CKEDITOR.plugins.add("floatpanel",{requires:"panel"});
-(function(){function o(a,b,c,h,g){var g=CKEDITOR.tools.genKey(b.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||"",h.css||"",g||""),e=i[g];e||(e=i[g]=new CKEDITOR.ui.panel(b,h),e.element=c.append(CKEDITOR.dom.element.createFromHtml(e.render(a),b)),e.element.setStyles({display:"none",position:"absolute"}));return e}var i={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(a,b,c,h){function g(){j.hide()}c.forceIFrame=1;c.toolbarRelated&&a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&
-(b=CKEDITOR.document.getById("cke_"+a.name));var e=b.getDocument(),h=o(a,e,b,c,h||0),k=h.element,d=k.getFirst(),j=this;k.disableContextMenu();k.setAttribute("role","application");this.element=k;this._={editor:a,panel:h,parentElement:b,definition:c,document:e,iframe:d,children:[],dir:a.lang.dir};a.on("mode",g);a.on("resize",g);e.getWindow().on("resize",g)},proto:{addBlock:function(a,b){return this._.panel.addBlock(a,b)},addListBlock:function(a,b){return this._.panel.addListBlock(a,b)},getBlock:function(a){return this._.panel.getBlock(a)},
-showBlock:function(a,b,c,h,g){var e=this._.panel,k=e.showBlock(a);this.allowBlur(!1);a=this._.editor.editable();this._.returnFocus=a.hasFocus?a:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);var d=this.element,a=this._.iframe,a=CKEDITOR.env.ie?a:new CKEDITOR.dom.window(a.$.contentWindow),j=d.getDocument(),i=this._.parentElement.getPositionedAncestor(),n=b.getDocumentPosition(j),j=i?i.getDocumentPosition(j):{x:0,y:0},m="rtl"==this._.dir,f=n.x+(h||0)-j.x,l=n.y+(g||0)-j.y;if(m&&(1==c||4==
-c))f+=b.$.offsetWidth;else if(!m&&(2==c||3==c))f+=b.$.offsetWidth-1;if(3==c||4==c)l+=b.$.offsetHeight-1;this._.panel._.offsetParentId=b.getId();d.setStyles({top:l+"px",left:0,display:""});d.setOpacity(0);d.getFirst().removeStyle("width");this._.editor.focusManager.add(a);this._.blurSet||(CKEDITOR.event.useCapture=!0,a.on("blur",function(a){this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&(this.visible&&!this._.activeChild)&&(delete this._.returnFocus,this.hide())},this),a.on("focus",
-function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.event.useCapture=!1,this._.blurSet=1);e.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&this.onEscape(a)===false)return false},this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){d.removeStyle("width");if(k.autoSize){var a=k.element.getDocument(),a=(CKEDITOR.env.webkit?k.element:a.getBody()).$.scrollWidth;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetWidth||0)-(d.$.clientWidth||
-0)+3));d.setStyle("width",a+10+"px");a=k.element.$.scrollHeight;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetHeight||0)-(d.$.clientHeight||0)+3));d.setStyle("height",a+"px");e._.currentBlock.element.setStyle("display","none").removeStyle("display")}else d.removeStyle("height");m&&(f=f-d.$.offsetWidth);d.setStyle("left",f+"px");var b=e.element.getWindow(),a=d.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,g=a.height||a.bottom-a.top,h=m?a.right:b.width-a.left,
-i=m?b.width-a.right:a.left;m?h<c&&(f=i>c?f+c:b.width>c?f-a.left:f-a.right+b.width):h<c&&(f=i>c?f-c:b.width>c?f-a.right+b.width:f-a.left);c=a.top;b.height-a.top<g&&(l=c>g?l-g:b.height>g?l-a.bottom+b.height:l-a.top);if(CKEDITOR.env.ie){b=a=new CKEDITOR.dom.element(d.$.offsetParent);b.getName()=="html"&&(b=b.getDocument().getBody());b.getComputedStyle("direction")=="rtl"&&(f=CKEDITOR.env.ie8Compat?f-d.getDocument().getDocumentElement().$.scrollLeft*2:f-(a.$.scrollWidth-a.$.clientWidth))}var a=d.getFirst(),
-j;(j=a.getCustomData("activePanel"))&&j.onHide&&j.onHide.call(this,1);a.setCustomData("activePanel",this);d.setStyles({top:l+"px",left:f+"px"});d.setOpacity(1)},this);e.isLoaded?a():e.onLoad=a;CKEDITOR.tools.setTimeout(function(){this.focus();this.allowBlur(true);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||
-this._.iframe.getFrameDocument().getWindow()).focus()},blur:function(){var a=this._.iframe.getFrameDocument().getActive();a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),
-a.focus();delete this._.lastFocused;this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!=a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,h,g,e){this._.activeChild==a&&a._.panel._.offsetParentId==c.getId()||(this.hideChild(),a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,h,g,e),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&
-setTimeout(function(){a.element.getChild(0).$.style.cssText+=""},100))},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),b;for(b in i){var c=i[b];a?c.destroy():c.element.hide()}a&&(i={})})})();CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(k){for(var g=k.config.menu_groups.split(","),m=k._.menuGroups={},l=k._.menuItems={},a=0;a<g.length;a++)m[g[a]]=a+1;k.addMenuGroup=function(b,a){m[b]=a||100};k.addMenuItem=function(a,c){m[c.group]&&(l[a]=new CKEDITOR.menuItem(this,a,c))};k.addMenuItems=function(a){for(var c in a)this.addMenuItem(c,a[c])};k.getMenuItem=function(a){return l[a]};k.removeMenuItem=function(a){delete l[a]}}});
-(function(){function k(a){a.sort(function(a,c){return a.group<c.group?-1:a.group>c.group?1:a.order<c.order?-1:a.order>c.order?1:0})}var g='<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="menuitem" aria-haspopup="{hasPopup}" aria-disabled="{disabled}" aria-pressed="{pressed}"';if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)g+=' onkeypress="return false;"';
-CKEDITOR.env.gecko&&(g+=' onblur="this.style.cssText = this.style.cssText;"');var g=g+(' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">'),m=CKEDITOR.addTemplate("menuItem",g+'<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>'),
-l=CKEDITOR.addTemplate("menuArrow",'<span class="cke_menuarrow"><span>{label}</span></span>');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var c=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),j=c.block.attributes=c.attributes||{};!j.role&&(j.role="menu");this._.panelDefinition=c},_:{onShow:function(){var a=
-this.editor.getSelection(),b=a&&a.getStartElement(),c=this.editor.elementPath(),j=this._.listeners;this.removeAll();for(var e=0;e<j.length;e++){var i=j[e](b,a,c);if(i)for(var f in i){var h=this.editor.getMenuItem(f);if(h&&(!h.command||this.editor.getCommand(h.command).state))h.state=i[f],this.add(h)}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):27==a&&this.hide(1);return!1},
-onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,c=this.items[a];if(c=c.getItems&&c.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var j in c){var e=this.editor.getMenuItem(j);e&&(e.state=c[j],b.add(e))}var i=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+(""+a));setTimeout(function(){b.show(i,
-2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,b,c,j){if(!this.parent&&(this._.onShow(),!this.items.length))return;var b=b||("rtl"==this.editor.lang.dir?2:1),e=this.items,i=this.editor,f=this._.panel,h=this._.element;if(!f){f=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);f.onEscape=CKEDITOR.tools.bind(function(a){if(!1===
-this._.onEscape(a))return!1},this);f.onShow=function(){f._.panel.getHolderElement().getParent().addClass("cke cke_reset_all")};f.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);h=f.addBlock(this.id,this._.panelDefinition.block);h.autoSize=!0;var d=h.keys;d[40]="next";d[9]="next";d[38]="prev";d[CKEDITOR.SHIFT+9]="prev";d["rtl"==i.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";d[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(d[13]="mouseup");h=this._.element=
-h.element;d=h.getDocument();d.getBody().setStyle("overflow","hidden");d.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,i.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=
-this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}k(e);for(var d=i.elementPath(),d=['<div class="cke_menu'+(d&&d.direction()!=i.lang.dir?" cke_mixed_dir_content":"")+'" role="presentation">'],g=e.length,m=g&&e[0].group,l=0;l<g;l++){var n=e[l];m!=n.group&&(d.push('<div class="cke_menuseparator" role="separator"></div>'),m=n.group);n.render(this,l,d)}d.push("</div>");h.setHtml(d.join(""));CKEDITOR.ui.fire("ready",
-this);this.parent?this.parent._.panel.showAsChild(f,this.id,a,b,c,j):f.showBlock(this.id,a,b,c,j);i.fire("menuShow",[f])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,c){CKEDITOR.tools.extend(this,c,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(a,b,c){var g=a.id+(""+
-b),e="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,i=e==CKEDITOR.TRISTATE_ON?"on":e==CKEDITOR.TRISTATE_DISABLED?"disabled":"off",f=this.getItems,h="&#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",d=this.name;this.icon&&!/\./.test(this.icon)&&(d=this.icon);a={id:g,name:this.name,iconName:d,label:this.label,cls:this.className||"",state:i,hasPopup:f?"true":"false",disabled:e==CKEDITOR.TRISTATE_DISABLED,pressed:e==CKEDITOR.TRISTATE_ON,title:this.label,href:"javascript:void('"+(this.label||
-"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(d,"rtl"==this.editor.lang.dir,d==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:h}):""};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(b){this.base.call(this,b,{panel:{className:"cke_menu_panel",attributes:{"aria-label":b.lang.contextmenu.options}}})},proto:{addTarget:function(b,d){if(CKEDITOR.env.opera&&!("oncontextmenu"in document.body)){var c;b.on("mousedown",function(a){a=a.data;if(2!=a.$.button)a.getKeystroke()==CKEDITOR.CTRL+1&&b.fire("contextmenu",a);else if(!d||!(CKEDITOR.env.mac?
-a.$.metaKey:a.$.ctrlKey)){var g=a.getTarget();c||(g=g.getDocument(),c=g.createElement("input"),c.$.type="button",g.getBody().append(c));c.setAttribute("style","position:absolute;top:"+(a.$.clientY-2)+"px;left:"+(a.$.clientX-2)+"px;width:5px;height:5px;opacity:0.01")}});b.on("mouseup",function(a){c&&(c.remove(),c=void 0,b.fire("contextmenu",a.data))})}b.on("contextmenu",function(a){a=a.data;if(!d||!(CKEDITOR.env.webkit?e:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey)){a.preventDefault();var b=a.getTarget().getDocument(),
-c=a.getTarget().getDocument().getDocumentElement(),f=!b.equals(CKEDITOR.document),b=b.getWindow().getScrollPosition(),h=f?a.$.clientX:a.$.pageX||b.x+a.$.clientX,i=f?a.$.clientY:a.$.pageY||b.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(c,null,h,i)},CKEDITOR.env.ie?200:0,this)}},this);if(CKEDITOR.env.opera)b.on("keypress",function(a){a=a.data;0===a.$.keyCode&&a.preventDefault()});if(CKEDITOR.env.webkit){var e,f=function(){e=0};b.on("keydown",function(a){e=CKEDITOR.env.mac?a.data.$.metaKey:
-a.data.$.ctrlKey});b.on("keyup",f);b.on("contextmenu",f)}},open:function(b,d,c,e){this.editor.focus();b=b||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(b,d,c,e)}}})},beforeInit:function(b){var d=b.contextMenu=new CKEDITOR.plugins.contextMenu(b);b.on("contentDom",function(){d.addTarget(b.editable(),!1!==b.config.browserContextMenuOnCtrl)});b.addCommand("contextMenu",{exec:function(){b.contextMenu.open(b.document.getBody())}});b.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");
-b.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});CKEDITOR.plugins.add("resize",{init:function(b){var f,g,n,o,a=b.config,q=b.ui.spaceId("resizer"),h=b.element?b.element.getDirection(1):"ltr";!a.resize_dir&&(a.resize_dir="vertical");void 0==a.resize_maxWidth&&(a.resize_maxWidth=3E3);void 0==a.resize_maxHeight&&(a.resize_maxHeight=3E3);void 0==a.resize_minWidth&&(a.resize_minWidth=750);void 0==a.resize_minHeight&&(a.resize_minHeight=250);if(!1!==a.resize_enabled){var c=null,i=("both"==a.resize_dir||"horizontal"==a.resize_dir)&&a.resize_minWidth!=a.resize_maxWidth,
-l=("both"==a.resize_dir||"vertical"==a.resize_dir)&&a.resize_minHeight!=a.resize_maxHeight,j=function(d){var e=f,m=g,c=e+(d.data.$.screenX-n)*("rtl"==h?-1:1),d=m+(d.data.$.screenY-o);i&&(e=Math.max(a.resize_minWidth,Math.min(c,a.resize_maxWidth)));l&&(m=Math.max(a.resize_minHeight,Math.min(d,a.resize_maxHeight)));b.resize(i?e:null,m)},k=function(){CKEDITOR.document.removeListener("mousemove",j);CKEDITOR.document.removeListener("mouseup",k);b.document&&(b.document.removeListener("mousemove",j),b.document.removeListener("mouseup",
-k))},p=CKEDITOR.tools.addFunction(function(d){c||(c=b.getResizable());f=c.$.offsetWidth||0;g=c.$.offsetHeight||0;n=d.screenX;o=d.screenY;a.resize_minWidth>f&&(a.resize_minWidth=f);a.resize_minHeight>g&&(a.resize_minHeight=g);CKEDITOR.document.on("mousemove",j);CKEDITOR.document.on("mouseup",k);b.document&&(b.document.on("mousemove",j),b.document.on("mouseup",k));d.preventDefault&&d.preventDefault()});b.on("destroy",function(){CKEDITOR.tools.removeFunction(p)});b.on("uiSpace",function(a){if("bottom"==
-a.data.space){var e="";i&&!l&&(e=" cke_resizer_horizontal");!i&&l&&(e=" cke_resizer_vertical");var c='<span id="'+q+'" class="cke_resizer'+e+" cke_resizer_"+h+'" title="'+CKEDITOR.tools.htmlEncode(b.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+p+', event)">'+("ltr"==h?"◢":"◣")+"</span>";"ltr"==h&&"ltr"==e?a.data.html+=c:a.data.html=c+a.data.html}},b,null,100);b.on("maximize",function(a){b.ui.space("resizer")[a.data==CKEDITOR.TRISTATE_ON?"hide":"show"]()})}}});(function(){var a='<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&10900<=CKEDITOR.env.version&&!CKEDITOR.env.hc?"":'" href="javascript:void(\'{titleJs}\')"')+' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}"';if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)a+=' onkeypress="return false;"';CKEDITOR.env.gecko&&(a+=' onblur="this.style.cssText = this.style.cssText;"');var a=
-a+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);"  onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"'),a=a+'>&nbsp;</span><span id="{id}_label" class="cke_button_label cke_button__{name}_label">{label}</span>{arrowHtml}</a>',
-m=CKEDITOR.addTemplate("buttonArrow",'<span class="cke_button_arrow">'+(CKEDITOR.env.hc?"&#9660;":"")+"</span>"),n=CKEDITOR.addTemplate("button",a);CKEDITOR.plugins.add("button",{beforeInit:function(b){b.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(b){CKEDITOR.tools.extend(this,b,{title:b.label,click:b.click||function(e){e.execCommand(b.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(b){return new CKEDITOR.ui.button(b)}};
-CKEDITOR.ui.button.prototype={render:function(b,e){var a=CKEDITOR.env,i=this._.id=CKEDITOR.tools.getNextId(),f="",d=this.command,l;this._.editor=b;var c={id:i,button:this,editor:b,focus:function(){CKEDITOR.document.getById(i).focus()},execute:function(){this.button.click(b)},attach:function(b){this.button.attach(b)}},o=CKEDITOR.tools.addFunction(function(b){if(c.onkey)return b=new CKEDITOR.dom.event(b),!1!==c.onkey(c,b.getKeystroke())}),p=CKEDITOR.tools.addFunction(function(b){var a;c.onfocus&&(a=
-!1!==c.onfocus(c,new CKEDITOR.dom.event(b)));CKEDITOR.env.gecko&&10900>CKEDITOR.env.version&&b.preventBubble();return a}),j=0,q=CKEDITOR.tools.addFunction(function(){if(CKEDITOR.env.opera){var a=b.editable();a.isInline()&&a.hasFocus&&(b.lockSelection(),j=1)}});c.clickFn=l=CKEDITOR.tools.addFunction(function(){j&&(b.unlockSelection(1),j=0);c.execute()});if(this.modes){var k={},g=function(){var a=b.mode;a&&(a=this.modes[a]?void 0!=k[a]?k[a]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,this.setState(b.readOnly&&
-!this.readOnly?CKEDITOR.TRISTATE_DISABLED:a))};b.on("beforeModeUnload",function(){b.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(k[b.mode]=this._.state)},this);b.on("mode",g,this);!this.readOnly&&b.on("readOnly",g,this)}else if(d&&(d=b.getCommand(d)))d.on("state",function(){this.setState(d.state)},this),f+=d.state==CKEDITOR.TRISTATE_ON?"on":d.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";if(this.directional)b.on("contentDirChanged",function(a){var e=CKEDITOR.document.getById(this._.id),c=
-e.getFirst(),a=a.data;a!=b.lang.dir?e.addClass("cke_"+a):e.removeClass("cke_ltr").removeClass("cke_rtl");c.setAttribute("style",CKEDITOR.skin.getIconStyle(h,"rtl"==a,this.icon,this.iconOffset))},this);d||(f+="off");var h=g=this.name||this.command;this.icon&&!/\./.test(this.icon)&&(h=this.icon,this.icon=null);a={id:i,name:g,iconName:h,label:this.label,cls:this.className||"",state:f,title:this.title,titleJs:a.gecko&&10900<=a.version&&!a.hc?"":(this.title||"").replace("'",""),hasArrow:this.hasArrow?
-"true":"false",keydownFn:o,mousedownFn:q,focusFn:p,clickFn:l,style:CKEDITOR.skin.getIconStyle(h,"rtl"==b.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?m.output():""};n.output(a,e);if(this.onRender)this.onRender();return c},setState:function(b){if(this._.state==b)return!1;this._.state=b;var a=CKEDITOR.document.getById(this._.id);return a?(a.setState(b,"cke_button"),b==CKEDITOR.TRISTATE_DISABLED?a.setAttribute("aria-disabled",!0):a.removeAttribute("aria-disabled"),b==CKEDITOR.TRISTATE_ON?
-a.setAttribute("aria-pressed",!0):a.removeAttribute("aria-pressed"),!0):!1}};CKEDITOR.ui.prototype.addButton=function(b,a){this.add(b,CKEDITOR.UI_BUTTON,a)}})();(function(){function w(a){function e(){for(var b=h(),g=CKEDITOR.tools.clone(a.config.toolbarGroups)||o(a),f=0;f<g.length;f++){var d=g[f];if("/"!=d){"string"==typeof d&&(d=g[f]={name:d});var e,n=d.groups;if(n)for(var l=0;l<n.length;l++)e=n[l],(e=b[e])&&c(d,e);(e=b[d.name])&&c(d,e)}}return g}function h(){var b={},c,f,d;for(c in a.ui.items)f=a.ui.items[c],d=f.toolbar||"others",d=d.split(","),f=d[0],d=parseInt(d[1]||-1,10),b[f]||(b[f]=[]),b[f].push({name:c,order:d});for(f in b)b[f]=b[f].sort(function(a,
-b){return a.order==b.order?0:0>b.order?-1:0>a.order?1:a.order<b.order?-1:1});return b}function c(a,c){if(c.length){a.items?a.items.push("-"):a.items=[];for(var d;d=c.shift();)a.items.push(d.name)}}var d=a.config.toolbar;"string"==typeof d&&(d=a.config["toolbar_"+d]);return a.toolbar=d||e()}function o(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},
-{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list","indent","blocks","align"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var t=function(){this.toolbars=[];this.focusCommandExecuted=!1};t.prototype.focus=function(){for(var a=0,e;e=this.toolbars[a++];)for(var h=0,c;c=e.items[h++];)if(c.focus){c.focus();return}};var x={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&
-(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(a){var e,h=function(c,d){var b,g="rtl"==a.lang.dir,f=a.config.toolbarGroupCycling,f=void 0===f||f;switch(d){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==d?(b?b.next:c.toolbar.next)||a.toolbox.toolbars[0]:(b?b.previous:c.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-
-1],b.items.length)for(c=b.items[e?b.items.length-1:0];c&&!c.focus;)(c=e?c.previous:c.next)||(b=0);c&&c.focus();return!1;case g?37:39:case 40:b=c;do b=b.next,!b&&f&&(b=c.toolbar.items[0]);while(b&&!b.focus);b?b.focus():h(c,9);return!1;case g?39:37:case 38:b=c;do b=b.previous,!b&&f&&(b=c.toolbar.items[c.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(e=1,h(c,CKEDITOR.SHIFT+9),e=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return c.execute(),!1}return!0};a.on("uiSpace",function(c){if(c.data.space==
-a.config.toolbarLocation){a.toolbox=new t;var d=CKEDITOR.tools.getNextId(),b=a.config.removeButtons,b=b&&b.split(","),g=['<span id="',d,'" class="cke_voice_label">',a.lang.toolbar.toolbars,"</span>",'<span id="'+a.ui.spaceId("toolbox")+'" class="cke_toolbox" role="group" aria-labelledby="',d,'" onmousedown="return false;">'],d=!1!==a.config.toolbarStartupExpanded,f,e;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&g.push('<span class="cke_toolbox_main"'+(d?">":' style="display:none">'));
-for(var o=a.toolbox.toolbars,n=w(a),l=0;l<n.length;l++){var j,i=0,q,m=n[l],r;if(m)if(f&&(g.push("</span>"),e=f=0),"/"===m)g.push('<span class="cke_toolbar_break"></span>');else{r=m.items||m;for(var s=0;s<r.length;s++){var k;k=r[s];var u;if(!(b&&0<=CKEDITOR.tools.indexOf(b,k))&&(k=a.ui.create(k)))if(k.type==CKEDITOR.UI_SEPARATOR)e=f&&k;else{u=!1!==k.canGroup;if(!i){j=CKEDITOR.tools.getNextId();i={id:j,items:[]};q=m.name&&(a.lang.toolbar.toolbarGroups[m.name]||m.name);g.push('<span id="',j,'" class="cke_toolbar"',
-q?' aria-labelledby="'+j+'_label"':"",' role="toolbar">');q&&g.push('<span id="',j,'_label" class="cke_voice_label">',q,"</span>");g.push('<span class="cke_toolbar_start"></span>');var p=o.push(i)-1;0<p&&(i.previous=o[p-1],i.previous.next=i)}u?f||(g.push('<span class="cke_toolgroup" role="presentation">'),f=1):f&&(g.push("</span>"),f=0);j=function(b){b=b.render(a,g);p=i.items.push(b)-1;if(p>0){b.previous=i.items[p-1];b.previous.next=b}b.toolbar=i;b.onkey=h;b.onfocus=function(){a.toolbox.focusCommandExecuted||
-a.focus()}};e&&(j(e),e=0);j(k)}}f&&(g.push("</span>"),e=f=0);i&&g.push('<span class="cke_toolbar_end"></span></span>')}}a.config.toolbarCanCollapse&&g.push("</span>");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var v=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});a.on("destroy",function(){CKEDITOR.tools.removeFunction(v)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(a){var b=a.ui.space("toolbar_collapser"),c=b.getPrevious(),d=
-a.ui.space("contents"),e=c.getParent(),f=parseInt(d.$.style.height,10),g=e.$.offsetHeight,h=b.hasClass("cke_toolbox_collapser_min");h?(c.show(),b.removeClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarCollapse)):(c.hide(),b.addClass("cke_toolbox_collapser_min"),b.setAttribute("title",a.lang.toolbar.toolbarExpand));b.getFirst().setText(h?"▲":"◀");d.setStyle("height",f-(e.$.offsetHeight-g)+"px");a.fire("resize")},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+
-(CKEDITOR.env.ie||CKEDITOR.env.webkit?189:109),"toolbarCollapse");g.push('<a title="'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id="'+a.ui.spaceId("toolbar_collapser")+'" tabIndex="-1" class="cke_toolbox_collapser');d||g.push(" cke_toolbox_collapser_min");g.push('" onclick="CKEDITOR.tools.callFunction('+v+')">','<span class="cke_arrow">&#9650;</span>',"</a>")}g.push("</span>");c.data.html+=g.join("")}});a.on("destroy",function(){if(this.toolbox){var a,d=0,b,e,f;for(a=this.toolbox.toolbars;d<
-a.length;d++){e=a[d].items;for(b=0;b<e.length;b++)f=e[b],f.clickFn&&CKEDITOR.tools.removeFunction(f.clickFn),f.keyDownFn&&CKEDITOR.tools.removeFunction(f.keyDownFn)}}});a.on("uiReady",function(){var c=a.ui.space("toolbox");c&&a.focusManager.add(c,1)});a.addCommand("toolbarFocus",x);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('<span class="cke_toolbar_separator" role="separator"></span>');
-return{}}}}})}});CKEDITOR.ui.prototype.addToolbarGroup=function(a,e,h){var c=o(this.editor),d=0===e,b={name:a};if(h){if(h=CKEDITOR.tools.search(c,function(a){return a.name==h})){!h.groups&&(h.groups=[]);if(e&&(e=CKEDITOR.tools.indexOf(h.groups,e),0<=e)){h.groups.splice(e+1,0,a);return}d?h.groups.splice(0,0,a):h.groups.push(a);return}e=null}e&&(e=CKEDITOR.tools.indexOf(c,function(a){return a.name==e}));d?c.splice(0,0,a):"number"==typeof e?c.splice(e+1,0,b):c.push(a)}})();CKEDITOR.UI_SEPARATOR="separator";
-CKEDITOR.config.toolbarLocation="top";(function(){var o={editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}},m='<span class="cke_path_empty">&nbsp;</span>',d="";if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)d+=' onkeypress="return false;"';CKEDITOR.env.gecko&&(d+=' onblur="this.style.cssText = this.style.cssText;"');var p=CKEDITOR.addTemplate("pathItem",'<a id="{id}" href="{jsTitle}" tabindex="-1" class="cke_path_item" title="{label}"'+
-(CKEDITOR.env.gecko&&10900>CKEDITOR.env.version?' onfocus="event.preventBubble();"':"")+d+' hidefocus="true"  onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role="button" aria-label="{label}">{text}</a>');CKEDITOR.plugins.add("elementspath",{init:function(a){function d(b){a.focus();b=a._.elementsPath.list[b];if(b.equals(a.editable())){var e=a.createRange();e.selectNodeContents(b);e.select()}else a.getSelection().selectElement(b)}
-function h(){i&&i.setHtml(m);delete a._.elementsPath.list}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var l=a.ui.spaceId("path"),i,n="cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_";a._.elementsPath={idBase:n,filters:[]};a.on("uiSpace",function(b){"bottom"==b.data.space&&(b.data.html+='<span id="'+l+'_label" class="cke_voice_label">'+a.lang.elementspath.eleLabel+'</span><span id="'+l+'" class="cke_path" role="group" aria-labelledby="'+l+'_label">'+m+"</span>")});a.on("uiReady",function(){var b=
-a.ui.space("path");b&&a.focusManager.add(b,1)});var q=CKEDITOR.tools.addFunction(d),r=CKEDITOR.tools.addFunction(function(b,e){var c=a._.elementsPath.idBase,f,e=new CKEDITOR.dom.event(e);f="rtl"==a.lang.dir;switch(e.getKeystroke()){case f?39:37:case 9:return(f=CKEDITOR.document.getById(c+(b+1)))||(f=CKEDITOR.document.getById(c+"0")),f.focus(),!1;case f?37:39:case CKEDITOR.SHIFT+9:return(f=CKEDITOR.document.getById(c+(b-1)))||(f=CKEDITOR.document.getById(c+(a._.elementsPath.list.length-1))),f.focus(),
-!1;case 27:return a.focus(),!1;case 13:case 32:return d(b),!1}return!0});a.on("selectionChange",function(b){for(var e=a.editable(),c=b.data.selection.getStartElement(),b=[],f=a._.elementsPath.list=[],d=a._.elementsPath.filters;c;){var j=0,g;g=c.data("cke-display-name")?c.data("cke-display-name"):c.data("cke-real-element-type")?c.data("cke-real-element-type"):c.getName();for(var k=0;k<d.length;k++){var h=d[k](c,g);if(!1===h){j=1;break}g=h||g}j||(j=f.push(c)-1,k=a.lang.elementspath.eleTitle.replace(/%1/,
-g),g=p.output({id:n+j,label:k,text:g,jsTitle:"javascript:void('"+g+"')",index:j,keyDownFn:r,clickFn:q}),b.unshift(g));if(c.equals(e))break;c=c.getParent()}i||(i=CKEDITOR.document.getById(l));e=i;e.setHtml(b.join("")+m);a.fire("elementsPathUpdate",{space:e})});a.on("readOnly",h);a.on("contentDomUnload",h);a.addCommand("elementsPathFocus",o);a.setKeystroke(CKEDITOR.ALT+122,"elementsPathFocus")}}})})();(function(){function C(c,j,f){function b(b){if((d=a[b?"getFirst":"getLast"]())&&(!d.is||!d.isBlockBoundary())&&(m=j.root[b?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))&&(!m.is||!m.isBlockBoundary({br:1})))c.document.createElement("br")[b?"insertBefore":"insertAfter"](d)}for(var i=CKEDITOR.plugins.list.listToArray(j.root,f),e=[],h=0;h<j.contents.length;h++){var g=j.contents[h];if((g=g.getAscendant("li",!0))&&!g.getCustomData("list_item_processed"))e.push(g),CKEDITOR.dom.element.setMarker(f,
-g,"list_item_processed",!0)}g=null;for(h=0;h<e.length;h++)g=e[h].getCustomData("listarray_index"),i[g].indent=-1;for(h=g+1;h<i.length;h++)if(i[h].indent>i[h-1].indent+1){e=i[h-1].indent+1-i[h].indent;for(g=i[h].indent;i[h]&&i[h].indent>=g;)i[h].indent+=e,h++;h--}var a=CKEDITOR.plugins.list.arrayToList(i,f,null,c.config.enterMode,j.root.getAttribute("dir")).listNode,d,m;b(!0);b();a.replace(j.root)}function x(c,j){this.name=c;this.context=this.type=j}function y(c,j,f,b){for(var i,e;i=c[b?"getLast":
-"getFirst"](D);)(e=i.getDirection(1))!==j.getDirection(1)&&i.setAttribute("dir",e),i.remove(),f?i[b?"insertBefore":"insertAfter"](f):j.append(i,b)}function A(c){var j;(j=function(f){var b=c[f?"getPrevious":"getNext"](q);b&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(c.getName()))&&(y(c,b,null,!f),c.remove(),c=b)})();j(1)}function B(c){return c.type==CKEDITOR.NODE_ELEMENT&&(c.getName()in CKEDITOR.dtd.$block||c.getName()in CKEDITOR.dtd.$listItem)&&CKEDITOR.dtd[c.getName()]["#"]}function v(c,j,f){c.fire("saveSnapshot");
-f.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var b=f.extractContents();j.trim(!1,!0);var i=j.createBookmark(),e=new CKEDITOR.dom.elementPath(j.startContainer),h=e.block,e=e.lastElement.getAscendant("li",1)||h,g=new CKEDITOR.dom.elementPath(f.startContainer),a=g.contains(CKEDITOR.dtd.$listItem),g=g.contains(CKEDITOR.dtd.$list);h?(h=h.getBogus())&&h.remove():g&&(h=g.getPrevious(q))&&u(h)&&h.remove();(h=b.getLast())&&(h.type==CKEDITOR.NODE_ELEMENT&&h.is("br"))&&h.remove();(h=j.startContainer.getChild(j.startOffset))?
-b.insertBefore(h):j.startContainer.append(b);if(a&&(b=w(a)))e.contains(a)?(y(b,a.getParent(),a),b.remove()):e.append(b);for(;f.checkStartOfBlock()&&f.checkEndOfBlock();)g=f.startPath(),b=g.block,b.is("li")&&(e=b.getParent(),b.equals(e.getLast(q))&&b.equals(e.getFirst(q))&&(b=e)),f.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START),b.remove();f=f.clone();b=c.editable();f.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);f=new CKEDITOR.dom.walker(f);f.evaluator=function(a){return q(a)&&!u(a)};(f=f.next())&&(f.type==
-CKEDITOR.NODE_ELEMENT&&f.getName()in CKEDITOR.dtd.$list)&&A(f);j.moveToBookmark(i);j.select();c.fire("saveSnapshot")}function w(c){return(c=c.getLast(q))&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in r?c:null}var r={ol:1,ul:1},E=CKEDITOR.dom.walker.whitespaces(),F=CKEDITOR.dom.walker.bookmark(),q=function(c){return!(E(c)||F(c))},u=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(c,j,f,b,i){if(!r[c.getName()])return[];b||(b=0);f||(f=[]);for(var e=0,h=c.getChildCount();e<h;e++){var g=
-c.getChild(e);g.type==CKEDITOR.NODE_ELEMENT&&g.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(g,j,f,b+1);if("li"==g.$.nodeName.toLowerCase()){var a={parent:c,indent:b,element:g,contents:[]};i?a.grandparent=i:(a.grandparent=c.getParent(),a.grandparent&&"li"==a.grandparent.$.nodeName.toLowerCase()&&(a.grandparent=a.grandparent.getParent()));j&&CKEDITOR.dom.element.setMarker(j,g,"listarray_index",f.length);f.push(a);for(var d=0,m=g.getChildCount(),k;d<m;d++)k=g.getChild(d),k.type==
-CKEDITOR.NODE_ELEMENT&&r[k.getName()]?CKEDITOR.plugins.list.listToArray(k,j,f,b+1,a.grandparent):a.contents.push(k)}}return f},arrayToList:function(c,j,f,b,i){f||(f=0);if(!c||c.length<f+1)return null;for(var e,h=c[f].parent.getDocument(),g=new CKEDITOR.dom.documentFragment(h),a=null,d=f,m=Math.max(c[f].indent,0),k=null,n,l,p=b==CKEDITOR.ENTER_P?"p":"div";;){var o=c[d];e=o.grandparent;n=o.element.getDirection(1);if(o.indent==m){if(!a||c[d].parent.getName()!=a.getName())a=c[d].parent.clone(!1,1),i&&
-a.setAttribute("dir",i),g.append(a);k=a.append(o.element.clone(0,1));n!=a.getDirection(1)&&k.setAttribute("dir",n);for(e=0;e<o.contents.length;e++)k.append(o.contents[e].clone(1,1));d++}else if(o.indent==Math.max(m,0)+1)l=c[d-1].element.getDirection(1),d=CKEDITOR.plugins.list.arrayToList(c,null,d,b,l!=n?n:null),!k.getChildCount()&&(CKEDITOR.env.ie&&!(7<h.$.documentMode))&&k.append(h.createText(" ")),k.append(d.listNode),d=d.nextIndex;else if(-1==o.indent&&!f&&e){r[e.getName()]?(k=o.element.clone(!1,
-!0),n!=e.getDirection(1)&&k.setAttribute("dir",n)):k=new CKEDITOR.dom.documentFragment(h);var a=e.getDirection(1)!=n,s=o.element,z=s.getAttribute("class"),u=s.getAttribute("style"),w=k.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(b!=CKEDITOR.ENTER_BR||a||u||z),t,x=o.contents.length;for(e=0;e<x;e++){t=o.contents[e];if(t.type==CKEDITOR.NODE_ELEMENT&&t.isBlockBoundary()){a&&!t.getDirection()&&t.setAttribute("dir",n);var v=t,y=s.getAttribute("style");y&&v.setAttribute("style",y.replace(/([^;])$/,"$1;")+(v.getAttribute("style")||
-""));z&&t.addClass(z)}else w&&(l||(l=h.createElement(p),a&&l.setAttribute("dir",n)),u&&l.setAttribute("style",u),z&&l.setAttribute("class",z),l.append(t.clone(1,1)));k.append(l||t.clone(1,1))}k.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&d!=c.length-1&&((n=k.getLast())&&(n.type==CKEDITOR.NODE_ELEMENT&&"_moz"==n.getAttribute("type"))&&n.remove(),(!k.getLast(q)||!(n.type==CKEDITOR.NODE_ELEMENT&&n.getName()in CKEDITOR.dtd.$block))&&k.append(h.createElement("br")));n=k.$.nodeName.toLowerCase();!CKEDITOR.env.ie&&
-("div"==n||"p"==n)&&k.appendBogus();g.append(k);a=null;d++}else return null;l=null;if(c.length<=d||Math.max(c[d].indent,0)<m)break}if(j)for(c=g.getFirst();c;){if(c.type==CKEDITOR.NODE_ELEMENT&&(CKEDITOR.dom.element.clearMarkers(j,c),c.getName()in CKEDITOR.dtd.$listItem&&(f=c,h=i=b=void 0,b=f.getDirection()))){for(i=f.getParent();i&&!(h=i.getDirection());)i=i.getParent();b==h&&f.removeAttribute("dir")}c=c.getNextSourceNode()}return{listNode:g,nextIndex:d}}};var G=/^h[1-6]$/,D=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);
-x.prototype={exec:function(c){this.refresh(c,c.elementPath());var j=c.config,f=c.getSelection(),b=f&&f.getRanges(!0);if(this.state==CKEDITOR.TRISTATE_OFF){var i=c.editable();if(i.getFirst(q)){var e=1==b.length&&b[0];(j=e&&e.getEnclosedNode())&&(j.is&&this.type==j.getName())&&this.setState(CKEDITOR.TRISTATE_ON)}else j.enterMode==CKEDITOR.ENTER_BR?i.appendBogus():b[0].fixBlock(1,j.enterMode==CKEDITOR.ENTER_P?"p":"div"),f.selectRanges(b)}for(var j=f.createBookmarks(!0),i=[],h={},b=b.createIterator(),
-g=0;(e=b.getNextRange())&&++g;){var a=e.getBoundaryNodes(),d=a.startNode,m=a.endNode;d.type==CKEDITOR.NODE_ELEMENT&&"td"==d.getName()&&e.setStartAt(a.startNode,CKEDITOR.POSITION_AFTER_START);m.type==CKEDITOR.NODE_ELEMENT&&"td"==m.getName()&&e.setEndAt(a.endNode,CKEDITOR.POSITION_BEFORE_END);e=e.createIterator();for(e.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;a=e.getNextParagraph();)if(!a.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(h,a,"list_block",1);for(var k=c.elementPath(a),
-d=k.elements,m=0,k=k.blockLimit,n,l=d.length-1;0<=l&&(n=d[l]);l--)if(r[n.getName()]&&k.contains(n)){k.removeCustomData("list_group_object_"+g);(d=n.getCustomData("list_group_object"))?d.contents.push(a):(d={root:n,contents:[a]},i.push(d),CKEDITOR.dom.element.setMarker(h,n,"list_group_object",d));m=1;break}m||(m=k,m.getCustomData("list_group_object_"+g)?m.getCustomData("list_group_object_"+g).contents.push(a):(d={root:m,contents:[a]},CKEDITOR.dom.element.setMarker(h,m,"list_group_object_"+g,d),i.push(d)))}}for(n=
-[];0<i.length;)if(d=i.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(r[d.root.getName()]){a=c;b=d;d=h;g=n;m=CKEDITOR.plugins.list.listToArray(b.root,d);k=[];for(e=0;e<b.contents.length;e++)if(l=b.contents[e],(l=l.getAscendant("li",!0))&&!l.getCustomData("list_item_processed"))k.push(l),CKEDITOR.dom.element.setMarker(d,l,"list_item_processed",!0);for(var l=b.root.getDocument(),p=void 0,o=void 0,e=0;e<k.length;e++){var s=k[e].getCustomData("listarray_index"),p=m[s].parent;p.is(this.type)||(o=l.createElement(this.type),
-p.copyAttributes(o,{start:1,type:1}),o.removeStyle("list-style-type"),m[s].parent=o)}a=CKEDITOR.plugins.list.arrayToList(m,d,null,a.config.enterMode);d=void 0;m=a.listNode.getChildCount();for(e=0;e<m&&(d=a.listNode.getChild(e));e++)d.getName()==this.type&&g.push(d);a.listNode.replace(b.root)}else{m=c;a=d;e=n;k=a.contents;b=a.root.getDocument();g=[];1==k.length&&k[0].equals(a.root)&&(d=b.createElement("div"),k[0].moveChildren&&k[0].moveChildren(d),k[0].append(d),k[0]=d);a=a.contents[0].getParent();
-for(l=0;l<k.length;l++)a=a.getCommonAncestor(k[l].getParent());p=m.config.useComputedState;m=d=void 0;p=void 0===p||p;for(l=0;l<k.length;l++)for(o=k[l];s=o.getParent();){if(s.equals(a)){g.push(o);!m&&o.getDirection()&&(m=1);o=o.getDirection(p);null!==d&&(d=d&&d!=o?null:o);break}o=s}if(!(1>g.length)){k=g[g.length-1].getNext();l=b.createElement(this.type);e.push(l);for(p=e=void 0;g.length;)e=g.shift(),p=b.createElement("li"),e.is("pre")||G.test(e.getName())?e.appendTo(p):(e.copyAttributes(p),d&&e.getDirection()&&
-(p.removeStyle("direction"),p.removeAttribute("dir")),e.moveChildren(p),e.remove()),p.appendTo(l);d&&m&&l.setAttribute("dir",d);k?l.insertBefore(k):l.appendTo(a)}}else this.state==CKEDITOR.TRISTATE_ON&&r[d.root.getName()]&&C.call(this,c,d,h);for(l=0;l<n.length;l++)A(n[l]);CKEDITOR.dom.element.clearAllMarkers(h);f.selectBookmarks(j);c.focus()},refresh:function(c,j){var f=j.contains(r,1),b=j.blockLimit||j.root;f&&b.contains(f)?this.setState(f.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):
-this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{init:function(c){c.blockless||(c.addCommand("numberedlist",new x("numberedlist","ol")),c.addCommand("bulletedlist",new x("bulletedlist","ul")),c.ui.addButton&&(c.ui.addButton("NumberedList",{label:c.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),c.ui.addButton("BulletedList",{label:c.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),c.on("key",function(j){var f=j.data.keyCode;
-if(c.mode=="wysiwyg"&&f in{8:1,46:1}){var b=c.getSelection().getRanges()[0],i=b.startPath();if(b.collapsed){var i=new CKEDITOR.dom.elementPath(b.startContainer),e=f==8,h=c.editable(),g=new CKEDITOR.dom.walker(b.clone());g.evaluator=function(a){return q(a)&&!u(a)};g.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};f=b.clone();if(e){var a,d;if((a=i.contains(r))&&b.checkBoundaryOfElement(a,CKEDITOR.START)&&(a=a.getParent())&&a.is("li")&&(a=w(a))){d=a;a=a.getPrevious(q);f.moveToPosition(a&&
-u(a)?a:d,CKEDITOR.POSITION_BEFORE_START)}else{g.range.setStartAt(h,CKEDITOR.POSITION_AFTER_START);g.range.setEnd(b.startContainer,b.startOffset);if((a=g.previous())&&a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in r||a.is("li"))){if(!a.is("li")){g.range.selectNodeContents(a);g.reset();g.evaluator=B;a=g.previous()}d=a;f.moveToElementEditEnd(d)}}if(d){v(c,f,b);j.cancel()}else if((f=i.contains(r))&&b.checkBoundaryOfElement(f,CKEDITOR.START)){d=f.getFirst(q);if(b.checkBoundaryOfElement(d,CKEDITOR.START)){a=
-f.getPrevious(q);if(w(d)){if(a){b.moveToElementEditEnd(a);b.select()}}else c.execCommand("outdent");j.cancel()}}}else if(d=i.contains("li")){g.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);h=(i=d.getLast(q))&&B(i)?i:d;d=0;if((a=g.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in r&&a.equals(i)){d=1;a=g.next()}else b.checkBoundaryOfElement(h,CKEDITOR.END)&&(d=1);if(d&&a){b=b.clone();b.moveToElementEditStart(a);v(c,f,b);j.cancel()}}else{g.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);if((a=g.next())&&
-a.type==CKEDITOR.NODE_ELEMENT&&a.is(r)){a=a.getFirst(q);if(i.block&&b.checkStartOfBlock()&&b.checkEndOfBlock()){i.block.remove();b.moveToElementEditStart(a);b.select()}else if(w(a)){b.moveToElementEditStart(a);b.select()}else{b=b.clone();b.moveToElementEditStart(a);v(c,f,b)}j.cancel()}}setTimeout(function(){c.selectionChange(1)})}}}))}})})();(function(){function p(d,i){this.name=i;if(this.useIndentClasses=d.config.indentClasses&&0<d.config.indentClasses.length){this.classNameRegex=RegExp("(?:^|\\s+)("+d.config.indentClasses.join("|")+")(?=$|\\s)");this.indentClassMap={};for(var a=0;a<d.config.indentClasses.length;a++)this.indentClassMap[d.config.indentClasses[a]]=a+1}this.startDisabled="outdent"==i}function r(d,i){return"ltr"==(i||d.getComputedStyle("direction"))?"margin-left":"margin-right"}function q(d){return d.type==CKEDITOR.NODE_ELEMENT&&
-d.is("li")}var m={ol:1,ul:1},t=CKEDITOR.dom.walker.whitespaces(!0),u=CKEDITOR.dom.walker.bookmark(!1,!0);p.prototype={context:"p",refresh:function(d,i){var a=i&&i.contains(m),f=i.block||i.blockLimit;a?this.setState(CKEDITOR.TRISTATE_OFF):!this.useIndentClasses&&"indent"==this.name?this.setState(CKEDITOR.TRISTATE_OFF):f?this.useIndentClasses?(a=f.$.className.match(this.classNameRegex),f=0,a&&(a=a[1],f=this.indentClassMap[a]),"outdent"==this.name&&!f||"indent"==this.name&&f==d.config.indentClasses.length?
-this.setState(CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_OFF)):(a=parseInt(f.getStyle(r(f)),10),isNaN(a)&&(a=0),0>=a?this.setState(CKEDITOR.TRISTATE_DISABLED):this.setState(CKEDITOR.TRISTATE_OFF)):this.setState(CKEDITOR.TRISTATE_DISABLED)},exec:function(d){function i(n){for(var h=l.startContainer,b=l.endContainer;h&&!h.getParent().equals(n);)h=h.getParent();for(;b&&!b.getParent().equals(n);)b=b.getParent();if(h&&b){for(var c=h,h=[],a=!1;!a;)c.equals(b)&&(a=!0),h.push(c),c=c.getNext();
-if(!(1>h.length)){c=n.getParents(!0);for(b=0;b<c.length;b++)if(c[b].getName&&m[c[b].getName()]){n=c[b];break}for(var c="indent"==e.name?1:-1,b=h[0],h=h[h.length-1],a=CKEDITOR.plugins.list.listToArray(n,o),k=a[h.getCustomData("listarray_index")].indent,b=b.getCustomData("listarray_index");b<=h.getCustomData("listarray_index");b++)if(a[b].indent+=c,0<c){var i=a[b].parent;a[b].parent=new CKEDITOR.dom.element(i.getName(),i.getDocument())}for(b=h.getCustomData("listarray_index")+1;b<a.length&&a[b].indent>
-k;b++)a[b].indent+=c;h=CKEDITOR.plugins.list.arrayToList(a,o,null,d.config.enterMode,n.getDirection());if("outdent"==e.name){var j;if((j=n.getParent())&&j.is("li"))for(var c=h.listNode.getChildren(),f=[],g,b=c.count()-1;0<=b;b--)(g=c.getItem(b))&&(g.is&&g.is("li"))&&f.push(g)}h&&h.listNode.replace(n);if(f&&f.length)for(b=0;b<f.length;b++){for(g=n=f[b];(g=g.getNext())&&g.is&&g.getName()in m;)CKEDITOR.env.ie&&!n.getFirst(function(b){return t(b)&&u(b)})&&n.append(l.document.createText(" ")),n.append(g);
-n.insertAfter(j)}}}}function a(){var a=l.createIterator(),e=d.config.enterMode;a.enforceRealBlocks=!0;a.enlargeBr=e!=CKEDITOR.ENTER_BR;for(var b;b=a.getNextParagraph(e==CKEDITOR.ENTER_P?"p":"div");)f(b)}function f(a,g){if(a.getCustomData("indent_processed"))return!1;if(e.useIndentClasses){var b=a.$.className.match(e.classNameRegex),c=0;b&&(b=b[1],c=e.indentClassMap[b]);"outdent"==e.name?c--:c++;if(0>c)return!1;c=Math.min(c,d.config.indentClasses.length);c=Math.max(c,0);a.$.className=CKEDITOR.tools.ltrim(a.$.className.replace(e.classNameRegex,
-""));0<c&&a.addClass(d.config.indentClasses[c-1])}else{b=r(a,g);c=parseInt(a.getStyle(b),10);isNaN(c)&&(c=0);var f=d.config.indentOffset||40,c=c+("indent"==e.name?1:-1)*f;if(0>c)return!1;c=Math.max(c,0);c=Math.ceil(c/f)*f;a.setStyle(b,c?c+(d.config.indentUnit||"px"):"");""===a.getAttribute("style")&&a.removeAttribute("style")}CKEDITOR.dom.element.setMarker(o,a,"indent_processed",1);return!0}for(var e=this,o={},g=d.getSelection(),v=g.createBookmarks(1),l,p=(g&&g.getRanges(1)).createIterator();l=p.getNextRange();){for(var j=
-l.getCommonAncestor();j&&!(j.type==CKEDITOR.NODE_ELEMENT&&m[j.getName()]);)j=j.getParent();if(!j){var k=l.getEnclosedNode();k&&(k.type==CKEDITOR.NODE_ELEMENT&&k.getName()in m)&&(l.setStartAt(k,CKEDITOR.POSITION_AFTER_START),l.setEndAt(k,CKEDITOR.POSITION_BEFORE_END),j=k)}j&&(l.startContainer.type==CKEDITOR.NODE_ELEMENT&&l.startContainer.getName()in m)&&(k=new CKEDITOR.dom.walker(l),k.evaluator=q,l.startContainer=k.next());j&&(l.endContainer.type==CKEDITOR.NODE_ELEMENT&&l.endContainer.getName()in m)&&
-(k=new CKEDITOR.dom.walker(l),k.evaluator=q,l.endContainer=k.previous());if(j){var k=j.getFirst(q),w=!!k.getNext(q),s=l.startContainer;(!k.equals(s)&&!k.contains(s)||!("indent"==e.name||e.useIndentClasses||parseInt(j.getStyle(r(j)),10))||!f(j,!w&&k.getDirection()))&&i(j)}else a()}CKEDITOR.dom.element.clearAllMarkers(o);d.forceNextSelectionCheck();g.selectBookmarks(v)}};CKEDITOR.plugins.add("indent",{requires:"list",onLoad:function(){(CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat)&&CKEDITOR.addCss(".cke_editable ul,.cke_editable ol{\tmargin-left: 0px;\tpadding-left: 40px;}")},
-init:function(d){d.blockless||(d.addCommand("indent",new p(d,"indent")),d.addCommand("outdent",new p(d,"outdent")),d.ui.addButton&&(d.ui.addButton("Indent",{label:d.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),d.ui.addButton("Outdent",{label:d.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"})),d.on("dirChanged",function(i){var a=d.createRange();a.setStartBefore(i.data.node);a.setEndAfter(i.data.node);for(var f=new CKEDITOR.dom.walker(a),e;e=f.next();)if(e.type==
-CKEDITOR.NODE_ELEMENT)if(!e.equals(i.data.node)&&e.getDirection()){a.setStartAfter(e);f=new CKEDITOR.dom.walker(a)}else{var o=d.config.indentClasses;if(o)for(var g=i.data.dir=="ltr"?["_rtl",""]:["","_rtl"],m=0;m<o.length;m++)if(e.hasClass(o[m]+g[0])){e.removeClass(o[m]+g[0]);e.addClass(o[m]+g[1])}o=e.getStyle("margin-right");g=e.getStyle("margin-left");o?e.setStyle("margin-left",o):e.removeStyle("margin-left");g?e.setStyle("margin-right",g):e.removeStyle("margin-right")}}))}})})();(function(){function m(a,d,b){b=a.config.forceEnterMode||b;if("wysiwyg"!=a.mode)return!1;d||(d=a.config.enterMode);a.elementPath().isContextFor("p")||(d=CKEDITOR.ENTER_BR,b=1);a.fire("saveSnapshot");d==CKEDITOR.ENTER_BR?n(a,d,null,b):o(a,d,null,b);a.fire("saveSnapshot");return!0}function p(a){for(var a=a.getSelection().getRanges(!0),d=a.length-1;0<d;d--)a[d].deleteContents();return a[0]}CKEDITOR.plugins.add("enterkey",{requires:"indent",init:function(a){a.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,
-exec:function(a){m(a)}});a.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(a){"wysiwyg"==a.mode&&m(a,a.config.shiftEnterMode,1)}});a.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var s=CKEDITOR.dom.walker.whitespaces(),t=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(a,d,b,i){if(b=b||p(a)){var f=b.document,j=b.checkStartOfBlock(),h=b.checkEndOfBlock(),c=a.elementPath(b.startContainer).block;if(j&&h){if(c&&(c.is("li")||c.getParent().is("li"))){a.execCommand("outdent");
-return}if(c&&c.getParent().is("blockquote")){c.breakParent(c.getParent());c.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getPrevious().remove();c.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getNext().remove();b.moveToElementEditStart(c);b.select();return}}else if(c&&c.is("pre")&&!h){n(a,d,b,i);return}var c=d==CKEDITOR.ENTER_DIV?"div":"p",l=b.splitBlock(c);if(l){var d=l.previousBlock,a=l.nextBlock,j=l.wasStartOfBlock,h=l.wasEndOfBlock,g;if(a)g=a.getParent(),g.is("li")&&(a.breakParent(g),
-a.move(a.getNext(),1));else if(d&&(g=d.getParent())&&g.is("li"))d.breakParent(g),g=d.getNext(),b.moveToElementEditStart(g),d.move(d.getPrevious());if(!j&&!h){if(a.is("li")){var e=b.clone();e.selectNodeContents(a);e=new CKEDITOR.dom.walker(e);e.evaluator=function(a){return!(t(a)||s(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))};(g=e.next())&&(g.type==CKEDITOR.NODE_ELEMENT&&g.is("ul","ol"))&&(CKEDITOR.env.ie?f.createText(" "):f.createElement("br")).insertBefore(g)}a&&
-b.moveToElementEditStart(a)}else{var k;if(d){if(d.is("li")||!q.test(d.getName())&&!d.is("pre"))e=d.clone()}else a&&(e=a.clone());e?i&&!e.is("li")&&e.renameNode(c):g&&g.is("li")?e=g:(e=f.createElement(c),d&&(k=d.getDirection())&&e.setAttribute("dir",k));if(f=l.elementPath){i=0;for(g=f.elements.length;i<g;i++){k=f.elements[i];if(k.equals(f.block)||k.equals(f.blockLimit))break;CKEDITOR.dtd.$removeEmpty[k.getName()]&&(k=k.clone(),e.moveChildren(k),e.append(k))}}CKEDITOR.env.ie||e.appendBogus();e.getParent()||
-b.insertNode(e);e.is("li")&&e.removeAttribute("value");if(CKEDITOR.env.ie&&j&&(!h||!d.getChildCount()))b.moveToElementEditStart(h?d:e),b.select();b.moveToElementEditStart(j&&!h?a:e)}b.select();b.scrollIntoView()}}},enterBr:function(a,d,b,i){if(b=b||p(a)){var f=b.document,j=b.checkEndOfBlock(),h=new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()),c=h.block,h=c&&h.block.getName();!i&&"li"==h?o(a,d,b,i):(!i&&j&&q.test(h)?(j=c.getDirection())?(f=f.createElement("div"),f.setAttribute("dir",
-j),f.insertAfter(c),b.setStart(f,0)):(f.createElement("br").insertAfter(c),CKEDITOR.env.gecko&&f.createText("").insertAfter(c),b.setStartAt(c.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(c="pre"==h&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?f.createText("\r"):f.createElement("br"),b.deleteContents(),b.insertNode(c),CKEDITOR.env.ie?b.setStartAt(c,CKEDITOR.POSITION_AFTER_END):(f.createText("﻿").insertAfter(c),j&&c.getParent().appendBogus(),c.getNext().$.nodeValue=
-"",b.setStartAt(c.getNext(),CKEDITOR.POSITION_AFTER_START))),b.collapse(!0),b.select(),b.scrollIntoView())}}};var r=CKEDITOR.plugins.enterkey,n=r.enterBr,o=r.enterBlock,q=/^h[1-6]$/})();(function(){function j(a,b){var d={},e=[],f={nbsp:" ",shy:"­",gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},a=a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(a,h){var c=b?"&"+h+";":f[h];d[c]=b?f[h]:"&"+h+";";e.push(c);return""});if(!b&&a){var a=a.split(","),c=document.createElement("div"),g;c.innerHTML="&"+a.join(";&")+";";g=c.innerHTML;c=null;for(c=0;c<g.length;c++){var i=g.charAt(c);d[i]="&"+a[c]+";";e.push(i)}}d.regex=e.join(b?"|":"");return d}CKEDITOR.plugins.add("entities",{afterInit:function(a){var b=
-a.config;if(a=(a=a.dataProcessor)&&a.htmlFilter){var d=[];!1!==b.basicEntities&&d.push("nbsp,gt,lt,amp");b.entities&&(d.length&&d.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"),
-b.entities_latin&&d.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),b.entities_greek&&d.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"),
-b.entities_additional&&d.push(b.entities_additional));var e=j(d.join(",")),f=e.regex?"["+e.regex+"]":"a^";delete e.regex;b.entities&&b.entities_processNumerical&&(f="[^ -~]|"+f);var f=RegExp(f,"g"),c=function(a){return b.entities_processNumerical=="force"||!e[a]?"&#"+a.charCodeAt(0)+";":e[a]},g=j("nbsp,gt,lt,amp,shy",!0),i=RegExp(g.regex,"g"),k=function(a){return g[a]};a.addRules({text:function(a){return a.replace(i,k).replace(f,c)}})}}})})();CKEDITOR.config.basicEntities=!0;
-CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0;CKEDITOR.config.entities_additional="#39";CKEDITOR.plugins.add("popup");
-CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(e,a,b,d){a=a||"80%";b=b||"70%";"string"==typeof a&&(1<a.length&&"%"==a.substr(a.length-1,1))&&(a=parseInt(window.screen.width*parseInt(a,10)/100,10));"string"==typeof b&&(1<b.length&&"%"==b.substr(b.length-1,1))&&(b=parseInt(window.screen.height*parseInt(b,10)/100,10));640>a&&(a=640);420>b&&(b=420);var f=parseInt((window.screen.height-b)/2,10),g=parseInt((window.screen.width-a)/2,10),d=(d||"location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes")+",width="+
-a+",height="+b+",top="+f+",left="+g,c=window.open("",null,d,!0);if(!c)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(c.moveTo(g,f),c.resizeTo(a,b)),c.focus(),c.location.href=e}catch(h){window.open(e,null,d,!0)}return!0}});(function(){function g(a,c){var d=[];if(c)for(var b in c)d.push(b+"="+encodeURIComponent(c[b]));else return a;return a+(-1!=a.indexOf("?")?"&":"?")+d.join("&")}function i(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function k(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+i(a.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",a=c.config["filebrowser"+i(a.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||"70%",
-b=this.filebrowser.params||{};b.CKEditor=c.name;b.CKEditorFuncNum=c._.filebrowserFn;b.langCode||(b.langCode=c.langCode);b=g(this.filebrowser.url,b);c.popup(b,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function l(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return!a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value||!a.getContentElement(this["for"][0],this["for"][1]).getAction()?!1:!0}function m(a,c,d){var b=d.params||{};
-b.CKEditor=a.name;b.CKEditorFuncNum=a._.filebrowserFn;b.langCode||(b.langCode=a.langCode);c.action=g(d.url,b);c.filebrowser=d}function j(a,c,d,b){var e,g;for(g in b)if(e=b[g],("hbox"==e.type||"vbox"==e.type||"fieldset"==e.type)&&j(a,c,d,e.children),e.filebrowser)if("string"==typeof e.filebrowser&&(e.filebrowser={action:"fileButton"==e.type?"QuickUpload":"Browse",target:e.filebrowser}),"Browse"==e.filebrowser.action){var f=e.filebrowser.url;void 0===f&&(f=a.config["filebrowser"+i(c)+"BrowseUrl"],void 0===
-f&&(f=a.config.filebrowserBrowseUrl));f&&(e.onClick=k,e.filebrowser.url=f,e.hidden=!1)}else if("QuickUpload"==e.filebrowser.action&&e["for"]&&(f=e.filebrowser.url,void 0===f&&(f=a.config["filebrowser"+i(c)+"UploadUrl"],void 0===f&&(f=a.config.filebrowserUploadUrl)),f)){var h=e.onClick;e.onClick=function(a){var b=a.sender;return h&&h.call(b,a)===false?false:l.call(b,a)};e.filebrowser.url=f;e.hidden=!1;m(a,d.getContents(e["for"][0]).get(e["for"][1]),e.filebrowser)}}function h(a,c,d){if(-1!==d.indexOf(";")){for(var d=
-d.split(";"),b=0;b<d.length;b++)if(h(a,c,d[b]))return!0;return!1}return(a=a.getContents(c).get(d).filebrowser)&&a.url}function n(a,c){var d=this._.filebrowserSe.getDialog(),b=this._.filebrowserSe["for"],e=this._.filebrowserSe.filebrowser.onSelect;b&&d.getContentElement(b[0],b[1]).reset();if(!("function"==typeof c&&!1===c.call(this._.filebrowserSe))&&!(e&&!1===e.call(this._.filebrowserSe,a,c))&&("string"==typeof c&&c&&alert(c),a&&(b=this._.filebrowserSe,d=b.getDialog(),b=b.filebrowser.target||null)))if(b=
-b.split(":"),e=d.getContentElement(b[0],b[1]))e.setValue(a),d.selectPage(b[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(n,a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){var c=a.data.definition,d,b;for(b in c.contents)if(d=c.contents[b])j(a.editor,a.data.name,c,d.elements),d.hidden&&d.filebrowser&&(d.hidden=!h(c,d.id,d.filebrowser))})})();(function(){function t(a){var e="left"==a?"pageXOffset":"pageYOffset";return e in g.$?g.$[e]:CKEDITOR.document.$.documentElement["left"==a?"scrollLeft":"scrollTop"]}function p(a){var e,f=a.config,p=f.floatSpaceDockedOffsetX||0,o=f.floatSpaceDockedOffsetY||0,u=f.floatSpacePinnedOffsetX||0,q=f.floatSpacePinnedOffsetY||0,i=function(c){function f(a,c,b){d.setStyle(c,s(b));d.setStyle("position",a)}function j(a){var c=n.getDocumentPosition();switch(a){case "top":f("absolute","top",c.y-l-o);break;case "pin":f("fixed",
-"top",q);break;case "bottom":f("absolute","top",c.y+(b.height||b.bottom-b.top)+o)}e=a}"focus"==c.name&&d.show();d.removeStyle("left");d.removeStyle("right");var n=a.editable(),k=d.getClientRect(),b=n.getClientRect(),l=k.height,r=t("left");if(e){"top"==e&&k.top<q?j("pin"):"pin"==e?b.top>o+l?j("top"):b.bottom-k.bottom<l&&j("bottom"):"bottom"==e&&(b.top>o+l?j("top"):b.bottom>2*l+q&&j("pin"));var c=g.getViewPaneSize(),h=c.width/2,h=0<b.left&&b.right<c.width&&b.width>k.width?"rtl"==a.config.contentsLangDirection?
-"right":"left":h-b.left>b.right-h?"left":"right",m;k.width>c.width?(h="left",m=0):(m="left"==h?0<b.left?b.left:0:b.right<c.width?c.width-b.right:0,m+k.width>c.width&&(h="left"==h?"right":"left",m=0));d.setStyle(h,s(("pin"==e?u:p)+m+("pin"==e?0:r)))}else e="pin",j("pin"),i(c)},f=CKEDITOR.document.getBody(),r={id:a.id,name:a.name,langDir:a.lang.dir,langCode:a.langCode},n=a.fire("uiSpace",{space:"top",html:""}).html;if(n){var d=f.append(CKEDITOR.dom.element.createFromHtml(v.output(CKEDITOR.tools.extend({topId:a.ui.spaceId("top"),
-content:n,style:"display:none;z-index:"+(a.config.baseFloatZIndex-1)},r))));d.unselectable();d.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(a){i(a);g.on("scroll",i);g.on("resize",i)});a.on("blur",function(){d.hide();g.removeListener("scroll",i);g.removeListener("resize",i)});a.on("destroy",function(){g.removeListener("scroll",i);g.removeListener("resize",i);d.clearCustomData();d.remove()});a.focusManager.hasFocus&&d.show();a.focusManager.add(d,
-1)}}var v=CKEDITOR.addTemplate("floatcontainer",'<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko?" ":"")+'" lang="{langCode}" role="application" style="{style}"><div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>');CKEDITOR.plugins.add("floatingspace",{init:function(a){a.on("contentDom",function(){p(a)})}});var g=CKEDITOR.document.getWindow(),
-s=CKEDITOR.tools.cssLength})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var e=CKEDITOR.addTemplate("panel-list",'<ul role="presentation" class="cke_panel_list">{items}</ul>'),f=CKEDITOR.addTemplate("panel-list-item",'<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')"  {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>'),g=CKEDITOR.addTemplate("panel-list-group",
-'<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>');CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){var b=b||{},c=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(c["aria-multiselectable"]=!0);!c.role&&(c.role="listbox");this.base.apply(this,arguments);c=this.keys;c[40]="next";
-c[9]="next";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(c[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=e.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a);delete this._.started}},getClick:function(){this._.click||(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);if(this.onClick)this.onClick(a,
-b)},this));return this._.click}},proto:{add:function(a,b,c){var d=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=d;a={id:d,val:a,onclick:CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:c||a,text:b||a};this._.pendingList.push(f.output(a))},startGroup:function(a){this._.close();var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(g.output({id:b,label:a}))},commit:function(){this._.close();
-this.element.appendHtml(this._.pendingHtml.join(""));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display","none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display","none")},showAll:function(){var a=this._.items,b=
-this._.groups,c=this.element.getDocument(),d;for(d in a)c.getById(a[d]).setStyle("display","");for(var e in b)a=c.getById(b[e]),d=a.getNext(),a.setStyle("display",""),d&&"ul"==d.getName()&&d.setStyle("display","")},mark:function(a){this.multiSelect||this.unmarkAll();var a=this._.items[a],b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)},unmark:function(a){var b=this.element.getDocument(),
-a=this._.items[a],c=b.getById(a);c.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(c)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),c;for(c in a){var d=a[c];b.getById(d).removeClass("cke_selected");b.getById(d+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},focus:function(a){this._.focusIndex=
--1;if(a){for(var b=this.element.getDocument().getById(this._.items[a]).getFirst(),a=this.element.getElementsByTag("a"),c,d=-1;c=a.getItem(++d);)if(c.equals(b)){this._.focusIndex=d;break}setTimeout(function(){b.focus()},0)}}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(c){c.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}});
-(function(){var c='<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" hidefocus=true title="{title}" tabindex="-1"'+(CKEDITOR.env.gecko&&10900<=CKEDITOR.env.version&&!CKEDITOR.env.hc?"":'" href="javascript:void(\'{titleJs}\')"')+' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"';if(CKEDITOR.env.opera||CKEDITOR.env.gecko&&CKEDITOR.env.mac)c+=' onkeypress="return false;"';
-CKEDITOR.env.gecko&&(c+=' onblur="this.style.cssText = this.style.cssText;"');var c=c+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onmousedown="return CKEDITOR.tools.callFunction({mousedownFn},event);"  onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">'+
-(CKEDITOR.env.hc?"&#9660;":CKEDITOR.env.air?"&nbsp;":"")+"</span></span></a></span>"),h=CKEDITOR.addTemplate("combo",c);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";a.block={multiSelect:a.multiSelect,
-attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}},proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join("")},render:function(a,b){function j(){var d=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;this.setState(a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:d);this.setValue("")}var c=CKEDITOR.env,g="cke_"+this.id,e=CKEDITOR.tools.addFunction(function(b){i&&(a.unlockSelection(1),i=0);d.execute(b)},this),f=this,d={id:g,combo:this,
-focus:function(){CKEDITOR.document.getById(g).getChild(1).focus()},execute:function(d){var b=f._;if(b.state!=CKEDITOR.TRISTATE_DISABLED)if(f.createPanel(a),b.on)b.panel.hide();else{f.commit();var c=f.getValue();c?b.list.mark(c):b.list.unmarkAll();b.panel.showBlock(f.id,new CKEDITOR.dom.element(d),4)}},clickFn:e};a.on("mode",j,this);!this.readOnly&&a.on("readOnly",j,this);var k=CKEDITOR.tools.addFunction(function(a,b){var a=new CKEDITOR.dom.event(a),c=a.getKeystroke();switch(c){case 13:case 32:case 40:CKEDITOR.tools.callFunction(e,
-b);break;default:d.onkey(d,c)}a.preventDefault()}),l=CKEDITOR.tools.addFunction(function(){d.onfocus&&d.onfocus()}),i=0,m=CKEDITOR.tools.addFunction(function(){if(CKEDITOR.env.opera){var b=a.editable();b.isInline()&&b.hasFocus&&(a.lockSelection(),i=1)}});d.keyDownFn=k;c={id:g,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:c.gecko&&10900<=c.version&&!c.hc?"":(this.title||"").replace("'",""),keydownFn:k,mousedownFn:m,focusFn:l,clickFn:e};h.output(c,b);
-if(this.onRender)this.onRender();return d},createPanel:function(a){if(!this._.panel){var b=this._.panelDefinition,c=this._.panelDefinition.block,h=b.parent||CKEDITOR.document.getBody(),g="cke_combopanel__"+this.name,e=new CKEDITOR.ui.floatPanel(a,h,b),f=e.addListBlock(this.id,c),d=this;e.onShow=function(){this.element.addClass(g);d.setState(CKEDITOR.TRISTATE_ON);f.focus(!f.multiSelect&&d.getValue());d._.on=1;d.editorFocus&&a.focus();if(d.onOpen)d.onOpen()};e.onHide=function(b){this.element.removeClass(g);
-d.setState(d.modes&&d.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);d._.on=0;if(!b&&d.onClose)d.onClose()};e.onEscape=function(){e.hide(1)};f.onClick=function(a,b){d.onClick&&d.onClick.call(d,a,b);e.hide()};this._.panel=e;this._.list=f;e.getBlock(this.id).onHide=function(){d._.on=0;d.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,b){this._.value=a;var c=this.document.getById("cke_"+this.id+"_text");c&&(!a&&!b?(b=this.label,c.addClass("cke_combo_inlinelabel")):
-c.removeClass("cke_combo_inlinelabel"),c.setText("undefined"!=typeof b?b:a))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},showAll:function(){this._.list.showAll()},add:function(a,b,c){this._.items[a]=c||a;this._.list.add(a,b,c)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){this._.committed||(this._.list.commit(),
-this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(a){if(this._.state!=a){var b=this.document.getById("cke_"+this.id);b.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled");this._.state=a}},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))}},
-statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b)}})();CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(a){if(!a.blockless){for(var g=a.config,c=a.lang.format,j=g.format_tags.split(";"),d={},h=0;h<j.length;h++){var i=j[h];d[i]=new CKEDITOR.style(g["format_"+i]);d[i]._.enterMode=a.config.enterMode}a.ui.addRichCombo("Format",{label:c.label,title:c.panelTitle,toolbar:"styles,20",panel:{css:[CKEDITOR.skin.getPath("editor")].concat(g.contentsCss),multiSelect:!1,attributes:{"aria-label":c.panelTitle}},init:function(){this.startGroup(c.panelTitle);
-for(var a in d){var e=c["tag_"+a];this.add(a,d[a].buildPreview(e),e)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=d[b],e=a.elementPath();a[b.checkActive(e)?"removeStyle":"applyStyle"](b);setTimeout(function(){a.fire("saveSnapshot")},0)},onRender:function(){a.on("selectionChange",function(b){var e=this.getValue(),b=b.data.path,c=!a.readOnly&&b.isContextFor("p");this[c?"enable":"disable"]();if(c){for(var f in d)if(d[f].checkActive(b)){f!=e&&this.setValue(f,a.lang.format["tag_"+f]);return}this.setValue("")}},
-this)}})}}});CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div";CKEDITOR.config.format_p={element:"p"};CKEDITOR.config.format_div={element:"div"};CKEDITOR.config.format_pre={element:"pre"};CKEDITOR.config.format_address={element:"address"};CKEDITOR.config.format_h1={element:"h1"};CKEDITOR.config.format_h2={element:"h2"};CKEDITOR.config.format_h3={element:"h3"};CKEDITOR.config.format_h4={element:"h4"};CKEDITOR.config.format_h5={element:"h5"};CKEDITOR.config.format_h6={element:"h6"};CKEDITOR.plugins.add("htmlwriter",{init:function(b){var a=new CKEDITOR.htmlWriter;a.forceSimpleAmpersand=b.config.forceSimpleAmpersand;a.indentationChars=b.config.dataIndentationChars||"\t";b.dataProcessor.writer=a}});
-CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" />";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,a;for(a in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(a,{indent:!b[a]["#"],breakBeforeOpen:1,breakBeforeClose:!b[a]["#"],breakAfterClose:1,needsSpace:a in
-b.$block&&!(a in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var a=this._.rules[b];this._.afterCloser&&(a&&a.needsSpace&&this._.needsSpace)&&this._.output.push("\n");this._.indent?this.indentation():a&&a.breakBeforeOpen&&(this.lineBreak(),this.indentation());this._.output.push("<",b);this._.afterCloser=0},
-openTagClose:function(b,a){var c=this._.rules[b];a?(this._.output.push(this.selfClosingEnd),c&&c.breakAfterClose&&(this._.needsSpace=c.needsSpace)):(this._.output.push(">"),c&&c.indent&&(this._.indentation+=this.indentationChars));c&&c.breakAfterOpen&&this.lineBreak();"pre"==b&&(this._.inPre=1)},attribute:function(b,a){"string"==typeof a&&(this.forceSimpleAmpersand&&(a=a.replace(/&amp;/g,"&")),a=CKEDITOR.tools.htmlEncodeAttr(a));this._.output.push(" ",b,'="',a,'"')},closeTag:function(b){var a=this._.rules[b];
-a&&a.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():a&&a.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("</",b,">");"pre"==b&&(this._.inPre=0);a&&a.breakAfterClose&&(this.lineBreak(),this._.needsSpace=a.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b)));this._.output.push(b)},comment:function(b){this._.indent&&this.indentation();
-this._.output.push("<\!--",b,"--\>")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0},setRules:function(b,a){var c=this._.rules[b];c?CKEDITOR.tools.extend(c,a,!0):this._.rules[b]=a}}});(function(){var b={canUndo:!1,exec:function(a){var b=a.document.createElement("hr");a.insertElement(b)}};CKEDITOR.plugins.add("horizontalrule",{init:function(a){a.blockless||(a.addCommand("horizontalrule",b),a.ui.addButton&&a.ui.addButton("HorizontalRule",{label:a.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"}))}})})();(function(){function n(a){var c=this.editor,d=a.document,b=d.body;(a=d.getElementById("cke_actscrpt"))&&a.parentNode.removeChild(a);(a=d.getElementById("cke_shimscrpt"))&&a.parentNode.removeChild(a);CKEDITOR.env.gecko&&(b.contentEditable=!1,2E4>CKEDITOR.env.version&&(b.innerHTML=b.innerHTML.replace(/^.*<\!-- cke-content-start --\>/,""),setTimeout(function(){var a=new CKEDITOR.dom.range(new CKEDITOR.dom.document(d));a.setStart(new CKEDITOR.dom.node(b),0);c.getSelection().selectRanges([a])},0)));b.contentEditable=
-!0;CKEDITOR.env.ie&&(b.hideFocus=!0,b.disabled=!0,b.removeAttribute("disabled"));delete this._.isLoadingData;this.$=b;d=new CKEDITOR.dom.document(d);this.setup();CKEDITOR.env.ie&&(d.getDocumentElement().addClass(d.$.compatMode),c.config.enterMode!=CKEDITOR.ENTER_P&&d.on("selectionchange",function(){var a=d.getBody(),b=c.getSelection(),e=b&&b.getRanges()[0];e&&(a.getHtml().match(/^<p>&nbsp;<\/p>$/i)&&e.startContainer.equals(a))&&setTimeout(function(){e=c.getSelection().getRanges()[0];if(!e.startContainer.equals("body")){a.getFirst().remove(1);
-e.moveToElementEditEnd(a);e.select()}},0)}));CKEDITOR.env.gecko&&CKEDITOR.tools.setTimeout(o,0,this,c);try{c.document.$.execCommand("2D-position",!1,!0)}catch(e){}try{c.document.$.execCommand("enableInlineTableEditing",!1,!c.config.disableNativeTableHandles)}catch(f){}if(c.config.disableObjectResizing)try{this.getDocument().$.execCommand("enableObjectResizing",!1,!1)}catch(g){this.attachListener(this,CKEDITOR.env.ie?"resizestart":"resize",function(a){a.data.preventDefault()})}(CKEDITOR.env.gecko||
-CKEDITOR.env.ie&&"CSS1Compat"==c.document.$.compatMode)&&this.attachListener(this,"keydown",function(a){var b=a.data.getKeystroke();if(b==33||b==34)if(CKEDITOR.env.ie)setTimeout(function(){c.getSelection().scrollIntoView()},0);else if(c.window.$.innerHeight>this.$.offsetHeight){var d=c.createRange();d[b==33?"moveToElementEditStart":"moveToElementEditEnd"](this);d.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(d,"blur",function(){try{d.$.selection.empty()}catch(a){}});c.document.getElementsByTag("title").getItem(0).data("cke-title",
-c.document.$.title);CKEDITOR.env.ie&&(c.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){c.fire("contentDom");if(this._.isPendingFocus){c.focus();this._.isPendingFocus=false}setTimeout(function(){c.fire("dataReady")},0);CKEDITOR.env.ie&&setTimeout(function(){if(c.document){var a=c.document.$.body;a.runtimeStyle.marginBottom="0px";a.runtimeStyle.marginBottom=""}},1E3)},0,this)}function p(a){a.checkDirty()||setTimeout(function(){a.resetDirty()},0)}function o(a){if(!a.readOnly){var c=
-a.window,d=a.document,b=d.getBody(),e=b.getFirst(),f=b.getChildren().count();if(!f||1==f&&e.type==CKEDITOR.NODE_ELEMENT&&e.hasAttribute("_moz_editor_bogus_node")){p(a);var e=CKEDITOR.document,g=e.getDocumentElement(),h=g.$.scrollTop,i=g.$.scrollLeft,j=d.$.createEvent("KeyEvents");j.initKeyEvent("keypress",!0,!0,c.$,!1,!1,!1,!1,0,32);d.$.dispatchEvent(j);(h!=g.$.scrollTop||i!=g.$.scrollLeft)&&e.getWindow().$.scrollTo(i,h);f&&b.getFirst().remove();d.getBody().appendBogus();a=a.createRange();a.setStartAt(b,
-CKEDITOR.POSITION_AFTER_START);a.select()}}}function q(){var a=[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable=false]{min-height:0 !important}");var c=[],d;for(d in CKEDITOR.dtd.$removeEmpty)c.push("html.CSS1Compat "+d+"[contenteditable=false]");a.push(c.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");
-a.push("img,input,textarea{cursor:default}");return a.join("\n")}CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.addMode("wysiwyg",function(c){function d(d){d&&d.removeListener();a.editable(new k(a,b.$.contentWindow.document.body));a.setData(a.getData(1),c)}var b=CKEDITOR.document.createElement("iframe");b.setStyles({width:"100%",height:"100%"});b.addClass("cke_wysiwyg_frame cke_reset");var e=a.ui.space("contents");e.append(b);var f="document.open();"+(l?'document.domain="'+document.domain+
-'";':"")+"document.close();",f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent(f)+"}())":"",g=CKEDITOR.env.ie||CKEDITOR.env.gecko;if(g)b.on("load",d);var h=[a.lang.editor,a.name].join(),i=a.lang.common.editorHelp;CKEDITOR.env.ie&&(h+=", "+i);var j=CKEDITOR.tools.getNextId(),m=CKEDITOR.dom.element.createFromHtml('<span id="'+j+'" class="cke_voice_label">'+i+"</span>");e.append(m,1);a.on("beforeModeUnload",function(a){a.removeListener();m.remove()});
-b.setAttributes({frameBorder:0,"aria-describedby":j,title:h,src:f,tabIndex:a.tabIndex,allowTransparency:"true"});!g&&d();CKEDITOR.env.webkit&&(f=function(){e.setStyle("width","100%");b.hide();b.setSize("width",e.getSize("width"));e.removeStyle("width");b.show()},b.setCustomData("onResize",f),CKEDITOR.document.getWindow().on("resize",f));a.fire("ariaWidget",b)})}});var l=CKEDITOR.env.isCustomDomain(),k=CKEDITOR.tools.createClass({$:function(a){this.base.apply(this,arguments);this._.frameLoadedHandler=
-CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(n,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{setData:function(a,c){var d=this.editor;if(c)this.setHtml(a);else{this._.isLoadingData=!0;d._.dataStore={id:1};var b=d.config,e=b.fullPage,f=b.docType,g=CKEDITOR.tools.buildStyleHtml(q()).replace(/<style>/,'<style data-cke-temp="1">');e||(g+=CKEDITOR.tools.buildStyleHtml(d.config.contentsCss));var h=b.baseHref?'<base href="'+
-b.baseHref+'" data-cke-temp="1" />':"";e&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){d.docType=f=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){d.xmlDeclaration=a;return""}));d.dataProcessor&&(a=d.dataProcessor.toHtml(a));e?(/<body[\s|>]/.test(a)||(a="<body>"+a),/<html[\s|>]/.test(a)||(a="<html>"+a+"</html>"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$&<title></title>")):a=a.replace(/<html[^>]*>/,"$&<head><title></title></head>"),h&&(a=a.replace(/<head>/,"$&"+
-h)),a=a.replace(/<\/head\s*>/,g+"$&"),a=f+a):a=b.docType+'<html dir="'+b.contentsLangDirection+'" lang="'+(b.contentsLanguage||d.langCode)+'"><head><title>'+this._.docTitle+"</title>"+h+g+"</head><body"+(b.bodyId?' id="'+b.bodyId+'"':"")+(b.bodyClass?' class="'+b.bodyClass+'"':"")+">"+a+"</body></html>";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'<body contenteditable="true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$&<\!-- cke-content-start --\>")));b='<script id="cke_actscrpt" type="text/javascript"'+
-(CKEDITOR.env.ie?' defer="defer" ':"")+">"+(l?'document.domain="'+document.domain+'";':"")+"var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+",window);wasLoaded=1;}"+(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"<\/script>";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(b+='<script id="cke_shimscrpt">(function(){var e="abbr,article,aside,audio,bdi,canvas,data,datalist,details,figcaption,figure,footer,header,hgroup,mark,meter,nav,output,progress,section,summary,time,video".split(","),i=e.length;while(i--){document.createElement(e[i])}})()<\/script>');
-a=a.replace(/(?=\s*<\/(:?head)>)/,b);this.clearCustomData();this.clearListeners();d.fire("contentDomUnload");var i=this.getDocument();try{i.write(a)}catch(j){setTimeout(function(){i.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();var a=this.editor,c=a.config.fullPage,d=c&&a.docType,b=c&&a.xmlDeclaration,e=this.getDocument(),c=c?e.getDocumentElement().getOuterHtml():e.getBody().getHtml();CKEDITOR.env.gecko&&(c=c.replace(/<br>(?=\s*(:?$|<\/body>))/,""));a.dataProcessor&&(c=a.dataProcessor.toDataFormat(c));
-b&&(c=b+"\n"+c);d&&(c=d+"\n"+c);return c},focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:k.baseProto.focus.call(this)},detach:function(){var a=this.editor,c=a.document,d=a.window.getFrame();k.baseProto.detach.call(this);this.clearCustomData();c.getDocumentElement().clearCustomData();d.clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);(c=d.removeCustomData("onResize"))&&c.removeListener();a.fire("contentDomUnload");d.remove()}}});CKEDITOR.env.gecko&&function(){var a=
-document.body;if(a){var c=a.getAttribute("onpageshow");a.setAttribute("onpageshow",(c?c+";":"")+'event.persisted&&(function(){var x=CKEDITOR.instances,d,i;for(i in x){d=x[i].document;if(d){d.$.designMode="off";d.$.designMode="on";}}})();')}else window.addEventListener("load",arguments.callee,!1)}()})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;CKEDITOR.config.disableNativeSpellChecker=!0;CKEDITOR.config.contentsCss=CKEDITOR.basePath+"contents.css";(function(){function e(b,a){a||(a=b.getSelection().getSelectedElement());if(a&&a.is("img")&&!a.data("cke-realelement")&&!a.isReadOnly())return a}function f(b){var a=b.getStyle("float");if("inherit"==a||"none"==a)a=0;a||(a=b.getAttribute("align"));return a}CKEDITOR.plugins.add("image",{requires:"dialog",init:function(b){CKEDITOR.dialog.add("image",this.path+"dialogs/image.js");b.addCommand("image",new CKEDITOR.dialogCommand("image"));b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,
-command:"image",toolbar:"insert,10"});b.on("doubleclick",function(a){var b=a.data.element;b.is("img")&&(!b.data("cke-realelement")&&!b.isReadOnly())&&(a.data.dialog="image")});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(a){if(e(b,a))return{image:CKEDITOR.TRISTATE_OFF}})},afterInit:function(b){function a(a){var d=b.getCommand("justify"+a);if(d){if("left"==a||"right"==a)d.on("exec",function(d){var c=
-e(b),g;c&&(g=f(c),g==a?(c.removeStyle("float"),a==f(c)&&c.removeAttribute("align")):c.setStyle("float",a),d.cancel())});d.on("refresh",function(d){var c=e(b);c&&(c=f(c),this.setState(c==a?CKEDITOR.TRISTATE_ON:"right"==a||"left"==a?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),d.cancel())})}}a("left");a("right");a("center");a("block")}})})();CKEDITOR.config.image_removeLinkByEmptyURL=!0;(function(){function g(a,b){var c=j.exec(a),d=j.exec(b);if(c){if(!c[2]&&"px"==d[2])return d[1];if("px"==c[2]&&!d[2])return d[1]+"px"}return b}var i=CKEDITOR.htmlParser.cssStyle,h=CKEDITOR.tools.cssLength,j=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i,l={elements:{$:function(a){var b=a.attributes;if((b=(b=(b=b&&b["data-cke-realelement"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(b)))&&b.children[0])&&a.attributes["data-cke-resizable"]){var c=(new i(a)).rules,a=b.attributes,d=c.width,c=
-c.height;d&&(a.width=g(a.width,d));c&&(a.height=g(a.height,c))}return b}}},k=CKEDITOR.plugins.add("fakeobjects",{afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(l)}});CKEDITOR.editor.prototype.createFakeElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,b={"class":b,"data-cke-realelement":encodeURIComponent(a.getOuterHtml()),"data-cke-real-node-type":a.type,alt:e,title:e,align:a.getAttribute("align")||""};CKEDITOR.env.hc||(b.src=CKEDITOR.getUrl(k.path+
-"images/spacer.gif"));c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,c=new i,d=a.getAttribute("width"),a=a.getAttribute("height"),d&&(c.rules.width=h(d)),a&&(c.rules.height=h(a)),c.populate(b));return this.document.createElement("img",{attributes:b})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,f;f=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(f);f=f.getHtml();b={"class":b,"data-cke-realelement":encodeURIComponent(f),
-"data-cke-real-node-type":a.type,alt:e,title:e,align:a.attributes.align||""};CKEDITOR.env.hc||(b.src=CKEDITOR.getUrl(k.path+"images/spacer.gif"));c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,d=a.attributes,a=new i,c=d.width,d=d.height,void 0!=c&&(a.rules.width=h(c)),void 0!=d&&(a.rules.height=h(d)),a.populate(b));return new CKEDITOR.htmlParser.element("img",b)};CKEDITOR.editor.prototype.restoreRealElement=function(a){if(a.data("cke-real-node-type")!=CKEDITOR.NODE_ELEMENT)return null;
-var b=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(a.data("cke-realelement")),this.document);if(a.data("cke-resizable")){var c=a.getStyle("width"),a=a.getStyle("height");c&&b.setAttribute("width",g(b.getAttribute("width"),c));a&&b.setAttribute("height",g(b.getAttribute("height"),a))}return b}})();CKEDITOR.plugins.add("link",{requires:"dialog,fakeobjects",onLoad:function(){function b(b){return c.replace(/%1/g,"rtl"==b?"right":"left").replace(/%2/g,"cke_contents_"+b)}var a="background:url("+CKEDITOR.getUrl(this.path+"images/anchor.png")+") no-repeat %1 center;border:1px dotted #00f;",c=".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{"+a+"padding-%1:18px;cursor:auto;}"+(CKEDITOR.env.ie?"a.cke_anchor_empty{display:inline-block;}":"")+".%2 img.cke_anchor{"+
-a+"width:16px;min-height:15px;height:1.15em;vertical-align:"+(CKEDITOR.env.opera?"middle":"text-bottom")+";}";CKEDITOR.addCss(b("ltr")+b("rtl"))},init:function(b){b.addCommand("link",new CKEDITOR.dialogCommand("link"));b.addCommand("anchor",new CKEDITOR.dialogCommand("anchor"));b.addCommand("unlink",new CKEDITOR.unlinkCommand);b.addCommand("removeAnchor",new CKEDITOR.removeAnchorCommand);b.setKeystroke(CKEDITOR.CTRL+76,"link");b.ui.addButton&&(b.ui.addButton("Link",{label:b.lang.link.toolbar,command:"link",
-toolbar:"links,10"}),b.ui.addButton("Unlink",{label:b.lang.link.unlink,command:"unlink",toolbar:"links,20"}),b.ui.addButton("Anchor",{label:b.lang.link.anchor.toolbar,command:"anchor",toolbar:"links,30"}));CKEDITOR.dialog.add("link",this.path+"dialogs/link.js");CKEDITOR.dialog.add("anchor",this.path+"dialogs/anchor.js");b.on("doubleclick",function(a){var c=CKEDITOR.plugins.link.getSelectedLink(b)||a.data.element;if(!c.isReadOnly())if(c.is("a")){a.data.dialog=c.getAttribute("name")&&(!c.getAttribute("href")||
-!c.getChildCount())?"anchor":"link";b.getSelection().selectElement(c)}else if(CKEDITOR.plugins.link.tryRestoreFakeAnchor(b,c))a.data.dialog="anchor"});b.addMenuItems&&b.addMenuItems({anchor:{label:b.lang.link.anchor.menu,command:"anchor",group:"anchor",order:1},removeAnchor:{label:b.lang.link.anchor.remove,command:"removeAnchor",group:"anchor",order:5},link:{label:b.lang.link.menu,command:"link",group:"link",order:1},unlink:{label:b.lang.link.unlink,command:"unlink",group:"link",order:5}});b.contextMenu&&
-b.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(b,a);if(!a&&!(a=CKEDITOR.plugins.link.getSelectedLink(b)))return null;var c={};a.getAttribute("href")&&a.getChildCount()&&(c={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});if(a&&a.hasAttribute("name"))c.anchor=c.removeAnchor=CKEDITOR.TRISTATE_OFF;return c})},afterInit:function(b){var a=b.dataProcessor,c=a&&a.dataFilter,a=a&&a.htmlFilter,d=b._.elementsPath&&b._.elementsPath.filters;
-c&&c.addRules({elements:{a:function(a){var c=a.attributes;if(!c.name)return null;var d=!a.children.length;if(CKEDITOR.plugins.link.synAnchorSelector){var a=d?"cke_anchor_empty":"cke_anchor",e=c["class"];if(c.name&&(!e||0>e.indexOf(a)))c["class"]=(e||"")+" "+a;d&&CKEDITOR.plugins.link.emptyAnchorFix&&(c.contenteditable="false",c["data-cke-editable"]=1)}else if(CKEDITOR.plugins.link.fakeAnchor&&d)return b.createFakeParserElement(a,"cke_anchor","anchor");return null}}});CKEDITOR.plugins.link.emptyAnchorFix&&
-a&&a.addRules({elements:{a:function(a){delete a.attributes.contenteditable}}});d&&d.push(function(a,c){if("a"==c&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(b,a)||a.getAttribute("name")&&(!a.getAttribute("href")||!a.getChildCount())))return"anchor"})}});
-CKEDITOR.plugins.link={getSelectedLink:function(b){var a=b.getSelection(),c=a.getSelectedElement();return c&&c.is("a")?c:(a=a.getRanges(!0)[0])?(a.shrink(CKEDITOR.SHRINK_TEXT),b.elementPath(a.getCommonAncestor()).contains("a",1)):null},fakeAnchor:CKEDITOR.env.opera||CKEDITOR.env.webkit,synAnchorSelector:CKEDITOR.env.ie,emptyAnchorFix:CKEDITOR.env.ie&&8>CKEDITOR.env.version,tryRestoreFakeAnchor:function(b,a){if(a&&a.data("cke-real-element-type")&&"anchor"==a.data("cke-real-element-type")){var c=b.restoreRealElement(a);
-if(c.data("cke-saved-name"))return c}}};CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype={exec:function(b){var a=new CKEDITOR.style({element:"a",type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1});b.removeStyle(a)},refresh:function(b,a){var c=a.lastElement&&a.lastElement.getAscendant("a",!0);c&&"a"==c.getName()&&c.getAttribute("href")&&c.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1};
-CKEDITOR.removeAnchorCommand=function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(b){var a=b.getSelection(),c=a.createBookmarks(),d;if(a&&(d=a.getSelectedElement())&&(CKEDITOR.plugins.link.fakeAnchor&&!d.getChildCount()?CKEDITOR.plugins.link.tryRestoreFakeAnchor(b,d):d.is("a")))d.remove(1);else if(d=CKEDITOR.plugins.link.getSelectedLink(b))d.hasAttribute("href")?(d.removeAttributes({name:1,"data-cke-saved-name":1}),d.removeClass("cke_anchor")):d.remove(1);a.selectBookmarks(c)}};
-CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:!0,linkShowTargetTab:!0});(function(){function N(a,b,d){return l(b)&&l(d)&&d.equals(b.getNext(function(a){return!(y(a)||z(a)||o(a))}))}function t(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function H(a){var b=a.element,d;return b&&l(b)?(d=b.getAscendant(a.triggers,!0))&&!d.contains(a.editable)&&!d.equals(a.editable)?d:null:null}function ba(a,b,d){m(a,b);m(a,d);a=b.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function q(a,b,d){return b=b[d?"getPrevious":"getNext"](function(e){return e&&e.type==
-CKEDITOR.NODE_TEXT&&!y(e)||l(e)&&!o(e)&&!u(a,e)})}function ca(a){var b=a.doc,d=A('<span contenteditable="false" style="'+I+"position:absolute;border-top:1px dashed "+a.boxColor+'"></span>',b);p(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[p(A('<span title="'+a.editor.lang.magicline.title+'" contenteditable="false">&#8629;</span>',b),{base:I+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+this.path+"images/icon.png) center no-repeat "+
-a.boxColor+";cursor:pointer;"+(n.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":""),looks:["top:-8px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px",1),"top:-17px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px 2px 0px 0px",1),"top:-1px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","0px 0px 2px 2px",1)]}),p(A(O,b),{base:P+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),
-p(A(O,b),{base:P+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px","border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){m(a,this);var e=a.holdDistance,b=this.size;return b&&a.mouse.y>b.top-e&&a.mouse.y<b.bottom+e&&a.mouse.x>b.left-e&&a.mouse.x<b.right+e?!0:!1},place:function(){var e=a.view,b=a.editable,c=a.trigger,d=c.upper,i=c.lower,h=d||i,
-k=h.getParent(),g={};this.trigger=c;d&&m(a,d,!0);i&&m(a,i,!0);m(a,k,!0);a.inInlineMode&&B(a,!0);k.equals(b)?(g.left=e.scroll.x,g.right=-e.scroll.x,g.width=""):(g.left=h.size.left-h.size.margin.left+e.scroll.x-(a.inInlineMode?e.editable.left+e.editable.border.left:0),g.width=h.size.outerWidth+h.size.margin.left+h.size.margin.right+e.scroll.x,g.right="");d&&i?g.top=d.size.margin.bottom===i.size.margin.top?0|d.size.bottom+d.size.margin.bottom/2:d.size.margin.bottom<i.size.margin.top?d.size.bottom+d.size.margin.bottom:
-d.size.bottom+d.size.margin.bottom-i.size.margin.top:d?i||(g.top=d.size.bottom+d.size.margin.bottom):g.top=i.size.top-i.size.margin.top;c.is(w)||g.top>e.scroll.y-15&&g.top<e.scroll.y+5?(g.top=a.inInlineMode?0:e.scroll.y,this.look(w)):c.is(x)||g.top>e.pane.bottom-5&&g.top<e.pane.bottom+15?(g.top=a.inInlineMode?e.editable.height+e.editable.padding.top+e.editable.padding.bottom:e.pane.bottom-1,this.look(x)):(a.inInlineMode&&(g.top-=e.editable.top+e.editable.border.top),this.look(r));a.inInlineMode&&
-(g.top--,g.top+=e.editable.scroll.top,g.left+=e.editable.scroll.left);for(var Q in g)g[Q]=CKEDITOR.tools.cssLength(g[Q]);this.setStyles(g)},look:function(a){if(this.oldLook!=a){for(var d=this.lineChildren.length,c;d--;)(c=this.lineChildren[d]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new J("span",a.doc)});for(b=d.lineChildren.length;b--;)d.lineChildren[b].appendTo(d);d.look(r);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();K(a,function(d){var c=
-a.line.trigger;d[c.is(C)?"insertBefore":"insertAfter"](c.is(C)?c.lower:c.upper)},!0);a.editor.focus();!n.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();b.data.preventDefault(!0)});d.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=d}function K(a,b,d){var e=new CKEDITOR.dom.range(a.doc),f=a.editor,c;n.ie&&a.enterMode==CKEDITOR.ENTER_BR?c=a.doc.createText(D):(c=new J(a.enterBehavior,a.doc),a.enterMode!=CKEDITOR.ENTER_BR&&a.doc.createText(D).appendTo(c));d&&f.fire("saveSnapshot");
-b(c);e.moveToPosition(c,CKEDITOR.POSITION_AFTER_START);f.getSelection().selectRanges([e]);a.hotNode=c;d&&f.fire("saveSnapshot")}function R(a,b){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function d(d){var f=n.ie&&9>n.version?" ":D,c=a.hotNode&&a.hotNode.getText()==f&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!b;K(a,function(f){c&&a.hotNode&&a.hotNode.remove();f[b?"insertAfter":"insertBefore"](d);f.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!b});a.lastCmdDirection=
-!!b});!n.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();a.line.detach()}return function(e){e=e.getSelection().getStartElement();if((e=e.getAscendant(S,1))&&!e.equals(a.editable)&&!e.contains(a.editable)){a.element=e;var f=q(a,e,!b),c;l(f)&&f.is(a.triggers)&&f.is(da)&&(!q(a,f,!b)||(c=q(a,f,!b))&&l(c)&&c.is(a.triggers))?d(f):(c=H(a,e),l(c)&&(q(a,c,!b)?(e=q(a,c,!b))&&(l(e)&&e.is(a.triggers))&&d(c):d(c)))}}}()}}function u(a,b){if(!b||!(b.type==CKEDITOR.NODE_ELEMENT&&b.$))return!1;var d=
-a.line;return d.wrap.equals(b)||d.wrap.contains(b)}function l(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function o(a){if(!l(a))return!1;var b;if(!(b=T(a)))l(a)?(b={left:1,right:1,center:1},b=!(!b[a.getComputedStyle("float")]&&!b[a.getAttribute("align")])):b=!1;return b}function T(a){return!!{absolute:1,fixed:1,relative:1}[a.getComputedStyle("position")]}function E(a,b){return l(b)?b.is(a.triggers):null}function ea(a,b,d){b=b[d?"getLast":"getFirst"](function(d){return a.isRelevant(d)&&!d.is(fa)});
-if(!b)return!1;m(a,b);return d?b.size.top>a.mouse.y:b.size.bottom<a.mouse.y}function U(a){var b=a.editable,d=a.mouse,e=a.view,f=a.triggerOffset;B(a);var c=d.y>(a.inInlineMode?e.editable.top+e.editable.height/2:Math.min(e.editable.height,e.pane.height)/2),b=b[c?"getLast":"getFirst"](function(a){return!(y(a)||z(a))});if(!b)return null;u(a,b)&&(b=a.line.wrap[c?"getPrevious":"getNext"](function(a){return!(y(a)||z(a))}));if(!l(b)||o(b)||!E(a,b))return null;m(a,b);return!c&&0<=b.size.top&&0<d.y&&d.y<b.size.top+
-f?(a=a.inInlineMode||0===e.scroll.y?w:r,new t([null,b,C,F,a])):c&&b.size.bottom<=e.pane.height&&d.y>b.size.bottom-f&&d.y<e.pane.height?(a=a.inInlineMode||b.size.bottom>e.pane.height-f&&b.size.bottom<e.pane.height?x:r,new t([b,null,V,F,a])):null}function W(a){var b=a.mouse,d=a.view,e=a.triggerOffset,f=H(a);if(!f)return null;m(a,f);var e=Math.min(e,0|f.size.outerHeight/2),c=[],j,i;if(b.y>f.size.top-1&&b.y<f.size.top+e)i=!1;else if(b.y>f.size.bottom-e&&b.y<f.size.bottom+1)i=!0;else return null;if(o(f)||
-ea(a,f,i)||f.getParent().is(X))return null;var h=q(a,f,!i);if(h){if(h&&h.type==CKEDITOR.NODE_TEXT)return null;if(l(h)){if(o(h)||!E(a,h)||h.getParent().is(X))return null;c=[h,f][i?"reverse":"concat"]().concat([L,F])}}else f.equals(a.editable[i?"getLast":"getFirst"](a.isRelevant))?(B(a),i&&b.y>f.size.bottom-e&&b.y<d.pane.height&&f.size.bottom>d.pane.height-e&&f.size.bottom<d.pane.height?j=x:0<b.y&&b.y<f.size.top+e&&(j=w)):j=r,c=[null,f][i?"reverse":"concat"]().concat([i?V:C,F,j,f.equals(a.editable[i?
-"getLast":"getFirst"](a.isRelevant))?i?x:w:r]);return 0 in c?new t(c):null}function M(a,b,d,e){for(var f=function(){var d=n.ie?b.$.currentStyle:a.win.$.getComputedStyle(b.$,"");return n.ie?function(a){return d[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){return d.getPropertyValue(a)}}(),c=b.getDocumentPosition(),j={},i={},h={},k={},g=s.length;g--;)j[s[g]]=parseInt(f("border-"+s[g]+"-width"),10)||0,h[s[g]]=parseInt(f("padding-"+s[g]),10)||0,i[s[g]]=parseInt(f("margin-"+s[g]),10)||0;(!d||e)&&
-G(a,e);k.top=c.y-(d?0:a.view.scroll.y);k.left=c.x-(d?0:a.view.scroll.x);k.outerWidth=b.$.offsetWidth;k.outerHeight=b.$.offsetHeight;k.height=k.outerHeight-(h.top+h.bottom+j.top+j.bottom);k.width=k.outerWidth-(h.left+h.right+j.left+j.right);k.bottom=k.top+k.outerHeight;k.right=k.left+k.outerWidth;a.inInlineMode&&(k.scroll={top:b.$.scrollTop,left:b.$.scrollLeft});return p({border:j,padding:h,margin:i,ignoreScroll:d},k,!0)}function m(a,b,d){if(!l(b))return b.size=null;if(b.size){if(b.size.ignoreScroll==
-d&&b.size.date>new Date-Y)return null}else b.size={};return p(b.size,M(a,b,d),{date:+new Date},!0)}function B(a,b){a.view.editable=M(a,a.editable,b,!0)}function G(a,b){a.view||(a.view={});var d=a.view;if(b||!(d&&d.date>new Date-Y)){var e=a.win,d=e.getScrollPosition(),e=e.getViewPaneSize();p(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-e.width,height:a.doc.$.documentElement.scrollHeight-e.height},pane:{width:e.width,height:e.height,bottom:e.height+d.y},date:+new Date},!0)}}
-function ga(a,b,d,e){for(var f=e,c=e,j=0,i=!1,h=!1,k=a.view.pane.height,g=a.mouse;g.y+j<k&&0<g.y-j;){i||(i=b(f,e));h||(h=b(c,e));!i&&0<g.y-j&&(f=d(a,{x:g.x,y:g.y-j}));!h&&g.y+j<k&&(c=d(a,{x:g.x,y:g.y+j}));if(i&&h)break;j+=2}return new t([f,c,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var b={};b[CKEDITOR.ENTER_BR]="br";b[CKEDITOR.ENTER_P]="p";b[CKEDITOR.ENTER_DIV]="div";var d=a.config,e=d.magicline_triggerOffset||30,f=d.enterMode,c={editor:a,enterBehavior:b[f],enterMode:f,triggerOffset:e,
-holdDistance:0|e*(d.magicline_holdDistance||0.5),boxColor:d.magicline_color||"#ff0000",rtl:"rtl"==d.contentsLangDirection,triggers:d.magicline_everywhere?S:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},j,i,h;c.isRelevant=function(a){return l(a)&&!u(c,a)&&!o(a)};a.on("contentDom",function(){var b=a.editable(),e=a.document,f=a.window;p(c,{editable:b,inInlineMode:b.isInline(),doc:e,win:f},!0);c.boundary=c.inInlineMode?c.editable:c.doc.getDocumentElement();b.is(v.$inline)||(c.inInlineMode&&
-!T(b)&&b.setStyles({position:"relative",top:null,left:null}),ca.call(this,c),G(c),b.attachListener(a,"beforeUndoImage",function(){c.line.detach()}),b.attachListener(a,"beforeGetData",function(){c.line.wrap.getParent()&&(c.line.detach(),a.once("getData",function(){c.line.attach()},null,null,1E3))},null,null,0),b.attachListener(c.inInlineMode?e:e.getWindow().getFrame(),"mouseout",function(b){if("wysiwyg"==a.mode)if(c.inInlineMode){var d=b.data.$.clientX,b=b.data.$.clientY;G(c);B(c,!0);var e=c.view.editable,
-f=c.view.scroll;if(!(d>e.left-f.x&&d<e.right-f.x)||!(b>e.top-f.y&&b<e.bottom-f.y))clearTimeout(h),h=null,c.line.detach()}else clearTimeout(h),h=null,c.line.detach()}),b.attachListener(b,"keyup",function(){c.hiddenMode=0}),b.attachListener(b,"keydown",function(b){if("wysiwyg"==a.mode)switch(b=b.data.getKeystroke(),a.getSelection().getStartElement(),b){case 2228240:case 16:c.hiddenMode=1,c.line.detach()}}),b.attachListener(c.inInlineMode?b:e,"mousemove",function(b){i=!0;if(!("wysiwyg"!=a.mode||h)){var d=
-{x:b.data.$.clientX,y:b.data.$.clientY};h=setTimeout(function(){c.mouse=d;h=c.trigger=null;G(c);if(i&&!c.hiddenMode&&a.focusManager.hasFocus&&!c.line.mouseNear()&&(c.element=Z(c,!0)))(c.trigger=U(c)||W(c)||$(c))?c.line.attach().place():(c.trigger=null,c.line.detach()),i=!1},30)}}),b.attachListener(f,"scroll",function(){"wysiwyg"==a.mode&&(c.line.detach(),n.webkit&&(c.hiddenMode=1,clearTimeout(j),j=setTimeout(function(){c.hiddenMode=0},50)))}),b.attachListener(f,"mousedown",function(){"wysiwyg"==a.mode&&
-(c.line.detach(),c.hiddenMode=1)}),b.attachListener(f,"mouseup",function(){c.hiddenMode=0}),a.addCommand("accessPreviousSpace",R(c)),a.addCommand("accessNextSpace",R(c,!0)),a.setKeystroke([[d.magicline_keystrokePrevious,"accessPreviousSpace"],[d.magicline_keystrokeNext,"accessNextSpace"]]),a.on("loadSnapshot",function(){for(var a=e.getElementsByTag(c.enterBehavior),b,d=a.count();d--;)if((b=a.getItem(d)).hasAttribute("data-cke-magicline-hot")){c.hotNode=b;c.lastCmdDirection="true"===b.getAttribute("data-cke-magicline-dir")?
-!0:!1;break}}),this.backdoor={accessFocusSpace:K,boxTrigger:t,isLine:u,getAscendantTrigger:H,getNonEmptyNeighbour:q,getSize:M,that:c,triggerEdge:W,triggerEditable:U,triggerExpand:$})},this)}});var p=CKEDITOR.tools.extend,J=CKEDITOR.dom.element,A=J.createFromHtml,n=CKEDITOR.env,v=CKEDITOR.dtd,C=128,V=64,L=32,F=16,aa=8,w=4,x=2,r=1,D=" ",X=v.$listItem,fa=v.$tableContent,da=p({},v.$nonEditable,v.$empty),S=v.$block,Y=100,I="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",
-P=I+"border-color:transparent;display:block;border-style:solid;",O="<span>"+D+"</span>";t.prototype={set:function(a,b,d){this.properties=a+b+(d||r);return this},is:function(a){return(this.properties&a)==a}};var Z=function(){return function(a,b,d){if(!a.mouse)return null;var e=a.doc,f=a.line.wrap,d=d||a.mouse,c=new CKEDITOR.dom.element(e.$.elementFromPoint(d.x,d.y));b&&u(a,c)&&(f.hide(),c=new CKEDITOR.dom.element(e.$.elementFromPoint(d.x,d.y)),f.show());return!c||!(c.type==CKEDITOR.NODE_ELEMENT&&c.$)||
-n.ie&&9>n.version&&!a.boundary.equals(c)&&!a.boundary.contains(c)?null:c}}(),y=CKEDITOR.dom.walker.whitespaces(),z=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),$=function(){function a(a){var e=a.element,f,c,j;if(!l(e)||e.contains(a.editable))return null;j=ga(a,function(a,b){return!b.equals(a)},function(a,b){return Z(a,!0,b)},e);f=j.upper;c=j.lower;if(N(a,f,c))return j.set(L,aa);if(f&&e.contains(f))for(;!f.getParent().equals(e);)f=f.getParent();else f=e.getFirst(function(c){return b(a,c)});
-if(c&&e.contains(c))for(;!c.getParent().equals(e);)c=c.getParent();else c=e.getLast(function(c){return b(a,c)});if(!f||!c)return null;m(a,f);m(a,c);if(!(a.mouse.y>f.size.top&&a.mouse.y<c.size.bottom))return null;for(var e=Number.MAX_VALUE,i,h,k,g;c&&!c.equals(f)&&(h=f.getNext(a.isRelevant));)i=Math.abs(ba(a,f,h)-a.mouse.y),i<e&&(e=i,k=f,g=h),f=h,m(a,f);if(!k||!g||!(a.mouse.y>k.size.top&&a.mouse.y<g.size.bottom))return null;j.upper=k;j.lower=g;return j.set(L,aa)}function b(a,b){return!(b&&b.type==
-CKEDITOR.NODE_TEXT||z(b)||o(b)||u(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(b){var e=a(b),f;if(f=e){f=e.upper;var c=e.lower;f=!f||!c||o(c)||o(f)||c.equals(f)||f.equals(c)||c.contains(f)||f.contains(c)?!1:E(b,f)&&E(b,c)&&N(b,f,c)?!0:!1}return f?e:null}}(),s=["top","left","right","bottom"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.ALT+219;CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.ALT+221;(function(){function l(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var e=[],f=["style","className"],b=0;b<f.length;b++){var d=a.$.elements.namedItem(f[b]);d&&(d=new CKEDITOR.dom.element(d),e.push([d,d.nextSibling]),d.remove())}return e}function o(a,e){if(a&&!(a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())&&0<e.length)for(var f=e.length-1;0<=f;f--){var b=e[f][0],d=e[f][1];d?b.insertBefore(d):b.appendTo(a)}}function n(a,e){var f=l(a),b={},d=a.$;e||(b["class"]=d.className||
-"",d.className="");b.inline=d.style.cssText||"";e||(d.style.cssText="position: static; overflow: visible");o(f);return b}function p(a,e){var f=l(a),b=a.$;"class"in e&&(b.className=e["class"]);"inline"in e&&(b.style.cssText=e.inline);o(f)}function q(a){var e=CKEDITOR.instances,f;for(f in e){var b=e[f];"wysiwyg"==b.mode&&!b.readOnly&&(b=b.document.getBody(),b.setAttribute("contentEditable",!1),b.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),a.focus())}CKEDITOR.plugins.add("maximize",
-{init:function(a){function e(){var b=d.getViewPaneSize();a.resize(b.width,b.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,b=CKEDITOR.document,d=b.getWindow(),j,k,m,l=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var h=a.container.getChild(1),g=a.ui.space("contents");if("wysiwyg"==a.mode){var c=a.getSelection();j=c&&c.getRanges();k=d.getScrollPosition()}else{var i=a.editable().$;
-j=!CKEDITOR.env.ie&&[i.selectionStart,i.selectionEnd];k=[i.scrollLeft,i.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){d.on("resize",e);m=d.getScrollPosition();for(c=a.container;c=c.getParent();)c.setCustomData("maximize_saved_styles",n(c)),c.setStyle("z-index",a.config.baseFloatZIndex-5);g.setCustomData("maximize_saved_styles",n(g,!0));h.setCustomData("maximize_saved_styles",n(h,!0));g={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};b.getDocumentElement().setStyles(g);!CKEDITOR.env.gecko&&
-b.getDocumentElement().setStyle("position","fixed");(!CKEDITOR.env.gecko||!CKEDITOR.env.quirks)&&b.getBody().setStyles(g);CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(0,0)},0):d.$.scrollTo(0,0);h.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");h.$.offsetLeft;h.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});h.addClass("cke_maximized");e();g=h.getDocumentPosition();h.setStyles({left:-1*g.x+"px",top:-1*g.y+"px"});CKEDITOR.env.gecko&&q(a)}else if(this.state==
-CKEDITOR.TRISTATE_ON){d.removeListener("resize",e);g=[g,h];for(c=0;c<g.length;c++)p(g[c],g[c].getCustomData("maximize_saved_styles")),g[c].removeCustomData("maximize_saved_styles");for(c=a.container;c=c.getParent();)p(c,c.getCustomData("maximize_saved_styles")),c.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(m.x,m.y)},0):d.$.scrollTo(m.x,m.y);h.removeClass("cke_maximized");CKEDITOR.env.webkit&&(h.setStyle("display","inline"),setTimeout(function(){h.setStyle("display",
-"block")},0));a.fire("resize")}this.toggleState();if(c=this.uiItems[0])g=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize,c=CKEDITOR.document.getById(c._.id),c.getChild(1).setHtml(g),c.setAttribute("title",g),c.setAttribute("href",'javascript:void("'+g+'");');"wysiwyg"==a.mode?j?(CKEDITOR.env.gecko&&q(a),a.getSelection().selectRanges(j),(i=a.getSelection().getStartElement())&&i.scrollIntoView(!0)):d.$.scrollTo(k.x,k.y):(j&&(i.selectionStart=j[0],i.selectionEnd=j[1]),i.scrollLeft=
-k[0],i.scrollTop=k[1]);j=k=null;l=this.state;a.fire("maximize",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton("Maximize",{label:f.maximize.maximize,command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:l)},null,null,100)}}})})();(function(){var c={canUndo:!1,async:!0,exec:function(a){a.getClipboardData({title:a.lang.pastetext.title},function(b){b&&a.fire("paste",{type:"text",dataValue:b.dataValue});a.fire("afterCommandExec",{name:"pastetext",command:c,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(a){a.addCommand("pastetext",c);a.ui.addButton&&a.ui.addButton("PasteText",{label:a.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(a.config.forcePasteAsPlainText)a.on("beforePaste",
-function(a){"html"!=a.data.type&&(a.data.type="text")});a.on("pasteState",function(b){a.getCommand("pastetext").setState(b.data)})}})})();(function(){function h(a,d,f){var b=CKEDITOR.cleanWord;b?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||d+"filter/default.js"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!b}function i(a){a.data.type="html"}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(a){var d=0,f=this.path;a.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a){var e=this;d=1;a.once("beforePaste",i);a.getClipboardData({title:a.lang.pastefromword.title},function(c){c&&a.fire("paste",
-{type:"html",dataValue:c.dataValue});a.fire("afterCommandExec",{name:"pastefromword",command:e,returnValue:!!c})})}});a.ui.addButton&&a.ui.addButton("PasteFromWord",{label:a.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});a.on("pasteState",function(b){a.getCommand("pastefromword").setState(b.data)});a.on("paste",function(b){var e=b.data,c=e.dataValue;if(c&&(d||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(c))){var g=h(a,f,function(){if(g)a.fire("paste",e);
-else if(!a.config.pasteFromWordPromptCleanup||d||confirm(a.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(c,a)});g&&b.cancel()}},null,null,3)}})})();CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}});
-CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(1),l=k.createIterator(),c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);var i=c.createBookmark(),b=i.startNode,j=i.endNode,
-d=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};d(b);if(j){d(j);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(j);)d=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())?b.remove(1):(b.removeAttributes(e),a.fire("removeFormatCleanup",b))),b=d}c.moveToBookmark(i)}a.forceNextSelectionCheck();a.getSelection().selectRanges(k)}}},
-filter:function(a,h){for(var e=a._.removeFormatFilters||[],f=0;f<e.length;f++)if(!1===e[f](h))return!1;return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(a)};CKEDITOR.config.removeFormatTags="b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var";CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign";(function(){CKEDITOR.plugins.add("sourcearea",{init:function(a){function d(){this.hide();this.setStyle("height",this.getParent().$.clientHeight+"px");this.setStyle("width",this.getParent().$.clientWidth+"px");this.show()}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var e=CKEDITOR.plugins.sourcearea;a.addMode("source",function(e){var b=a.ui.space("contents").getDocument().createElement("textarea");b.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?"99%":"100%",height:"100%",resize:"none",
-outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",a.config.sourceAreaTabSize||4)));b.addClass("cke_source cke_reset cke_enable_context_menu");a.ui.space("contents").append(b);b=a.editable(new c(a,b));b.setData(a.getData(1));CKEDITOR.env.ie&&(b.attachListener(a,"resize",d,b),b.attachListener(CKEDITOR.document.getWindow(),"resize",d,b),CKEDITOR.tools.setTimeout(d,0,b));a.fire("ariaWidget",this);e()});a.addCommand("source",e.commands.source);a.ui.addButton&&a.ui.addButton("Source",
-{label:a.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});a.on("mode",function(){a.getCommand("source").setState("source"==a.mode?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)})}}});var c=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(a){this.setValue(a);this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},insertElement:function(){},insertText:function(){},setReadOnly:function(a){this[(a?"set":"remove")+"Attribute"]("readOnly",
-"readonly")},detach:function(){c.baseProto.detach.call(this);this.clearCustomData();this.remove()}}})})();CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(c){"wysiwyg"==c.mode&&c.fire("saveSnapshot");c.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);c.setMode("source"==c.mode?"wysiwyg":"source")},canUndo:!1}}};CKEDITOR.plugins.add("specialchar",{availableLangs:{ca:1,cs:1,cy:1,de:1,en:1,eo:1,et:1,fa:1,fi:1,fr:1,he:1,hr:1,it:1,ku:1,lv:1,nb:1,nl:1,no:1,"pt-br":1,sk:1,sv:1,tr:1,ug:1,"zh-cn":1},requires:"dialog",init:function(a){var c=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");a.addCommand("specialchar",{exec:function(){var b=a.langCode,b=c.availableLangs[b]?b:c.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+
-b+".js"),function(){CKEDITOR.tools.extend(a.lang.specialchar,c.langEntries[b]);a.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton("SpecialChar",{label:a.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}});CKEDITOR.config.specialChars="! &quot; # $ % &amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ &euro; &lsquo; &rsquo; &ldquo; &rdquo; &ndash; &mdash; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &reg; &macr; &deg; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; &ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml; &OElig; &oelig; &#372; &#374 &#373 &#375; &sbquo; &#8219; &bdquo; &hellip; &trade; &#9658; &bull; &rarr; &rArr; &hArr; &diams; &asymp;".split(" ");(function(){function m(b,j){var k=b.type,f=j.type;return k==f?0:k==CKEDITOR.STYLE_OBJECT?-1:f==CKEDITOR.STYLE_OBJECT?1:f==CKEDITOR.STYLE_BLOCK?1:-1}CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(b){function j(a){b.getStylesSet(function(g){if(!i.length){for(var c,l,e=0,f=g.length;e<f;e++)c=g[e],b.blockless&&c.element in CKEDITOR.dtd.$block||(l=c.name,c=h[l]=new CKEDITOR.style(c),c._name=l,c._.enterMode=k.enterMode,i.push(c));i.sort(m)}a&&a()})}var k=b.config,f=b.lang.stylescombo,
-h={},i=[],d;b.ui.addRichCombo("Styles",{label:f.label,title:f.panelTitle,toolbar:"styles,10",panel:{css:[CKEDITOR.skin.getPath("editor")].concat(k.contentsCss),multiSelect:!0,attributes:{"aria-label":f.panelTitle}},init:function(){d=this;j(function(){var a,g,c,b,e,h;e=0;for(h=i.length;e<h;e++)a=i[e],g=a._name,b=a.type,b!=c&&(d.startGroup(f["panelTitle"+b]),c=b),d.add(g,a.type==CKEDITOR.STYLE_OBJECT?g:a.buildPreview(),g);d.commit()})},onClick:function(a){b.focus();b.fire("saveSnapshot");var a=h[a],
-g=b.elementPath();b[a.checkActive(g)?"removeStyle":"applyStyle"](a);b.fire("saveSnapshot")},onRender:function(){b.on("selectionChange",function(a){for(var b=this.getValue(),a=a.data.path.elements,c=0,f=a.length,e;c<f;c++){e=a[c];for(var d in h)if(h[d].checkElementRemovable(e,!0)){d!=b&&this.setValue(d);return}}this.setValue("")},this)},onOpen:function(){var a=b.getSelection().getSelectedElement(),a=b.elementPath(a),g=[0,0,0,0];this.showAll();this.unmarkAll();for(var c in h){var d=h[c],e=d.type;e==
-CKEDITOR.STYLE_BLOCK&&!a.isContextFor(d.element)?this.hideItem(c):(d.checkActive(a)?this.mark(c):e==CKEDITOR.STYLE_OBJECT&&!d.checkApplicable(a)&&(this.hideItem(c),g[e]--),g[e]++)}g[CKEDITOR.STYLE_BLOCK]||this.hideGroup(f["panelTitle"+CKEDITOR.STYLE_BLOCK]);g[CKEDITOR.STYLE_INLINE]||this.hideGroup(f["panelTitle"+CKEDITOR.STYLE_INLINE]);g[CKEDITOR.STYLE_OBJECT]||this.hideGroup(f["panelTitle"+CKEDITOR.STYLE_OBJECT])},reset:function(){d&&(delete d._.panel,delete d._.list,d._.committed=0,d._.items={},
-d._.state=CKEDITOR.TRISTATE_OFF);h={};i=[];j()}});b.on("instanceReady",function(){j()})}})})();(function(){function i(c){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(d){if(d.editable().hasFocus){var e=d.getSelection(),b;if(b=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=d.createRange(),a=CKEDITOR.tools.tryThese(function(){var a=b.getParent().$.cells[b.$.cellIndex+(c?-1:1)];a.parentNode.parentNode;return a},function(){var a=b.getParent(),a=a.getAscendant("table").$.rows[a.$.rowIndex+(c?-1:1)];return a.cells[c?a.cells.length-1:
-0]});if(!a&&!c){for(var f=b.getAscendant("table").$,a=b.getParent().$.cells,f=new CKEDITOR.dom.element(f.insertRow(-1),d.document),g=0,h=a.length;g<h;g++){var i=f.append((new CKEDITOR.dom.element(a[g],d.document)).clone(!1,!1));!CKEDITOR.env.ie&&i.appendBogus()}e.moveToElementEditStart(f)}else if(a)a=new CKEDITOR.dom.element(a),e.moveToElementEditStart(a),(!e.checkStartOfBlock()||!e.checkEndOfBlock())&&e.selectNodeContents(a);else return!0;e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,
-source:1}},g={exec:function(c){c.container.focusNext(!0,c.tabIndex)}},f={exec:function(c){c.container.focusPrevious(!0,c.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(c){for(var d=!1!==c.config.enableTabKeyTools,e=c.config.tabSpaces||0,b="";e--;)b+=" ";if(b)c.on("key",function(a){9==a.data.keyCode&&(c.insertHtml(b),a.cancel())});if(d)c.on("key",function(a){(9==a.data.keyCode&&c.execCommand("selectNextCell")||a.data.keyCode==CKEDITOR.SHIFT+9&&c.execCommand("selectPreviousCell"))&&a.cancel()});
-c.addCommand("blur",CKEDITOR.tools.extend(g,h));c.addCommand("blurBack",CKEDITOR.tools.extend(f,h));c.addCommand("selectNextCell",i());c.addCommand("selectPreviousCell",i(!0))}})})();
-CKEDITOR.dom.element.prototype.focusNext=function(i,h){var g=void 0===h?this.getTabIndex():h,f,c,d,e,b,a;if(0>=g)for(b=this.getNextSourceNode(i,CKEDITOR.NODE_ELEMENT);b;){if(b.isVisible()&&0===b.getTabIndex()){d=b;break}b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(b=this.getDocument().getBody().getFirst();b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&b.equals(this)){if(c=!0,i){if(!(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(b)&&
-(f=1);if(b.isVisible()&&!(0>(a=b.getTabIndex()))){if(f&&a==g){d=b;break}a>g&&(!d||!e||a<e)?(d=b,e=a):!d&&0===a&&(d=b,e=a)}}d&&d.focus()};
-CKEDITOR.dom.element.prototype.focusPrevious=function(i,h){for(var g=void 0===h?this.getTabIndex():h,f,c,d,e=0,b,a=this.getDocument().getBody().getLast();a=a.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&a.equals(this)){if(c=!0,i){if(!(a=a.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(a)&&(f=1);if(a.isVisible()&&!(0>(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}if(b<g&&(!d||b>e))d=a,e=b}}d&&d.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,e){this.setState(e.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var b=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table"}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",d()));a.addCommand("tableDelete",d({exec:function(a){var c=a.elementPath().contains("table",
-1);if(c){var b=c.getParent();1==b.getChildCount()&&!b.is("body","td","th")&&(c=b);a=a.createRange();a.moveToPosition(c,CKEDITOR.POSITION_BEFORE_START);c.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:b.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:b.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:b.deleteTable,
-command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog="tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function o(c){function d(c){!(0<b.length)&&(c.type==CKEDITOR.NODE_ELEMENT&&z.test(c.getName())&&!c.getCustomData("selected_cell"))&&(CKEDITOR.dom.element.setMarker(a,c,"selected_cell",!0),b.push(c))}for(var c=c.getRanges(),b=[],a={},e=0;e<c.length;e++){var f=c[e];if(f.collapsed)f=f.getCommonAncestor(),(f=f.getAscendant("td",!0)||f.getAscendant("th",!0))&&b.push(f);else{var f=new CKEDITOR.dom.walker(f),g;for(f.guard=d;g=f.next();)if(g.type!=CKEDITOR.NODE_ELEMENT||!g.is(CKEDITOR.dtd.table))if((g=
-g.getAscendant("td",!0)||g.getAscendant("th",!0))&&!g.getCustomData("selected_cell"))CKEDITOR.dom.element.setMarker(a,g,"selected_cell",!0),b.push(g)}}CKEDITOR.dom.element.clearAllMarkers(a);return b}function m(c,d){for(var b=o(c),a=b[0],e=a.getAscendant("table"),a=a.getDocument(),f=b[0].getParent(),g=f.$.rowIndex,b=b[b.length-1],h=b.getParent().$.rowIndex+b.$.rowSpan-1,b=new CKEDITOR.dom.element(e.$.rows[h]),g=d?g:h,f=d?f:b,b=CKEDITOR.tools.buildTableMap(e),e=b[g],g=d?b[g-1]:b[g+1],b=b[0].length,
-a=a.createElement("tr"),h=0;e[h]&&h<b;h++){var i;1<e[h].rowSpan&&g&&e[h]==g[h]?(i=e[h],i.rowSpan+=1):(i=(new CKEDITOR.dom.element(e[h])).clone(),i.removeAttribute("rowSpan"),!CKEDITOR.env.ie&&i.appendBogus(),a.append(i),i=i.$);h+=i.colSpan-1}d?a.insertBefore(f):a.insertAfter(f)}function p(c){if(c instanceof CKEDITOR.dom.selection){for(var d=o(c),b=d[0].getAscendant("table"),a=CKEDITOR.tools.buildTableMap(b),c=d[0].getParent().$.rowIndex,d=d[d.length-1],e=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[],
-f=c;f<=e;f++){for(var g=a[f],h=new CKEDITOR.dom.element(b.$.rows[f]),i=0;i<g.length;i++){var j=new CKEDITOR.dom.element(g[i]),k=j.getParent().$.rowIndex;1==j.$.rowSpan?j.remove():(j.$.rowSpan-=1,k==f&&(k=a[f+1],k[i-1]?j.insertAfter(new CKEDITOR.dom.element(k[i-1])):(new CKEDITOR.dom.element(b.$.rows[f+1])).append(j,1)));i+=j.$.colSpan-1}d.push(h)}a=b.$.rows;b=new CKEDITOR.dom.element(a[e+1]||(0<c?a[c-1]:null)||b.$.parentNode);for(f=d.length;0<=f;f--)p(d[f]);return b}c instanceof CKEDITOR.dom.element&&
-(b=c.getAscendant("table"),1==b.$.rows.length?b.remove():c.remove());return null}function q(c,d){for(var b=d?Infinity:0,a=0;a<c.length;a++){var e;e=c[a];for(var f=d,g=e.getParent().$.cells,h=0,i=0;i<g.length;i++){var j=g[i],h=h+(f?1:j.colSpan);if(j==e.$)break}e=h-1;if(d?e<b:e>b)b=e}return b}function n(c,d){for(var b=o(c),a=b[0].getAscendant("table"),e=q(b,1),b=q(b),e=d?e:b,f=CKEDITOR.tools.buildTableMap(a),a=[],b=[],g=f.length,h=0;h<g;h++)a.push(f[h][e]),b.push(d?f[h][e-1]:f[h][e+1]);for(h=0;h<g;h++)a[h]&&
-(1<a[h].colSpan&&b[h]==a[h]?(e=a[h],e.colSpan+=1):(e=(new CKEDITOR.dom.element(a[h])).clone(),e.removeAttribute("colSpan"),!CKEDITOR.env.ie&&e.appendBogus(),e[d?"insertBefore":"insertAfter"].call(e,new CKEDITOR.dom.element(a[h])),e=e.$),h+=e.rowSpan-1)}function t(c,d){var b=c.getStartElement();if(b=b.getAscendant("td",1)||b.getAscendant("th",1)){var a=b.clone();CKEDITOR.env.ie||a.appendBogus();d?a.insertBefore(b):a.insertAfter(b)}}function s(c){if(c instanceof CKEDITOR.dom.selection){var c=o(c),d=
-c[0]&&c[0].getAscendant("table"),b;a:{var a=0;b=c.length-1;for(var e={},f,g;f=c[a++];)CKEDITOR.dom.element.setMarker(e,f,"delete_cell",!0);for(a=0;f=c[a++];)if((g=f.getPrevious())&&!g.getCustomData("delete_cell")||(g=f.getNext())&&!g.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(e);b=g;break a}CKEDITOR.dom.element.clearAllMarkers(e);g=c[0].getParent();(g=g.getPrevious())?b=g.getLast():(g=c[b].getParent(),b=(g=g.getNext())?g.getChild(0):null)}for(g=c.length-1;0<=g;g--)s(c[g]);
-b?u(b,!0):d&&d.remove()}else c instanceof CKEDITOR.dom.element&&(d=c.getParent(),1==d.getChildCount()?d.remove():c.remove())}function u(c,d){var b=new CKEDITOR.dom.range(c.getDocument());if(!b["moveToElementEdit"+(d?"End":"Start")](c))b.selectNodeContents(c),b.collapse(d?!1:!0);b.select(!0)}function v(c,d,b){c=c[d];if("undefined"==typeof b)return c;for(d=0;c&&d<c.length;d++){if(b.is&&c[d]==b.$)return d;if(d==b)return new CKEDITOR.dom.element(c[d])}return b.is?-1:null}function r(c,d,b){var a=o(c),
-e;if((d?1!=a.length:2>a.length)||(e=c.getCommonAncestor())&&e.type==CKEDITOR.NODE_ELEMENT&&e.is("table"))return!1;var f,c=a[0];e=c.getAscendant("table");var g=CKEDITOR.tools.buildTableMap(e),h=g.length,i=g[0].length,j=c.getParent().$.rowIndex,k=v(g,j,c);if(d){var w;try{var l=parseInt(c.getAttribute("rowspan"),10)||1;f=parseInt(c.getAttribute("colspan"),10)||1;w=g["up"==d?j-l:"down"==d?j+l:j]["left"==d?k-f:"right"==d?k+f:k]}catch(u){return!1}if(!w||c.$==w)return!1;a["up"==d||"left"==d?"unshift":"push"](new CKEDITOR.dom.element(w))}for(var d=
-c.getDocument(),m=j,l=w=0,p=!b&&new CKEDITOR.dom.documentFragment(d),r=0,d=0;d<a.length;d++){f=a[d];var n=f.getParent(),s=f.getFirst(),q=f.$.colSpan,t=f.$.rowSpan,n=n.$.rowIndex,x=v(g,n,f),r=r+q*t,l=Math.max(l,x-k+q);w=Math.max(w,n-j+t);if(!b){q=f;(t=q.getBogus())&&t.remove();q.trim();if(f.getChildren().count()){if(n!=m&&s&&(!s.isBlockBoundary||!s.isBlockBoundary({br:1})))(m=p.getLast(CKEDITOR.dom.walker.whitespaces(!0)))&&(!m.is||!m.is("br"))&&p.append("br");f.moveChildren(p)}d?f.remove():f.setHtml("")}m=
-n}if(b)return w*l==r;p.moveChildren(c);CKEDITOR.env.ie||c.appendBogus();l>=i?c.removeAttribute("rowSpan"):c.$.rowSpan=w;w>=h?c.removeAttribute("colSpan"):c.$.colSpan=l;b=new CKEDITOR.dom.nodeList(e.$.rows);a=b.count();for(d=a-1;0<=d;d--)e=b.getItem(d),e.$.cells.length||(e.remove(),a++);return c}function x(c,d){var b=o(c);if(1<b.length)return!1;if(d)return!0;var b=b[0],a=b.getParent(),e=a.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(e),g=a.$.rowIndex,h=v(f,g,b),i=b.$.rowSpan,j;if(1<i){j=Math.ceil(i/
-2);for(var i=Math.floor(i/2),a=g+j,e=new CKEDITOR.dom.element(e.$.rows[a]),f=v(f,a),k,a=b.clone(),g=0;g<f.length;g++)if(k=f[g],k.parentNode==e.$&&g>h){a.insertBefore(new CKEDITOR.dom.element(k));break}else k=null;k||e.append(a,!0)}else{i=j=1;e=a.clone();e.insertAfter(a);e.append(a=b.clone());k=v(f,g);for(h=0;h<k.length;h++)k[h].rowSpan++}CKEDITOR.env.ie||a.appendBogus();b.$.rowSpan=j;a.$.rowSpan=i;1==j&&b.removeAttribute("rowSpan");1==i&&a.removeAttribute("rowSpan");return a}function y(c,d){var b=
-o(c);if(1<b.length)return!1;if(d)return!0;var b=b[0],a=b.getParent(),e=a.getAscendant("table"),e=CKEDITOR.tools.buildTableMap(e),f=v(e,a.$.rowIndex,b),g=b.$.colSpan;if(1<g)a=Math.ceil(g/2),g=Math.floor(g/2);else{for(var g=a=1,h=[],i=0;i<e.length;i++){var j=e[i];h.push(j[f]);1<j[f].rowSpan&&(i+=j[f].rowSpan-1)}for(e=0;e<h.length;e++)h[e].colSpan++}e=b.clone();e.insertAfter(b);CKEDITOR.env.ie||e.appendBogus();b.$.colSpan=a;e.$.colSpan=g;1==a&&b.removeAttribute("colSpan");1==g&&e.removeAttribute("colSpan");
-return e}var z=/^(?:td|th)$/;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(c){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}var b=c.lang.table;c.addCommand("cellProperties",new CKEDITOR.dialogCommand("cellProperties",d()));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");c.addCommand("rowDelete",d({exec:function(a){a=
-a.getSelection();u(p(a))}}));c.addCommand("rowInsertBefore",d({exec:function(a){a=a.getSelection();m(a,!0)}}));c.addCommand("rowInsertAfter",d({exec:function(a){a=a.getSelection();m(a)}}));c.addCommand("columnDelete",d({exec:function(a){for(var a=a.getSelection(),a=o(a),b=a[0],c=a[a.length-1],a=b.getAscendant("table"),d=CKEDITOR.tools.buildTableMap(a),h,i,j=[],k=0,m=d.length;k<m;k++)for(var l=0,n=d[k].length;l<n;l++)d[k][l]==b.$&&(h=l),d[k][l]==c.$&&(i=l);for(k=h;k<=i;k++)for(l=0;l<d.length;l++)c=
-d[l],b=new CKEDITOR.dom.element(a.$.rows[l]),c=new CKEDITOR.dom.element(c[k]),c.$&&(1==c.$.colSpan?c.remove():c.$.colSpan-=1,l+=c.$.rowSpan-1,b.$.cells.length||j.push(b));i=a.$.rows[0]&&a.$.rows[0].cells;h=new CKEDITOR.dom.element(i[h]||(h?i[h-1]:a.$.parentNode));j.length==m&&a.remove();h&&u(h,!0)}}));c.addCommand("columnInsertBefore",d({exec:function(a){a=a.getSelection();n(a,!0)}}));c.addCommand("columnInsertAfter",d({exec:function(a){a=a.getSelection();n(a)}}));c.addCommand("cellDelete",d({exec:function(a){a=
-a.getSelection();s(a)}}));c.addCommand("cellMerge",d({exec:function(a){u(r(a.getSelection()),!0)}}));c.addCommand("cellMergeRight",d({exec:function(a){u(r(a.getSelection(),"right"),!0)}}));c.addCommand("cellMergeDown",d({exec:function(a){u(r(a.getSelection(),"down"),!0)}}));c.addCommand("cellVerticalSplit",d({exec:function(a){u(x(a.getSelection()))}}));c.addCommand("cellHorizontalSplit",d({exec:function(a){u(y(a.getSelection()))}}));c.addCommand("cellInsertBefore",d({exec:function(a){a=a.getSelection();
-t(a,!0)}}));c.addCommand("cellInsertAfter",d({exec:function(a){a=a.getSelection();t(a)}}));c.addMenuItems&&c.addMenuItems({tablecell:{label:b.cell.menu,group:"tablecell",order:1,getItems:function(){var a=c.getSelection(),b=o(a);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:r(a,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:r(a,"right",!0)?CKEDITOR.TRISTATE_OFF:
-CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:r(a,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:x(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:y(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<b.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:b.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:b.cell.insertAfter,
-group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:b.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:b.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:b.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:b.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:b.cell.splitHorizontal,group:"tablecell",
-command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:b.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:b.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:b.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:b.row.insertBefore,
-group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:b.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:b.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:b.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:b.column.insertBefore,
-group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:b.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:b.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});c.contextMenu&&c.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:o};
-CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();CKEDITOR.tools.buildTableMap=function(o){for(var o=o.$.rows,m=-1,p=[],q=0;q<o.length;q++){m++;!p[m]&&(p[m]=[]);for(var n=-1,t=0;t<o[q].cells.length;t++){var s=o[q].cells[t];for(n++;p[m][n];)n++;for(var u=isNaN(s.colSpan)?1:s.colSpan,s=isNaN(s.rowSpan)?1:s.rowSpan,v=0;v<s;v++){p[m+v]||(p[m+v]=[]);for(var r=0;r<u;r++)p[m+v][n+r]=o[q].cells[t]}n+=u-1}}return p};(function(){function h(a){this.editor=a;this.reset()}CKEDITOR.plugins.add("undo",{init:function(a){function c(a){b.enabled&&!1!==a.data.command.canUndo&&b.save()}var b=new h(a),d=a.addCommand("undo",{exec:function(){b.undo()&&(a.selectionChange(),this.fire("afterUndo"))},state:CKEDITOR.TRISTATE_DISABLED,canUndo:!1}),e=a.addCommand("redo",{exec:function(){b.redo()&&(a.selectionChange(),this.fire("afterRedo"))},state:CKEDITOR.TRISTATE_DISABLED,canUndo:!1});a.setKeystroke([[CKEDITOR.CTRL+90,"undo"],
-[CKEDITOR.CTRL+89,"redo"],[CKEDITOR.CTRL+CKEDITOR.SHIFT+90,"redo"]]);b.onChange=function(){d.setState(b.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);e.setState(b.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",c);a.on("afterCommandExec",c);a.on("saveSnapshot",function(a){b.save(a.data&&a.data.contentOnly)});a.on("contentDom",function(){a.editable().on("keydown",function(a){!a.data.$.ctrlKey&&!a.data.$.metaKey&&b.type(a)})});a.on("beforeModeUnload",
-function(){"wysiwyg"==a.mode&&b.save(!0)});a.on("mode",function(){b.enabled=a.readOnly?!1:"wysiwyg"==a.mode;b.onChange()});a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){b.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){b.currentImage&&b.update()});a.on("lockSnapshot",b.lock,b);a.on("unlockSnapshot",b.unlock,b)}});CKEDITOR.plugins.undo=
-{};var i=CKEDITOR.plugins.undo.Image=function(a){this.editor=a;a.fire("beforeUndoImage");var c=a.getSnapshot(),b=c&&a.getSelection();CKEDITOR.env.ie&&c&&(c=c.replace(/\s+data-cke-expando=".*?"/g,""));this.contents=c;this.bookmarks=b&&b.createBookmarks2(!0);a.fire("afterUndoImage")},j=/\b(?:href|src|name)="[^"]*?"/gi;i.prototype={equals:function(a,c){var b=this.contents,d=a.contents;if(CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat))b=b.replace(j,""),d=d.replace(j,"");if(b!=d)return!1;
-if(c)return!0;b=this.bookmarks;d=a.bookmarks;if(b||d){if(!b||!d||b.length!=d.length)return!1;for(var e=0;e<b.length;e++){var g=b[e],f=d[e];if(g.startOffset!=f.startOffset||g.endOffset!=f.endOffset||!CKEDITOR.tools.arrayCompare(g.start,f.start)||!CKEDITOR.tools.arrayCompare(g.end,f.end))return!1}}return!0}};var k={8:1,46:1},m={16:1,17:1,18:1},l={37:1,38:1,39:1,40:1};h.prototype={type:function(a){var a=a&&a.data.getKey(),c=a in k,b=this.lastKeystroke in k,d=c&&a==this.lastKeystroke,e=a in l,g=this.lastKeystroke in
-l;if(!(a in m||this.typing)||!c&&!e&&(b||g)||c&&!d){var f=new i(this.editor),h=this.snapshots.length;CKEDITOR.tools.setTimeout(function(){var a=this.editor.getSnapshot();CKEDITOR.env.ie&&(a=a.replace(/\s+data-cke-expando=".*?"/g,""));f.contents!=a&&h==this.snapshots.length&&(this.typing=!0,this.save(!1,f,!1)||this.snapshots.splice(this.index+1,this.snapshots.length-this.index-1),this.hasUndo=!0,this.hasRedo=!1,this.modifiersCount=this.typesCount=1,this.onChange())},0,this)}this.lastKeystroke=a;c?
-(this.typesCount=0,this.modifiersCount++,25<this.modifiersCount&&(this.save(!1,null,!1),this.modifiersCount=1)):e||(this.modifiersCount=0,this.typesCount++,25<this.typesCount&&(this.save(!1,null,!1),this.typesCount=1))},reset:function(){this.lastKeystroke=0;this.snapshots=[];this.index=-1;this.limit=this.editor.config.undoStackSize||20;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.typing=!1;delete this.lastKeystroke;this.modifiersCount=
-this.typesCount=0},fireChange:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(a,c,b){if(this.locked)return!1;var d=this.snapshots;c||(c=new i(this.editor));if(!1===c.contents||this.currentImage&&c.equals(this.currentImage,a))return!1;d.splice(this.index+1,d.length-this.index-1);d.length==this.limit&&d.shift();this.index=d.push(c)-1;this.currentImage=c;!1!==b&&this.fireChange();return!0},restoreImage:function(a){var c=
-this.editor,b;a.bookmarks&&(c.focus(),b=c.getSelection());this.locked=1;this.editor.loadSnapshot(a.contents);a.bookmarks?b.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(c=this.editor.document.getBody().$.createTextRange(),c.collapse(!0),c.select());this.locked=0;this.index=a.index;this.update();this.fireChange()},getNextImage:function(a){var c=this.snapshots,b=this.currentImage,d;if(b)if(a)for(d=this.index-1;0<=d;d--){if(a=c[d],!b.equals(a,!0))return a.index=d,a}else for(d=this.index+1;d<c.length;d++)if(a=
-c[d],!b.equals(a,!0))return a.index=d,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(){this.locked||this.snapshots.splice(this.index,1,this.currentImage=
-new i(this.editor))},lock:function(){if(!this.locked){var a=this.editor.getSnapshot();this.locked={update:this.currentImage&&a==this.currentImage.contents?a:null}}},unlock:function(){if(this.locked){var a=this.locked.update,c=this.editor.getSnapshot();this.locked=null;"string"==typeof a&&c!=a&&this.update()}}}})();(function(){function l(a,c){var c=void 0===c||c,b;if(c)b=a.getComputedStyle("text-align");else{for(;!a.hasAttribute||!a.hasAttribute("align")&&!a.getStyle("text-align");){b=a.getParent();if(!b)break;a=b}b=a.getStyle("text-align")||a.getAttribute("align")||""}b&&(b=b.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!b&&c&&(b="rtl"==a.getComputedStyle("direction")?"right":"left");return b}function f(a,c,b){this.editor=a;this.name=c;this.value=b;this.context="p";if(a=a.config.justifyClasses){switch(b){case "left":this.cssClassName=
-a[0];break;case "center":this.cssClassName=a[1];break;case "right":this.cssClassName=a[2];break;case "justify":this.cssClassName=a[3]}this.cssClassRegex=RegExp("(?:^|\\s+)(?:"+a.join("|")+")(?=$|\\s)")}}function j(a){var c=a.editor,b=c.createRange();b.setStartBefore(a.data.node);b.setEndAfter(a.data.node);for(var h=new CKEDITOR.dom.walker(b),d;d=h.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(a.data.node)&&d.getDirection())b.setStartAfter(d),h=new CKEDITOR.dom.walker(b);else{var e=c.config.justifyClasses;
-e&&(d.hasClass(e[0])?(d.removeClass(e[0]),d.addClass(e[2])):d.hasClass(e[2])&&(d.removeClass(e[2]),d.addClass(e[0])));e=d.getStyle("text-align");"left"==e?d.setStyle("text-align","right"):"right"==e&&d.setStyle("text-align","left")}}f.prototype={exec:function(a){var c=a.getSelection(),b=a.config.enterMode;if(c){for(var h=c.createBookmarks(),d=c.getRanges(!0),e=this.cssClassName,f,g,i=a.config.useComputedState,i=void 0===i||i,k=d.length-1;0<=k;k--){f=d[k].createIterator();for(f.enlargeBr=b!=CKEDITOR.ENTER_BR;g=
-f.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");){g.removeAttribute("align");g.removeStyle("text-align");var j=e&&(g.$.className=CKEDITOR.tools.ltrim(g.$.className.replace(this.cssClassRegex,""))),m=this.state==CKEDITOR.TRISTATE_OFF&&(!i||l(g,!0)!=this.value);e?m?g.addClass(e):j||g.removeAttribute("class"):m&&g.setStyle("text-align",this.value)}}a.focus();a.forceNextSelectionCheck();c.selectBookmarks(h)}},refresh:function(a,c){var b=c.block||c.blockLimit;this.setState("body"!=b.getName()&&l(b,this.editor.config.useComputedState)==
-this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("justify",{init:function(a){if(!a.blockless){var c=new f(a,"justifyleft","left"),b=new f(a,"justifycenter","center"),h=new f(a,"justifyright","right"),d=new f(a,"justifyblock","justify");a.addCommand("justifyleft",c);a.addCommand("justifycenter",b);a.addCommand("justifyright",h);a.addCommand("justifyblock",d);a.ui.addButton&&(a.ui.addButton("JustifyLeft",{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),
-a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,command:"justifycenter",toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock",toolbar:"align,40"}));a.on("dirChanged",j)}}})})();(function(){var b=/\[\[[^\]]+\]\]/g;CKEDITOR.plugins.add("placeholder",{requires:"dialog",onLoad:function(){CKEDITOR.addCss(".cke_placeholder{background-color: #ffff00;"+(CKEDITOR.env.gecko?"cursor: default;":"")+"}")},init:function(a){var b=a.lang.placeholder;a.addCommand("createplaceholder",new CKEDITOR.dialogCommand("createplaceholder"));a.addCommand("editplaceholder",new CKEDITOR.dialogCommand("editplaceholder"));a.ui.addButton&&a.ui.addButton("CreatePlaceholder",{label:b.toolbar,command:"createplaceholder",
-toolbar:"insert,5",icon:"placeholder"});a.addMenuItems&&(a.addMenuGroup("placeholder",20),a.addMenuItems({editplaceholder:{label:b.edit,command:"editplaceholder",group:"placeholder",order:1,icon:"placeholder"}}),a.contextMenu&&a.contextMenu.addListener(function(a){return!a||!a.data("cke-placeholder")?null:{editplaceholder:CKEDITOR.TRISTATE_OFF}}));a.on("doubleclick",function(b){if(CKEDITOR.plugins.placeholder.getSelectedPlaceHolder(a))b.data.dialog="editplaceholder"});a.on("contentDom",function(){a.editable().on("resizestart",
-function(b){a.getSelection().getSelectedElement().data("cke-placeholder")&&b.data.preventDefault()})});CKEDITOR.dialog.add("createplaceholder",this.path+"dialogs/placeholder.js");CKEDITOR.dialog.add("editplaceholder",this.path+"dialogs/placeholder.js")},afterInit:function(a){var c=a.dataProcessor,e=c&&c.dataFilter,c=c&&c.htmlFilter;e&&e.addRules({text:function(d){return d.replace(b,function(b){return CKEDITOR.plugins.placeholder.createPlaceholder(a,null,b,1)})}});c&&c.addRules({elements:{span:function(a){a.attributes&&
-a.attributes["data-cke-placeholder"]&&delete a.name}}})}})})();
-CKEDITOR.plugins.placeholder={createPlaceholder:function(b,a,c,e){var d=new CKEDITOR.dom.element("span",b.document);d.setAttributes({contentEditable:"false","data-cke-placeholder":1,"class":"cke_placeholder"});c&&d.setText(c);if(e)return d.getOuterHtml();a?CKEDITOR.env.ie?(d.insertAfter(a),setTimeout(function(){a.remove();d.focus()},10)):d.replace(a):b.insertElement(d);return null},getSelectedPlaceHolder:function(b){b=b.getSelection().getRanges()[0];b.shrink(CKEDITOR.SHRINK_TEXT);for(b=b.startContainer;b&&
-!(b.type==CKEDITOR.NODE_ELEMENT&&b.data("cke-placeholder"));)b=b.getParent();return b}};(function(){var d={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state==CKEDITOR.TRISTATE_ON&&(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE||a.focusManager.hasFocus)?"attachClass":"removeClass";a.editable()[b]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){function a(a){return".%1.%2 p,.%1.%2 div,.%1.%2 pre,.%1.%2 address,.%1.%2 blockquote,.%1.%2 h1,.%1.%2 h2,.%1.%2 h3,.%1.%2 h4,.%1.%2 h5,.%1.%2 h6{background-position: top %3;padding-%3: 8px;}".replace(/%1/g,
-"cke_show_blocks").replace(/%2/g,"cke_contents_"+a).replace(/%3/g,"rtl"==a?"right":"left")}CKEDITOR.addCss(".%2 p,.%2 div,.%2 pre,.%2 address,.%2 blockquote,.%2 h1,.%2 h2,.%2 h3,.%2 h4,.%2 h5,.%2 h6{background-repeat: no-repeat;border: 1px dotted gray;padding-top: 8px;}.%2 p{%1p.png);}.%2 div{%1div.png);}.%2 pre{%1pre.png);}.%2 address{%1address.png);}.%2 blockquote{%1blockquote.png);}.%2 h1{%1h1.png);}.%2 h2{%1h2.png);}.%2 h3{%1h3.png);}.%2 h4{%1h4.png);}.%2 h5{%1h5.png);}.%2 h6{%1h6.png);}".replace(/%1/g,
-"background-image: url("+CKEDITOR.getUrl(this.path)+"images/block_").replace(/%2/g,"cke_show_blocks ")+a("ltr")+a("rtl"))},init:function(a){if(!a.blockless){var b=a.addCommand("showblocks",d);b.canUndo=!1;a.config.startupOutlineBlocks&&b.setState(CKEDITOR.TRISTATE_ON);a.ui.addButton&&a.ui.addButton("ShowBlocks",{label:a.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});if(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE){var c=
-function(){b.refresh(a)};a.on("focus",c);a.on("blur",c)}a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)})}}})})();(function(){var f={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";a.editable()[b]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,;.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,;.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,;.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g,
-"cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(a)},init:function(a){var b=a.addCommand("showborders",f);b.canUndo=!1;!1!==a.config.startupShowBorders&&b.setState(CKEDITOR.TRISTATE_ON);a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)},null,null,100);a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.on("removeFormatCleanup",function(d){d=d.data;a.getCommand("showborders").state==CKEDITOR.TRISTATE_ON&&(d.is("table")&&(!d.hasAttribute("border")||
-0>=parseInt(d.getAttribute("border"),10)))&&d.addClass("cke_show_border")})},afterInit:function(a){var b=a.dataProcessor,a=b&&b.dataFilter,b=b&&b.htmlFilter;a&&a.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"],c=parseInt(a.border,10);if((!c||0>=c)&&(!b||-1==b.indexOf("cke_show_border")))a["class"]=(b||"")+" cke_show_border"}}});b&&b.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"];b&&(a["class"]=b.replace("cke_show_border","").replace(/\s{2}/," ").replace(/^\s+|\s+$/,
-""))}}})}});CKEDITOR.on("dialogDefinition",function(a){var b=a.data.name;if("table"==b||"tableProperties"==b)if(a=a.data.definition,b=a.getContents("info").get("txtBorder"),b.commit=CKEDITOR.tools.override(b.commit,function(a){return function(b,c){a.apply(this,arguments);var e=parseInt(this.getValue(),10);c[!e||0>=e?"addClass":"removeClass"]("cke_show_border")}}),a=(a=a.getContents("advanced"))&&a.get("advCSSClasses"))a.setup=CKEDITOR.tools.override(a.setup,function(a){return function(){a.apply(this,
-arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}}),a.commit=CKEDITOR.tools.override(a.commit,function(a){return function(b,c){a.apply(this,arguments);parseInt(c.getAttribute("border"),10)||c.addClass("cke_show_border")}})})})();(function(){function t(b){return CKEDITOR.env.ie?b.$.clientWidth:parseInt(b.getComputedStyle("width"),10)}function n(b,i){var a=b.getComputedStyle("border-"+i+"-width"),g={thin:"0px",medium:"1px",thick:"2px"};0>a.indexOf("px")&&(a=a in g&&"none"!=b.getComputedStyle("border-style")?g[a]:0);return parseInt(a,10)}function v(b){var i=[],a=-1,g="rtl"==b.getComputedStyle("direction"),c;c=b.$.rows;for(var p=0,e,f,d,h=0,o=c.length;h<o;h++)d=c[h],e=d.cells.length,e>p&&(p=e,f=d);c=f;p=new CKEDITOR.dom.element(b.$.tBodies[0]);
-e=p.getDocumentPosition();f=0;for(d=c.cells.length;f<d;f++){var h=new CKEDITOR.dom.element(c.cells[f]),o=c.cells[f+1]&&new CKEDITOR.dom.element(c.cells[f+1]),a=a+(h.$.colSpan||1),k,j,l=h.getDocumentPosition().x;g?j=l+n(h,"left"):k=l+h.$.offsetWidth-n(h,"right");o?(l=o.getDocumentPosition().x,g?k=l+o.$.offsetWidth-n(o,"right"):j=l+n(o,"left")):(l=b.getDocumentPosition().x,g?k=l:j=l+b.$.offsetWidth);h=Math.max(j-k,3);i.push({table:b,index:a,x:k,y:e.y,width:h,height:p.$.offsetHeight,rtl:g})}return i}
-function u(b){(b.data||b).preventDefault()}function z(b){function i(){h=0;d.setOpacity(0);k&&a();var A=e.table;setTimeout(function(){A.removeCustomData("_cke_table_pillars")},0);f.removeListener("dragstart",u)}function a(){for(var a=e.rtl,b=a?l.length:w.length,d=0;d<b;d++){var c=w[d],f=l[d],g=e.table;CKEDITOR.tools.setTimeout(function(b,d,c,e,f,h){b&&b.setStyle("width",j(Math.max(d+h,0)));c&&c.setStyle("width",j(Math.max(e-h,0)));f&&g.setStyle("width",j(f+h*(a?-1:1)))},0,this,[c,c&&t(c),f,f&&t(f),
-(!c||!f)&&t(g)+n(g,"left")+n(g,"right"),k])}}function g(a){u(a);for(var a=e.index,b=CKEDITOR.tools.buildTableMap(e.table),g=[],i=[],j=Number.MAX_VALUE,n=j,s=e.rtl,r=0,v=b.length;r<v;r++){var m=b[r],q=m[a+(s?1:0)],m=m[a+(s?0:1)],q=q&&new CKEDITOR.dom.element(q),m=m&&new CKEDITOR.dom.element(m);if(!q||!m||!q.equals(m))q&&(j=Math.min(j,t(q))),m&&(n=Math.min(n,t(m))),g.push(q),i.push(m)}w=g;l=i;x=e.x-j;y=e.x+n;d.setOpacity(0.5);o=parseInt(d.getStyle("left"),10);k=0;h=1;d.on("mousemove",p);f.on("dragstart",
-u);f.on("mouseup",c,this)}function c(a){a.removeListener();i()}function p(a){r(a.data.getPageOffset().x)}var e,f,d,h,o,k,w,l,x,y;f=b.document;d=CKEDITOR.dom.element.createFromHtml('<div data-cke-temp=1 contenteditable=false unselectable=on style="position:absolute;cursor:col-resize;filter:alpha(opacity=0);opacity:0;padding:0;background-color:#004;background-image:none;border:0px none;z-index:10"></div>',f);s||f.getDocumentElement().append(d);this.attachTo=function(a){h||(s&&(f.getBody().append(d),
-k=0),e=a,d.setStyles({width:j(a.width),height:j(a.height),left:j(a.x),top:j(a.y)}),s&&d.setOpacity(0.25),d.on("mousedown",g,this),f.getBody().setStyle("cursor","col-resize"),d.show())};var r=this.move=function(a){if(!e)return 0;if(!h&&(a<e.x||a>e.x+e.width))return e=null,h=k=0,f.removeListener("mouseup",c),d.removeListener("mousedown",g),d.removeListener("mousemove",p),f.getBody().setStyle("cursor","auto"),s?d.remove():d.hide(),0;a-=Math.round(d.$.offsetWidth/2);if(h){if(a==x||a==y)return 1;a=Math.max(a,
-x);a=Math.min(a,y);k=a-o}d.setStyle("left",j(a));return 1}}function r(b){var i=b.data.getTarget();if("mouseout"==b.name){if(!i.is("table"))return;for(var a=new CKEDITOR.dom.element(b.data.$.relatedTarget||b.data.$.toElement);a&&a.$&&!a.equals(i)&&!a.is("body");)a=a.getParent();if(!a||a.equals(i))return}i.getAscendant("table",1).removeCustomData("_cke_table_pillars");b.removeListener()}var j=CKEDITOR.tools.cssLength,s=CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks);CKEDITOR.plugins.add("tableresize",
-{requires:"tabletools",init:function(b){b.on("contentDom",function(){var i;b.document.getBody().on("mousemove",function(a){var a=a.data,g=a.getPageOffset().x;if(i&&i.move(g))u(a);else{var a=a.getTarget(),c;if(a.is("table")||a.getAscendant("tbody",1)){c=a.getAscendant("table",1);if(!(a=c.getCustomData("_cke_table_pillars")))c.setCustomData("_cke_table_pillars",a=v(c)),c.on("mouseout",r),c.on("mousedown",r);a:{c=0;for(var j=a.length;c<j;c++){var e=a[c];if(g>=e.x&&g<=e.x+e.width){g=e;break a}}g=null}g&&
-(!i&&(i=new z(b)),i.attachTo(g))}}})})}})})();CKEDITOR.config.plugins='dialogui,dialog,about,a11yhelp,basicstyles,blockquote,clipboard,panel,floatpanel,menu,contextmenu,resize,button,toolbar,elementspath,list,indent,enterkey,entities,popup,filebrowser,floatingspace,listblock,richcombo,format,htmlwriter,horizontalrule,wysiwygarea,image,fakeobjects,link,magicline,maximize,pastetext,pastefromword,removeformat,sourcearea,specialchar,stylescombo,tab,table,tabletools,undo,justify,placeholder,showblocks,showborders,tableresize';CKEDITOR.config.skin='moono';(function() {var icons = ( 'about,0,bold,32,italic,64,strike,96,subscript,128,superscript,160,underline,192,blockquote,224,copy-rtl,256,copy,288,cut-rtl,320,cut,352,paste-rtl,384,paste,416,bulletedlist-rtl,448,bulletedlist,480,numberedlist-rtl,512,numberedlist,544,indent-rtl,576,indent,608,outdent-rtl,640,outdent,672,horizontalrule,704,image,736,anchor-rtl,768,anchor,800,link,832,unlink,864,maximize,896,pastetext-rtl,928,pastetext,960,pastefromword-rtl,992,pastefromword,1024,removeformat,1056,source-rtl,1088,source,1120,specialchar,1152,table,1184,redo-rtl,1216,redo,1248,undo-rtl,1280,undo,1312,justifyblock,1344,justifycenter,1376,justifyleft,1408,justifyright,1440,placeholder,1472,showblocks-rtl,1504,showblocks,1536' ),path = CKEDITOR.getUrl( 'plugins/icons.png' ),icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ] };})();CKEDITOR.lang.languages={"af":1,"ar":1,"eu":1,"bn":1,"bs":1,"bg":1,"ca":1,"zh-cn":1,"zh":1,"hr":1,"cs":1,"da":1,"nl":1,"en":1,"en-au":1,"en-ca":1,"en-gb":1,"eo":1,"et":1,"fo":1,"fi":1,"fr":1,"fr-ca":1,"gl":1,"ka":1,"de":1,"el":1,"gu":1,"he":1,"hi":1,"hu":1,"is":1,"it":1,"ja":1,"km":1,"ko":1,"ku":1,"lv":1,"lt":1,"mk":1,"ms":1,"mn":1,"no":1,"nb":1,"fa":1,"pl":1,"pt-br":1,"pt":1,"ro":1,"ru":1,"sr":1,"sr-latn":1,"sk":1,"sl":1,"es":1,"sv":1,"th":1,"tr":1,"ug":1,"uk":1,"vi":1,"cy":1};}());
\ No newline at end of file
diff --git a/core/misc/ckeditor/config.js b/core/misc/ckeditor/config.js
deleted file mode 100644
index 95c0826..0000000
--- a/core/misc/ckeditor/config.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * @license Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.html or http://ckeditor.com/license
- */
-
-CKEDITOR.editorConfig = function( config ) {
-	// Define changes to default configuration here.
-	// For the complete reference:
-	// http://docs.ckeditor.com/#!/api/CKEDITOR.config
-
-	// The toolbar groups arrangement, optimized for two toolbar rows.
-	config.toolbarGroups = [
-		{ name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },
-		{ name: 'editing',     groups: [ 'find', 'selection', 'spellchecker' ] },
-		{ name: 'links' },
-		{ name: 'insert' },
-		{ name: 'forms' },
-		{ name: 'tools' },
-		{ name: 'document',	   groups: [ 'mode', 'document', 'doctools' ] },
-		{ name: 'others' },
-		'/',
-		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
-		{ name: 'paragraph',   groups: [ 'list', 'indent', 'blocks', 'align' ] },
-		{ name: 'styles' },
-		{ name: 'colors' },
-		{ name: 'about' }
-	];
-
-	// Remove some buttons, provided by the standard plugins, which we don't
-	// need to have in the Standard(s) toolbar.
-	config.removeButtons = 'Underline,Subscript,Superscript';
-};
diff --git a/core/misc/ckeditor/contents.css b/core/misc/ckeditor/contents.css
deleted file mode 100644
index 3468781..0000000
--- a/core/misc/ckeditor/contents.css
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-
-body
-{
-	/* Font */
-	font-family: sans-serif, Arial, Verdana, "Trebuchet MS";
-	font-size: 12px;
-
-	/* Text color */
-	color: #333;
-
-	/* Remove the background color to make it transparent */
-	background-color: #fff;
-
-	margin: 20px;
-}
-
-.cke_editable
-{
-	font-size: 13px;
-	line-height: 1.6em;
-}
-
-blockquote
-{
-	font-style: italic;
-	font-family: Georgia, Times, "Times New Roman", serif;
-	padding: 2px 0;
-	border-style: solid;
-	border-color: #ccc;
-	border-width: 0;
-}
-
-.cke_contents_ltr blockquote
-{
-	padding-left: 20px;
-	padding-right: 8px;
-	border-left-width: 5px;
-}
-
-.cke_contents_rtl blockquote
-{
-	padding-left: 8px;
-	padding-right: 20px;
-	border-right-width: 5px;
-}
-
-a
-{
-	color: #0782C1;
-}
-
-ol,ul,dl
-{
-	/* IE7: reset rtl list margin. (#7334) */
-	*margin-right: 0px;
-	/* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/
-	padding: 0 40px;
-}
-
-h1,h2,h3,h4,h5,h6
-{
-	font-weight: normal;
-	line-height: 1.2em;
-}
-
-hr
-{
-	border: 0px;
-	border-top: 1px solid #ccc;
-}
-
-img.right {
-    border: 1px solid #ccc;
-    float: right;
-    margin-left: 15px;
-    padding: 5px;
-}
-
-img.left {
-    border: 1px solid #ccc;
-    float: left;
-    margin-right: 15px;
-    padding: 5px;
-}
-
-img:hover {
-	opacity: .9;
-	filter: alpha(opacity = 90);
-}
-
-pre
-{
-	white-space: pre-wrap; /* CSS 2.1 */
-	word-wrap: break-word; /* IE7 */
-}
diff --git a/core/misc/ckeditor/lang/af.js b/core/misc/ckeditor/lang/af.js
deleted file mode 100644
index 81291cf..0000000
--- a/core/misc/ckeditor/lang/af.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['af']={"dir":"ltr","editor":"Teksverwerker","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur na bediener","image":"Afbeelding","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teks-area","hiddenField":"Blinde veld","button":"Knop","select":"Keuseveld","imageButton":"Afbeeldingsknop","notSet":"<geen instelling>","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Sleep om te herskaal","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n getal nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is u seker dat u 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Doel","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Oplyn","alignLeft":"Links","alignRight":"Regs","alignCenter":"Sentreer","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","invalidValue":"Invalid value.","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>"},"about":{"copy":"Kopiereg &copy; $1. Alle regte voorbehou.","dlgTitle":"Info oor CKEditor","help":"Check $1 for help.","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:","title":"Info oor CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurstreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"blockquote":{"toolbar":"Sitaatblok"},"clipboard":{"copy":"Kopiëer","copyError":"U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Knip","cutError":"U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Plak","pasteArea":"Plak-area","pasteMsg":"Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.","securityMsg":"Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.","title":"Byvoeg"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"image":{"alertUrl":"Gee URL van afbeelding.","alt":"Alternatiewe teks","border":"Rand","btnUpload":"Stuur na bediener","button2Img":"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?","hSpace":"HSpasie","img2Button":"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?","infoTab":"Afbeelding informasie","linkTab":"Skakel","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","resetSize":"Herstel grootte","title":"Afbeelding eienskappe","titleButton":"Afbeeldingsknop eienskappe","upload":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","vSpace":"VSpasie","validateBorder":"Rand moet 'n heelgetal wees.","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateVSpace":"VSpasie moet 'n heelgetal wees."},"fakeobjects":{"anchor":"Anker","flash":"Flash animasie","hiddenfield":"Verborge veld","iframe":"IFrame","unknown":"Onbekende objek"},"link":{"acccessKey":"Toegangsleutel","advanced":"Gevorderd","advisoryContentType":"Aanbevole inhoudstipe","advisoryTitle":"Aanbevole titel","anchor":{"toolbar":"Anker byvoeg/verander","menu":"Anker-eienskappe","title":"Anker-eienskappe","name":"Ankernaam","errorName":"Voltooi die ankernaam asseblief","remove":"Remove Anchor"},"anchorId":"Op element Id","anchorName":"Op ankernaam","charset":"Karakterstel van geskakelde bron","cssClasses":"CSS klasse","emailAddress":"E-posadres","emailBody":"Berig-inhoud","emailSubject":"Berig-onderwerp","id":"Id","info":"Skakel informasie","langCode":"Taalkode","langDir":"Skryfrigting","langDirLTR":"Links na regs (LTR)","langDirRTL":"Regs na links (RTL)","menu":"Wysig skakel","name":"Naam","noAnchors":"(Geen ankers beskikbaar in dokument)","noEmail":"Gee die e-posadres","noUrl":"Gee die skakel se URL","other":"<ander>","popupDependent":"Afhanklik (Netscape)","popupFeatures":"Eienskappe van opspringvenster","popupFullScreen":"Volskerm (IE)","popupLeft":"Posisie links","popupLocationBar":"Adresbalk","popupMenuBar":"Spyskaartbalk","popupResizable":"Herskaalbaar","popupScrollBars":"Skuifbalke","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Posisie bo","rel":"Relationship","selectAnchor":"Kies 'n anker","styles":"Styl","tabIndex":"Tab indeks","target":"Doel","targetFrame":"<raam>","targetFrameName":"Naam van doelraam","targetPopup":"<opspringvenster>","targetPopupName":"Naam van opspringvenster","title":"Skakel","toAnchor":"Anker in bladsy","toEmail":"E-pos","toUrl":"URL","toolbar":"Skakel invoeg/wysig","type":"Skakelsoort","unlink":"Verwyder skakel","upload":"Oplaai"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"pastetext":{"button":"Plak as eenvoudige teks","title":"Plak as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?","error":"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Plak vanuit Word","toolbar":"Plak vanuit Word"},"removeformat":{"toolbar":"Verwyder opmaak"},"sourcearea":{"toolbar":"Bron"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"stylescombo":{"label":"Styl","panelTitle":"Opmaak style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide    ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"justify":{"block":"Uitvul","center":"Sentreer","left":"Links oplyn","right":"Regs oplyn"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Toon blokke"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ar.js b/core/misc/ckeditor/lang/ar.js
deleted file mode 100644
index c690929..0000000
--- a/core/misc/ckeditor/lang/ar.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ar']={"dir":"rtl","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"تصفح","url":"الرابط","protocol":"البروتوكول","upload":"رفع","uploadSubmit":"أرسل","image":"صورة","flash":"فلاش","form":"نموذج","checkbox":"خانة إختيار","radio":"زر اختيار","textField":"مربع نص","textarea":"مساحة نصية","hiddenField":"إدراج حقل خفي","button":"زر ضغط","select":"اختار","imageButton":"زر صورة","notSet":"<بدون تحديد>","id":"الرقم","name":"الاسم","langDir":"إتجاه النص","langDirLtr":"اليسار لليمين (LTR)","langDirRtl":"اليمين لليسار (RTL)","langCode":"رمز اللغة","longDescr":"الوصف التفصيلى","cssClass":"فئات التنسيق","advisoryTitle":"عنوان التقرير","cssStyle":"نمط","ok":"موافق","cancel":"إلغاء الأمر","close":"أغلق","preview":"استعراض","resize":"اسحب لتغيير الحجم","generalTab":"عام","advancedTab":"متقدم","validateNumberFailed":"لايوجد نتيجة","confirmNewPage":"ستفقد أي متغييرات اذا لم تقم بحفظها اولا. هل أنت متأكد أنك تريد صفحة جديدة؟","confirmCancel":"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟","options":"خيارات","target":"هدف الرابط","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"فئات التنسيق","width":"العرض","height":"الإرتفاع","align":"محاذاة","alignLeft":"يسار","alignRight":"يمين","alignCenter":"وسط","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسفل","invalidValue":"Invalid value.","invalidHeight":"الارتفاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>"},"about":{"copy":"حقوق النشر &copy; $1. جميع الحقوق محفوظة.","dlgTitle":"عن CKEditor","help":"Check $1 for help.","moreInfo":"للحصول على معلومات الترخيص ، يرجى زيارة موقعنا على شبكة الانترنت:","title":"عن CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"غامق","italic":"مائل","strike":"يتوسطه خط","subscript":"منخفض","superscript":"مرتفع","underline":"تسطير"},"blockquote":{"toolbar":"اقتباس"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع النسخ التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصفح الذي تستخدمه تمنع القص التلقائي. فضلاً إستخدم لوحة المفاتيح لفعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteArea":"Paste Area","pasteMsg":"الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) في لوحة المفاتيح، ثم اضغط زر  <STRONG>موافق</STRONG>.","securityMsg":"نظراً لإعدادات الأمان الخاصة بمتصفحك، لن يتمكن هذا المحرر من الوصول لمحتوى حافظتك، لذلك يجب عليك لصق المحتوى مرة أخرى في هذه النافذة.","title":"لصق"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"عنصر 1%"},"list":{"bulletedlist":"ادخال/حذف تعداد نقطي","numberedlist":"ادخال/حذف تعداد رقمي"},"indent":{"indent":"زيادة المسافة البادئة","outdent":"إنقاص المسافة البادئة"},"format":{"label":"تنسيق","panelTitle":"تنسيق الفقرة","tag_address":"عنوان","tag_div":"عادي (DIV)","tag_h1":"العنوان 1","tag_h2":"العنوان  2","tag_h3":"العنوان  3","tag_h4":"العنوان  4","tag_h5":"العنوان  5","tag_h6":"العنوان  6","tag_p":"عادي","tag_pre":"منسّق"},"horizontalrule":{"toolbar":"خط فاصل"},"image":{"alertUrl":"فضلاً أكتب الموقع الذي توجد عليه هذه الصورة.","alt":"عنوان الصورة","border":"سمك الحدود","btnUpload":"أرسلها للخادم","button2Img":"هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟","hSpace":"تباعد أفقي","img2Button":"هل تريد تحويل الصورة المختارة إلى زر صورة؟","infoTab":"معلومات الصورة","linkTab":"الرابط","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","resetSize":"إستعادة الحجم الأصلي","title":"خصائص الصورة","titleButton":"خصائص زر الصورة","upload":"رفع","urlMissing":"عنوان مصدر الصورة مفقود","vSpace":"تباعد عمودي","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"إرساء","flash":"رسم متحرك بالفلاش","hiddenfield":"إدراج حقل خفي","iframe":"IFrame","unknown":"كائن غير معروف"},"link":{"acccessKey":"مفاتيح الإختصار","advanced":"متقدم","advisoryContentType":"نوع التقرير","advisoryTitle":"عنوان التقرير","anchor":{"toolbar":"إشارة مرجعية","menu":"تحرير الإشارة المرجعية","title":"خصائص الإشارة المرجعية","name":"اسم الإشارة المرجعية","errorName":"الرجاء كتابة اسم الإشارة المرجعية","remove":"Remove Anchor"},"anchorId":"حسب رقم العنصر","anchorName":"حسب الاسم","charset":"ترميز المادة المطلوبة","cssClasses":"فئات التنسيق","emailAddress":"عنوان البريد إلكتروني","emailBody":"محتوى الرسالة","emailSubject":"موضوع الرسالة","id":"هوية","info":"معلومات الرابط","langCode":"كود النص","langDir":"إتجاه النص","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","menu":"تحرير رابط","name":"الاسم","noAnchors":"(لا توجد علامات مرجعية في هذا المستند)","noEmail":"من فضلك أدخل عنوان البريد الإلكتروني","noUrl":"من فضلك أدخل عنوان الموقع الذي يشير إليه الرابط","other":"<أخرى>","popupDependent":"تابع (Netscape)","popupFeatures":"خصائص النافذة المنبثقة","popupFullScreen":"ملئ الشاشة (IE)","popupLeft":"التمركز لليسار","popupLocationBar":"شريط العنوان","popupMenuBar":"القوائم الرئيسية","popupResizable":"قابلة التشكيل","popupScrollBars":"أشرطة التمرير","popupStatusBar":"شريط الحالة","popupToolbar":"شريط الأدوات","popupTop":"التمركز للأعلى","rel":"Relationship","selectAnchor":"اختر علامة مرجعية","styles":"نمط","tabIndex":"الترتيب","target":"هدف الرابط","targetFrame":"<إطار>","targetFrameName":"اسم الإطار المستهدف","targetPopup":"<نافذة منبثقة>","targetPopupName":"اسم النافذة المنبثقة","title":"إرتباط تشعبي","toAnchor":"مكان في هذا المستند","toEmail":"بريد إلكتروني","toUrl":"الرابط","toolbar":"رابط","type":"نوع الربط","unlink":"إزالة رابط","upload":"رفع"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"pastetext":{"button":"لصق كنص بسيط","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيفه قبل الشروع في عملية اللصق؟","error":"It was not possible to clean up the pasted data due to an internal error","title":"لصق من وورد","toolbar":"لصق من وورد"},"removeformat":{"toolbar":"إزالة التنسيقات"},"sourcearea":{"toolbar":"المصدر"},"specialchar":{"options":"Special Character Options","title":"اختر الخواص","toolbar":"إدراج  خاص.ِ"},"stylescombo":{"label":"أنماط","panelTitle":"Formatting Styles","panelTitle1":"أنماط الفقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"table":{"border":"الحدود","caption":"الوصف","cell":{"menu":"خلية","insertBefore":"إدراج خلية قبل","insertAfter":"إدراج خلية بعد","deleteCell":"حذف خلية","merge":"دمج خلايا","mergeRight":"دمج لليمين","mergeDown":"دمج للأسفل","splitHorizontal":"تقسيم الخلية أفقياً","splitVertical":"تقسيم الخلية عمودياً","title":"خصائص الخلية","cellType":"نوع الخلية","rowSpan":"امتداد الصفوف","colSpan":"امتداد الأعمدة","wordWrap":"التفاف النص","hAlign":"محاذاة أفقية","vAlign":"محاذاة رأسية","alignBaseline":"خط القاعدة","bgColor":"لون الخلفية","borderColor":"لون الحدود","data":"بيانات","header":"عنوان","yes":"نعم","no":"لا","invalidWidth":"عرض الخلية يجب أن يكون عدداً.","invalidHeight":"ارتفاع الخلية يجب أن يكون عدداً.","invalidRowSpan":"امتداد الصفوف يجب أن يكون عدداً صحيحاً.","invalidColSpan":"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.","chooseColor":"اختر"},"cellPad":"المسافة البادئة","cellSpace":"تباعد الخلايا","column":{"menu":"عمود","insertBefore":"إدراج عمود قبل","insertAfter":"إدراج عمود بعد","deleteColumn":"حذف أعمدة"},"columns":"أعمدة","deleteTable":"حذف الجدول","headers":"العناوين","headersBoth":"كلاهما","headersColumn":"العمود الأول","headersNone":"بدون","headersRow":"الصف الأول","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المسافة البادئة يجب أن تكون عدداً","invalidCellSpacing":"المسافة بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صفر.","invalidHeight":"ارتفاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصفوف يجب أن يكون عدداً أكبر من صفر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صف","insertBefore":"إدراج صف قبل","insertAfter":"إدراج صف بعد","deleteRow":"حذف صفوف"},"rows":"صفوف","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"width unit"},"undo":{"redo":"إعادة","undo":"تراجع"},"justify":{"block":"ضبط","center":"توسيط","left":"محاذاة إلى اليسار","right":"محاذاة إلى اليمين"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"مخطط تفصيلي"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/bg.js b/core/misc/ckeditor/lang/bg.js
deleted file mode 100644
index 989141d..0000000
--- a/core/misc/ckeditor/lang/bg.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['bg']={"dir":"ltr","editor":"Текстов редактор за форматиран текст","common":{"editorHelp":"натиснете ALT 0 за помощ","browseServer":"Избор от сървъра","url":"URL","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към сървъра","image":"Снимка","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"Текстово поле","textarea":"Текстова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за снимка","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"Посока на езика","langDirLtr":"Ляво на дясно (ЛнД)","langDirRtl":"Дясно на ляво (ДнЛ)","langCode":"Код на езика","longDescr":"Уеб адрес за дълго описание","cssClass":"Класове за CSS","advisoryTitle":"Препоръчително заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общо","advancedTab":"Разширено","validateNumberFailed":"Тази стойност не е число","confirmNewPage":"Всички незапазени промени ще бъдат изгубени. Сигурни ли сте, че желаете да заредите нова страница?","confirmCancel":"Някои от опциите са променени. Сигурни ли сте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Нов прозорец (_blank)","targetTop":"Горна позиция (_top)","targetSelf":"Текущия прозорец (_self)","targetParent":"Основен прозорец (_parent)","langDirLTR":"Ляво на дясно (ЛнД)","langDirRTL":"Дясно на ляво (ДнЛ)","styles":"Стил","cssClasses":"Класове за CSS","width":"Ширина","height":"Височина","align":"Подравняване","alignLeft":"Ляво","alignRight":"Дясно","alignCenter":"Център","alignTop":"Горе","alignMiddle":"По средата","alignBottom":"Долу","invalidValue":"Невалидна стойност.","invalidHeight":"Височината трябва да е число.","invalidWidth":"Ширина требе да е число.","invalidCssLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Стойността на полето \"%1\" трябва да бъде положително число с или без валидна HTML измервателна единица (px or %).","invalidInlineStyle":"Стойността на стилa трябва да съдържат една или повече двойки във формат \"name : value\", разделени с двоеточие.","cssLengthTooltip":"Въведете числена стойност в пиксели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, недостъпно</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Относно CKEditor","help":"Проверете $1 за помощ.","moreInfo":"За лицензионна информация моля посетете сайта ни:","title":"Относно CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Удебелен","italic":"Наклонен","strike":"Зачертан текст","subscript":"Индексиран текст","superscript":"Суперскрипт","underline":"Подчертан"},"blockquote":{"toolbar":"Блок за цитат"},"clipboard":{"copy":"Копирай","copyError":"Настройките за сигурност на вашия бразуър не разрешават на редактора да изпълни запаметяването. За целта използвайте клавиатурата (Ctrl/Cmd+C).","cut":"Отрежи","cutError":"Настройките за сигурност на Вашия браузър не позволяват на редактора автоматично да изъплни действията за отрязване. Моля ползвайте клавиатурните команди за целта (ctrl+x).","paste":"Вмъкни","pasteArea":"Paste Area","pasteMsg":"Вмъкнете тук съдъжанието с клавиатуарата (<STRONG>Ctrl/Cmd+V</STRONG>) и натиснете <STRONG>OK</STRONG>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Вмъкни"},"contextmenu":{"options":"Опции на контекстното меню"},"toolbar":{"toolbarCollapse":"Свиване на лентата с инструменти","toolbarExpand":"Разширяване на лентата с инструменти","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Undo","editing":"Промяна","forms":"Форми","basicstyles":"Базови стилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"Инструменти"},"toolbars":"Ленти с инструменти"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"list":{"bulletedlist":"Вмъкване/Премахване на точков списък","numberedlist":"Вмъкване/Премахване на номериран списък"},"indent":{"indent":"Увеличаване на отстъпа","outdent":"Намаляване на отстъпа"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Адрес","tag_div":"Параграф (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Нормален","tag_pre":"Форматиран"},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линия"},"image":{"alertUrl":"Моля, въведете пълния път до изображението","alt":"Алтернативен текст","border":"Рамка","btnUpload":"Изпрати я на сървъра","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хоризонтален отстъп","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Инфо за снимка","linkTab":"Връзка","lockRatio":"Заключване на съотношението","menu":"Настройки за снимка","resetSize":"Нулиране на размер","title":"Настройки за снимка","titleButton":"Настойки за бутон за снимка","upload":"Качване","urlMissing":"Image source URL is missing.","vSpace":"Вертикален отстъп","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимация","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"Неизвестен обект"},"link":{"acccessKey":"Ключ за достъп","advanced":"Разширено","advisoryContentType":"Препоръчителен тип на съдържанието","advisoryTitle":"Препоръчително заглавие","anchor":{"toolbar":"Котва","menu":"Промяна на котва","title":"Настройки на котва","name":"Име на котва","errorName":"Моля въведете име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Тип на свързания ресурс","cssClasses":"Класове за CSS","emailAddress":"E-mail aдрес","emailBody":"Съдържание","emailSubject":"Тема","id":"ID","info":"Инфо за връзката","langCode":"Код за езика","langDir":"Посока на езика","langDirLTR":"Ляво на Дясно (ЛнД)","langDirRTL":"Дясно на Ляво (ДнЛ)","menu":"Промяна на връзка","name":"Име","noAnchors":"(Няма котви в текущия документ)","noEmail":"Моля въведете e-mail aдрес","noUrl":"Моля въведете URL адреса","other":"<друго>","popupDependent":"Зависимост (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"Цял екран (IE)","popupLeft":"Лява позиция","popupLocationBar":"Лента с локацията","popupMenuBar":"Лента за меню","popupResizable":"Оразмеряем","popupScrollBars":"Скролери","popupStatusBar":"Статусна лента","popupToolbar":"Лента с инструменти","popupTop":"Горна позиция","rel":"Връзка","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на достъп","target":"Цел","targetFrame":"<frame>","targetFrameName":"Име на целевият прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текста","toEmail":"E-mail","toUrl":"Уеб адрес","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Максимизиране","minimize":"Минимизиране"},"pastetext":{"button":"Вмъкни като чист текст","title":"Вмъкни като чист текст"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Вмъкни от MS Word","toolbar":"Вмъкни от MS Word"},"removeformat":{"toolbar":"Премахване на форматирането"},"sourcearea":{"toolbar":"Източник"},"specialchar":{"options":"Опции за специален знак","title":"Избор на специален знак","toolbar":"Вмъкване на специален знак"},"stylescombo":{"label":"Стилове","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка след","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане в дясно","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Настройки на клетката","cellType":"Тип на клетката","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Авто. пренос","hAlign":"Хоризонтално подравняване","vAlign":"Вертикално подравняване","alignBaseline":"Базова линия","bgColor":"Фон","borderColor":"Цвят на рамката","data":"Данни","header":"Хедър","yes":"Да","no":"Не","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Изберете"},"cellPad":"Отделяне на клетките","cellSpace":"Разтояние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона след","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Хедъри","headersBoth":"Заедно","headersColumn":"Първа колона","headersNone":"Няма","headersRow":"Първи ред","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Броят колони трябва да е по-голям от 0.","invalidHeight":"Table height must be a number.","invalidRows":"Броят редове трябва да е по-голям от 0.","invalidWidth":"Table width must be a number.","menu":"Настройки на таблицата","row":{"menu":"Ред","insertBefore":"Insert Row Before","insertAfter":"Вмъкване на ред след","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информация","title":"Настройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пиксела","widthUnit":"единица за ширина"},"undo":{"redo":"Връщане на предишен статус","undo":"Възтанови"},"justify":{"block":"Двустранно подравняване","center":"Център","left":"Подравни в ляво","right":"Подравни в дясно"},"placeholder":{"title":"Настройки на контейнера","toolbar":"Нов контейнер","text":"Текст за контейнера","edit":"Промяна на контейнер","textMissing":"Контейнера трябва да съдържа текст."},"showblocks":{"toolbar":"Показва блокове"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/bn.js b/core/misc/ckeditor/lang/bn.js
deleted file mode 100644
index ce72d37..0000000
--- a/core/misc/ckeditor/lang/bn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['bn']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ব্রাউজ সার্ভার","url":"URL","protocol":"প্রোটোকল","upload":"আপলোড","uploadSubmit":"ইহাকে সার্ভারে প্রেরন কর","image":"ছবির লেবেল যুক্ত কর","flash":"ফ্লাশ লেবেল যুক্ত কর","form":"ফর্ম","checkbox":"চেক বাক্স","radio":"রেডিও বাটন","textField":"টেক্সট ফীল্ড","textarea":"টেক্সট এরিয়া","hiddenField":"গুপ্ত ফীল্ড","button":"বাটন","select":"বাছাই ফীল্ড","imageButton":"ছবির বাটন","notSet":"<সেট নেই>","id":"আইডি","name":"নাম","langDir":"ভাষা লেখার দিক","langDirLtr":"বাম থেকে ডান (LTR)","langDirRtl":"ডান থেকে বাম (RTL)","langCode":"ভাষা কোড","longDescr":"URL এর লম্বা বর্ণনা","cssClass":"স্টাইল-শীট ক্লাস","advisoryTitle":"পরামর্শ শীর্ষক","cssStyle":"স্টাইল","ok":"ওকে","cancel":"বাতিল","close":"Close","preview":"প্রিভিউ","resize":"Resize","generalTab":"General","advancedTab":"এডভান্সড","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"টার্গেট","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","styles":"স্টাইল","cssClasses":"স্টাইল-শীট ক্লাস","width":"প্রস্থ","height":"দৈর্ঘ্য","align":"এলাইন","alignLeft":"বামে","alignRight":"ডানে","alignCenter":"মাঝখানে","alignTop":"উপর","alignMiddle":"মধ্য","alignBottom":"নীচে","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"বোল্ড","italic":"ইটালিক","strike":"স্ট্রাইক থ্রু","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আন্ডারলাইন"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"কপি","copyError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কপি করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার ব্রাউজারের সুরক্ষা সেটিংস এডিটরকে অটোমেটিক কাট করার অনুমতি দেয়নি। দয়া করে এই কাজের জন্য কিবোর্ড ব্যবহার করুন (Ctrl/Cmd+X)।","paste":"পেস্ট","pasteArea":"Paste Area","pasteMsg":"অনুগ্রহ করে নীচের বাক্সে কিবোর্ড ব্যবহার করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেস্ট করুন এবং <STRONG>OK</STRONG> চাপ দিন","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"পেস্ট"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"বুলেট লিস্ট লেবেল","numberedlist":"সাংখ্যিক লিস্টের লেবেল"},"indent":{"indent":"ইনডেন্ট বাড়াও","outdent":"ইনডেন্ট কমাও"},"format":{"label":"ফন্ট ফরমেট","panelTitle":"ফন্ট ফরমেট","tag_address":"ঠিকানা","tag_div":"শীর্ষক (DIV)","tag_h1":"শীর্ষক ১","tag_h2":"শীর্ষক ২","tag_h3":"শীর্ষক ৩","tag_h4":"শীর্ষক ৪","tag_h5":"শীর্ষক ৫","tag_h6":"শীর্ষক ৬","tag_p":"সাধারণ","tag_pre":"ফর্মেটেড"},"horizontalrule":{"toolbar":"রেখা যুক্ত কর"},"image":{"alertUrl":"অনুগ্রহক করে ছবির URL টাইপ করুন","alt":"বিকল্প টেক্সট","border":"বর্ডার","btnUpload":"ইহাকে সার্ভারে প্রেরন কর","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"হরাইজন্টাল স্পেস","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ছবির তথ্য","linkTab":"লিংক","lockRatio":"অনুপাত লক কর","menu":"ছবির প্রোপার্টি","resetSize":"সাইজ পূর্বাবস্থায় ফিরিয়ে দাও","title":"ছবির প্রোপার্টি","titleButton":"ছবি বাটন প্রোপার্টি","upload":"আপলোড","urlMissing":"Image source URL is missing.","vSpace":"ভার্টিকেল স্পেস","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"এক্সেস কী","advanced":"এডভান্সড","advisoryContentType":"পরামর্শ কন্টেন্টের প্রকার","advisoryTitle":"পরামর্শ শীর্ষক","anchor":{"toolbar":"নোঙ্গর","menu":"নোঙর প্রোপার্টি","title":"নোঙর প্রোপার্টি","name":"নোঙরের নাম","errorName":"নোঙরের নাম টাইপ করুন","remove":"Remove Anchor"},"anchorId":"নোঙরের আইডি দিয়ে","anchorName":"নোঙরের নাম দিয়ে","charset":"লিংক রিসোর্স ক্যারেক্টর সেট","cssClasses":"স্টাইল-শীট ক্লাস","emailAddress":"ইমেইল ঠিকানা","emailBody":"মেসেজের দেহ","emailSubject":"মেসেজের বিষয়","id":"আইডি","info":"লিংক তথ্য","langCode":"ভাষা লেখার দিক","langDir":"ভাষা লেখার দিক","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","menu":"লিংক সম্পাদন","name":"নাম","noAnchors":"(No anchors available in the document)","noEmail":"অনুগ্রহ করে ইমেইল এড্রেস টাইপ করুন","noUrl":"অনুগ্রহ করে URL লিংক টাইপ করুন","other":"<other>","popupDependent":"ডিপেন্ডেন্ট (Netscape)","popupFeatures":"পপআপ উইন্ডো ফীচার সমূহ","popupFullScreen":"পূর্ণ পর্দা জুড়ে (IE)","popupLeft":"বামের পজিশন","popupLocationBar":"লোকেশন বার","popupMenuBar":"মেন্যু বার","popupResizable":"Resizable","popupScrollBars":"স্ক্রল বার","popupStatusBar":"স্ট্যাটাস বার","popupToolbar":"টুল বার","popupTop":"ডানের পজিশন","rel":"Relationship","selectAnchor":"নোঙর বাছাই","styles":"স্টাইল","tabIndex":"ট্যাব ইন্ডেক্স","target":"টার্গেট","targetFrame":"<ফ্রেম>","targetFrameName":"টার্গেট ফ্রেমের নাম","targetPopup":"<পপআপ উইন্ডো>","targetPopupName":"পপআপ উইন্ডোর নাম","title":"লিংক","toAnchor":"এই পেজে নোঙর কর","toEmail":"ইমেইল","toUrl":"URL","toolbar":"লিংক যুক্ত কর","type":"লিংক প্রকার","unlink":"লিংক সরাও","upload":"আপলোড"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"সাদা টেক্সট হিসেবে পেস্ট কর","title":"সাদা টেক্সট হিসেবে পেস্ট কর"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"পেস্ট (শব্দ)","toolbar":"পেস্ট (শব্দ)"},"removeformat":{"toolbar":"ফরমেট সরাও"},"sourcearea":{"toolbar":"সোর্স"},"specialchar":{"options":"Special Character Options","title":"বিশেষ ক্যারেক্টার বাছাই কর","toolbar":"বিশেষ অক্ষর যুক্ত কর"},"stylescombo":{"label":"স্টাইল","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"বর্ডার সাইজ","caption":"শীর্ষক","cell":{"menu":"সেল","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"সেল মুছে দাও","merge":"সেল জোড়া দাও","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"সেল প্যাডিং","cellSpace":"সেল স্পেস","column":{"menu":"কলাম","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"কলাম মুছে দাও"},"columns":"কলাম","deleteTable":"টেবিল ডিলীট কর","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"টেবিল প্রোপার্টি","row":{"menu":"রো","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"রো মুছে দাও"},"rows":"রো","summary":"সারাংশ","title":"টেবিল প্রোপার্টি","toolbar":"টেবিলের লেবেল যুক্ত কর","widthPc":"শতকরা","widthPx":"পিক্সেল","widthUnit":"width unit"},"undo":{"redo":"রি-ডু","undo":"আনডু"},"justify":{"block":"ব্লক জাস্টিফাই","center":"মাঝ বরাবর ঘেষা","left":"বা দিকে ঘেঁষা","right":"ডান দিকে ঘেঁষা"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/bs.js b/core/misc/ckeditor/lang/bs.js
deleted file mode 100644
index 025dde9..0000000
--- a/core/misc/ckeditor/lang/bs.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['bs']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije podešeno>","id":"Id","name":"Naziv","langDir":"Smjer pisanja","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Jezièni kôd","longDescr":"Dugaèki opis URL-a","cssClass":"Klase CSS stilova","advisoryTitle":"Advisory title","cssStyle":"Stil","ok":"OK","cancel":"Odustani","close":"Close","preview":"Prikaži","resize":"Resize","generalTab":"General","advancedTab":"Naprednije","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Prozor","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase CSS stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Centar","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Zalijepi"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"image":{"alertUrl":"Molimo ukucajte URL od slike.","alt":"Tekst na slici","border":"Okvir","btnUpload":"Šalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","resetSize":"Resetuj dimenzije","title":"Svojstva slike","titleButton":"Image Button Properties","upload":"Šalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Pristupna tipka","advanced":"Naprednije","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Klase CSS stilova","emailAddress":"E-Mail Adresa","emailBody":"Poruka","emailSubject":"Subjekt poruke","id":"Id","info":"Link info","langCode":"Smjer pisanja","langDir":"Smjer pisanja","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Izmjeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra na stranici)","noEmail":"Molimo ukucajte e-mail adresu","noUrl":"Molimo ukucajte URL link","other":"<other>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Moguænosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Resizable","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka sa alatima","popupTop":"Gornja pozicija","rel":"Relationship","selectAnchor":"Izaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Prozor","targetFrame":"<frejm>","targetFrameName":"Target Frame Name","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/Izmjeni link","type":"Tip linka","unlink":"Izbriši link","upload":"Šalji"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Zalijepi kao obièan tekst","title":"Zalijepi kao obièan tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalijepi iz Word-a","toolbar":"Zalijepi iz Word-a"},"removeformat":{"toolbar":"Poništi format"},"sourcearea":{"toolbar":"HTML kôd"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Okvir","caption":"Naslov","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Briši æelije","merge":"Spoji æelije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Uvod æelija","cellSpace":"Razmak æelija","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Briši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Svojstva tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Briši redove"},"rows":"Redova","summary":"Summary","title":"Svojstva tabele","toolbar":"Tabela","widthPc":"posto","widthPx":"piksela","widthUnit":"width unit"},"undo":{"redo":"Ponovi","undo":"Vrati"},"justify":{"block":"Puno poravnanje","center":"Centralno poravnanje","left":"Lijevo poravnanje","right":"Desno poravnanje"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ca.js b/core/misc/ckeditor/lang/ca.js
deleted file mode 100644
index 4b05a3b..0000000
--- a/core/misc/ckeditor/lang/ca.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ca']={"dir":"ltr","editor":"Editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"<no definit>","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar la finestra de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra major (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","alignLeft":"Ajusta a l'esquerra","alignRight":"Ajusta a la dreta","alignCenter":"Centre","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un nombre.","invalidWidth":"L'amplada ha de ser un nombre.","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"},"about":{"copy":"Copyright &copy; $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor","help":"Premeu $1 per obtenir ajuda.","moreInfo":"Per informació sobre llicències visiteu el web:","title":"Quant al CKEditor","userGuide":"Manual d'usuari de CKEditor"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Barrat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"blockquote":{"toolbar":"Bloc de cita"},"clipboard":{"copy":"Copia","copyError":"La seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl+C).","cut":"Retalla","cutError":"La seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl+X).","paste":"Enganxa","pasteArea":"Àrea d'enganxat","pasteMsg":"Si us plau, enganxeu dins del següent camp utilitzant el teclat (<STRONG>Ctrl+V</STRONG>) i premeu <STRONG>OK</STRONG>.","securityMsg":"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir al porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.","title":"Enganxa"},"contextmenu":{"options":"Opcions del menú contextual"},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"image":{"alertUrl":"Si us plau, escriviu la URL de la imatge","alt":"Text alternatiu","border":"Vora","btnUpload":"Envia-la al servidor","button2Img":"Voleu transformar el botó d'imatge seleccionat en una simple imatge?","hSpace":"Espaiat horit.","img2Button":"Voleu transformar la imatge seleccionada en un botó d'imatge?","infoTab":"Informació de la imatge","linkTab":"Enllaç","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","resetSize":"Restaura la mida","title":"Propietats de la imatge","titleButton":"Propietats del botó d'imatge","upload":"Puja","urlMissing":"Falta la URL de la imatge.","vSpace":"Espaiat vert.","validateBorder":"La vora ha de ser un nombre enter.","validateHSpace":"HSpace ha de ser un nombre enter.","validateVSpace":"VSpace ha de ser un nombre enter."},"fakeobjects":{"anchor":"Àncora","flash":"Animació Flash","hiddenfield":"Camp ocult","iframe":"IFrame","unknown":"Objecte desconegut"},"link":{"acccessKey":"Clau d'accés","advanced":"Avançat","advisoryContentType":"Tipus de contingut consultiu","advisoryTitle":"Títol consultiu","anchor":{"toolbar":"Insereix/Edita àncora","menu":"Propietats de l'àncora","title":"Propietats de l'àncora","name":"Nom de l'àncora","errorName":"Si us plau, escriviu el nom de l'ancora","remove":"Remove Anchor"},"anchorId":"Per Id d'element","anchorName":"Per nom d'àncora","charset":"Conjunt de caràcters font enllaçat","cssClasses":"Classes del full d'estil","emailAddress":"Adreça de correu electrònic","emailBody":"Cos del missatge","emailSubject":"Assumpte del missatge","id":"Id","info":"Informació de l'enllaç","langCode":"Direcció de l'idioma","langDir":"Direcció de l'idioma","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","menu":"Edita l'enllaç","name":"Nom","noAnchors":"(No hi ha àncores disponibles en aquest document)","noEmail":"Si us plau, escrigui l'adreça correu electrònic","noUrl":"Si us plau, escrigui l'enllaç URL","other":"<altre>","popupDependent":"Depenent (Netscape)","popupFeatures":"Característiques finestra popup","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posició esquerra","popupLocationBar":"Barra d'adreça","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barres d'scroll","popupStatusBar":"Barra d'estat","popupToolbar":"Barra d'eines","popupTop":"Posició dalt","rel":"Relació","selectAnchor":"Selecciona una àncora","styles":"Estil","tabIndex":"Index de Tab","target":"Destí","targetFrame":"<marc>","targetFrameName":"Nom del marc de destí","targetPopup":"<finestra emergent>","targetPopupName":"Nom finestra popup","title":"Enllaç","toAnchor":"Àncora en aquesta pàgina","toEmail":"Correu electrònic","toUrl":"URL","toolbar":"Insereix/Edita enllaç","type":"Tipus d'enllaç","unlink":"Elimina l'enllaç","upload":"Puja"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"pastetext":{"button":"Enganxa com a text no formatat","title":"Enganxa com a text no formatat"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"removeformat":{"toolbar":"Elimina Format"},"sourcearea":{"toolbar":"Codi font"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la  ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la  ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula  ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula  ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"undo":{"redo":"Refés","undo":"Desfés"},"justify":{"block":"Justificat","center":"Centrat","left":"Alinea a l'esquerra","right":"Alinea a la dreta"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Mostra els blocs"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/cs.js b/core/misc/ckeditor/lang/cs.js
deleted file mode 100644
index 766dc6e..0000000
--- a/core/misc/ckeditor/lang/cs.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['cs']={"dir":"ltr","editor":"Textový editor","common":{"editorHelp":"Stiskněte ALT 0 pro nápovědu","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"Zaškrtávací políčko","radio":"Přepínač","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"Tlačítko","select":"Seznam","imageButton":"Obrázkové tlačítko","notSet":"<nenastaveno>","id":"Id","name":"Jméno","langDir":"Směr jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"Zrušit","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro změnu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není číselná.","confirmNewPage":"Jakékoliv neuložené změny obsahu budou ztraceny. Skutečně chcete otevřít novou stránku?","confirmCancel":"Některá z nastavení byla změněna. Skutečně chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovně (_top)","targetSelf":"Stejné okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","alignLeft":"Vlevo","alignRight":"Vpravo","alignCenter":"Na střed","alignTop":"Nahoru","alignMiddle":"Na střed","alignBottom":"Dolů","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být číslo.","invalidWidth":"Šířka musí být číslo.","invalidCssLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota určená pro pole \"%1\" musí být kladné číslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota určená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddělené středníky","cssLengthTooltip":"Zadejte číslo jako hodnotu v pixelech nebo číslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupné</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor","help":"Prohlédněte si $1 pro nápovědu.","moreInfo":"Pro informace o lincenci navštivte naši webovou stránku:","title":"O aplikaci CKEditor","userGuide":"Uživatelská příručka CKEditor"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Přeškrtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"blockquote":{"toolbar":"Citace"},"clipboard":{"copy":"Kopírovat","copyError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"Bezpečnostní nastavení vašeho prohlížeče nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjměte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteArea":"Oblast vkládání","pasteMsg":"Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stiskněte <STRONG>OK</STRONG>.","securityMsg":"Z důvodů nastavení bezpečnosti vašeho prohlížeče nemůže editor přistupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.","title":"Vložit"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/Zpět","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"indent":{"indent":"Zvětšit odsazení","outdent":"Zmenšit odsazení"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"image":{"alertUrl":"Zadejte prosím URL obrázku","alt":"Alternativní text","border":"Okraje","btnUpload":"Odeslat na server","button2Img":"Skutečně chcete převést zvolené obrázkové tlačítko na obyčejný obrázek?","hSpace":"Horizontální mezera","img2Button":"Skutečně chcete převést zvolený obrázek na obrázkové tlačítko?","infoTab":"Informace o obrázku","linkTab":"Odkaz","lockRatio":"Zámek","menu":"Vlastnosti obrázku","resetSize":"Původní velikost","title":"Vlastnosti obrázku","titleButton":"Vlastností obrázkového tlačítka","upload":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","vSpace":"Vertikální mezera","validateBorder":"Okraj musí být nastaven v celých číslech.","validateHSpace":"Horizontální mezera musí být nastavena v celých číslech.","validateVSpace":"Vertikální mezera musí být nastavena v celých číslech."},"fakeobjects":{"anchor":"Záložka","flash":"Flash animace","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámý objekt"},"link":{"acccessKey":"Přístupový klíč","advanced":"Rozšířené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulek","anchor":{"toolbar":"Záložka","menu":"Vlastnosti záložky","title":"Vlastnosti záložky","name":"Název záložky","errorName":"Zadejte prosím název záložky","remove":"Odstranit záložku"},"anchorId":"Podle Id objektu","anchorName":"Podle jména kotvy","charset":"Přiřazená znaková sada","cssClasses":"Třída stylu","emailAddress":"E-mailová adresa","emailBody":"Tělo zprávy","emailSubject":"Předmět zprávy","id":"Id","info":"Informace o odkazu","langCode":"Kód jazyka","langDir":"Směr jazyka","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","menu":"Změnit odkaz","name":"Jméno","noAnchors":"(Ve stránce není definována žádná kotva!)","noEmail":"Zadejte prosím e-mailovou adresu","noUrl":"Zadejte prosím URL odkazu","other":"<jiný>","popupDependent":"Závislost (Netscape)","popupFeatures":"Vlastnosti vyskakovacího okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Levý okraj","popupLocationBar":"Panel umístění","popupMenuBar":"Panel nabídky","popupResizable":"Umožňující měnit velikost","popupScrollBars":"Posuvníky","popupStatusBar":"Stavový řádek","popupToolbar":"Panel nástrojů","popupTop":"Horní okraj","rel":"Vztah","selectAnchor":"Vybrat kotvu","styles":"Styl","tabIndex":"Pořadí prvku","target":"Cíl","targetFrame":"<rámec>","targetFrameName":"Název cílového rámu","targetPopup":"<vyskakovací okno>","targetPopupName":"Název vyskakovacího okna","title":"Odkaz","toAnchor":"Kotva v této stránce","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstranit odkaz","upload":"Odeslat"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"pastetext":{"button":"Vložit jako čistý text","title":"Vložit jako čistý text"},"pastefromword":{"confirmCleanup":"Jak je vidět, vkládaný text je kopírován z Wordu. Chcete jej před vložením vyčistit?","error":"Z důvodu vnitřní chyby nebylo možné provést vyčištění vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"removeformat":{"toolbar":"Odstranit formátování"},"sourcearea":{"toolbar":"Zdroj"},"specialchar":{"options":"Nastavení speciálních znaků","title":"Výběr speciálního znaku","toolbar":"Vložit speciální znaky"},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"table":{"border":"Ohraničení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku před","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"Sloučit buňky","mergeRight":"Sloučit doprava","mergeDown":"Sloučit dolů","splitHorizontal":"Rozdělit buňky vodorovně","splitVertical":"Rozdělit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na účaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"Hlavička","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být číslo.","invalidHeight":"Zadaná výška buňky musí být číslená.","invalidRowSpan":"Zadaný počet sloučených řádků musí být celé číslo.","invalidColSpan":"Zadaný počet sloučených sloupců musí být celé číslo.","chooseColor":"Výběr"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost buněk","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec před","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","invalidBorder":"Zdaná velikost okraje musí být číselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být číselné.","invalidCellSpacing":"Zadaná vzdálenost buněk musí být číselná.","invalidCols":"Počet sloupců musí být číslo větší než 0.","invalidHeight":"Zadaná výška tabulky musí být číselná.","invalidRows":"Počet řádků musí být číslo větší než 0.","invalidWidth":"Šířka tabulky musí být číslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek před","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"undo":{"redo":"Znovu","undo":"Zpět"},"justify":{"block":"Zarovnat do bloku","center":"Zarovnat na střed","left":"Zarovnat vlevo","right":"Zarovnat vpravo"},"placeholder":{"title":"Vlastnosti vyhrazeného prostoru","toolbar":"Vytvořit vyhrazený prostor","text":"Vyhrazený text","edit":"Upravit vyhrazený prostor","textMissing":"Vyhrazený prostor musí obsahovat text."},"showblocks":{"toolbar":"Ukázat bloky"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/cy.js b/core/misc/ckeditor/lang/cy.js
deleted file mode 100644
index de6151c..0000000
--- a/core/misc/ckeditor/lang/cy.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['cy']={"dir":"ltr","editor":"Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"<heb osod>","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarth Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Llusgo i ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"Nid yw'r gwerth hwn yn rhif.","confirmNewPage":"Byddwch yn colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. A ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Mae rhai o'r opsiynau wedi'u newid. A ydych wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Ffeil Ddiwyg","width":"Lled","height":"Uchder","align":"Alinio","alignLeft":"Chwith","alignRight":"Dde","alignCenter":"Canol","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","invalidValue":"Gwerth annilys.","invalidHeight":"Rhaid i'r Uchder fod yn rhif.","invalidWidth":"Rhaid i'r Lled fod yn rhif.","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw:gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif ar gyfer gwerth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1<span class=\"cke_accessibility\">, ddim ar gael</span>"},"about":{"copy":"Hawlfraint &copy; $1. Cedwir pob hawl.","dlgTitle":"Ynghylch CKEditor","help":"Gwirio $1 am gymorth.","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:","title":"Ynghylch CKEditor","userGuide":"Canllawiau Defnyddiwr CKEditor"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"blockquote":{"toolbar":"Dyfyniad bloc"},"clipboard":{"copy":"Copïo","copyError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteArea":"Ardal Gludo","pasteMsg":"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.","securityMsg":"Oherwydd gosodiadau diogelwch eich porwr, nid yw'r porwr yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.","title":"Gludo"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer golygydd"},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"image":{"alertUrl":"Rhowch URL y ddelwedd","alt":"Testun Amgen","border":"Ymyl","btnUpload":"Anfon i'r Gweinydd","button2Img":"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?","hSpace":"BwlchLl","img2Button":"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?","infoTab":"Gwyb Delwedd","linkTab":"Dolen","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","resetSize":"Ailosod Maint","title":"Priodweddau Delwedd","titleButton":"Priodweddau Botwm Delwedd","upload":"lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","vSpace":"BwlchF","validateBorder":"Rhaid i'r ymyl fod yn gyfanrif.","validateHSpace":"Rhaid i'r HSpace fod yn gyfanrif.","validateVSpace":"Rhaid i'r VSpace fod yn gyfanrif."},"fakeobjects":{"anchor":"Angor","flash":"Animeiddiant Flash","hiddenfield":"Maes Cudd","iframe":"IFrame","unknown":"Gwrthrych Anhysbys"},"link":{"acccessKey":"Allwedd Mynediad","advanced":"Uwch","advisoryContentType":"Math y Cynnwys Cynghorol","advisoryTitle":"Teitl Cynghorol","anchor":{"toolbar":"Angor","menu":"Golygwch yr Angor","title":"Priodweddau'r Angor","name":"Enw'r Angor","errorName":"Teipiwch enw'r angor","remove":"Tynnwch yr Angor"},"anchorId":"Gan Id yr Elfen","anchorName":"Gan Enw'r Angor","charset":"Set nodau'r Adnodd Cysylltiedig","cssClasses":"Dosbarthiadau Dalen Arddull","emailAddress":"Cyfeiriad E-Bost","emailBody":"Pwnc y Neges","emailSubject":"Testun y Message Subject","id":"Id","info":"Gwyb ar y Ddolen","langCode":"Cod Iaith","langDir":"Cyfeiriad Iaith","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","menu":"Golygu Dolen","name":"Enw","noAnchors":"(Dim angorau ar gael yn y ddogfen)","noEmail":"Teipiwch gyfeiriad yr e-bost","noUrl":"Teipiwch URL y ddolen","other":"<eraill>","popupDependent":"Dibynnol (Netscape)","popupFeatures":"Nodweddion Ffenestr Bop","popupFullScreen":"Sgrin Llawn (IE)","popupLeft":"Safle Chwith","popupLocationBar":"Bar Safle","popupMenuBar":"Dewislen","popupResizable":"Ailfeintiol","popupScrollBars":"Barrau Sgrolio","popupStatusBar":"Bar Statws","popupToolbar":"Bar Offer","popupTop":"Safle Top","rel":"Perthynas","selectAnchor":"Dewiswch Angor","styles":"Arddull","tabIndex":"Indecs Tab","target":"Targed","targetFrame":"<ffrâm>","targetFrameName":"Enw Ffrâm y Targed","targetPopup":"<ffenestr bop>","targetPopupName":"Enw Ffenestr Bop","title":"Dolen","toAnchor":"Dolen at angor yn y testun","toEmail":"E-bost","toUrl":"URL","toolbar":"Dolen","type":"Math y Ddolen","unlink":"Datgysylltu","upload":"Lanlwytho"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"pastetext":{"button":"Gludo fel testun plaen","title":"Gludo fel Testun Plaen"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"removeformat":{"toolbar":"Tynnu Fformat"},"sourcearea":{"toolbar":"HTML"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nodau Arbennig"},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Choose"},"cellPad":"Padio'r gell","cellSpace":"Bylchu'r gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Nodweddion Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Nodweddion Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"undo":{"redo":"Ailadrodd","undo":"Dadwneud"},"justify":{"block":"Aliniad Bloc","center":"Alinio i'r Canol","left":"Alinio i'r Chwith","right":"Alinio i'r Dde"},"placeholder":{"title":"Priodweddau'r Daliwr Geiriau","toolbar":"Creu Daliwr Geiriau","text":"Testun y Daliwr Geiriau","edit":"Golygu'r Dailwr Geiriau","textMissing":"Mae'n rhaid i'r daliwr geiriau gynnwys testun."},"showblocks":{"toolbar":"Dangos Blociau"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/da.js b/core/misc/ckeditor/lang/da.js
deleted file mode 100644
index ced9776..0000000
--- a/core/misc/ckeditor/lang/da.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['da']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","alignLeft":"Venstre","alignRight":"Højre","alignCenter":"Centreret","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","invalidValue":"Invalid value.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed  (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed  (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>"},"about":{"copy":"Copyright &copy; $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor","help":"Se $1 for at få hjælp.","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):","title":"Om CKEditor","userGuide":"CKEditor-brugermanual"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"blockquote":{"toolbar":"Blokcitat"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteArea":"Indsæt område","pasteMsg":"Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.","securityMsg":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.","title":"Indsæt"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"image":{"alertUrl":"Indtast stien til billedet","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Upload fil til serveren","button2Img":"Vil du lave billedknappen om til et almindeligt billede?","hSpace":"Vandret margen","img2Button":"Vil du lave billedet om til en billedknap?","infoTab":"Generelt","linkTab":"Hyperlink","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","resetSize":"Nulstil størrelse","title":"Egenskaber for billede","titleButton":"Egenskaber for billedknap","upload":"Upload","urlMissing":"Kilde på billed-URL mangler","vSpace":"Lodret margen","validateBorder":"Kant skal være et helt nummer.","validateHSpace":"HSpace skal være et helt nummer.","validateVSpace":"VSpace skal være et helt nummer."},"fakeobjects":{"anchor":"Anker","flash":"Flashanimation","hiddenfield":"Skjult felt","iframe":"Iframe","unknown":"Ukendt objekt"},"link":{"acccessKey":"Genvejstast","advanced":"Avanceret","advisoryContentType":"Indholdstype","advisoryTitle":"Titel","anchor":{"toolbar":"Indsæt/redigér bogmærke","menu":"Egenskaber for bogmærke","title":"Egenskaber for bogmærke","name":"Bogmærkenavn","errorName":"Indtast bogmærkenavn","remove":"Fjern bogmærke"},"anchorId":"Efter element-Id","anchorName":"Efter ankernavn","charset":"Tegnsæt","cssClasses":"Typografiark","emailAddress":"E-mailadresse","emailBody":"Besked","emailSubject":"Emne","id":"Id","info":"Generelt","langCode":"Tekstretning","langDir":"Tekstretning","langDirLTR":"Fra venstre mod højre (LTR)","langDirRTL":"Fra højre mod venstre (RTL)","menu":"Redigér hyperlink","name":"Navn","noAnchors":"(Ingen bogmærker i dokumentet)","noEmail":"Indtast e-mailadresse!","noUrl":"Indtast hyperlink-URL!","other":"<anden>","popupDependent":"Koblet/dependent (Netscape)","popupFeatures":"Egenskaber for popup","popupFullScreen":"Fuld skærm (IE)","popupLeft":"Position fra venstre","popupLocationBar":"Adresselinje","popupMenuBar":"Menulinje","popupResizable":"Justérbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Værktøjslinje","popupTop":"Position fra toppen","rel":"Relation","selectAnchor":"Vælg et anker","styles":"Typografi","tabIndex":"Tabulatorindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Destinationsvinduets navn","targetPopup":"<popup vindue>","targetPopupName":"Popupvinduets navn","title":"Egenskaber for hyperlink","toAnchor":"Bogmærke på denne side","toEmail":"E-mail","toUrl":"URL","toolbar":"Indsæt/redigér hyperlink","type":"Type","unlink":"Fjern hyperlink","upload":"Upload"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","title":"Indsæt som ikke-formateret tekst"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"removeformat":{"toolbar":"Fjern formatering"},"sourcearea":{"toolbar":"Kilde"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"justify":{"block":"Lige margener","center":"Centreret","left":"Venstrestillet","right":"Højrestillet"},"placeholder":{"title":"Egenskaber for pladsholder","toolbar":"Opret pladsholder","text":"Tekst til pladsholder","edit":"Rediger pladsholder","textMissing":"Pladsholder skal indeholde tekst"},"showblocks":{"toolbar":"Vis afsnitsmærker"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/de.js b/core/misc/ckeditor/lang/de.js
deleted file mode 100644
index 3c79159..0000000
--- a/core/misc/ckeditor/lang/de.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['de']={"dir":"ltr","editor":"WYSIWYG-Editor","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Checkbox","radio":"Radiobutton","textField":"Textfeld einzeilig","textarea":"Textfeld mehrzeilig","hiddenField":"Verstecktes Feld","button":"Klickbutton","select":"Auswahlfeld","imageButton":"Bildbutton","notSet":"<nichts>","id":"ID","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachenkürzel","longDescr":"Langform URL","cssClass":"Stylesheet Klasse","advisoryTitle":"Titel Beschreibung","cssStyle":"Style","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Zum Vergrößern ziehen","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","invalidValue":"Invalid value.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor","help":"Prüfe $1 für Hilfe.","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:","title":"Über CKEditor","userGuide":"CKEditor Benutzerhandbuch"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"blockquote":{"toolbar":"Zitatblock"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"contextmenu":{"options":"Kontextmenü Optionen"},"toolbar":{"toolbarCollapse":"Symbolleiste einklappen","toolbarExpand":"Symbolleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formularen","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Symbolleisten"},"elementspath":{"eleLabel":"Elements Pfad","eleTitle":"%1 Element"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste"},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Addresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"image":{"alertUrl":"Bitte geben Sie die Bild-URL an","alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?","infoTab":"Bild-Info","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bild-Eigenschaften","resetSize":"Größe zurücksetzen","title":"Bild-Eigenschaften","titleButton":"Bildbutton-Eigenschaften","upload":"Hochladen","urlMissing":"Imagequelle URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muß eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muß eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muß eine ganze Zahl sein."},"fakeobjects":{"anchor":"Anker","flash":"Flash Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker einfügen/editieren","menu":"Anker-Eigenschaften","title":"Anker-Eigenschaften","name":"Anker Name","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"nach Element Id","anchorName":"nach Anker Name","charset":"Ziel-Zeichensatz","cssClasses":"Stylesheet Klasse","emailAddress":"E-Mail Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Id","info":"Link-Info","langCode":"Sprachenkürzel","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link editieren","name":"Name","noAnchors":"(keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie e-Mail Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"<andere>","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenster-Eigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adress-Leiste","popupMenuBar":"Menü-Leiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Symbolleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"<Frame>","targetFrameName":"Ziel-Fenster-Name","targetPopup":"<Pop-up Fenster>","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"pastetext":{"button":"Als Text einfügen","title":"Als Text einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus MS-Word einfügen","toolbar":"Aus MS-Word einfügen"},"removeformat":{"toolbar":"Formatierungen entfernen"},"sourcearea":{"toolbar":"Quellcode"},"specialchar":{"options":"Sonderzeichen Optionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen/editieren"},"stylescombo":{"label":"Stil","panelTitle":"Formatierungenstil","panelTitle1":"Block Stilart","panelTitle2":"Inline Stilart","panelTitle3":"Objekt Stilart"},"table":{"border":"Rahmen","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zellen-Eigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muß eine Zahl sein.","invalidHeight":"Zellenhöhe muß eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"justify":{"block":"Blocksatz","center":"Zentriert","left":"Linksbündig","right":"Rechtsbündig"},"placeholder":{"title":"Platzhalter Einstellungen","toolbar":"Platzhalter erstellen","text":"Platzhalter Text","edit":"Platzhalter bearbeiten","textMissing":"Der Platzhalter muss einen Text beinhalten."},"showblocks":{"toolbar":"Blöcke anzeigen"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/el.js b/core/misc/ckeditor/lang/el.js
deleted file mode 100644
index e2e8390..0000000
--- a/core/misc/ckeditor/lang/el.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['el']={"dir":"ltr","editor":"Επεξεργαστής Πλούσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"Εξερεύνηση διακομιστή","url":"URL","protocol":"Πρωτόκολλο","upload":"Ανέβασμα","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","flash":"Εισαγωγή Flash","form":"Φόρμα","checkbox":"Κουτί επιλογής","radio":"Κουμπί επιλογής","textField":"Πεδίο κειμένου","textarea":"Περιοχή κειμένου","hiddenField":"Κρυφό πεδίο","button":"Κουμπί","select":"Πεδίο επιλογής","imageButton":"Κουμπί εικόνας","notSet":"<δεν έχει ρυθμιστεί>","id":"Id","name":"Όνομα","langDir":"Κατεύθυνση κειμένου","langDirLtr":"Αριστερά προς Δεξιά (LTR)","langDirRtl":"Δεξιά προς Αριστερά (RTL)","langCode":"Κωδικός Γλώσσας","longDescr":"Αναλυτική περιγραφή URL","cssClass":"Stylesheet Classes","advisoryTitle":"Ενδεικτικός τίτλος","cssStyle":"Μορφή κειμένου","ok":"OK","cancel":"Ακύρωση","close":"Κλείσιμο","preview":"Προεπισκόπηση","resize":"Σύρσιμο για αλλαγή μεγέθους","generalTab":"Γενικά","advancedTab":"Για προχωρημένους","validateNumberFailed":"Αυτή η τιμή δεν είναι αριθμός.","confirmNewPage":"Οι όποιες αλλαγές στο περιεχόμενο θα χαθούν. Είσαστε σίγουροι ότι θέλετε να φορτώσετε μια νέα σελίδα;","confirmCancel":"Μερικές επιλογές έχουν αλλάξει. Είσαστε σίγουροι ότι θέλετε να κλείσετε το παράθυρο διαλόγου;","options":"Επιλογές","target":"Προορισμός","targetNew":"Νέο Παράθυρο (_blank)","targetTop":"Αρχική Περιοχή (_top)","targetSelf":"Ίδια Περιοχή (_self)","targetParent":"Γονεϊκό Παράθυρο (_parent)","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","styles":"Μορφή","cssClasses":"Stylesheet Classes","width":"Πλάτος","height":"Ύψος","align":"Στοίχιση","alignLeft":"Αριστερά","alignRight":"Δεξιά","alignCenter":"Κέντρο","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","invalidValue":"Μη έγκυρη τιμή.","invalidHeight":"Το ύψος πρέπει να είναι ένας αριθμός.","invalidWidth":"Το πλάτος πρέπει να είναι ένας αριθμός.","invalidCssLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που ορίζεται για το πεδίο \"%1\" πρέπει να είναι ένας θετικός αριθμός με ή χωρίς μια έγκυρη μονάδα μέτρησης HTML (px or %).","invalidInlineStyle":"Η τιμή για το εν σειρά στυλ πρέπει να περιέχει ένα ή περισσότερα ζεύγη με την μορφή \"όνομα: τιμή\" διαχωρισμένα με Ελληνικό ερωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αριθμό μαζί με μια έγκυρη μονάδα μέτρησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>"},"about":{"copy":"Πνευματικά δικαιώματα &copy; $1 Με επιφύλαξη παντός δικαιώματος.","dlgTitle":"Περί του CKEditor","help":"Ελέγξτε το $1 για βοήθεια.","moreInfo":"Για πληροφορίες αδειών παρακαλούμε επισκεφθείτε την ιστοσελίδα μας:","title":"Περί του CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Έντονα","italic":"Πλάγια","strike":"Διαγράμμιση","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"Υπογράμμιση"},"blockquote":{"toolbar":"Περιοχή Παράθεσης"},"clipboard":{"copy":"Αντιγραφή","copyError":"Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αντιγραφής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι ρυθμίσεις ασφαλείας του φυλλομετρητή σας δεν επιτρέπουν την επιλεγμένη εργασία αποκοπής. Χρησιμοποιείστε το πληκτρολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteArea":"Περιοχή Επικόλλησης","pasteMsg":"Παρακαλώ επικολήστε στο ακόλουθο κουτί χρησιμοποιόντας το πληκτρολόγιο (<strong>Ctrl/Cmd+V</strong>) και πατήστε OK.","securityMsg":"Λόγων των ρυθμίσεων ασφάλειας του περιηγητή σας, ο επεξεργαστής δεν μπορεί να έχει πρόσβαση στην μνήμη επικόλλησης. Χρειάζεται να επικολλήσετε ξανά σε αυτό το παράθυρο.","title":"Επικόλληση"},"contextmenu":{"options":"Επιλογές Αναδυόμενου Μενού"},"toolbar":{"toolbarCollapse":"Σύμπτηξη Εργαλειοθήκης","toolbarExpand":"Ανάπτυξη Εργαλειοθήκης","toolbarGroups":{"document":"Έγγραφο","clipboard":"Clipboard/Undo","editing":"Σε επεξεργασία","forms":"Φόρμες","basicstyles":"Βασικά στυλ","paragraph":"Παράγραφος","links":"Συνδέσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"Χρώματα","tools":"Εργαλεία"},"toolbars":"Εργαλειοθήκες Επεξεργαστή"},"elementspath":{"eleLabel":"Διαδρομή στοιχείων","eleTitle":"%1 στοιχείο"},"list":{"bulletedlist":"Εισαγωγή/Απομάκρυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/Απομάκρυνση Αριθμημένης Λίστας"},"indent":{"indent":"Αύξηση Εσοχής","outdent":"Μείωση Εσοχής"},"format":{"label":"Μορφοποίηση","panelTitle":"Μορφοποίηση Παραγράφου","tag_address":"Διεύθυνση","tag_div":"Κανονικό (DIV)","tag_h1":"Επικεφαλίδα 1","tag_h2":"Επικεφαλίδα 2","tag_h3":"Επικεφαλίδα 3","tag_h4":"Επικεφαλίδα 4","tag_h5":"Επικεφαλίδα 5","tag_h6":"Επικεφαλίδα 6","tag_p":"Κανονικό","tag_pre":"Μορφοποιημένο"},"horizontalrule":{"toolbar":"Εισαγωγή Οριζόντιας Γραμμής"},"image":{"alertUrl":"Εισάγετε την τοποθεσία (URL) της εικόνας","alt":"Εναλλακτικό Κείμενο","border":"Περίγραμμα","btnUpload":"Αποστολή στον Διακομιστή","button2Img":"Θέλετε να μετατρέψετε το επιλεγμένο κουμπί εικόνας σε απλή εικόνα;","hSpace":"Οριζόντιο Διάστημα","img2Button":"Θέλετε να μεταμορφώσετε την επιλεγμένη εικόνα που είναι πάνω σε ένα κουμπί;","infoTab":"Πληροφορίες Εικόνας","linkTab":"Σύνδεσμος","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","resetSize":"Επαναφορά Αρχικού Μεγέθους","title":"Ιδιότητες Εικόνας","titleButton":"Ιδιότητες Κουμπιού Εικόνας","upload":"Ανέβασμα","urlMissing":"Το URL πηγής για την εικόνα λείπει.","vSpace":"Κάθετο Διάστημα","validateBorder":"Το περίγραμμα πρέπει να είναι ένας ακέραιος αριθμός.","validateHSpace":"Το HSpace πρέπει να είναι ένας ακέραιος αριθμός.","validateVSpace":"Το VSpace πρέπει να είναι ένας ακέραιος αριθμός."},"fakeobjects":{"anchor":"Εισαγωγή/επεξεργασία Άγκυρας","flash":"Ταινία Flash","hiddenfield":"Κρυφό πεδίο","iframe":"IFrame","unknown":"Άγνωστο Αντικείμενο"},"link":{"acccessKey":"Συντόμευση","advanced":"Για προχωρημένους","advisoryContentType":"Ενδεικτικός Τύπος Περιεχομένου","advisoryTitle":"Ενδεικτικός Τίτλος","anchor":{"toolbar":"Εισαγωγή/επεξεργασία Άγκυρας","menu":"Ιδιότητες άγκυρας","title":"Ιδιότητες άγκυρας","name":"Όνομα άγκυρας","errorName":"Παρακαλούμε εισάγετε όνομα άγκυρας","remove":"Αφαίρεση Άγκυρας"},"anchorId":"Βάσει του Element Id","anchorName":"Βάσει του Ονόματος της άγκυρας","charset":"Κωδικοποίηση Χαρακτήρων Προσαρτημένης Πηγής","cssClasses":"Stylesheet Classes","emailAddress":"Διεύθυνση e-mail","emailBody":"Κείμενο Μηνύματος","emailSubject":"Θέμα Μηνύματος","id":"Id","info":"Πληροφορίες Συνδέσμου","langCode":"Κατεύθυνση Κειμένου","langDir":"Κατεύθυνση Κειμένου","langDirLTR":"Αριστερά προς Δεξιά (LTR)","langDirRTL":"Δεξιά προς Αριστερά (RTL)","menu":"Επεξεργασία Συνδέσμου","name":"Όνομα","noAnchors":"(Δεν υπάρχουν άγκυρες στο κείμενο)","noEmail":"Εισάγετε την διεύθυνση ηλεκτρονικού ταχυδρομείου","noUrl":"Εισάγετε την τοποθεσία (URL) του υπερσυνδέσμου (Link)","other":"<άλλο>","popupDependent":"Εξαρτημένο (Netscape)","popupFeatures":"Επιλογές Αναδυόμενου Παραθύρου","popupFullScreen":"Πλήρης Οθόνη (IE)","popupLeft":"Θέση Αριστερά","popupLocationBar":"Γραμμή Τοποθεσίας","popupMenuBar":"Γραμμή Επιλογών","popupResizable":"Προσαρμοζόμενο Μέγεθος","popupScrollBars":"Μπάρες Κύλισης","popupStatusBar":"Γραμμή Κατάστασης","popupToolbar":"Εργαλειοθήκη","popupTop":"Θέση Πάνω","rel":"Σχέση","selectAnchor":"Επιλέξτε μια άγκυρα","styles":"Μορφή","tabIndex":"Σειρά Μεταπήδησης","target":"Παράθυρο Προορισμού","targetFrame":"<πλαίσιο>","targetFrameName":"Όνομα Παραθύρου Προορισμού","targetPopup":"<αναδυόμενο παράθυρο>","targetPopupName":"Όνομα Αναδυόμενου Παραθύρου","title":"Σύνδεσμος","toAnchor":"Άγκυρα σε αυτή τη σελίδα","toEmail":"E-Mail","toUrl":"URL","toolbar":"Σύνδεσμος","type":"Τύπος Συνδέσμου","unlink":"Αφαίρεση Συνδέσμου (Link)","upload":"Ανέβασμα"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"pastetext":{"button":"Επικόλληση ως Απλό Κείμενο","title":"Επικόλληση ως Απλό Κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγραμμένο από το Word. Μήπως θα θέλατε να καθαριστεί προτού επικολληθεί;","error":"Δεν ήταν δυνατό να καθαριστούν τα δεδομένα λόγω ενός εσωτερικού σφάλματος","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"removeformat":{"toolbar":"Αφαίρεση Μορφοποίησης"},"sourcearea":{"toolbar":"HTML κώδικας"},"specialchar":{"options":"Επιλογές Ειδικών Χαρακτήρων","title":"Επιλέξτε έναν Ειδικό Χαρακτήρα","toolbar":"Εισαγωγή Ειδικού Χαρακτήρα"},"stylescombo":{"label":"Μορφές","panelTitle":"Στυλ Μορφοποίησης","panelTitle1":"Στυλ Κομματιών","panelTitle2":"Στυλ Εν Σειρά","panelTitle3":"Στυλ Αντικειμένων"},"table":{"border":"Πάχος Περιγράμματος","caption":"Λεζάντα","cell":{"menu":"Κελί","insertBefore":"Εισαγωγή Κελιού Πριν","insertAfter":"Εισαγωγή Κελιού Μετά","deleteCell":"Διαγραφή Κελιών","merge":"Ενοποίηση Κελιών","mergeRight":"Συγχώνευση Με Δεξιά","mergeDown":"Συγχώνευση Με Κάτω","splitHorizontal":"Οριζόντιο Μοίρασμα Κελιού","splitVertical":"Κατακόρυφο Μοίρασμα Κελιού","title":"Ιδιότητες Κελιού","cellType":"Τύπος Κελιού","rowSpan":"Εύρος Σειρών","colSpan":"Εύρος Στηλών","wordWrap":"Word Wrap","hAlign":"Οριζόντια Στοίχιση","vAlign":"Κάθετη Στοίχιση","alignBaseline":"Baseline","bgColor":"Χρώμα Φόντου","borderColor":"Χρώμα Περιγράμματος","data":"Δεδομένα","header":"Κεφαλίδα","yes":"Ναι","no":"Όχι","invalidWidth":"Το πλάτος του κελιού πρέπει να είναι ένας αριθμός.","invalidHeight":"Το ύψος του κελιού πρέπει να είναι ένας αριθμός.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Επιλέξτε"},"cellPad":"Γέμισμα κελιών","cellSpace":"Διάστημα κελιών","column":{"menu":"Στήλη","insertBefore":"Εισαγωγή Στήλης Πριν","insertAfter":"Εισαγωγή Σειράς Μετά","deleteColumn":"Διαγραφή Κολωνών"},"columns":"Κολώνες","deleteTable":"Διαγραφή πίνακα","headers":"Κεφαλίδες","headersBoth":"Και τα δύο","headersColumn":"Πρώτη Στήλη","headersNone":"Κανένα","headersRow":"Πρώτη Σειρά","invalidBorder":"Το πάχος του περιγράμματος πρέπει να είναι ένας αριθμός.","invalidCellPadding":"Το γέμισμα μέσα στα κελιά πρέπει να είναι ένας θετικός αριθμός.","invalidCellSpacing":"Η απόσταση μεταξύ των κελιών πρέπει να είναι ένας θετικός αριθμός.","invalidCols":"Ο αριθμός των στηλών πρέπει να είναι μεγαλύτερος από 0.","invalidHeight":"Το ύψος του πίνακα πρέπει να είναι ένας αριθμός.","invalidRows":"Ο αριθμός των σειρών πρέπει να είναι μεγαλύτερος από 0.","invalidWidth":"Το πλάτος του πίνακα πρέπει να είναι ένας αριθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"Σειρά","insertBefore":"Εισαγωγή Σειράς Από Πάνω","insertAfter":"Εισαγωγή Σειράς Από Κάτω","deleteRow":"Διαγραφή Γραμμών"},"rows":"Γραμμές","summary":"Περίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixels","widthUnit":"μονάδα πλάτους"},"undo":{"redo":"Επαναφορά","undo":"Αναίρεση"},"justify":{"block":"Πλήρης Στοίχιση","center":"Στοίχιση στο Κέντρο","left":"Στοίχιση Αριστερά","right":"Στοίχιση Δεξιά"},"placeholder":{"title":"Ιδιότητες Υποκατάστατου Κειμένου","toolbar":"Δημιουργία Υποκατάσταστου Κειμένου","text":"Υποκαθιστόμενο Κείμενο","edit":"Επεξεργασία Υποκατάσταστου Κειμένου","textMissing":"Πρέπει να υπάρχει υποκαθιστόμενο κείμενο."},"showblocks":{"toolbar":"Προβολή Περιοχών"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/en-au.js b/core/misc/ckeditor/lang/en-au.js
deleted file mode 100644
index 6583036..0000000
--- a/core/misc/ckeditor/lang/en-au.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en-au']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"removeformat":{"toolbar":"Remove Format"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/en-ca.js b/core/misc/ckeditor/lang/en-ca.js
deleted file mode 100644
index bd91e02..0000000
--- a/core/misc/ckeditor/lang/en-ca.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en-ca']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"removeformat":{"toolbar":"Remove Format"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/en-gb.js b/core/misc/ckeditor/lang/en-gb.js
deleted file mode 100644
index a79f6a3..0000000
--- a/core/misc/ckeditor/lang/en-gb.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en-gb']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Drag to resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"removeformat":{"toolbar":"Remove Format"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/en.js b/core/misc/ckeditor/lang/en.js
deleted file mode 100644
index a5a95e5..0000000
--- a/core/misc/ckeditor/lang/en.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"removeformat":{"toolbar":"Remove Format"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/eo.js b/core/misc/ckeditor/lang/eo.js
deleted file mode 100644
index 3b7da5f..0000000
--- a/core/misc/ckeditor/lang/eo.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['eo']={"dir":"ltr","editor":"Redaktilo por Riĉiga Teksto","common":{"editorHelp":"Premu ALT 0 por helpilo","browseServer":"Foliumi en la Servilo","url":"URL","protocol":"Protokolo","upload":"Alŝuti","uploadSubmit":"Sendu al Servilo","image":"Bildo","flash":"Flaŝo","form":"Formularo","checkbox":"Markobutono","radio":"Radiobutono","textField":"Teksta kampo","textarea":"Teksta Areo","hiddenField":"Kaŝita Kampo","button":"Butono","select":"Elekta Kampo","imageButton":"Bildbutono","notSet":"<Defaŭlta>","id":"Id","name":"Nomo","langDir":"Skribdirekto","langDirLtr":"De maldekstro dekstren (LTR)","langDirRtl":"De dekstro maldekstren (RTL)","langCode":"Lingva Kodo","longDescr":"URL de Longa Priskribo","cssClass":"Klasoj de Stilfolioj","advisoryTitle":"Priskriba Titolo","cssStyle":"Stilo","ok":"Akcepti","cancel":"Rezigni","close":"Fermi","preview":"Vidigi Aspekton","resize":"Movigi por ŝanĝi la grandon","generalTab":"Ĝenerala","advancedTab":"Speciala","validateNumberFailed":"Tiu valoro ne estas nombro.","confirmNewPage":"La neregistritaj ŝanĝoj estas perdotaj. Ĉu vi certas, ke vi volas ŝargi novan paĝon?","confirmCancel":"Iuj opcioj esta ŝanĝitaj. Ĉu vi certas, ke vi volas fermi la dialogon?","options":"Opcioj","target":"Celo","targetNew":"Nova Fenestro (_blank)","targetTop":"Supra Fenestro (_top)","targetSelf":"Sama Fenestro (_self)","targetParent":"Patra Fenestro (_parent)","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","styles":"Stilo","cssClasses":"Stilfoliaj Klasoj","width":"Larĝo","height":"Alto","align":"Ĝisrandigo","alignLeft":"Maldekstre","alignRight":"Dekstre","alignCenter":"Centre","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"Larĝo devas esti nombro.","invalidCssLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aŭ sen valida HTMLmezurunuo (px or %).","invalidInlineStyle":"La valoro indikita por la enlinia stilo devas konsisti el unu aŭ pluraj elementoj kun la formato de \"nomo : valoro\", apartigitaj per punktokomoj.","cssLengthTooltip":"Entajpu nombron por rastrumera valoro aŭ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nehavebla</span>"},"about":{"copy":"Copyright &copy; $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor","help":"Kontroli $1 por helpo.","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaĝaron:","title":"Pri CKEditor","userGuide":"CKEditor Uzindikoj"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"blockquote":{"toolbar":"Citaĵo"},"clipboard":{"copy":"Kopii","copyError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).","cut":"Eltondi","cutError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).","paste":"Interglui","pasteArea":"Intergluoareo","pasteMsg":"Bonvolu glui la tekston en la jenan areon per uzado de la klavaro (<strong>Ctrl/Cmd+V</strong>) kaj premu OK","securityMsg":"Pro la sekurecagordo de via TTT-legilo, la redaktilo ne povas rekte atingi viajn datenojn en la poŝo. Bonvolu denove interglui la datenojn en tiun fenestron.","title":"Interglui"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"toolbar":{"toolbarCollapse":"Faldi la ilbreton","toolbarExpand":"Malfaldi la ilbreton","toolbarGroups":{"document":"Dokumento","clipboard":"Poŝo/Malfari","editing":"Redaktado","forms":"Formularoj","basicstyles":"Bazaj stiloj","paragraph":"Paragrafo","links":"Ligiloj","insert":"Enmeti","styles":"Stiloj","colors":"Koloroj","tools":"Iloj"},"toolbars":"Ilobretoj de la redaktilo"},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"indent":{"indent":"Pligrandigi Krommarĝenon","outdent":"Malpligrandigi Krommarĝenon"},"format":{"label":"Formato","panelTitle":"ParagrafFormato","tag_address":"Adreso","tag_div":"Normala (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normala","tag_pre":"Formatita"},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"image":{"alertUrl":"Bonvolu tajpi la retadreson de la bildo","alt":"Anstataŭiga Teksto","border":"Bordero","btnUpload":"Sendu al Servilo","button2Img":"Ĉu vi volas transformi la selektitan bildbutonon en simplan bildon?","hSpace":"Horizontala Spaco","img2Button":"Ĉu vi volas transformi la selektitan bildon en bildbutonon?","infoTab":"Informoj pri Bildo","linkTab":"Ligilo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","resetSize":"Origina Grando","title":"Atributoj de Bildo","titleButton":"Bildbutonaj Atributoj","upload":"Alŝuti","urlMissing":"La fontretadreso de la bildo mankas.","vSpace":"Vertikala Spaco","validateBorder":"La bordero devas esti entjera nombro.","validateHSpace":"La horizontala spaco devas esti entjera nombro.","validateVSpace":"La vertikala spaco devas esti entjera nombro."},"fakeobjects":{"anchor":"Ankro","flash":"FlaŝAnimacio","hiddenfield":"Kaŝita kampo","iframe":"Enlinia Kadro (IFrame)","unknown":"Nekonata objekto"},"link":{"acccessKey":"Fulmoklavo","advanced":"Speciala","advisoryContentType":"Enhavotipo","advisoryTitle":"Priskriba Titolo","anchor":{"toolbar":"Ankro","menu":"Enmeti/Ŝanĝi Ankron","title":"Ankraj Atributoj","name":"Ankra Nomo","errorName":"Bv entajpi la ankran nomon","remove":"Forigi Ankron"},"anchorId":"Per Elementidentigilo","anchorName":"Per Ankronomo","charset":"Signaro de la Ligita Rimedo","cssClasses":"Klasoj de Stilfolioj","emailAddress":"Retpoŝto","emailBody":"Mesaĝa korpo","emailSubject":"Mesaĝa Temo","id":"Id","info":"Informoj pri la Ligilo","langCode":"Lingva Kodo","langDir":"Skribdirekto","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","menu":"Ŝanĝi Ligilon","name":"Nomo","noAnchors":"<Ne disponeblas ankroj en la dokumento>","noEmail":"Bonvolu entajpi la retpoŝtadreson","noUrl":"Bonvolu entajpi la URL-on","other":"<alia>","popupDependent":"Dependa (Netscape)","popupFeatures":"Atributoj de la Ŝprucfenestro","popupFullScreen":"Tutekrane (IE)","popupLeft":"Maldekstra Pozicio","popupLocationBar":"Adresobreto","popupMenuBar":"Menubreto","popupResizable":"Dimensiŝanĝebla","popupScrollBars":"Rulumskaloj","popupStatusBar":"Statobreto","popupToolbar":"Ilobreto","popupTop":"Supra Pozicio","rel":"Rilato","selectAnchor":"Elekti Ankron","styles":"Stilo","tabIndex":"Taba Indekso","target":"Celo","targetFrame":"<kadro>","targetFrameName":"Nomo de CelKadro","targetPopup":"<ŝprucfenestro>","targetPopupName":"Nomo de Ŝprucfenestro","title":"Ligilo","toAnchor":"Ankri en tiu ĉi paĝo","toEmail":"Retpoŝto","toUrl":"URL","toolbar":"Enmeti/Ŝanĝi Ligilon","type":"Tipo de Ligilo","unlink":"Forigi Ligilon","upload":"Alŝuti"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"pastetext":{"button":"Interglui kiel platan tekston","title":"Interglui kiel platan tekston"},"pastefromword":{"confirmCleanup":"La teksto, kiun vi volas interglui, ŝajnas esti kopiita el Word. Ĉu vi deziras purigi ĝin antaŭ intergluo?","error":"Ne eblis purigi la intergluitajn datenojn pro interna eraro","title":"Interglui el Word","toolbar":"Interglui el Word"},"removeformat":{"toolbar":"Forigi Formaton"},"sourcearea":{"toolbar":"Fonto"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaĝigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"table":{"border":"Bordero","caption":"Tabeltitolo","cell":{"menu":"Ĉelo","insertBefore":"Enmeti Ĉelon Antaŭ","insertAfter":"Enmeti Ĉelon Post","deleteCell":"Forigi la Ĉelojn","merge":"Kunfandi la Ĉelojn","mergeRight":"Kunfandi dekstren","mergeDown":"Kunfandi malsupren ","splitHorizontal":"Horizontale dividi","splitVertical":"Vertikale dividi","title":"Ĉelatributoj","cellType":"Ĉeltipo","rowSpan":"Kunfando de linioj","colSpan":"Kunfando de kolumnoj","wordWrap":"Cezuro","hAlign":"Horizontala ĝisrandigo","vAlign":"Vertikala ĝisrandigo","alignBaseline":"Malsupro de la teksto","bgColor":"Fonkoloro","borderColor":"Borderkoloro","data":"Datenoj","header":"Supra paĝotitolo","yes":"Jes","no":"No","invalidWidth":"Ĉellarĝo devas esti nombro.","invalidHeight":"Ĉelalto devas esti nombro.","invalidRowSpan":"Kunfando de linioj devas esti entjera nombro.","invalidColSpan":"Kunfando de kolumnoj devas esti entjera nombro.","chooseColor":"Elektu"},"cellPad":"Interna Marĝeno de la ĉeloj","cellSpace":"Spaco inter la Ĉeloj","column":{"menu":"Kolumno","insertBefore":"Enmeti kolumnon antaŭ","insertAfter":"Enmeti kolumnon post","deleteColumn":"Forigi Kolumnojn"},"columns":"Kolumnoj","deleteTable":"Forigi Tabelon","headers":"Supraj Paĝotitoloj","headersBoth":"Ambaŭ","headersColumn":"Unua kolumno","headersNone":"Neniu","headersRow":"Unua linio","invalidBorder":"La bordergrando devas esti nombro.","invalidCellPadding":"La interna marĝeno en la ĉeloj devas esti pozitiva nombro.","invalidCellSpacing":"La spaco inter la ĉeloj devas esti pozitiva nombro.","invalidCols":"La nombro de la kolumnoj devas superi 0.","invalidHeight":"La tabelalto devas esti nombro.","invalidRows":"La nombro de la linioj devas superi 0.","invalidWidth":"La tabellarĝo devas esti nombro.","menu":"Atributoj de Tabelo","row":{"menu":"Linio","insertBefore":"Enmeti linion antaŭ","insertAfter":"Enmeti linion post","deleteRow":"Forigi Liniojn"},"rows":"Linioj","summary":"Resumo","title":"Atributoj de Tabelo","toolbar":"Tabelo","widthPc":"elcentoj","widthPx":"Rastrumeroj","widthUnit":"unuo de larĝo"},"undo":{"redo":"Refari","undo":"Malfari"},"justify":{"block":"Ĝisrandigi Ambaŭflanke","center":"Centrigi","left":"Ĝisrandigi maldekstren","right":"Ĝisrandigi dekstren"},"placeholder":{"title":"Atributoj de la rezervita spaco","toolbar":"Krei la rezervitan spacon","text":"Texto de la rezervita spaco","edit":"Modifi la rezervitan spacon","textMissing":"La rezervita spaco devas enteni tekston."},"showblocks":{"toolbar":"Montri la blokojn"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/es.js b/core/misc/ckeditor/lang/es.js
deleted file mode 100644
index 9d09a45..0000000
--- a/core/misc/ckeditor/lang/es.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['es']={"dir":"ltr","editor":"Editor de texto enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","alignLeft":"Izquierda","alignRight":"Derecha","alignCenter":"Centrado","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"},"about":{"copy":"Copyright &copy; $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor","help":"Lea la  $1 para resolver sus dudas.","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:","title":"Acerca de CKEditor","userGuide":"Guía de usuario de CKEditor"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"blockquote":{"toolbar":"Cita"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.","securityMsg":"Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.","title":"Pegar"},"contextmenu":{"options":"Opciones del menú contextual"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"image":{"alertUrl":"Por favor escriba la URL de la imagen","alt":"Texto Alternativo","border":"Borde","btnUpload":"Enviar al Servidor","button2Img":"¿Desea convertir el botón de imagen en una simple imagen?","hSpace":"Esp.Horiz","img2Button":"¿Desea convertir la imagen en un botón de imagen?","infoTab":"Información de Imagen","linkTab":"Vínculo","lockRatio":"Proporcional","menu":"Propiedades de Imagen","resetSize":"Tamaño Original","title":"Propiedades de Imagen","titleButton":"Propiedades de Botón de Imagen","upload":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","vSpace":"Esp.Vert","validateBorder":"El borde debe ser un número.","validateHSpace":"El espaciado horizontal debe ser un número.","validateVSpace":"El espaciado vertical debe ser un número."},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","other":"<otro>","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nombre del Marco Destino","targetPopup":"<ventana emergente>","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"pastetext":{"button":"Pegar como Texto Plano","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"removeformat":{"toolbar":"Eliminar Formato"},"sourcearea":{"toolbar":"Fuente HTML"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"justify":{"block":"Justificado","center":"Centrar","left":"Alinear a Izquierda","right":"Alinear a Derecha"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Mostrar bloques"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/et.js b/core/misc/ckeditor/lang/et.js
deleted file mode 100644
index bc71a3c..0000000
--- a/core/misc/ckeditor/lang/et.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['et']={"dir":"ltr","editor":"Rikkalik tekstiredaktor","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"<määramata>","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"OK","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","alignLeft":"Vasak","alignRight":"Paremale","alignCenter":"Kesk","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","invalidValue":"Invalid value.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1<span class=\"cke_accessibility\">, pole saadaval</span>"},"about":{"copy":"Copyright &copy; $1. Kõik õigused kaitstud.","dlgTitle":"CKEditorist","help":"Abi jaoks vaata $1.","moreInfo":"Litsentsi andmed leiab meie veebilehelt:","title":"CKEditorist","userGuide":"CKEditori kasutusjuhendit"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"blockquote":{"toolbar":"Blokktsitaat"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteArea":"Asetamise ala","pasteMsg":"Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.","securityMsg":"Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.","title":"Asetamine"},"contextmenu":{"options":"Kontekstimenüü valikud"},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"image":{"alertUrl":"Palun kirjuta pildi URL","alt":"Alternatiivne tekst","border":"Joon","btnUpload":"Saada serverisse","button2Img":"Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?","hSpace":"H. vaheruum","img2Button":"Kas tahad teisendada valitud tavalise pildi pildiga nupuks?","infoTab":"Pildi info","linkTab":"Link","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","resetSize":"Lähtesta suurus","title":"Pildi omadused","titleButton":"Piltnupu omadused","upload":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","vSpace":"V. vaheruum","validateBorder":"Äärise laius peab olema täisarv.","validateHSpace":"Horisontaalne vaheruum peab olema täisarv.","validateVSpace":"Vertikaalne vaheruum peab olema täisarv."},"fakeobjects":{"anchor":"Ankur","flash":"Flashi animatsioon","hiddenfield":"Varjatud väli","iframe":"IFrame","unknown":"Tundmatu objekt"},"link":{"acccessKey":"Juurdepääsu võti","advanced":"Täpsemalt","advisoryContentType":"Juhendava sisu tüüp","advisoryTitle":"Juhendav tiitel","anchor":{"toolbar":"Ankru sisestamine/muutmine","menu":"Ankru omadused","title":"Ankru omadused","name":"Ankru nimi","errorName":"Palun sisesta ankru nimi","remove":"Eemalda ankur"},"anchorId":"Elemendi id järgi","anchorName":"Ankru nime järgi","charset":"Lingitud ressursi märgistik","cssClasses":"Stiilistiku klassid","emailAddress":"E-posti aadress","emailBody":"Sõnumi tekst","emailSubject":"Sõnumi teema","id":"ID","info":"Lingi info","langCode":"Keele suund","langDir":"Keele suund","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","menu":"Muuda linki","name":"Nimi","noAnchors":"(Selles dokumendis pole ankruid)","noEmail":"Palun kirjuta e-posti aadress","noUrl":"Palun kirjuta lingi URL","other":"<muu>","popupDependent":"Sõltuv (Netscape)","popupFeatures":"Hüpikakna omadused","popupFullScreen":"Täisekraan (IE)","popupLeft":"Vasak asukoht","popupLocationBar":"Aadressiriba","popupMenuBar":"Menüüriba","popupResizable":"Suurust saab muuta","popupScrollBars":"Kerimisribad","popupStatusBar":"Olekuriba","popupToolbar":"Tööriistariba","popupTop":"Ülemine asukoht","rel":"Suhe","selectAnchor":"Vali ankur","styles":"Laad","tabIndex":"Tab indeks","target":"Sihtkoht","targetFrame":"<raam>","targetFrameName":"Sihtmärk raami nimi","targetPopup":"<hüpikaken>","targetPopupName":"Hüpikakna nimi","title":"Link","toAnchor":"Ankur sellel lehel","toEmail":"E-post","toUrl":"URL","toolbar":"Lingi lisamine/muutmine","type":"Lingi liik","unlink":"Lingi eemaldamine","upload":"Lae üles"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"pastetext":{"button":"Asetamine tavalise tekstina","title":"Asetamine tavalise tekstina"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"sourcearea":{"toolbar":"Lähtekood"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"justify":{"block":"Rööpjoondus","center":"Keskjoondus","left":"Vasakjoondus","right":"Paremjoondus"},"placeholder":{"title":"Kohahoidja omadused","toolbar":"Kohahoidja loomine","text":"Kohahoidja tekst","edit":"Kohahoidja muutmine","textMissing":"Kohahoidja peab sisaldama teksti."},"showblocks":{"toolbar":"Blokkide näitamine"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/eu.js b/core/misc/ckeditor/lang/eu.js
deleted file mode 100644
index 49f7cab..0000000
--- a/core/misc/ckeditor/lang/eu.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['eu']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Zerbitzaria arakatu","url":"URL","protocol":"Protokoloa","upload":"Gora kargatu","uploadSubmit":"Zerbitzarira bidalia","image":"Irudia","flash":"Flasha","form":"Formularioa","checkbox":"Kontrol-laukia","radio":"Aukera-botoia","textField":"Testu Eremua","textarea":"Testu-area","hiddenField":"Ezkutuko Eremua","button":"Botoia","select":"Hautespen Eremua","imageButton":"Irudi Botoia","notSet":"<Ezarri gabe>","id":"Id","name":"Izena","langDir":"Hizkuntzaren Norabidea","langDirLtr":"Ezkerretik Eskumara(LTR)","langDirRtl":"Eskumatik Ezkerrera (RTL)","langCode":"Hizkuntza Kodea","longDescr":"URL Deskribapen Luzea","cssClass":"Estilo-orriko Klaseak","advisoryTitle":"Izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Close","preview":"Aurrebista","resize":"Arrastatu tamaina aldatzeko","generalTab":"Orokorra","advancedTab":"Aurreratua","validateNumberFailed":"Balio hau ez da zenbaki bat.","confirmNewPage":"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?","confirmCancel":"Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Target (Helburua)","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko Klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatu","alignLeft":"Ezkerrera","alignRight":"Eskuman","alignCenter":"Erdian","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","invalidValue":"Invalid value.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>"},"about":{"copy":"Copyright &copy; $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor(r)i buruz","help":"Check $1 for help.","moreInfo":"Lizentziari buruzko informazioa gure webgunean:","title":"CKEditor(r)i buruz","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indize","superscript":"Goi-indize","underline":"Azpimarratu"},"blockquote":{"toolbar":"Aipamen blokea"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteArea":"Paste Area","pasteMsg":"Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.","securityMsg":"Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.","title":"Itsatsi"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 elementua"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"indent":{"indent":"Handitu Koska","outdent":"Txikitu Koska"},"format":{"label":"Formatua","panelTitle":"Formatua","tag_address":"Helbidea","tag_div":"Paragrafoa (DIV)","tag_h1":"Izenburua 1","tag_h2":"Izenburua 2","tag_h3":"Izenburua 3","tag_h4":"Izenburua 4","tag_h5":"Izenburua 5","tag_h6":"Izenburua 6","tag_p":"Arrunta","tag_pre":"Formateatua"},"horizontalrule":{"toolbar":"Txertatu Marra Horizontala"},"image":{"alertUrl":"Mesedez Irudiaren URLa idatzi","alt":"Ordezko Testua","border":"Ertza","btnUpload":"Zerbitzarira bidalia","button2Img":"Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?","hSpace":"HSpace","img2Button":"Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?","infoTab":"Irudi informazioa","linkTab":"Esteka","lockRatio":"Erlazioa Blokeatu","menu":"Irudi Ezaugarriak","resetSize":"Tamaina Berrezarri","title":"Irudi Ezaugarriak","titleButton":"Irudi Botoiaren Ezaugarriak","upload":"Gora Kargatu","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Aingura","flash":"Flash Animazioa","hiddenfield":"Ezkutuko Eremua","iframe":"IFrame","unknown":"Objektu ezezaguna"},"link":{"acccessKey":"Sarbide-gakoa","advanced":"Aurreratua","advisoryContentType":"Eduki Mota (Content Type)","advisoryTitle":"Izenburua","anchor":{"toolbar":"Aingura","menu":"Ainguraren Ezaugarriak","title":"Ainguraren Ezaugarriak","name":"Ainguraren Izena","errorName":"Idatzi ainguraren izena","remove":"Remove Anchor"},"anchorId":"Elementuaren ID-gatik","anchorName":"Aingura izenagatik","charset":"Estekatutako Karaktere Multzoa","cssClasses":"Estilo-orriko Klaseak","emailAddress":"ePosta Helbidea","emailBody":"Mezuaren Gorputza","emailSubject":"Mezuaren Gaia","id":"Id","info":"Estekaren Informazioa","langCode":"Hizkuntzaren Norabidea","langDir":"Hizkuntzaren Norabidea","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","menu":"Aldatu Esteka","name":"Izena","noAnchors":"(Ez daude aingurak eskuragarri dokumentuan)","noEmail":"Mesedez ePosta helbidea idatzi","noUrl":"Mesedez URL esteka idatzi","other":"<other>","popupDependent":"Menpekoa (Netscape)","popupFeatures":"Popup Leihoaren Ezaugarriak","popupFullScreen":"Pantaila Osoa (IE)","popupLeft":"Ezkerreko  Posizioa","popupLocationBar":"Kokaleku Barra","popupMenuBar":"Menu Barra","popupResizable":"Tamaina Aldakorra","popupScrollBars":"Korritze Barrak","popupStatusBar":"Egoera Barra","popupToolbar":"Tresna Barra","popupTop":"Goiko Posizioa","rel":"Relationship","selectAnchor":"Aingura bat hautatu","styles":"Estiloa","tabIndex":"Tabulazio Indizea","target":"Target (Helburua)","targetFrame":"<marko>","targetFrameName":"Marko Helburuaren Izena","targetPopup":"<popup leihoa>","targetPopupName":"Popup Leihoaren Izena","title":"Esteka","toAnchor":"Aingura orrialde honetan","toEmail":"ePosta","toUrl":"URL","toolbar":"Txertatu/Editatu Esteka","type":"Esteka Mota","unlink":"Kendu Esteka","upload":"Gora kargatu"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximizatu","minimize":"Minimize"},"pastetext":{"button":"Testu Arrunta bezala Itsatsi","title":"Testu Arrunta bezala Itsatsi"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"removeformat":{"toolbar":"Kendu Formatua"},"sourcearea":{"toolbar":"HTML Iturburua"},"specialchar":{"options":"Special Character Options","title":"Karaktere Berezia Aukeratu","toolbar":"Txertatu Karaktere Berezia"},"stylescombo":{"label":"Estiloa","panelTitle":"Formatting Styles","panelTitle1":"Bloke Estiloak","panelTitle2":"Inline Estiloak","panelTitle3":"Objektu Estiloak"},"table":{"border":"Ertzaren Zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu Gelaxka Aurretik","insertAfter":"Txertatu Gelaxka Ostean","deleteCell":"Kendu Gelaxkak","merge":"Batu Gelaxkak","mergeRight":"Elkartu Eskumara","mergeDown":"Elkartu Behera","splitHorizontal":"Banatu Gelaxkak Horizontalki","splitVertical":"Banatu Gelaxkak Bertikalki","title":"Gelaxken Ezaugarriak","cellType":"Gelaxka Mota","rowSpan":"Hedatutako Lerroak","colSpan":"Hedatutako Zutabeak","wordWrap":"Itzulbira","hAlign":"Lerrokatze Horizontala","vAlign":"Lerrokatze Bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Fondoaren Kolorea","borderColor":"Ertzaren Kolorea","data":"Data","header":"Goiburua","yes":"Bai","no":"Ez","invalidWidth":"Gelaxkaren zabalera zenbaki bat izan behar da.","invalidHeight":"Gelaxkaren altuera zenbaki bat izan behar da.","invalidRowSpan":"Lerroen hedapena zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedapena zenbaki osoa izan behar da.","chooseColor":"Choose"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu Zutabea Aurretik","insertAfter":"Txertatu Zutabea Ostean","deleteColumn":"Ezabatu Zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu Taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen lerroa","invalidBorder":"Ertzaren tamaina zenbaki bat izan behar da.","invalidCellPadding":"Gelaxken betegarria zenbaki bat izan behar da.","invalidCellSpacing":"Gelaxka arteko tartea zenbaki bat izan behar da.","invalidCols":"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidHeight":"Taularen altuera zenbaki bat izan behar da.","invalidRows":"Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen Ezaugarriak","row":{"menu":"Lerroa","insertBefore":"Txertatu Lerroa Aurretik","insertAfter":"Txertatu Lerroa Ostean","deleteRow":"Ezabatu Lerroak"},"rows":"Lerroak","summary":"Laburpena","title":"Taularen Ezaugarriak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"width unit"},"undo":{"redo":"Berregin","undo":"Desegin"},"justify":{"block":"Justifikatu","center":"Lerrokatu Erdian","left":"Lerrokatu Ezkerrean","right":"Lerrokatu Eskuman"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Blokeak erakutsi"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/fa.js b/core/misc/ckeditor/lang/fa.js
deleted file mode 100644
index e841e81..0000000
--- a/core/misc/ckeditor/lang/fa.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fa']={"dir":"rtl","editor":"ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بفشارید","browseServer":"فهرستنمایی سرور","url":"URL","protocol":"پروتکل","upload":"انتقال به سرور","uploadSubmit":"به سرور بفرست","image":"تصویر","flash":"فلش","form":"فرم","checkbox":"خانهٴ گزینهای","radio":"دکمهٴ رادیویی","textField":"فیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"فیلد پنهان","button":"دکمه","select":"فیلد چندگزینهای","imageButton":"دکمهٴ تصویری","notSet":"<تعین نشده>","id":"شناسه","name":"نام","langDir":"جهتنمای زبان","langDirLtr":"چپ به راست (LTR)","langDirRtl":"راست به چپ (RTL)","langCode":"کد زبان","longDescr":"URL توصیف طولانی","cssClass":"کلاسهای شیوهنامه(Stylesheet)","advisoryTitle":"عنوان کمکی","cssStyle":"شیوه(style)","ok":"پذیرش","cancel":"انصراف","close":"بستن","preview":"پیشنمایش","resize":"کشیدن برای تغییر اندازه","generalTab":"عمومی","advancedTab":"پیشرفته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شدهی ذخیره نشده از بین خواهد رفت. آیا اطمینان دارید که قصد بارگیری صفحه جدیدی را دارید؟","confirmCancel":"برخی از گزینهها تغییر کردهاند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینهها","target":"مسیر","targetNew":"پنجره جدید (_blank)","targetTop":"بالاترین پنجره (_top)","targetSelf":"همان پنجره (_self)","targetParent":"پنجره والد (_parent)","langDirLTR":"چپ به راست (LTR)","langDirRTL":"راست به چپ (RTL)","styles":"سبک","cssClasses":"کلاسهای شیوهنامه","width":"پهنا","height":"درازا","align":"چینش","alignLeft":"چپ","alignRight":"راست","alignCenter":"وسط","alignTop":"بالا","alignMiddle":"وسط","alignBottom":"پائین","invalidValue":"Invalid value.","invalidHeight":"ارتفاع باید یک عدد باشد.","invalidWidth":"پهنا باید یک عدد باشد.","invalidCssLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای فیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درونخطی(Inline Style) باید دارای یک یا چند چندتایی با شکلی شبیه \"name : value\" که باید با یک \",\"(semi-colons) از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل و یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">، غیر قابل دسترس</span>"},"about":{"copy":"حق نشر &copy; $1. کلیه حقوق محفوظ است.","dlgTitle":"درباره CKEditor","help":"بررسی $1 برای راهنمایی.","moreInfo":"برای کسب اطلاعات مجوز لطفا به وب سایت ما مراجعه کنید:","title":"درباره CKEditor","userGuide":"راهنمای کاربران CKEditor"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"میانخط","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخطدار"},"blockquote":{"toolbar":"بلوک نقل قول"},"clipboard":{"copy":"کپی","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای کپی کردن را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد که ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطفا با دکمههای صفحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteArea":"محل چسباندن","pasteMsg":"لطفا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید و <STRONG>پذیرش</STRONG> را بزنید.","securityMsg":"به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.","title":"چسباندن"},"contextmenu":{"options":"گزینههای منوی زمینه"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حافظه موقت/برگشت","editing":"در حال ویرایش","forms":"فرمها","basicstyles":"شیوههای پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"شیوهها","colors":"رنگها","tools":"ابزارها"},"toolbars":"نوار ابزار"},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"list":{"bulletedlist":"فهرست نقطهای","numberedlist":"فهرست شمارهدار"},"indent":{"indent":"افزایش تورفتگی","outdent":"کاهش تورفتگی"},"format":{"label":"فرمت","panelTitle":"فرمت","tag_address":"آدرس","tag_div":"بند","tag_h1":"سرنویس 1","tag_h2":"سرنویس 2","tag_h3":"سرنویس 3","tag_h4":"سرنویس 4","tag_h5":"سرنویس 5","tag_h6":"سرنویس 6","tag_p":"نرمال","tag_pre":"فرمت شده"},"horizontalrule":{"toolbar":"گنجاندن خط افقی"},"image":{"alertUrl":"لطفا URL تصویر را بنویسید","alt":"متن جایگزین","border":"لبه","btnUpload":"به سرور بفرست","button2Img":"آیا مایلید از یک تصویر ساده روی دکمه تصویری انتخاب شده استفاده کنید؟","hSpace":"فاصلهٴ افقی","img2Button":"آیا مایلید از یک دکمه تصویری روی تصویر انتخاب شده استفاده کنید؟","infoTab":"اطلاعات تصویر","linkTab":"پیوند","lockRatio":"قفل کردن نسبت","menu":"ویژگیهای تصویر","resetSize":"بازنشانی اندازه","title":"ویژگیهای تصویر","titleButton":"ویژگیهای دکمهٴ تصویری","upload":"انتقال به سرور","urlMissing":"آدرس URL اصلی تصویر یافت نشد.","vSpace":"فاصلهٴ عمودی","validateBorder":"مقدار خطوط باید یک عدد باشد.","validateHSpace":"مقدار فاصلهگذاری افقی باید یک عدد باشد.","validateVSpace":"مقدار فاصلهگذاری عمودی باید یک عدد باشد."},"fakeobjects":{"anchor":"لنگر","flash":"انیمشن فلش","hiddenfield":"فیلد پنهان","iframe":"IFrame","unknown":"شیء ناشناخته"},"link":{"acccessKey":"کلید دستیابی","advanced":"پیشرفته","advisoryContentType":"نوع محتوای کمکی","advisoryTitle":"عنوان کمکی","anchor":{"toolbar":"گنجاندن/ویرایش لنگر","menu":"ویژگیهای لنگر","title":"ویژگیهای لنگر","name":"نام لنگر","errorName":"لطفا نام لنگر را بنویسید","remove":"حذف لنگر"},"anchorId":"با شناسهٴ المان","anchorName":"با نام لنگر","charset":"نویسهگان منبع پیوند شده","cssClasses":"کلاسهای شیوهنامه(Stylesheet)","emailAddress":"نشانی پست الکترونیکی","emailBody":"متن پیام","emailSubject":"موضوع پیام","id":"شناسه","info":"اطلاعات پیوند","langCode":"جهتنمای زبان","langDir":"جهتنمای زبان","langDirLTR":"چپ به راست (LTR)","langDirRTL":"راست به چپ (RTL)","menu":"ویرایش پیوند","name":"نام","noAnchors":"(در این سند لنگری دردسترس نیست)","noEmail":"لطفا نشانی پست الکترونیکی را بنویسید","noUrl":"لطفا URL پیوند را بنویسید","other":"<سایر>","popupDependent":"وابسته (Netscape)","popupFeatures":"ویژگیهای پنجرهٴ پاپاپ","popupFullScreen":"تمامصفحه (IE)","popupLeft":"موقعیت چپ","popupLocationBar":"نوار موقعیت","popupMenuBar":"نوار منو","popupResizable":"قابل تغییر اندازه","popupScrollBars":"میلههای پیمایش","popupStatusBar":"نوار وضعیت","popupToolbar":"نوارابزار","popupTop":"موقعیت بالا","rel":"وابستگی","selectAnchor":"یک لنگر برگزینید","styles":"شیوه(style)","tabIndex":"نمایهٴ دسترسی با برگه","target":"مقصد","targetFrame":"<فریم>","targetFrameName":"نام فریم مقصد","targetPopup":"<پنجرهٴ پاپاپ>","targetPopupName":"نام پنجرهٴ پاپاپ","title":"پیوند","toAnchor":"لنگر در همین صفحه","toEmail":"پست الکترونیکی","toUrl":"URL","toolbar":"گنجاندن/ویرایش پیوند","type":"نوع پیوند","unlink":"برداشتن پیوند","upload":"انتقال به سرور"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"حداکثر کردن","minimize":"حداقل کردن"},"pastetext":{"button":"چسباندن به عنوان متن ِساده","title":"چسباندن به عنوان متن ِساده"},"pastefromword":{"confirmCleanup":"متنی که میخواهید بچسبانید به نظر میرسد که از Word کپی شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"removeformat":{"toolbar":"برداشتن فرمت"},"sourcearea":{"toolbar":"منبع"},"specialchar":{"options":"گزینههای نویسههای ویژه","title":"گزینش نویسهٴ ویژه","toolbar":"گنجاندن نویسهٴ ویژه"},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"افزودن سلول قبل از","insertAfter":"افزودن سلول بعد از","deleteCell":"حذف سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن افقی سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیفها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش افقی","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتفاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیفها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"فاصلهٴ پرشده در سلول","cellSpace":"فاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"افزودن ستون قبل از","insertAfter":"افزودن ستون بعد از","deleteColumn":"حذف ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیف","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار فاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتفاع  جدول باید یک عدد باشد.","invalidRows":"تعداد ردیفها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"افزودن سطر قبل از","insertAfter":"افزودن سطر بعد از","deleteRow":"حذف سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"justify":{"block":"بلوکچین","center":"میانچین","left":"چپچین","right":"راستچین"},"placeholder":{"title":"ویژگیهای محل نگهداری","toolbar":"ایجاد یک محل نگهداری","text":"متن محل نگهداری","edit":"ویرایش محل نگهداری","textMissing":"محل نگهداری باید محتوی متن باشد."},"showblocks":{"toolbar":"نمایش بلوکها"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/fi.js b/core/misc/ckeditor/lang/fi.js
deleted file mode 100644
index 5c8e266..0000000
--- a/core/misc/ckeditor/lang/fi.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fi']={"dir":"ltr","editor":"Rikastekstieditori","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"<ei asetettu>","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","alignLeft":"Vasemmalle","alignRight":"Oikealle","alignCenter":"Keskelle","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1<span class=\"cke_accessibility\">, ei saatavissa</span>"},"about":{"copy":"Copyright &copy; $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","help":"Katso ohjeet: $1.","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:","title":"Tietoa CKEditorista","userGuide":"CKEditorin käyttäjäopas"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"blockquote":{"toolbar":"Lainaus"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteArea":"Leikealue","pasteMsg":"Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.","securityMsg":"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.","title":"Liitä"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"list":{"bulletedlist":"Luottelomerkit","numberedlist":"Numerointi"},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"image":{"alertUrl":"Kirjoita kuvan osoite (URL)","alt":"Vaihtoehtoinen teksti","border":"Kehys","btnUpload":"Lähetä palvelimelle","button2Img":"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?","hSpace":"Vaakatila","img2Button":"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?","infoTab":"Kuvan tiedot","linkTab":"Linkki","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","resetSize":"Alkuperäinen koko","title":"Kuvan ominaisuudet","titleButton":"Kuvapainikkeen ominaisuudet","upload":"Lisää kuva","urlMissing":"Kuvan lähdeosoite puuttuu.","vSpace":"Pystytila","validateBorder":"Kehyksen täytyy olla kokonaisluku.","validateHSpace":"HSpace-määrityksen täytyy olla kokonaisluku.","validateVSpace":"VSpace-määrityksen täytyy olla kokonaisluku."},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","other":"<muu>","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"<kehys>","targetFrameName":"Kohdekehyksen nimi","targetPopup":"<popup ikkuna>","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"pastetext":{"button":"Liitä tekstinä","title":"Liitä tekstinä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"removeformat":{"toolbar":"Poista muotoilu"},"sourcearea":{"toolbar":"Koodi"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"undo":{"redo":"Toista","undo":"Kumoa"},"justify":{"block":"Tasaa molemmat reunat","center":"Keskitä","left":"Tasaa vasemmat reunat","right":"Tasaa oikeat reunat"},"placeholder":{"title":"Paikkamerkin ominaisuudet","toolbar":"Luo paikkamerkki","text":"Paikkamerkin teksti","edit":"Muokkaa paikkamerkkiä","textMissing":"Paikkamerkin täytyy sisältää tekstiä"},"showblocks":{"toolbar":"Näytä elementit"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/fo.js b/core/misc/ckeditor/lang/fo.js
deleted file mode 100644
index 3a99e93..0000000
--- a/core/misc/ckeditor/lang/fo.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fo']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Trýst ALT og 0 fyri vegleiðing","browseServer":"Ambætarakagi","url":"URL","protocol":"Protokoll","upload":"Send til ambætaran","uploadSubmit":"Send til ambætaran","image":"Myndir","flash":"Flash","form":"Formur","checkbox":"Flugubein","radio":"Radioknøttur","textField":"Tekstteigur","textarea":"Tekstumráði","hiddenField":"Fjaldur teigur","button":"Knøttur","select":"Valskrá","imageButton":"Myndaknøttur","notSet":"<ikki sett>","id":"Id","name":"Navn","langDir":"Tekstkós","langDirLtr":"Frá vinstru til høgru (LTR)","langDirRtl":"Frá høgru til vinstru (RTL)","langCode":"Málkoda","longDescr":"Víðkað URL frágreiðing","cssClass":"Typografi klassar","advisoryTitle":"Vegleiðandi heiti","cssStyle":"Typografi","ok":"Góðkent","cancel":"Avlýst","close":"Lat aftur","preview":"Frumsýn","resize":"Drag fyri at broyta stødd","generalTab":"Generelt","advancedTab":"Fjølbroytt","validateNumberFailed":"Hetta er ikki eitt tal.","confirmNewPage":"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?","confirmCancel":"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?","options":"Options","target":"Target","targetNew":"Nýtt vindeyga (_blank)","targetTop":"Vindeyga ovast (_top)","targetSelf":"Sama vindeyga (_self)","targetParent":"Upphavligt vindeyga (_parent)","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Breidd","height":"Hædd","align":"Justering","alignLeft":"Vinstra","alignRight":"Høgra","alignCenter":"Miðsett","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidCssLength":"Virðið sett í \"%1\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).","invalidHtmlLength":"Virðið sett í \"%1\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).","invalidInlineStyle":"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \"name : value\", hvørt parið sundurskilt við semi-colon.","cssLengthTooltip":"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikki tøkt</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Um CKEditor","help":"Kekka $1 fyri hjálp.","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:","title":"Um CKEditor","userGuide":"CKEditor Brúkaravegleiðing"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"blockquote":{"toolbar":"Blockquote"},"clipboard":{"copy":"Avrita","copyError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).","cut":"Kvett","cutError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).","paste":"Innrita","pasteArea":"Avritingarumráði","pasteMsg":"Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.","securityMsg":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.","title":"Innrita"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Lat Toolbar aftur","toolbarExpand":"Vís Toolbar","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editering","forms":"Formar","basicstyles":"Grundleggjandi Styles","paragraph":"Reglubrot","links":"Leinkjur","insert":"Set inn","styles":"Styles","colors":"Litir","tools":"Tól"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"format":{"label":"Skriftsnið","panelTitle":"Skriftsnið","tag_address":"Adressa","tag_div":"Vanligt (DIV)","tag_h1":"Yvirskrift 1","tag_h2":"Yvirskrift 2","tag_h3":"Yvirskrift 3","tag_h4":"Yvirskrift 4","tag_h5":"Yvirskrift 5","tag_h6":"Yvirskrift 6","tag_p":"Vanligt","tag_pre":"Sniðgivið"},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"image":{"alertUrl":"Rita slóðina til myndina","alt":"Alternativur tekstur","border":"Bordi","btnUpload":"Send til ambætaran","button2Img":"Skal valdi myndaknøttur gerast til vanliga mynd?","hSpace":"Høgri breddi","img2Button":"Skal valda mynd gerast til myndaknøtt?","infoTab":"Myndaupplýsingar","linkTab":"Tilknýti","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","resetSize":"Upprunastødd","title":"Myndaeginleikar","titleButton":"Eginleikar fyri myndaknøtt","upload":"Send","urlMissing":"URL til mynd manglar.","vSpace":"Vinstri breddi","validateBorder":"Bordi má vera eitt heiltal.","validateHSpace":"HSpace má vera eitt heiltal.","validateVSpace":"VSpace má vera eitt heiltal."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Fjaldur teigur","iframe":"IFrame","unknown":"Ókent Object"},"link":{"acccessKey":"Snarvegisknöttur","advanced":"Fjølbroytt","advisoryContentType":"Vegleiðandi innihaldsslag","advisoryTitle":"Vegleiðandi heiti","anchor":{"toolbar":"Ger/broyt marknastein","menu":"Eginleikar fyri marknastein","title":"Eginleikar fyri marknastein","name":"Heiti marknasteinsins","errorName":"Vinarliga rita marknasteinsins heiti","remove":"Strika marknastein"},"anchorId":"Eftir element Id","anchorName":"Eftir navni á marknasteini","charset":"Atknýtt teknsett","cssClasses":"Typografi klassar","emailAddress":"Teldupost-adressa","emailBody":"Breyðtekstur","emailSubject":"Evni","id":"Id","info":"Tilknýtis upplýsingar","langCode":"Tekstkós","langDir":"Tekstkós","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","menu":"Broyt tilknýti","name":"Navn","noAnchors":"(Eingir marknasteinar eru í hesum dokumentið)","noEmail":"Vinarliga skriva teldupost-adressu","noUrl":"Vinarliga skriva tilknýti (URL)","other":"<annað>","popupDependent":"Bundið (Netscape)","popupFeatures":"Popup vindeygans víðkaðu eginleikar","popupFullScreen":"Fullur skermur (IE)","popupLeft":"Frástøða frá vinstru","popupLocationBar":"Adressulinja","popupMenuBar":"Skrábjálki","popupResizable":"Stødd kann broytast","popupScrollBars":"Rullibjálki","popupStatusBar":"Støðufrágreiðingarbjálki","popupToolbar":"Amboðsbjálki","popupTop":"Frástøða frá íerva","rel":"Relatión","selectAnchor":"Vel ein marknastein","styles":"Typografi","tabIndex":"Tabulator indeks","target":"Target","targetFrame":"<ramma>","targetFrameName":"Vís navn vindeygans","targetPopup":"<popup vindeyga>","targetPopupName":"Popup vindeygans navn","title":"Tilknýti","toAnchor":"Tilknýti til marknastein í tekstinum","toEmail":"Teldupostur","toUrl":"URL","toolbar":"Ger/broyt tilknýti","type":"Tilknýtisslag","unlink":"Strika tilknýti","upload":"Send til ambætaran"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"pastetext":{"button":"Innrita som reinan tekst","title":"Innrita som reinan tekst"},"pastefromword":{"confirmCleanup":"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?","error":"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil","title":"Innrita frá Word","toolbar":"Innrita frá Word"},"removeformat":{"toolbar":"Strika sniðgeving"},"sourcearea":{"toolbar":"Kelda"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"table":{"border":"Bordabreidd","caption":"Tabellfrágreiðing","cell":{"menu":"Meski","insertBefore":"Set meska inn áðrenn","insertAfter":"Set meska inn aftaná","deleteCell":"Strika meskar","merge":"Flætta meskar","mergeRight":"Flætta meskar til høgru","mergeDown":"Flætta saman","splitHorizontal":"Kloyv meska vatnrætt","splitVertical":"Kloyv meska loddrætt","title":"Mesku eginleikar","cellType":"Mesku slag","rowSpan":"Ræð spenni","colSpan":"Kolonnu spenni","wordWrap":"Orðkloyving","hAlign":"Horisontal plasering","vAlign":"Loddrøtt plasering","alignBaseline":"Basislinja","bgColor":"Bakgrundslitur","borderColor":"Bordalitur","data":"Data","header":"Header","yes":"Ja","no":"Nei","invalidWidth":"Meskubreidd má vera eitt tal.","invalidHeight":"Meskuhædd má vera eitt tal.","invalidRowSpan":"Raðspennið má vera eitt heiltal.","invalidColSpan":"Kolonnuspennið má vera eitt heiltal.","chooseColor":"Vel"},"cellPad":"Meskubreddi","cellSpace":"Fjarstøða millum meskar","column":{"menu":"Kolonna","insertBefore":"Set kolonnu inn áðrenn","insertAfter":"Set kolonnu inn aftaná","deleteColumn":"Strika kolonnur"},"columns":"Kolonnur","deleteTable":"Strika tabell","headers":"Yvirskriftir","headersBoth":"Báðir","headersColumn":"Fyrsta kolonna","headersNone":"Eingin","headersRow":"Fyrsta rað","invalidBorder":"Borda-stødd má vera eitt tal.","invalidCellPadding":"Cell padding má vera eitt tal.","invalidCellSpacing":"Cell spacing má vera eitt tal.","invalidCols":"Talið av kolonnum má vera eitt tal størri enn 0.","invalidHeight":"Tabell-hædd má vera eitt tal.","invalidRows":"Talið av røðum má vera eitt tal størri enn 0.","invalidWidth":"Tabell-breidd má vera eitt tal.","menu":"Eginleikar fyri tabell","row":{"menu":"Rað","insertBefore":"Set rað inn áðrenn","insertAfter":"Set rað inn aftaná","deleteRow":"Strika røðir"},"rows":"Røðir","summary":"Samandráttur","title":"Eginleikar fyri tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"pixels","widthUnit":"breiddar unit"},"undo":{"redo":"Vend aftur","undo":"Angra"},"justify":{"block":"Javnir tekstkantar","center":"Miðsett","left":"Vinstrasett","right":"Høgrasett"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Vís blokkar"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/fr-ca.js b/core/misc/ckeditor/lang/fr-ca.js
deleted file mode 100644
index 7a4d4b4..0000000
--- a/core/misc/ckeditor/lang/fr-ca.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fr-ca']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Prem ALT 0 per obtenir ajuda","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Télécharger","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Animation Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Champ de sélection","imageButton":"Bouton image","notSet":"<Par défaut>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"De gauche à droite (LTR)","langDirRtl":"De droite à gauche (RTL)","langCode":"Code langue","longDescr":"URL de description longue","cssClass":"Classes de feuilles de style","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Close","preview":"Previsualiser","resize":"Resize","generalTab":"Général","advancedTab":"Avancée","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Destination","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classes de feuilles de style","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barrer","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"blockquote":{"toolbar":"Citation"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Paste Area","pasteMsg":"Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.","title":"Coller"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"En-tête 1","tag_h2":"En-tête 2","tag_h3":"En-tête 3","tag_h4":"En-tête 4","tag_h5":"En-tête 5","tag_h6":"En-tête 6","tag_p":"Normal","tag_pre":"Formaté"},"horizontalrule":{"toolbar":"Insérer un séparateur"},"image":{"alertUrl":"Veuillez saisir l'URL de l'image","alt":"Texte de remplacement","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Espacement horizontal","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Garder les proportions","menu":"Propriétés de l'image","resetSize":"Taille originale","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Télécharger","urlMissing":"Image source URL is missing.","vSpace":"Espacement vertical","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Équivalent clavier","advanced":"Avancée","advisoryContentType":"Type de contenu","advisoryTitle":"Titre","anchor":{"toolbar":"Insérer/modifier l'ancre","menu":"Propriétés de l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez saisir le nom de l'ancre","remove":"Remove Anchor"},"anchorId":"Par id","anchorName":"Par nom","charset":"Encodage de caractère","cssClasses":"Classes de feuilles de style","emailAddress":"Adresse E-Mail","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"Id","info":"Informations sur le lien","langCode":"Sens d'écriture","langDir":"Sens d'écriture","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Pas d'ancre disponible dans le document)","noEmail":"Veuillez saisir l'adresse e-mail","noUrl":"Veuillez saisir l'URL","other":"<other>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position à partir de la gauche","popupLocationBar":"Barre d'adresses","popupMenuBar":"Barre de menu","popupResizable":"Resizable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"Position à partir du haut","rel":"Relationship","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Ordre de tabulation","target":"Destination","targetFrame":"<Cadre>","targetFrameName":"Nom du cadre de destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Propriétés du lien","toAnchor":"Ancre dans cette page","toEmail":"E-Mail","toUrl":"URL","toolbar":"Insérer/modifier le lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Télécharger"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Coller comme texte","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Coller en tant que Word (formaté)","toolbar":"Coller en tant que Word (formaté)"},"removeformat":{"toolbar":"Supprimer le formatage"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Insérer un caractère spécial","toolbar":"Insérer un caractère spécial"},"stylescombo":{"label":"Style","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Taille de la bordure","caption":"Titre","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer des cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Contour","cellSpace":"Espacement","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer des colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Refaire","undo":"Annuler"},"justify":{"block":"Texte justifié","center":"Centrer","left":"Aligner à gauche","right":"Aligner à Droite"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Afficher les blocs"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/fr.js b/core/misc/ckeditor/lang/fr.js
deleted file mode 100644
index b5a950f..0000000
--- a/core/misc/ckeditor/lang/fr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fr']={"dir":"ltr","editor":"Éditeur de Texte Enrichi","common":{"editorHelp":"Appuyez sur ALT-0 pour l'aide","browseServer":"Explorer le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton Radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<non défini>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue (longdesc => malvoyant)","cssClass":"Classe CSS","advisoryTitle":"Description (title)","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Déplacer pour modifier la taille","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer?","options":"Options","target":"Cible (Target)","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à Droite (LTR)","langDirRTL":"Droite à Gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","invalidValue":"Invalid value.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px or %).","invalidInlineStyle":"La valeur spécifiée pour le style inline doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, Indisponible</span>"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour l'aide.","moreInfo":"Pour les informations de licence, veuillez visiter notre site web:","title":"À propos de CKEditor","userGuide":"Guide de l'utilisateur CKEditor en anglais"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"blockquote":{"toolbar":"Citation"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.","title":"Coller"},"contextmenu":{"options":"Options du menu contextuel"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Editer","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 éléments"},"list":{"bulletedlist":"Insérer/Supprimer la liste à puces","numberedlist":"Insérer/Supprimer la liste numérotée"},"indent":{"indent":"Augmenter le retrait (tabulation)","outdent":"Diminuer le retrait (tabulation)"},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Formaté"},"horizontalrule":{"toolbar":"Ligne horizontale"},"image":{"alertUrl":"Veuillez entrer l'adresse de l'image","alt":"Texte de remplacement","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Voulez-vous transformer le bouton image sélectionné en simple image?","hSpace":"Espacement horizontal","img2Button":"Voulez-vous transformer l'image en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","resetSize":"Taille d'origine","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Envoyer","urlMissing":"L'adresse source de l'image est manquante.","vSpace":"Espacement vertical","validateBorder":"Bordure doit être un entier.","validateHSpace":"HSpace doit être un entier.","validateVSpace":"VSpace doit être un entier."},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (ex: text/html)","advisoryTitle":"Description (title)","anchor":{"toolbar":"Ancre","menu":"Editer l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Charset de la cible","cssClasses":"Classe CSS","emailAddress":"Adresse E-Mail","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"Id","info":"Infos sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche","menu":"Editer le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse e-mail","noUrl":"Veuillez entrer l'adresse du lien","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Options de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre de status","popupToolbar":"Barre d'outils","popupTop":"Position haute","rel":"Relation","selectAnchor":"Sélectionner l'ancre","styles":"Style","tabIndex":"Index de tabulation","target":"Cible","targetFrame":"<cadre>","targetFrameName":"Nom du Cadre destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Transformer le lien en ancre dans le texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Envoyer"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Agrandir","minimize":"Minimiser"},"pastetext":{"button":"Coller comme texte sans mise en forme","title":"Coller comme texte sans mise en forme"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées à la suite d'une erreur interne.","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionnez un caractère","toolbar":"Insérer un caractère spécial"},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en page","panelTitle1":"Styles de blocs","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Fractionner horizontalement","splitVertical":"Fractionner verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Césure","hAlign":"Alignement Horizontal","vAlign":"Alignement Vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de Bordure","data":"Données","header":"Entête","yes":"Oui","no":"Non","invalidWidth":"La Largeur de Cellule doit être un nombre.","invalidHeight":"La Hauteur de Cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Choisissez"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonnes","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-Têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucunes","headersRow":"Première ligne","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge intérieure des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"% pourcents","widthPx":"pixels","widthUnit":"unité de largeur"},"undo":{"redo":"Rétablir","undo":"Annuler"},"justify":{"block":"Justifier","center":"Centrer","left":"Aligner à gauche","right":"Aligner à droite"},"placeholder":{"title":"Propriétés de l'Espace réservé","toolbar":"Créer l'Espace réservé","text":"Texte de l'Espace réservé","edit":"Modifier l'Espace réservé","textMissing":"L'Espace réservé doit contenir du texte."},"showblocks":{"toolbar":"Afficher les blocs"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/gl.js b/core/misc/ckeditor/lang/gl.js
deleted file mode 100644
index 350106c..0000000
--- a/core/misc/ckeditor/lang/gl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['gl']={"dir":"ltr","editor":"Editor de texto enriquecido","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Ver servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Campo de verificación","radio":"Botón de radio","textField":"Campo de texto","textarea":"Área de texto","hiddenField":"Campo oculto","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<non definido>","id":"Id","name":"Nome","langDir":"Orientación do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa da URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"OK","cancel":"Cancelar","close":"Pechar","preview":"Previsualizar","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Advanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nEstá seguro que quere cargar a nova páxina?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nEsta seguro que quere pechar o diálogo??","options":"Opcións","target":"Obxectivo","targetNew":"Nova xaneal (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Ancho","height":"Alto","align":"Aliñamento","alignLeft":"Esquerda","alignRight":"Dereita","alignCenter":"Centro","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Pé","invalidValue":"Invalid value.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O ancho debe ser un número.","invalidCssLength":"O valor especificado para o campo \"%1\" debe ser un número positivo con ou sen unha unidade medida CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"O valor especificado para o campo \"%1\" debe ser un número positivo con ou sen unha unidade de medida HTML válidoa (px or %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato \"nome : valor\", separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número con unha unidade CSS válida (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Sub-raiado"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de copia. Por favor, use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguridade do seu navegador non permiten que o editor realice automáticamente as tarefas de corte. Por favor, use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Paste Area","pasteMsg":"Por favor, pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e pulse <STRONG>OK</STRONG>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Pegar"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Marcas","numberedlist":"Lista Numerada"},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Enderezo","tag_div":"Paragraph (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formateado"},"horizontalrule":{"toolbar":"Inserir Liña Horizontal"},"image":{"alertUrl":"Por favor, escriba a URL da imaxe","alt":"Texto Alternativo","border":"Límite","btnUpload":"Enviar ó Servidor","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Esp. Horiz.","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Información da Imaxe","linkTab":"Ligazón","lockRatio":"Proporcional","menu":"Propriedades da Imaxe","resetSize":"Tamaño Orixinal","title":"Propriedades da Imaxe","titleButton":"Propriedades do Botón de Imaxe","upload":"Carregar","urlMissing":"Image source URL is missing.","vSpace":"Esp. Vert.","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Chave de Acceso","advanced":"Advanzado","advisoryContentType":"Tipo de Contido","advisoryTitle":"Título","anchor":{"toolbar":"Inserir/Editar Referencia","menu":"Propriedades da Referencia","title":"Propriedades da Referencia","name":"Nome da Referencia","errorName":"Por favor, escriba o nome da referencia","remove":"Remove Anchor"},"anchorId":"Por Element Id","anchorName":"Por Nome de Referencia","charset":"Fonte de Caracteres Vinculado","cssClasses":"Clases da Folla de Estilos","emailAddress":"Enderezo de E-Mail","emailBody":"Corpo do Mensaxe","emailSubject":"Asunto do Mensaxe","id":"Id","info":"Información da Ligazón","langCode":"Orientación do Idioma","langDir":"Orientación do Idioma","langDirLTR":"Esquerda a Dereita (LTR)","langDirRTL":"Dereita a Esquerda (RTL)","menu":"Editar Ligazón","name":"Nome","noAnchors":"(Non hai referencias disponibles no documento)","noEmail":"Por favor, escriba o enderezo de e-mail","noUrl":"Por favor, escriba a ligazón URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características da Xanela Emerxente","popupFullScreen":"A Toda Pantalla (IE)","popupLeft":"Posición Esquerda","popupLocationBar":"Barra de Localización","popupMenuBar":"Barra de Menú","popupResizable":"Resizable","popupScrollBars":"Barras de Desplazamento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Ferramentas","popupTop":"Posición dende Arriba","rel":"Relationship","selectAnchor":"Seleccionar unha Referencia","styles":"Estilo","tabIndex":"Índice de Tabulación","target":"Destino","targetFrame":"<frame>","targetFrameName":"Nome do Marco Destino","targetPopup":"<Xanela Emerxente>","targetPopupName":"Nome da Xanela Emerxente","title":"Ligazón","toAnchor":"Referencia nesta páxina","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Ligazón","type":"Tipo de Ligazón","unlink":"Eliminar Ligazón","upload":"Carregar"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Pegar como texto plano","title":"Pegar como texto plano"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Pegar dende Word","toolbar":"Pegar dende Word"},"removeformat":{"toolbar":"Eliminar Formato"},"sourcearea":{"toolbar":"Código Fonte"},"specialchar":{"options":"Special Character Options","title":"Seleccione Caracter Especial","toolbar":"Inserir Carácter Especial"},"stylescombo":{"label":"Estilo","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Tamaño do Borde","caption":"Título","cell":{"menu":"Cela","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Borrar Cela","merge":"Unir Celas","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Marxe interior","cellSpace":"Marxe entre Celas","column":{"menu":"Columna","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Propiedades da Táboa","row":{"menu":"Fila","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Borrar Filas"},"rows":"Filas","summary":"Sumario","title":"Propiedades da Táboa","toolbar":"Tabla","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Refacer","undo":"Desfacer"},"justify":{"block":"Xustificado","center":"Centrado","left":"Aliñar á Esquerda","right":"Aliñar á Dereita"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/gu.js b/core/misc/ckeditor/lang/gu.js
deleted file mode 100644
index fbc9d85..0000000
--- a/core/misc/ckeditor/lang/gu.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['gu']={"dir":"ltr","editor":"રીચ ટેક્ષ્ત્ એડીટર","common":{"editorHelp":"પ્રેસ ALT 0 મદદ માટ","browseServer":"સર્વર બ્રાઉઝ કરો","url":"URL","protocol":"પ્રોટોકૉલ","upload":"અપલોડ","uploadSubmit":"આ સર્વરને મોકલવું","image":"ચિત્ર","flash":"ફ્લૅશ","form":"ફૉર્મ/પત્રક","checkbox":"ચેક બોક્સ","radio":"રેડિઓ બટન","textField":"ટેક્સ્ટ ફીલ્ડ, શબ્દ ક્ષેત્ર","textarea":"ટેક્સ્ટ એરિઆ, શબ્દ વિસ્તાર","hiddenField":"ગુપ્ત ક્ષેત્ર","button":"બટન","select":"પસંદગી ક્ષેત્ર","imageButton":"ચિત્ર બટન","notSet":"<સેટ નથી>","id":"Id","name":"નામ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLtr":"ડાબે થી જમણે (LTR)","langDirRtl":"જમણે થી ડાબે (RTL)","langCode":"ભાષા કોડ","longDescr":"વધારે માહિતી માટે URL","cssClass":"સ્ટાઇલ-શીટ ક્લાસ","advisoryTitle":"મુખ્ય મથાળું","cssStyle":"સ્ટાઇલ","ok":"ઠીક છે","cancel":"રદ કરવું","close":"બંધ કરવું","preview":"જોવું","resize":"ખેંચી ને યોગ્ય કરવું","generalTab":"જનરલ","advancedTab":"અડ્વાન્સડ","validateNumberFailed":"આ રકમ આકડો નથી.","confirmNewPage":"સવે કાર્ય વગરનું ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવું પાનું ખોલવું છે?","confirmCancel":"ઘણા વિકલ્પો બદલાયા છે. તમારે આ બોક્ષ્ બંધ કરવું છે?","options":"વિકલ્પો","target":"લક્ષ્ય","targetNew":"નવી વિન્ડો (_blank)","targetTop":"ઉપરની વિન્ડો (_top)","targetSelf":"એજ વિન્ડો (_self)","targetParent":"પેરનટ વિન્ડો (_parent)","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","styles":"શૈલી","cssClasses":"શૈલી કલાસીસ","width":"પહોળાઈ","height":"ઊંચાઈ","align":"લાઇનદોરીમાં ગોઠવવું","alignLeft":"ડાબી બાજુ ગોઠવવું","alignRight":"જમણી","alignCenter":"મધ્ય સેન્ટર","alignTop":"ઉપર","alignMiddle":"વચ્ચે","alignBottom":"નીચે","invalidValue":"Invalid value.","invalidHeight":"ઉંચાઈ એક આંકડો હોવો જોઈએ.","invalidWidth":"પોહળ ઈ એક આંકડો હોવો જોઈએ.","invalidCssLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.","invalidHtmlLength":"\"%1\" ની વેલ્યુ એક પોસીટીવ આંકડો હોવો જોઈએ અથવા HTML measurement unit (px or %) વગર.","invalidInlineStyle":"ઈનલાઈન  સ્ટાઈલ ની વેલ્યુ  \"name : value\" ના ફોર્મેટ માં હોવી જોઈએ, વચ્ચે સેમી-કોલોન જોઈએ.","cssLengthTooltip":"પિક્ષ્લ્ નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.","unavailable":"%1<span class=\"cke_accessibility\">, નથી મળતું</span>"},"about":{"copy":"કોપીરાઈટ &copy; $1. ઓલ રાઈટ્સ ","dlgTitle":"CKEditor વિષે","help":"મદદ માટે $1 તપાસો","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ","title":"CKEditor વિષે","userGuide":"CKEditor યુઝર્સ ગાઈડ"},"basicstyles":{"bold":"બોલ્ડ/સ્પષ્ટ","italic":"ઇટેલિક, ત્રાંસા","strike":"છેકી નાખવું","subscript":"એક ચિહ્નની નીચે કરેલું બીજું ચિહ્ન","superscript":"એક ચિહ્ન ઉપર કરેલું બીજું ચિહ્ન.","underline":"અન્ડર્લાઇન, નીચે લીટી"},"blockquote":{"toolbar":"બ્લૉક-કોટ, અવતરણચિહ્નો"},"clipboard":{"copy":"નકલ","copyError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી.  (Ctrl/Cmd+C) का प्रयोग करें।","cut":"કાપવું","cutError":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસ્ટ","pasteArea":"પેસ્ટ કરવાની જગ્યા","pasteMsg":"Ctrl/Cmd+V નો પ્રયોગ કરી પેસ્ટ કરો","securityMsg":"તમારા બ્રાઉઝર ની સુરક્ષિત સેટિંગસના કારણે,એડિટર તમારા કિલ્પબોર્ડ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિન્ડોમાં ફરીથી પેસ્ટ કરવું પડશે.","title":"પેસ્ટ"},"contextmenu":{"options":"કોન્તેક્ષ્ત્ મેનુના વિકલ્પો"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનું કરવું","toolbarExpand":"ટૂલબાર મોટું કરવું","toolbarGroups":{"document":"દસ્તાવેજ","clipboard":"ક્લિપબોર્ડ/અન","editing":"એડીટ કરવું","forms":"ફોર્મ","basicstyles":"બેસિક્ સ્ટાઇલ","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવું","styles":"સ્ટાઇલ","colors":"રંગ","tools":"ટૂલ્સ"},"toolbars":"એડીટર ટૂલ બાર"},"elementspath":{"eleLabel":"એલીમેન્ટ્સ નો ","eleTitle":"એલીમેન્ટ %1"},"list":{"bulletedlist":"બુલેટ સૂચિ","numberedlist":"સંખ્યાંકન સૂચિ"},"indent":{"indent":"ઇન્ડેન્ટ, લીટીના આરંભમાં જગ્યા વધારવી","outdent":"ઇન્ડેન્ટ લીટીના આરંભમાં જગ્યા ઘટાડવી"},"format":{"label":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","panelTitle":"ફૉન્ટ ફૉર્મટ, રચનાની શૈલી","tag_address":"સરનામું","tag_div":"શીર્ષક (DIV)","tag_h1":"શીર્ષક 1","tag_h2":"શીર્ષક 2","tag_h3":"શીર્ષક 3","tag_h4":"શીર્ષક 4","tag_h5":"શીર્ષક 5","tag_h6":"શીર્ષક 6","tag_p":"સામાન્ય","tag_pre":"ફૉર્મટેડ"},"horizontalrule":{"toolbar":"સમસ્તરીય રેખા ઇન્સર્ટ/દાખલ કરવી"},"image":{"alertUrl":"ચિત્રની URL ટાઇપ કરો","alt":"ઑલ્ટર્નટ ટેક્સ્ટ","border":"બોર્ડર","btnUpload":"આ સર્વરને મોકલવું","button2Img":"તમારે ઈમેજ બટનને સાદી ઈમેજમાં બદલવું છે.","hSpace":"સમસ્તરીય જગ્યા","img2Button":"તમારે સાદી ઈમેજને ઈમેજ બટનમાં બદલવું છે.","infoTab":"ચિત્ર ની જાણકારી","linkTab":"લિંક","lockRatio":"લૉક ગુણોત્તર","menu":"ચિત્રના ગુણ","resetSize":"રીસેટ સાઇઝ","title":"ચિત્રના ગુણ","titleButton":"ચિત્ર બટનના ગુણ","upload":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","vSpace":"લંબરૂપ જગ્યા","validateBorder":"બોર્ડેર આંકડો હોવો જોઈએ.","validateHSpace":"HSpaceઆંકડો હોવો જોઈએ.","validateVSpace":"VSpace આંકડો હોવો જોઈએ. "},"fakeobjects":{"anchor":"અનકર","flash":"ફ્લેશ ","hiddenfield":"હિડન ","iframe":"IFrame","unknown":"અનનોન ઓબ્જેક્ટ"},"link":{"acccessKey":"ઍક્સેસ કી","advanced":"અડ્વાન્સડ","advisoryContentType":"મુખ્ય કન્ટેન્ટ પ્રકાર","advisoryTitle":"મુખ્ય મથાળું","anchor":{"toolbar":"ઍંકર ઇન્સર્ટ/દાખલ કરવી","menu":"ઍંકરના ગુણ","title":"ઍંકરના ગુણ","name":"ઍંકરનું નામ","errorName":"ઍંકરનું નામ ટાઈપ કરો","remove":"સ્થિર નકરવું"},"anchorId":"ઍંકર એલિમન્ટ Id થી પસંદ કરો","anchorName":"ઍંકર નામથી પસંદ કરો","charset":"લિંક રિસૉર્સ કૅરિક્ટર સેટ","cssClasses":"સ્ટાઇલ-શીટ ક્લાસ","emailAddress":"ઈ-મેલ સરનામું","emailBody":"સંદેશ","emailSubject":"ઈ-મેલ વિષય","id":"Id","info":"લિંક ઇન્ફૉ ટૅબ","langCode":"ભાષા લેખવાની પદ્ધતિ","langDir":"ભાષા લેખવાની પદ્ધતિ","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","menu":" લિંક એડિટ/માં ફેરફાર કરવો","name":"નામ","noAnchors":"(ડૉક્યુમન્ટમાં ઍંકરની સંખ્યા)","noEmail":"ઈ-મેલ સરનામું ટાઇપ કરો","noUrl":"લિંક  URL ટાઇપ કરો","other":"<other> <અન્ય>","popupDependent":"ડિપેન્ડન્ટ (Netscape)","popupFeatures":"પૉપ-અપ વિન્ડો ફીચરસૅ","popupFullScreen":"ફુલ સ્ક્રીન (IE)","popupLeft":"ડાબી બાજુ","popupLocationBar":"લોકેશન બાર","popupMenuBar":"મેન્યૂ બાર","popupResizable":"રીસાઈઝએબલ","popupScrollBars":"સ્ક્રોલ બાર","popupStatusBar":"સ્ટૅટસ બાર","popupToolbar":"ટૂલ બાર","popupTop":"જમણી બાજુ","rel":"સંબંધની સ્થિતિ","selectAnchor":"ઍંકર પસંદ કરો","styles":"સ્ટાઇલ","tabIndex":"ટૅબ ઇન્ડેક્સ","target":"ટાર્ગેટ/લક્ષ્ય","targetFrame":"<ફ્રેમ>","targetFrameName":"ટાર્ગેટ ફ્રેમ નું નામ","targetPopup":"<પૉપ-અપ વિન્ડો>","targetPopupName":"પૉપ-અપ વિન્ડો નું નામ","title":"લિંક","toAnchor":"આ પેજનો ઍંકર","toEmail":"ઈ-મેલ","toUrl":"URL","toolbar":"લિંક ઇન્સર્ટ/દાખલ કરવી","type":"લિંક પ્રકાર","unlink":"લિંક કાઢવી","upload":"અપલોડ"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"મોટું કરવું","minimize":"નાનું કરવું"},"pastetext":{"button":"પેસ્ટ (ટેક્સ્ટ)","title":"પેસ્ટ (ટેક્સ્ટ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેક્ષ્ત્ કોપી કરી રહ્યા છો ટે વર્ડ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસ્ટ કરેલો ડેટા ઇન્ટરનલ એરર ના લીથે સાફ કરી શકાયો નથી.","title":"પેસ્ટ (વડૅ ટેક્સ્ટ)","toolbar":"પેસ્ટ (વડૅ ટેક્સ્ટ)"},"removeformat":{"toolbar":"ફૉર્મટ કાઢવું"},"sourcearea":{"toolbar":"મૂળ કે પ્રાથમિક દસ્તાવેજ"},"specialchar":{"options":"સ્પેશિઅલ કરેક્ટરના વિકલ્પો","title":"સ્પેશિઅલ વિશિષ્ટ અક્ષર પસંદ કરો","toolbar":"વિશિષ્ટ અક્ષર ઇન્સર્ટ/દાખલ કરવું"},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોર્મેટ ","panelTitle1":"બ્લોક ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબ્જેક્ટ પદ્ધતિ"},"table":{"border":"કોઠાની બાજુ(બોર્ડર) સાઇઝ","caption":"મથાળું/કૅપ્શન ","cell":{"menu":"કોષના ખાના","insertBefore":"પહેલાં કોષ ઉમેરવો","insertAfter":"પછી કોષ ઉમેરવો","deleteCell":"કોષ ડિલીટ/કાઢી નાખવો","merge":"કોષ ભેગા કરવા","mergeRight":"જમણી બાજુ ભેગા કરવા","mergeDown":"નીચે ભેગા કરવા","splitHorizontal":"કોષને સમસ્તરીય વિભાજન કરવું","splitVertical":"કોષને સીધું ને ઊભું વિભાજન કરવું","title":"સેલના ગુણ","cellType":"સેલનો પ્રકાર","rowSpan":"આડી કટારની જગ્યા","colSpan":"ઊભી કતારની જગ્યા","wordWrap":"વર્ડ રેપ","hAlign":"સપાટ લાઈનદોરી","vAlign":"ઊભી લાઈનદોરી","alignBaseline":"બસે લાઈન","bgColor":"પાછાળનો રંગ","borderColor":"બોર્ડેર રંગ","data":"સ્વીકૃત માહિતી","header":"મથાળું","yes":"હા","no":"ના","invalidWidth":"સેલની પોહલાઈ આંકડો હોવો જોઈએ.","invalidHeight":"સેલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRowSpan":"રો સ્પાન આંકડો હોવો જોઈએ.","invalidColSpan":"કોલમ સ્પાન આંકડો હોવો જોઈએ.","chooseColor":"પસંદ કરવું"},"cellPad":"સેલ પૅડિંગ","cellSpace":"સેલ અંતર","column":{"menu":"કૉલમ/ઊભી કટાર","insertBefore":"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી","insertAfter":"પછી કૉલમ/ઊભી કટાર ઉમેરવી","deleteColumn":"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી"},"columns":"કૉલમ/ઊભી કટાર","deleteTable":"કોઠો ડિલીટ/કાઢી નાખવું","headers":"મથાળા","headersBoth":"બેવું","headersColumn":"પહેલી ઊભી કટાર","headersNone":"નથી ","headersRow":"પહેલી  કટાર","invalidBorder":"બોર્ડર એક આંકડો હોવો જોઈએ","invalidCellPadding":"સેલની અંદરની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCellSpacing":"સેલ વચ્ચેની જગ્યા સુન્ય કરતા વધારે હોવી જોઈએ.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈએ.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈએ.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈએ.","menu":"ટેબલ, કોઠાનું મથાળું","row":{"menu":"પંક્તિના ખાના","insertBefore":"પહેલાં પંક્તિ ઉમેરવી","insertAfter":"પછી પંક્તિ ઉમેરવી","deleteRow":"પંક્તિઓ ડિલીટ/કાઢી નાખવી"},"rows":"પંક્તિના ખાના","summary":"ટૂંકો એહેવાલ","title":"ટેબલ, કોઠાનું મથાળું","toolbar":"ટેબલ, કોઠો","widthPc":"પ્રતિશત","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ એકમ"},"undo":{"redo":"રિડૂ; પછી હતી એવી સ્થિતિ પાછી લાવવી","undo":"રદ કરવું; પહેલાં હતી એવી સ્થિતિ પાછી લાવવી"},"justify":{"block":"બ્લૉક, અંતરાય જસ્ટિફાઇ","center":"સંકેંદ્રણ/સેંટરિંગ","left":"ડાબી બાજુએ/બાજુ તરફ","right":"જમણી બાજુએ/બાજુ તરફ"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"બ્લૉક બતાવવું"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/he.js b/core/misc/ckeditor/lang/he.js
deleted file mode 100644
index 0b8e717..0000000
--- a/core/misc/ckeditor/lang/he.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['he']={"dir":"rtl","editor":"עורך טקסט עשיר","common":{"editorHelp":"לחץ אלט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העלאה","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פלאש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן אפשרויות","textField":"שדה טקסט","textarea":"איזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<לא נקבע>","id":"זיהוי (ID)","name":"שם","langDir":"כיוון שפה","langDirLtr":"שמאל לימין (LTR)","langDirRtl":"ימין לשמאל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתיאור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"אישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות את הגודל","generalTab":"כללי","advancedTab":"אפשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל השינויים שלא נשמרו יאבדו. האם להעלות דף חדש?","confirmCancel":"חלק מהאפשרויות שונו, האם לסגור את הדיאלוג?","options":"אפשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"אותו חלון (_self)","targetParent":"חלון האב (_parent)","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","alignLeft":"לשמאל","alignRight":"לימין","alignCenter":"מרכז","alignTop":"למעלה","alignMiddle":"לאמצע","alignBottom":"לתחתית","invalidValue":"ערך לא חוקי.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, או pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי עם או ללא יחידת מידה חוקית של HTML (px או %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ערכים אחד או יותר בפורמט \"שם : ערך\", מופרדים על ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג פיקסלים או מספר עם יחידת גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, לא זמין</span>"},"about":{"copy":"Copyright &copy; $1. כל הזכויות שמורות.","dlgTitle":"אודות CKEditor","help":"היכנסו ל$1 לעזרה.","moreInfo":"למידע נוסף בקרו באתרנו:","title":"אודות CKEditor","userGuide":"מדריך המשתמש של CKEditor"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"blockquote":{"toolbar":"בלוק ציטוט"},"clipboard":{"copy":"העתקה","copyError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות העתקה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות האבטחה בדפדפן שלך לא מאפשרות לעורך לבצע פעולות גזירה אוטומטיות. יש להשתמש במקלדת לשם כך (Ctrl/Cmd+X).","paste":"הדבקה","pasteArea":"איזור הדבקה","pasteMsg":"נא להדביק בתוך הקופסה באמצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>אישור</b>.","securityMsg":"עקב הגדרות אבטחה בדפדפן, לא ניתן לגשת אל לוח הגזירים (Clipboard) בצורה ישירה. נא להדביק שוב בחלון זה.","title":"הדבקה"},"contextmenu":{"options":"אפשרויות תפריט ההקשר"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלים","toolbarExpand":"הרחבת סרגל כלים","toolbarGroups":{"document":"מסמך","clipboard":"לוח הגזירים (Clipboard)/צעד אחרון","editing":"עריכה","forms":"טפסים","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורים","insert":"הכנסה","styles":"עיצוב","colors":"צבעים","tools":"כלים"},"toolbars":"סרגלי כלים של העורך"},"elementspath":{"eleLabel":"עץ האלמנטים","eleTitle":"%1 אלמנט"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"indent":{"indent":"הגדלת הזחה","outdent":"הקטנת הזחה"},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"horizontalrule":{"toolbar":"הוספת קו אופקי"},"image":{"alertUrl":"יש להקליד את כתובת התמונה","alt":"טקסט חלופי","border":"מסגרת","btnUpload":"שליחה לשרת","button2Img":"האם להפוך את תמונת הכפתור לתמונה פשוטה?","hSpace":"מרווח אופקי","img2Button":"האם להפוך את התמונה לכפתור תמונה?","infoTab":"מידע על התמונה","linkTab":"קישור","lockRatio":"נעילת היחס","menu":"תכונות התמונה","resetSize":"איפוס הגודל","title":"מאפייני התמונה","titleButton":"מאפיני כפתור תמונה","upload":"העלאה","urlMissing":"כתובת התמונה חסרה.","vSpace":"מרווח אנכי","validateBorder":"שדה המסגרת חייב להיות מספר שלם.","validateHSpace":"שדה המרווח האופקי חייב להיות מספר שלם.","validateVSpace":"שדה המרווח האנכי חייב להיות מספר שלם."},"fakeobjects":{"anchor":"עוגן","flash":"סרטון פלאש","hiddenfield":"שדה חבוי","iframe":"חלון פנימי (iframe)","unknown":"אובייקט לא ידוע"},"link":{"acccessKey":"מקש גישה","advanced":"אפשרויות מתקדמות","advisoryContentType":"Content Type מוצע","advisoryTitle":"כותרת מוצעת","anchor":{"toolbar":"הוספת/עריכת נקודת עיגון","menu":"מאפייני נקודת עיגון","title":"מאפייני נקודת עיגון","name":"שם לנקודת עיגון","errorName":"יש להקליד שם לנקודת עיגון","remove":"מחיקת נקודת עיגון"},"anchorId":"עפ\"י זיהוי (ID) האלמנט","anchorName":"עפ\"י שם העוגן","charset":"קידוד המשאב המקושר","cssClasses":"גיליונות עיצוב קבוצות","emailAddress":"כתובת הדוא\"ל","emailBody":"גוף ההודעה","emailSubject":"נושא ההודעה","id":"זיהוי (ID)","info":"מידע על הקישור","langCode":"קוד שפה","langDir":"כיוון שפה","langDirLTR":"שמאל לימין (LTR)","langDirRTL":"ימין לשמאל (RTL)","menu":"מאפייני קישור","name":"שם","noAnchors":"(אין עוגנים זמינים בדף)","noEmail":"יש להקליד את כתובת הדוא\"ל","noUrl":"יש להקליד את כתובת הקישור (URL)","other":"<אחר>","popupDependent":"תלוי (Netscape)","popupFeatures":"תכונות החלון הקופץ","popupFullScreen":"מסך מלא (IE)","popupLeft":"מיקום צד שמאל","popupLocationBar":"סרגל כתובת","popupMenuBar":"סרגל תפריט","popupResizable":"שינוי גודל","popupScrollBars":"ניתן לגלילה","popupStatusBar":"סרגל חיווי","popupToolbar":"סרגל הכלים","popupTop":"מיקום צד עליון","rel":"קשר גומלין","selectAnchor":"בחירת עוגן","styles":"סגנון","tabIndex":"מספר טאב","target":"מטרה","targetFrame":"<מסגרת>","targetFrameName":"שם מסגרת היעד","targetPopup":"<חלון קופץ>","targetPopupName":"שם החלון הקופץ","title":"קישור","toAnchor":"עוגן בעמוד זה","toEmail":"דוא\"ל","toUrl":"כתובת (URL)","toolbar":"הוספת/עריכת קישור","type":"סוג קישור","unlink":"הסרת הקישור","upload":"העלאה"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"הגדלה למקסימום","minimize":"הקטנה למינימום"},"pastetext":{"button":"הדבקה כטקסט פשוט","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נראה הטקסט שבכוונתך להדביק מקורו בקובץ וורד. האם ברצונך לנקות אותו טרם ההדבקה?","error":"לא ניתן היה לנקות את המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"removeformat":{"toolbar":"הסרת העיצוב"},"sourcearea":{"toolbar":"מקור"},"specialchar":{"options":"אפשרויות תווים מיוחדים","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות אובייקט"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מאפייני תא","insertBefore":"הוספת תא לפני","insertAfter":"הוספת תא אחרי","deleteCell":"מחיקת תאים","merge":"מיזוג תאים","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול תא אופקית","splitVertical":"פיצול תא אנכית","title":"תכונות התא","cellType":"סוג התא","rowSpan":"מתיחת השורות","colSpan":"מתיחת התאים","wordWrap":"מניעת גלישת שורות","hAlign":"יישור אופקי","vAlign":"יישור אנכי","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"לא","invalidWidth":"שדה רוחב התא חייב להיות מספר.","invalidHeight":"שדה גובה התא חייב להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר שלם.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר שלם.","chooseColor":"בחר"},"cellPad":"ריפוד תא","cellSpace":"מרווח תא","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה אחרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניהם","headersColumn":"עמודה ראשונה","headersNone":"אין","headersRow":"שורה ראשונה","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד התאים חייב להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח התאים חייב להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מאפייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה אחרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מאפייני טבלה","toolbar":"טבלה","widthPc":"אחוז","widthPx":"פיקסלים","widthUnit":"יחידת רוחב"},"undo":{"redo":"חזרה על צעד אחרון","undo":"ביטול צעד אחרון"},"justify":{"block":"יישור לשוליים","center":"מרכוז","left":"יישור לשמאל","right":"יישור לימין"},"placeholder":{"title":"מאפייני שומר מקום","toolbar":"צור שומר מקום","text":"תוכן שומר המקום","edit":"ערוך שומר מקום","textMissing":"שומר המקום חייב להכיל טקסט."},"showblocks":{"toolbar":"הצגת בלוקים"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/hi.js b/core/misc/ckeditor/lang/hi.js
deleted file mode 100644
index 2ab7f67..0000000
--- a/core/misc/ckeditor/lang/hi.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['hi']={"dir":"ltr","editor":"रिच टेक्स्ट एडिटर","common":{"editorHelp":"मदद के लिये ALT 0 दबाए","browseServer":"सर्वर ब्राउज़ करें","url":"URL","protocol":"प्रोटोकॉल","upload":"अपलोड","uploadSubmit":"इसे सर्वर को भेजें","image":"तस्वीर","flash":"फ़्लैश","form":"फ़ॉर्म","checkbox":"चॅक बॉक्स","radio":"रेडिओ बटन","textField":"टेक्स्ट फ़ील्ड","textarea":"टेक्स्ट एरिया","hiddenField":"गुप्त फ़ील्ड","button":"बटन","select":"चुनाव फ़ील्ड","imageButton":"तस्वीर बटन","notSet":"<सॅट नहीं>","id":"Id","name":"नाम","langDir":"भाषा लिखने की दिशा","langDirLtr":"बायें से दायें (LTR)","langDirRtl":"दायें से बायें (RTL)","langCode":"भाषा कोड","longDescr":"अधिक विवरण के लिए URL","cssClass":"स्टाइल-शीट क्लास","advisoryTitle":"परामर्श शीर्शक","cssStyle":"स्टाइल","ok":"ठीक है","cancel":"रद्द करें","close":"Close","preview":"प्रीव्यू","resize":"Resize","generalTab":"सामान्य","advancedTab":"ऍड्वान्स्ड","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"टार्गेट","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","styles":"स्टाइल","cssClasses":"स्टाइल-शीट क्लास","width":"चौड़ाई","height":"ऊँचाई","align":"ऍलाइन","alignLeft":"दायें","alignRight":"दायें","alignCenter":"बीच में","alignTop":"ऊपर","alignMiddle":"मध्य","alignBottom":"नीचे","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"बोल्ड","italic":"इटैलिक","strike":"स्ट्राइक थ्रू","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"blockquote":{"toolbar":"ब्लॉक-कोट"},"clipboard":{"copy":"कॉपी","copyError":"आपके ब्राआउज़र की सुरक्षा सॅटिन्ग्स ने कॉपी करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+C) का प्रयोग करें।","cut":"कट","cutError":"आपके ब्राउज़र की सुरक्षा सॅटिन्ग्स ने कट करने की अनुमति नहीं प्रदान की है। (Ctrl/Cmd+X) का प्रयोग करें।","paste":"पेस्ट","pasteArea":"Paste Area","pasteMsg":"Ctrl/Cmd+V का प्रयोग करके पेस्ट करें और ठीक है करें.","securityMsg":"आपके ब्राउज़र की सुरक्षा आपके ब्राउज़र की सुरKश सैटिंग के कारण, एडिटर आपके क्लिपबोर्ड डेटा को नहीं पा सकता है. आपको उसे इस विन्डो में दोबारा पेस्ट करना होगा.","title":"पेस्ट"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"एडिटर टूलबार"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"बुलॅट सूची","numberedlist":"अंकीय सूची"},"indent":{"indent":"इन्डॅन्ट बढ़ायें","outdent":"इन्डॅन्ट कम करें"},"format":{"label":"फ़ॉर्मैट","panelTitle":"फ़ॉर्मैट","tag_address":"पता","tag_div":"शीर्षक (DIV)","tag_h1":"शीर्षक 1","tag_h2":"शीर्षक 2","tag_h3":"शीर्षक 3","tag_h4":"शीर्षक 4","tag_h5":"शीर्षक 5","tag_h6":"शीर्षक 6","tag_p":"साधारण","tag_pre":"फ़ॉर्मैटॅड"},"horizontalrule":{"toolbar":"हॉरिज़ॉन्टल रेखा इन्सर्ट करें"},"image":{"alertUrl":"तस्वीर का URL टाइप करें ","alt":"वैकल्पिक टेक्स्ट","border":"बॉर्डर","btnUpload":"इसे सर्वर को भेजें","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"हॉरिज़ॉन्टल स्पेस","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"तस्वीर की जानकारी","linkTab":"लिंक","lockRatio":"लॉक अनुपात","menu":"तस्वीर प्रॉपर्टीज़","resetSize":"रीसॅट साइज़","title":"तस्वीर प्रॉपर्टीज़","titleButton":"तस्वीर बटन प्रॉपर्टीज़","upload":"अपलोड","urlMissing":"Image source URL is missing.","vSpace":"वर्टिकल स्पेस","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"ऐंकर इन्सर्ट/संपादन","flash":"Flash Animation","hiddenfield":"गुप्त फ़ील्ड","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"ऍक्सॅस की","advanced":"ऍड्वान्स्ड","advisoryContentType":"परामर्श कन्टॅन्ट प्रकार","advisoryTitle":"परामर्श शीर्शक","anchor":{"toolbar":"ऐंकर इन्सर्ट/संपादन","menu":"ऐंकर प्रॉपर्टीज़","title":"ऐंकर प्रॉपर्टीज़","name":"ऐंकर का नाम","errorName":"ऐंकर का नाम टाइप करें","remove":"Remove Anchor"},"anchorId":"ऍलीमॅन्ट Id से","anchorName":"ऐंकर नाम से","charset":"लिंक रिसोर्स करॅक्टर सॅट","cssClasses":"स्टाइल-शीट क्लास","emailAddress":"ई-मेल पता","emailBody":"संदेश","emailSubject":"संदेश विषय","id":"Id","info":"लिंक  ","langCode":"भाषा लिखने की दिशा","langDir":"भाषा लिखने की दिशा","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","menu":"लिंक संपादन","name":"नाम","noAnchors":"(डॉक्यूमॅन्ट में ऐंकर्स की संख्या)","noEmail":"ई-मेल पता टाइप करें","noUrl":"लिंक URL टाइप करें","other":"<अन्य>","popupDependent":"डिपेन्डॅन्ट (Netscape)","popupFeatures":"पॉप-अप विन्डो फ़ीचर्स","popupFullScreen":"फ़ुल स्क्रीन (IE)","popupLeft":"बायीं तरफ","popupLocationBar":"लोकेशन बार","popupMenuBar":"मॅन्यू बार","popupResizable":"Resizable","popupScrollBars":"स्क्रॉल बार","popupStatusBar":"स्टेटस बार","popupToolbar":"टूल बार","popupTop":"दायीं तरफ","rel":"Relationship","selectAnchor":"ऐंकर चुनें","styles":"स्टाइल","tabIndex":"टैब इन्डॅक्स","target":"टार्गेट","targetFrame":"<फ़्रेम>","targetFrameName":"टार्गेट फ़्रेम का नाम","targetPopup":"<पॉप-अप विन्डो>","targetPopupName":"पॉप-अप विन्डो का नाम","title":"लिंक","toAnchor":"इस पेज का ऐंकर","toEmail":"ई-मेल","toUrl":"URL","toolbar":"लिंक इन्सर्ट/संपादन","type":"लिंक प्रकार","unlink":"लिंक हटायें","upload":"अपलोड"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"मेक्सिमाईज़","minimize":"मिनिमाईज़"},"pastetext":{"button":"पेस्ट (सादा टॅक्स्ट)","title":"पेस्ट (सादा टॅक्स्ट)"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"पेस्ट (वर्ड से)","toolbar":"पेस्ट (वर्ड से)"},"removeformat":{"toolbar":"फ़ॉर्मैट हटायें"},"sourcearea":{"toolbar":"सोर्स"},"specialchar":{"options":"Special Character Options","title":"विशेष करॅक्टर चुनें","toolbar":"विशेष करॅक्टर इन्सर्ट करें"},"stylescombo":{"label":"स्टाइल","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"बॉर्डर साइज़","caption":"शीर्षक","cell":{"menu":"खाना","insertBefore":"पहले सैल डालें","insertAfter":"बाद में सैल डालें","deleteCell":"सैल डिलीट करें","merge":"सैल मिलायें","mergeRight":"बाँया विलय","mergeDown":"नीचे विलय करें","splitHorizontal":"सैल को क्षैतिज स्थिति में विभाजित करें","splitVertical":"सैल को लम्बाकार में विभाजित करें","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"सैल पैडिंग","cellSpace":"सैल अंतर","column":{"menu":"कालम","insertBefore":"पहले कालम डालें","insertAfter":"बाद में कालम डालें","deleteColumn":"कालम डिलीट करें"},"columns":"कालम","deleteTable":"टेबल डिलीट करें","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"टेबल प्रॉपर्टीज़","row":{"menu":"पंक्ति","insertBefore":"पहले पंक्ति डालें","insertAfter":"बाद में पंक्ति डालें","deleteRow":"पंक्तियाँ डिलीट करें"},"rows":"पंक्तियाँ","summary":"सारांश","title":"टेबल प्रॉपर्टीज़","toolbar":"टेबल","widthPc":"प्रतिशत","widthPx":"पिक्सैल","widthUnit":"width unit"},"undo":{"redo":"रीडू","undo":"अन्डू"},"justify":{"block":"ब्लॉक जस्टीफ़ाई","center":"बीच में","left":"बायीं तरफ","right":"दायीं तरफ"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"ब्लॉक दिखायें"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/hr.js b/core/misc/ckeditor/lang/hr.js
deleted file mode 100644
index 05dbd35..0000000
--- a/core/misc/ckeditor/lang/hr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['hr']={"dir":"ltr","editor":"Bogati uređivač teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"Dugački opis URL","cssClass":"Stylesheet klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Poništi","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veličine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite učitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"Odredište","targetNew":"Novi prozor (_blank)","targetTop":"Vršni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Širina","height":"Visina","align":"Poravnaj","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Središnje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","invalidValue":"Invalid value.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Širina mora biti broj.","invalidCssLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost određena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili više definicija s formatom \"naziv:vrijednost\", odvojenih točka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupno</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O CKEditoru","help":"Provjeri $1 za pomoć.","moreInfo":"Za informacije o licencama posjetite našu web stranicu:","title":"O CKEditoru","userGuide":"Vodič za CKEditor korisnike"},"basicstyles":{"bold":"Podebljaj","italic":"Ukosi","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"blockquote":{"toolbar":"Blockquote"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke Vašeg pretraživača ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Prostor za ljepljenje","pasteMsg":"Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki Vašeg pretraživača, editor nema direktan pristup Vašem međuspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.","title":"Zalijepi"},"contextmenu":{"options":"Opcije izbornika"},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"Proširi alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"Međuspremnik/Poništi","editing":"Uređivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake uređivača teksta"},"elementspath":{"eleLabel":"Putanja elemenata","eleTitle":"%1 element"},"list":{"bulletedlist":"Obična lista","numberedlist":"Brojčana lista"},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Želite li promijeniti odabrani gumb u jednostavnu sliku?","hSpace":"HSpace","img2Button":"Želite li promijeniti odabranu sliku u gumb?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zaključaj odnos","menu":"Svojstva slika","resetSize":"Obriši veličinu","title":"Svojstva slika","titleButton":"Image Button svojstva","upload":"Pošalji","urlMissing":"Nedostaje URL slike.","vSpace":"VSpace","validateBorder":"Okvir mora biti cijeli broj.","validateHSpace":"HSpace mora biti cijeli broj","validateVSpace":"VSpace mora biti cijeli broj."},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Sakriveno polje","iframe":"IFrame","unknown":"Nepoznati objekt"},"link":{"acccessKey":"Pristupna tipka","advanced":"Napredno","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Ubaci/promijeni sidro","menu":"Svojstva sidra","title":"Svojstva sidra","name":"Ime sidra","errorName":"Molimo unesite ime sidra","remove":"Ukloni sidro"},"anchorId":"Po Id elementa","anchorName":"Po nazivu sidra","charset":"Kodna stranica povezanih resursa","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smjer jezika","langDir":"Smjer jezika","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Promijeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Molimo upišite e-mail adresu","noUrl":"Molimo upišite URL link","other":"<drugi>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Promjenjiva veličina","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka s alatima","popupTop":"Gornja pozicija","rel":"Veza","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab Indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Ime ciljnog okvira","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/promijeni link","type":"Link vrsta","unlink":"Ukloni link","upload":"Pošalji"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"pastetext":{"button":"Zalijepi kao čisti tekst","title":"Zalijepi kao čisti tekst"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti čini se da je kopiran iz Worda. Želite li prije očistiti tekst?","error":"Nije moguće očistiti podatke za ljepljenje zbog interne greške","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"removeformat":{"toolbar":"Ukloni formatiranje"},"sourcearea":{"toolbar":"Kôd"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebne znakove"},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"table":{"border":"Veličina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"Izbriši ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"ne","invalidWidth":"Širina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"Izbriši kolone"},"columns":"Kolona","deleteTable":"Izbriši tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"Ništa","headersRow":"Prvi red","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Širina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"Izbriši redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica širine"},"undo":{"redo":"Ponovi","undo":"Poništi"},"justify":{"block":"Blok poravnanje","center":"Središnje poravnanje","left":"Lijevo poravnanje","right":"Desno poravnanje"},"placeholder":{"title":"Svojstva rezerviranog mjesta","toolbar":"Napravi rezervirano mjesto","text":"Tekst rezerviranog mjesta","edit":"Uredi rezervirano mjesto","textMissing":"Rezervirano mjesto mora sadržavati tekst."},"showblocks":{"toolbar":"Prikaži blokove"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/hu.js b/core/misc/ckeditor/lang/hu.js
deleted file mode 100644
index 99bff8e..0000000
--- a/core/misc/ckeditor/lang/hu.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['hu']={"dir":"ltr","editor":"HTML szerkesztő","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Űrlap","checkbox":"Jelölőnégyzet","radio":"Választógomb","textField":"Szövegmező","textarea":"Szövegterület","hiddenField":"Rejtettmező","button":"Gomb","select":"Legördülő lista","imageButton":"Képgomb","notSet":"<nincs beállítva>","id":"Azonosító","name":"Név","langDir":"Írás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"Stíluskészlet","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"Előnézet","resize":"Húzza az átméretezéshez","generalTab":"Általános","advancedTab":"További opciók","validateNumberFailed":"A mezőbe csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"Legfelső ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"Szülő ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","alignLeft":"Bal","alignRight":"Jobbra","alignCenter":"Középre","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","invalidValue":"Invalid value.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhető</span>"},"about":{"copy":"Copyright &copy; $1. Minden jog fenntartva.","dlgTitle":"CKEditor névjegy","help":"Itt találsz segítséget: $1","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:","title":"CKEditor névjegy","userGuide":"CKEditor Felhasználói útmutató"},"basicstyles":{"bold":"Félkövér","italic":"Dőlt","strike":"Áthúzott","subscript":"Alsó index","superscript":"Felső index","underline":"Aláhúzott"},"blockquote":{"toolbar":"Idézet blokk"},"clipboard":{"copy":"Másolás","copyError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngésző biztonsági beállításai nem engedélyezik a szerkesztőnek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteArea":"Beszúrás mező","pasteMsg":"Másolja be az alábbi mezőbe a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.","securityMsg":"A böngésző biztonsági beállításai miatt a szerkesztő nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.","title":"Beillesztés"},"contextmenu":{"options":"Helyi menü opciók"},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Űrlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"Szerkesztő Eszköztár"},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"format":{"label":"Formátum","panelTitle":"Formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"image":{"alertUrl":"Töltse ki a kép webcímét","alt":"Buborék szöveg","border":"Keret","btnUpload":"Küldés a szerverre","button2Img":"A kiválasztott képgombból sima képet szeretne csinálni?","hSpace":"Vízsz. táv","img2Button":"A kiválasztott képből képgombot szeretne csinálni?","infoTab":"Alaptulajdonságok","linkTab":"Hivatkozás","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","resetSize":"Eredeti méret","title":"Kép tulajdonságai","titleButton":"Képgomb tulajdonságai","upload":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","vSpace":"Függ. táv","validateBorder":"A keret méretének egész számot kell beírni!","validateHSpace":"Vízszintes távolságnak egész számot kell beírni!","validateVSpace":"Függőleges távolságnak egész számot kell beírni!"},"fakeobjects":{"anchor":"Horgony","flash":"Flash animáció","hiddenfield":"Rejtett mezõ","iframe":"IFrame","unknown":"Ismeretlen objektum"},"link":{"acccessKey":"Billentyűkombináció","advanced":"További opciók","advisoryContentType":"Súgó tartalomtípusa","advisoryTitle":"Súgócimke","anchor":{"toolbar":"Horgony beillesztése/szerkesztése","menu":"Horgony tulajdonságai","title":"Horgony tulajdonságai","name":"Horgony neve","errorName":"Kérem adja meg a horgony nevét","remove":"Horgony eltávolítása"},"anchorId":"Azonosító szerint","anchorName":"Horgony név szerint","charset":"Hivatkozott tartalom kódlapja","cssClasses":"Stíluskészlet","emailAddress":"E-Mail cím","emailBody":"Üzenet","emailSubject":"Üzenet tárgya","id":"Id","info":"Alaptulajdonságok","langCode":"Írás iránya","langDir":"Írás iránya","langDirLTR":"Balról jobbra","langDirRTL":"Jobbról balra","menu":"Hivatkozás módosítása","name":"Név","noAnchors":"(Nincs horgony a dokumentumban)","noEmail":"Adja meg az E-Mail címet","noUrl":"Adja meg a hivatkozás webcímét","other":"<más>","popupDependent":"Szülőhöz kapcsolt (csak Netscape)","popupFeatures":"Felugró ablak jellemzői","popupFullScreen":"Teljes képernyő (csak IE)","popupLeft":"Bal pozíció","popupLocationBar":"Címsor","popupMenuBar":"Menü sor","popupResizable":"Átméretezés","popupScrollBars":"Gördítősáv","popupStatusBar":"Állapotsor","popupToolbar":"Eszköztár","popupTop":"Felső pozíció","rel":"Kapcsolat típusa","selectAnchor":"Horgony választása","styles":"Stílus","tabIndex":"Tabulátor index","target":"Tartalom megjelenítése","targetFrame":"<keretben>","targetFrameName":"Keret neve","targetPopup":"<felugró ablakban>","targetPopupName":"Felugró ablak neve","title":"Hivatkozás tulajdonságai","toAnchor":"Horgony az oldalon","toEmail":"E-Mail","toUrl":"URL","toolbar":"Hivatkozás beillesztése/módosítása","type":"Hivatkozás típusa","unlink":"Hivatkozás törlése","upload":"Feltöltés"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"pastetext":{"button":"Beillesztés formázatlan szövegként","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-ből másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belső hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-ből","toolbar":"Beillesztés Word-ből"},"removeformat":{"toolbar":"Formázás eltávolítása"},"sourcearea":{"toolbar":"Forráskód"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függőlegesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"Függőleges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"Függőleges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezőbe csak számokat írhat.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRowSpan":"A függőleges egyesítés mezőbe csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezőbe csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belső margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"Mindkettő","headersColumn":"Első oszlop","headersNone":"Nincsenek","headersRow":"Első sor","invalidBorder":"A szegélyméret mezőbe csak számokat írhat.","invalidCellPadding":"A cella belső margó mezőbe csak számokat írhat.","invalidCellSpacing":"A cella térköz mezőbe csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezőbe csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezőbe csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"justify":{"block":"Sorkizárt","center":"Középre","left":"Balra","right":"Jobbra"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Blokkok megjelenítése"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/is.js b/core/misc/ckeditor/lang/is.js
deleted file mode 100644
index d2c2b96..0000000
--- a/core/misc/ckeditor/lang/is.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['is']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Fletta í skjalasafni","url":"Vefslóð","protocol":"Samskiptastaðall","upload":"Senda upp","uploadSubmit":"Hlaða upp","image":"Setja inn mynd","flash":"Flash","form":"Setja inn innsláttarform","checkbox":"Setja inn hökunarreit","radio":"Setja inn valhnapp","textField":"Setja inn textareit","textarea":"Setja inn textasvæði","hiddenField":"Setja inn falið svæði","button":"Setja inn hnapp","select":"Setja inn lista","imageButton":"Setja inn myndahnapp","notSet":"<ekkert valið>","id":"Auðkenni","name":"Nafn","langDir":"Lesstefna","langDirLtr":"Frá vinstri til hægri (LTR)","langDirRtl":"Frá hægri til vinstri (RTL)","langCode":"Tungumálakóði","longDescr":"Nánari lýsing","cssClass":"Stílsniðsflokkur","advisoryTitle":"Titill","cssStyle":"Stíll","ok":"Í lagi","cancel":"Hætta við","close":"Close","preview":"Forskoða","resize":"Resize","generalTab":"Almennt","advancedTab":"Tæknilegt","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Mark","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","styles":"Stíll","cssClasses":"Stílsniðsflokkur","width":"Breidd","height":"Hæð","align":"Jöfnun","alignLeft":"Vinstri","alignRight":"Hægri","alignCenter":"Miðjað","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"blockquote":{"toolbar":"Inndráttur"},"clipboard":{"copy":"Afrita","copyError":"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).","cut":"Klippa","cutError":"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).","paste":"Líma","pasteArea":"Paste Area","pasteMsg":"Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.","securityMsg":"Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.","title":"Líma"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"format":{"label":"Stílsnið","panelTitle":"Stílsnið","tag_address":"Vistfang","tag_div":"Venjulegt (DIV)","tag_h1":"Fyrirsögn 1","tag_h2":"Fyrirsögn 2","tag_h3":"Fyrirsögn 3","tag_h4":"Fyrirsögn 4","tag_h5":"Fyrirsögn 5","tag_h6":"Fyrirsögn 6","tag_p":"Venjulegt letur","tag_pre":"Forsniðið"},"horizontalrule":{"toolbar":"Lóðrétt lína"},"image":{"alertUrl":"Sláðu inn slóðina að myndinni","alt":"Baklægur texti","border":"Rammi","btnUpload":"Hlaða upp","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Vinstri bil","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Almennt","linkTab":"Stikla","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","resetSize":"Reikna stærð","title":"Eigindi myndar","titleButton":"Eigindi myndahnapps","upload":"Hlaða upp","urlMissing":"Image source URL is missing.","vSpace":"Hægri bil","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Skammvalshnappur","advanced":"Tæknilegt","advisoryContentType":"Tegund innihalds","advisoryTitle":"Titill","anchor":{"toolbar":"Stofna/breyta kaflamerki","menu":"Eigindi kaflamerkis","title":"Eigindi kaflamerkis","name":"Nafn bókamerkis","errorName":"Sláðu inn nafn bókamerkis!","remove":"Remove Anchor"},"anchorId":"Eftir auðkenni einingar","anchorName":"Eftir akkerisnafni","charset":"Táknróf","cssClasses":"Stílsniðsflokkur","emailAddress":"Netfang","emailBody":"Meginmál","emailSubject":"Efni","id":"Auðkenni","info":"Almennt","langCode":"Lesstefna","langDir":"Lesstefna","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","menu":"Breyta stiklu","name":"Nafn","noAnchors":"<Engin bókamerki á skrá>","noEmail":"Sláðu inn netfang!","noUrl":"Sláðu inn veffang stiklunnar!","other":"<annar>","popupDependent":"Háð venslum (Netscape)","popupFeatures":"Eigindi sprettiglugga","popupFullScreen":"Heilskjár (IE)","popupLeft":"Fjarlægð frá vinstri","popupLocationBar":"Fanglína","popupMenuBar":"Vallína","popupResizable":"Resizable","popupScrollBars":"Skrunstikur","popupStatusBar":"Stöðustika","popupToolbar":"Verkfærastika","popupTop":"Fjarlægð frá efri brún","rel":"Relationship","selectAnchor":"Veldu akkeri","styles":"Stíll","tabIndex":"Raðnúmer innsláttarreits","target":"Mark","targetFrame":"<rammi>","targetFrameName":"Nafn markglugga","targetPopup":"<sprettigluggi>","targetPopupName":"Nafn sprettiglugga","title":"Stikla","toAnchor":"Bókamerki á þessari síðu","toEmail":"Netfang","toUrl":"Vefslóð","toolbar":"Stofna/breyta stiklu","type":"Stikluflokkur","unlink":"Fjarlægja stiklu","upload":"Senda upp"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Líma sem ósniðinn texta","title":"Líma sem ósniðinn texta"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Líma úr Word","toolbar":"Líma úr Word"},"removeformat":{"toolbar":"Fjarlægja snið"},"sourcearea":{"toolbar":"Kóði"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Breidd ramma","caption":"Titill","cell":{"menu":"Reitur","insertBefore":"Skjóta inn reiti fyrir aftan","insertAfter":"Skjóta inn reiti fyrir framan","deleteCell":"Fella reit","merge":"Sameina reiti","mergeRight":"Sameina til hægri","mergeDown":"Sameina niður á við","splitHorizontal":"Kljúfa reit lárétt","splitVertical":"Kljúfa reit lóðrétt","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Reitaspássía","cellSpace":"Bil milli reita","column":{"menu":"Dálkur","insertBefore":"Skjóta inn dálki vinstra megin","insertAfter":"Skjóta inn dálki hægra megin","deleteColumn":"Fella dálk"},"columns":"Dálkar","deleteTable":"Fella töflu","headers":"Fyrirsagnir","headersBoth":"Hvort tveggja","headersColumn":"Fyrsti dálkur","headersNone":"Engar","headersRow":"Fyrsta röð","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Eigindi töflu","row":{"menu":"Röð","insertBefore":"Skjóta inn röð fyrir ofan","insertAfter":"Skjóta inn röð fyrir neðan","deleteRow":"Eyða röð"},"rows":"Raðir","summary":"Áfram","title":"Eigindi töflu","toolbar":"Tafla","widthPc":"prósent","widthPx":"myndeindir","widthUnit":"width unit"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"justify":{"block":"Jafna báðum megin","center":"Miðja texta","left":"Vinstrijöfnun","right":"Hægrijöfnun"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Sýna blokkir"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/it.js b/core/misc/ckeditor/lang/it.js
deleted file mode 100644
index 91cedeb..0000000
--- a/core/misc/ckeditor/lang/it.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['it']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"<non impostato>","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","alignLeft":"Sinistra","alignRight":"Destra","alignCenter":"Centrato","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, non disponibile</span>"},"about":{"copy":"Copyright &copy; $1. Tutti i diritti riservati.","dlgTitle":"Riguardo CKEditor","help":"Vedi $1 per l'aiuto.","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:","title":"Riguardo CKEditor","userGuide":"Guida Utente CKEditor"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"blockquote":{"toolbar":"Citazione"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteArea":"Incolla","pasteMsg":"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.","securityMsg":"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.","title":"Incolla"},"contextmenu":{"options":"Opzioni del menù contestuale"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Indietro","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"list":{"bulletedlist":"Elenco puntato","numberedlist":"Elenco numerato"},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"image":{"alertUrl":"Devi inserire l'URL per l'immagine","alt":"Testo alternativo","border":"Bordo","btnUpload":"Invia al server","button2Img":"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?","hSpace":"HSpace","img2Button":"Vuoi trasferomare l'immagine selezionata in un bottone immagine?","infoTab":"Informazioni immagine","linkTab":"Collegamento","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","resetSize":"Reimposta dimensione","title":"Proprietà immagine","titleButton":"Proprietà bottone immagine","upload":"Carica","urlMissing":"Manca l'URL dell'immagine.","vSpace":"VSpace","validateBorder":"Il campo Bordo deve essere un numero intero.","validateHSpace":"Il campo HSpace deve essere un numero intero.","validateVSpace":"Il campo VSpace deve essere un numero intero."},"fakeobjects":{"anchor":"Ancora","flash":"Animazione Flash","hiddenfield":"Campo Nascosto","iframe":"IFrame","unknown":"Oggetto sconosciuto"},"link":{"acccessKey":"Scorciatoia<br />da tastiera","advanced":"Avanzate","advisoryContentType":"Tipo della risorsa collegata","advisoryTitle":"Titolo","anchor":{"toolbar":"Inserisci/Modifica Ancora","menu":"Proprietà ancora","title":"Proprietà ancora","name":"Nome ancora","errorName":"Inserici il nome dell'ancora","remove":"Rimuovi l'ancora"},"anchorId":"Per id elemento","anchorName":"Per Nome","charset":"Set di caretteri della risorsa collegata","cssClasses":"Nome classe CSS","emailAddress":"Indirizzo E-Mail","emailBody":"Corpo del messaggio","emailSubject":"Oggetto del messaggio","id":"Id","info":"Informazioni collegamento","langCode":"Direzione scrittura","langDir":"Direzione scrittura","langDirLTR":"Da Sinistra a Destra (LTR)","langDirRTL":"Da Destra a Sinistra (RTL)","menu":"Modifica collegamento","name":"Nome","noAnchors":"(Nessuna ancora disponibile nel documento)","noEmail":"Devi inserire un'indirizzo e-mail","noUrl":"Devi inserire l'URL del collegamento","other":"<altro>","popupDependent":"Dipendente (Netscape)","popupFeatures":"Caratteristiche finestra popup","popupFullScreen":"A tutto schermo (IE)","popupLeft":"Posizione da sinistra","popupLocationBar":"Barra degli indirizzi","popupMenuBar":"Barra del menu","popupResizable":"Ridimensionabile","popupScrollBars":"Barre di scorrimento","popupStatusBar":"Barra di stato","popupToolbar":"Barra degli strumenti","popupTop":"Posizione dall'alto","rel":"Relazioni","selectAnchor":"Scegli Ancora","styles":"Stile","tabIndex":"Ordine di tabulazione","target":"Destinazione","targetFrame":"<riquadro>","targetFrameName":"Nome del riquadro di destinazione","targetPopup":"<finestra popup>","targetPopupName":"Nome finestra popup","title":"Collegamento","toAnchor":"Ancora nella pagina","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserisci/Modifica collegamento","type":"Tipo di Collegamento","unlink":"Elimina collegamento","upload":"Carica"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"pastetext":{"button":"Incolla come testo semplice","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminarre il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"removeformat":{"toolbar":"Elimina formattazione"},"sourcearea":{"toolbar":"Codice Sorgente"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"stylescombo":{"label":"Stile","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"undo":{"redo":"Ripristina","undo":"Annulla"},"justify":{"block":"Giustifica","center":"Centra","left":"Allinea a sinistra","right":"Allinea a destra"},"placeholder":{"title":"Proprietà segnaposto","toolbar":"Crea segnaposto","text":"Testo segnaposto","edit":"Modifica segnaposto","textMissing":"Il segnaposto deve contenere del testo."},"showblocks":{"toolbar":"Visualizza Blocchi"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ja.js b/core/misc/ckeditor/lang/ja.js
deleted file mode 100644
index a184b4c..0000000
--- a/core/misc/ckeditor/lang/ja.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ja']={"dir":"ltr","editor":"リッチテキストエディタ","common":{"editorHelp":"ヘルプは ALT 0 を押してください","browseServer":"サーバーブラウザー","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーバーに送信","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"チェックボックス","radio":"ラジオボタン","textField":"１行テキスト","textarea":"テキストエリア","hiddenField":"不可視フィールド","button":"ボタン","select":"選択フィールド","imageButton":"画像ボタン","notSet":"<なし>","id":"Id","name":"Name属性","langDir":"文字表記の方向","langDirLtr":"左から右 (LTR)","langDirRtl":"右から左 (RTL)","langCode":"言語コード","longDescr":"longdesc属性(長文説明)","cssClass":"スタイルシートクラス","advisoryTitle":"Title属性","cssStyle":"スタイルシート","ok":"OK","cancel":"キャンセル","close":"閉じる","preview":"プレビュー","resize":"ドラッグしてリサイズ","generalTab":"全般","advancedTab":"高度な設定","validateNumberFailed":"値が数ではありません","confirmNewPage":"変更内容を保存せず、 新しいページを開いてもよろしいでしょうか？","confirmCancel":"オプション設定を変更しました。ダイアログを閉じてもよろしいでしょうか？","options":"オプション","target":"ターゲット","targetNew":"新しいウィンドウ (_空白)","targetTop":"最上部ウィンドウ (_トップ)","targetSelf":"同じウィンドウ (_同一)","targetParent":"親ウィンドウ (_親)","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"幅","height":"高さ","align":"行揃え","alignLeft":"左","alignRight":"右","alignCenter":"中央","alignTop":"上","alignMiddle":"中央","alignBottom":"下","invalidValue":"不正な値です。","invalidHeight":"高さは数値で入力してください。","invalidWidth":"幅は数値で入力してください。","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"ピクセル数もしくはCSSにセットできる数値を入力してください。(px,%,in,cm,mm,em,ex,pt,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用不可能</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"CKEditorバージョン情報","help":"Check $1 for help.","moreInfo":"ライセンス情報の詳細はウェブサイトにて確認してください:","title":"CKEditorバージョン情報","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ち消し線","subscript":"添え字","superscript":"上付き文字","underline":"下線"},"blockquote":{"toolbar":"ブロック引用"},"clipboard":{"copy":"コピー","copyError":"ブラウザーのセキュリティ設定によりエディタのコピー操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+C)を使用してください。","cut":"切り取り","cutError":"ブラウザーのセキュリティ設定によりエディタの切り取り操作が自動で実行することができません。実行するには手動でキーボードの(Ctrl/Cmd+X)を使用してください。","paste":"貼り付け","pasteArea":"貼り付け場所","pasteMsg":"キーボード(<STRONG>Ctrl/Cmd+V</STRONG>)を使用して、次の入力エリア内で貼って、<STRONG>OK</STRONG>を押してください。","securityMsg":"ブラウザのセキュリティ設定により、エディタはクリップボード・データに直接アクセスすることができません。このウィンドウは貼り付け操作を行う度に表示されます。","title":"貼り付け"},"contextmenu":{"options":"コンテキストメニューオプション"},"toolbar":{"toolbarCollapse":"ツールバーを閉じる","toolbarExpand":"ツールバーを開く","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"エレメントパス","eleTitle":"%1 エレメント"},"list":{"bulletedlist":"箇条書き","numberedlist":"段落番号"},"indent":{"indent":"インデント","outdent":"インデント解除"},"format":{"label":"フォーマット","panelTitle":"フォーマット","tag_address":"アドレス","tag_div":"標準 (DIV)","tag_h1":"見出し 1","tag_h2":"見出し 2","tag_h3":"見出し 3","tag_h4":"見出し 4","tag_h5":"見出し 5","tag_h6":"見出し 6","tag_p":"標準","tag_pre":"書式付き"},"horizontalrule":{"toolbar":"横罫線"},"image":{"alertUrl":"イメージのURLを入力してください。","alt":"代替テキスト","border":"ボーダー","btnUpload":"サーバーに送信","button2Img":"選択したボタンを画像に置き換えますか？","hSpace":"横間隔","img2Button":"選択した画像をボタンに置き換えますか？","infoTab":"イメージ 情報","linkTab":"リンク","lockRatio":"ロック比率","menu":"イメージ プロパティ","resetSize":"サイズリセット","title":"イメージ プロパティ","titleButton":"画像ボタン プロパティ","upload":"アップロード","urlMissing":"イメージのURLを入力してください。","vSpace":"縦間隔","validateBorder":"ボーダーは数値で入力してください。","validateHSpace":"横間隔は数値で入力してください。","validateVSpace":"縦間隔は数値で入力してください。"},"fakeobjects":{"anchor":"アンカー","flash":"Flash Animation","hiddenfield":"不可視フィールド","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"アクセスキー","advanced":"高度な設定","advisoryContentType":"Content Type属性","advisoryTitle":"Title属性","anchor":{"toolbar":"アンカー挿入/編集","menu":"アンカー プロパティ","title":"アンカー プロパティ","name":"アンカー名","errorName":"アンカー名を必ず入力してください。","remove":"Remove Anchor"},"anchorId":"エレメントID","anchorName":"アンカー名","charset":"リンクcharset属性","cssClasses":"スタイルシートクラス","emailAddress":"E-Mail アドレス","emailBody":"本文","emailSubject":"件名","id":"Id","info":"ハイパーリンク 情報","langCode":"言語コード","langDir":"文字表記の方向","langDirLTR":"左から右 (LTR)","langDirRTL":"右から左 (RTL)","menu":"リンク編集","name":"Name属性","noAnchors":"(ドキュメントにおいて利用可能なアンカーはありません。)","noEmail":"メールアドレスを入力してください。","noUrl":"リンクURLを入力してください。","other":"<その他の>","popupDependent":"開いたウィンドウに連動して閉じる (Netscape)","popupFeatures":"ポップアップウィンドウ特徴","popupFullScreen":"全画面モード(IE)","popupLeft":"左端からの座標で指定","popupLocationBar":"ロケーションバー","popupMenuBar":"メニューバー","popupResizable":"サイズ可変","popupScrollBars":"スクロールバー","popupStatusBar":"ステータスバー","popupToolbar":"ツールバー","popupTop":"上端からの座標で指定","rel":"Relationship","selectAnchor":"アンカーを選択","styles":"スタイルシート","tabIndex":"タブインデックス","target":"ターゲット","targetFrame":"<フレーム>","targetFrameName":"目的のフレーム名","targetPopup":"<ポップアップウィンドウ>","targetPopupName":"ポップアップウィンドウ名","title":"ハイパーリンク","toAnchor":"このページのアンカー","toEmail":"E-Mail","toUrl":"URL","toolbar":"リンク挿入/編集","type":"リンクタイプ","unlink":"リンク削除","upload":"アップロード"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"最大化","minimize":"最小化"},"pastetext":{"button":"プレーンテキスト貼り付け","title":"プレーンテキスト貼り付け"},"pastefromword":{"confirmCleanup":"貼り付けを行うテキストは、ワード文章からコピーされようとしています。貼り付ける前にクリーニングを行いますか？","error":"内部エラーにより貼り付けたデータがクリアできませんでした","title":"ワード文章から貼り付け","toolbar":"ワード文章から貼り付け"},"removeformat":{"toolbar":"フォーマット削除"},"sourcearea":{"toolbar":"ソース"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字選択","toolbar":"特殊文字挿入"},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"table":{"border":"ボーダーサイズ","caption":"キャプション","cell":{"menu":"セル","insertBefore":"セルの前に挿入","insertAfter":"セルの後に挿入","deleteCell":"セル削除","merge":"セル結合","mergeRight":"右に結合","mergeDown":"下に結合","splitHorizontal":"セルを水平方向分割","splitVertical":"セルを垂直方向に分割","title":"セルプロパティ","cellType":"セルタイプ","rowSpan":"縦幅(行数)","colSpan":"横幅(列数)","wordWrap":"折り返し","hAlign":"セル横の整列","vAlign":"セル縦の整列","alignBaseline":"ベースライン","bgColor":"背景色","borderColor":"ボーダーカラー","data":"テーブルデータ(td)","header":"テーブルヘッダ(th)","yes":"Yes","no":"No","invalidWidth":"セル幅は数値で入力してください。","invalidHeight":"セル高さは数値で入力してください。","invalidRowSpan":"縦幅(行数)は数値で入力してください。","invalidColSpan":"横幅(列数)は数値で入力してください。","chooseColor":"色の選択"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"カラム","insertBefore":"カラムの前に挿入","insertAfter":"カラムの後に挿入","deleteColumn":"列削除"},"columns":"列","deleteTable":"テーブル削除","headers":"テーブルヘッダ(th)","headersBoth":"両方","headersColumn":"初めの列のみ","headersNone":"なし","headersRow":"初めの行のみ","invalidBorder":"ボーダーサイズは数値で入力してください。","invalidCellPadding":"セル内間隔は数値で入力してください。","invalidCellSpacing":"セル内余白は数値で入力してください。","invalidCols":"列は0より大きな数値で入力してください。","invalidHeight":"高さは数値で入力してください。","invalidRows":"行は0より大きな数値で入力してください。","invalidWidth":"幅は数値で入力してください。","menu":"テーブル プロパティ","row":{"menu":"行","insertBefore":"行の前に挿入","insertAfter":"行の後に挿入","deleteRow":"行削除"},"rows":"行","summary":"テーブルの概要","title":"テーブル プロパティ","toolbar":"テーブル","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"ユニット"},"undo":{"redo":"やり直し","undo":"元に戻す"},"justify":{"block":"両端揃え","center":"中央揃え","left":"左揃え","right":"右揃え"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"ブロック表示"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ka.js b/core/misc/ckeditor/lang/ka.js
deleted file mode 100644
index 80f1bea..0000000
--- a/core/misc/ckeditor/lang/ka.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ka']={"dir":"ltr","editor":"ტექსტის რედაქტორი","common":{"editorHelp":"დააჭირეთ ALT 0-ს დახმარების მისაღებად","browseServer":"სერვერზე დათვალიერება","url":"URL","protocol":"პროტოკოლი","upload":"ატვირთვა","uploadSubmit":"სერვერზე გაგზავნა","image":"სურათი","flash":"Flash","form":"ფორმა","checkbox":"მონიშვნის ღილაკი","radio":"ამორჩევის ღილაკი","textField":"ტექსტური ველი","textarea":"ტექსტური არე","hiddenField":"მალული ველი","button":"ღილაკი","select":"არჩევის ველი","imageButton":"სურათიანი ღილაკი","notSet":"<არაფერი>","id":"Id","name":"სახელი","langDir":"ენის მიმართულება","langDirLtr":"მარცხნიდან მარჯვნივ (LTR)","langDirRtl":"მარჯვნიდან მარცხნივ (RTL)","langCode":"ენის კოდი","longDescr":"დიდი აღწერის URL","cssClass":"CSS კლასი","advisoryTitle":"სათაური","cssStyle":"CSS სტილი","ok":"დიახ","cancel":"გაუქმება","close":"დახურვა","preview":"გადახედვა","resize":"გაწიე ზომის შესაცვლელად","generalTab":"ინფორმაცია","advancedTab":"გაფართოებული","validateNumberFailed":"ეს მნიშვნელობა არაა რიცხვი.","confirmNewPage":"ამ დოკუმენტში ყველა ჩაუწერელი ცვლილება დაიკარგება. დარწმუნებული ხართ რომ ახალი გვერდის ჩატვირთვა გინდათ?","confirmCancel":"ზოგიერთი პარამეტრი შეცვლილია, დარწმუნებულილ ხართ რომ ფანჯრის დახურვა გსურთ?","options":"პარამეტრები","target":"გახსნის ადგილი","targetNew":"ახალი ფანჯარა (_blank)","targetTop":"ზედა ფანჯარა (_top)","targetSelf":"იგივე ფანჯარა (_self)","targetParent":"მშობელი ფანჯარა (_parent)","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","styles":"სტილი","cssClasses":"CSS კლასი","width":"სიგანე","height":"სიმაღლე","align":"სწორება","alignLeft":"მარცხენა","alignRight":"მარჯვენა","alignCenter":"შუა","alignTop":"ზემოთა","alignMiddle":"შუა","alignBottom":"ქვემოთა","invalidValue":"Invalid value.","invalidHeight":"სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidWidth":"სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, მიუწვდომელია</span>"},"about":{"copy":"Copyright &copy; $1. ყველა უფლება დაცულია.","dlgTitle":"CKEditor-ის შესახებ","help":"დახმარებისთვის იხილეთ $1.","moreInfo":"ლიცენზიის ინფორმაციისთვის ეწვიეთ ჩვენს საიტს:","title":"CKEditor-ის შესახებ","userGuide":"CKEditor-ის მომხმარებლის სახელმძღვანელო"},"basicstyles":{"bold":"მსხვილი","italic":"დახრილი","strike":"გადახაზული","subscript":"ინდექსი","superscript":"ხარისხი","underline":"გახაზული"},"blockquote":{"toolbar":"ციტატა"},"clipboard":{"copy":"ასლი","copyError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ასლის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+C).","cut":"ამოჭრა","cutError":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა ამოჭრის ოპერაციის ავტომატურად განხორციელების საშუალებას. გამოიყენეთ კლავიატურა ამისთვის (Ctrl/Cmd+X).","paste":"ჩასმა","pasteArea":"ჩასმის არე","pasteMsg":"ჩასვით ამ არის შიგნით კლავიატურის გამოყენებით (<strong>Ctrl/Cmd+V</strong>) და დააჭირეთ OK-ს","securityMsg":"თქვენი ბროუზერის უსაფრთხოების პარამეტრები არ იძლევა clipboard-ის მონაცემების წვდომის უფლებას. კიდევ უნდა ჩასვათ ტექსტი ამ ფანჯარაში.","title":"ჩასმა"},"contextmenu":{"options":"კონტექსტური მენიუს პარამეტრები"},"toolbar":{"toolbarCollapse":"ხელსაწყოთა ზოლის შეწევა","toolbarExpand":"ხელსაწყოთა ზოლის გამოწევა","toolbarGroups":{"document":"დოკუმენტი","clipboard":"Clipboard/გაუქმება","editing":"რედაქტირება","forms":"ფორმები","basicstyles":"ძირითადი სტილები","paragraph":"აბზაცი","links":"ბმულები","insert":"ჩასმა","styles":"სტილები","colors":"ფერები","tools":"ხელსაწყოები"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"ელემეტის გზა","eleTitle":"%1 ელემენტი"},"list":{"bulletedlist":"ღილიანი სია","numberedlist":"გადანომრილი სია"},"indent":{"indent":"მეტად შეწევა","outdent":"ნაკლებად შეწევა"},"format":{"label":"ფიორმატირება","panelTitle":"ფორმატირება","tag_address":"მისამართი","tag_div":"ჩვეულებრივი (DIV)","tag_h1":"სათაური 1","tag_h2":"სათაური 2","tag_h3":"სათაური 3","tag_h4":"სათაური 4","tag_h5":"სათაური 5","tag_h6":"სათაური 6","tag_p":"ჩვეულებრივი","tag_pre":"ფორმატირებული"},"horizontalrule":{"toolbar":"ჰორიზონტალური ხაზის ჩასმა"},"image":{"alertUrl":"აკრიფეთ სურათის URL","alt":"სანაცვლო ტექსტი","border":"ჩარჩო","btnUpload":"სერვერისთვის გაგზავნა","button2Img":"გსურთ არჩეული სურათიანი ღილაკის გადაქცევა ჩვეულებრივ ღილაკად?","hSpace":"ჰორიზონტალური სივრცე","img2Button":"გსურთ არჩეული ჩვეულებრივი ღილაკის გადაქცევა სურათიან ღილაკად?","infoTab":"სურათის ინფორმცია","linkTab":"ბმული","lockRatio":"პროპორციის შენარჩუნება","menu":"სურათის პარამეტრები","resetSize":"ზომის დაბრუნება","title":"სურათის პარამეტრები","titleButton":"სურათიანი ღილაკის პარამეტრები","upload":"ატვირთვა","urlMissing":"სურათის URL არაა შევსებული.","vSpace":"ვერტიკალური სივრცე","validateBorder":"ჩარჩო მთელი რიცხვი უნდა იყოს.","validateHSpace":"ჰორიზონტალური სივრცე მთელი რიცხვი უნდა იყოს.","validateVSpace":"ვერტიკალური სივრცე მთელი რიცხვი უნდა იყოს."},"fakeobjects":{"anchor":"ღუზა","flash":"Flash ანიმაცია","hiddenfield":"მალული ველი","iframe":"IFrame","unknown":"უცნობი ობიექტი"},"link":{"acccessKey":"წვდომის ღილაკი","advanced":"დაწვრილებით","advisoryContentType":"შიგთავსის ტიპი","advisoryTitle":"სათაური","anchor":{"toolbar":"ღუზა","menu":"ღუზის რედაქტირება","title":"ღუზის პარამეტრები","name":"ღუზუს სახელი","errorName":"აკრიფეთ ღუზის სახელი","remove":"Remove Anchor"},"anchorId":"ელემენტის Id-თ","anchorName":"ღუზის სახელით","charset":"კოდირება","cssClasses":"CSS კლასი","emailAddress":"ელფოსტის მისამართები","emailBody":"წერილის ტექსტი","emailSubject":"წერილის სათაური","id":"Id","info":"ბმულის ინფორმაცია","langCode":"ენის კოდი","langDir":"ენის მიმართულება","langDirLTR":"მარცხნიდან მარჯვნივ (LTR)","langDirRTL":"მარჯვნიდან მარცხნივ (RTL)","menu":"ბმულის რედაქტირება","name":"სახელი","noAnchors":"(ამ დოკუმენტში ღუზა არაა)","noEmail":"აკრიფეთ ელფოსტის მისამართი","noUrl":"აკრიფეთ ბმულის URL","other":"<სხვა>","popupDependent":"დამოკიდებული (Netscape)","popupFeatures":"Popup ფანჯრის პარამეტრები","popupFullScreen":"მთელი ეკრანი (IE)","popupLeft":"მარცხენა პოზიცია","popupLocationBar":"ნავიგაციის ზოლი","popupMenuBar":"მენიუს ზოლი","popupResizable":"ცვალებადი ზომით","popupScrollBars":"გადახვევის ზოლები","popupStatusBar":"სტატუსის ზოლი","popupToolbar":"ხელსაწყოთა ზოლი","popupTop":"ზედა პოზიცია","rel":"კავშირი","selectAnchor":"აირჩიეთ ღუზა","styles":"CSS სტილი","tabIndex":"Tab-ის ინდექსი","target":"გახსნის ადგილი","targetFrame":"<frame>","targetFrameName":"Frame-ის სახელი","targetPopup":"<popup ფანჯარა>","targetPopupName":"Popup ფანჯრის სახელი","title":"ბმული","toAnchor":"ბმული ტექსტში ღუზაზე","toEmail":"ელფოსტა","toUrl":"URL","toolbar":"ბმული","type":"ბმულის ტიპი","unlink":"ბმულის მოხსნა","upload":"აქაჩვა"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"გადიდება","minimize":"დაპატარავება"},"pastetext":{"button":"მხოლოდ ტექსტის ჩასმა","title":"მხოლოდ ტექსტის ჩასმა"},"pastefromword":{"confirmCleanup":"ჩასასმელი ტექსტი ვორდიდან გადმოტანილს გავს - გინდათ მისი წინასწარ გაწმენდა?","error":"შიდა შეცდომის გამო ვერ მოხერხდა ტექსტის გაწმენდა","title":"ვორდიდან ჩასმა","toolbar":"ვორდიდან ჩასმა"},"removeformat":{"toolbar":"ფორმატირების მოხსნა"},"sourcearea":{"toolbar":"კოდები"},"specialchar":{"options":"სპეციალური სიმბოლოს პარამეტრები","title":"სპეციალური სიმბოლოს არჩევა","toolbar":"სპეციალური სიმბოლოს ჩასმა"},"stylescombo":{"label":"სტილები","panelTitle":"ფორმატირების სტილები","panelTitle1":"არის სტილები","panelTitle2":"თანდართული სტილები","panelTitle3":"ობიექტის სტილები"},"table":{"border":"ჩარჩოს ზომა","caption":"სათაური","cell":{"menu":"უჯრა","insertBefore":"უჯრის ჩასმა მანამდე","insertAfter":"უჯრის ჩასმა მერე","deleteCell":"უჯრების წაშლა","merge":"უჯრების შეერთება","mergeRight":"შეერთება მარჯვენასთან","mergeDown":"შეერთება ქვემოთასთან","splitHorizontal":"გაყოფა ჰორიზონტალურად","splitVertical":"გაყოფა ვერტიკალურად","title":"უჯრის პარამეტრები","cellType":"უჯრის ტიპი","rowSpan":"სტრიქონების ოდენობა","colSpan":"სვეტების ოდენობა","wordWrap":"სტრიქონის გადატანა (Word Wrap)","hAlign":"ჰორიზონტალური სწორება","vAlign":"ვერტიკალური სწორება","alignBaseline":"ძირითადი ხაზის გასწვრივ","bgColor":"ფონის ფერი","borderColor":"ჩარჩოს ფერი","data":"მონაცემები","header":"სათაური","yes":"დიახ","no":"არა","invalidWidth":"უჯრის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","invalidHeight":"უჯრის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRowSpan":"სტრიქონების რაოდენობა მთელი რიცხვი უნდა იყოს.","invalidColSpan":"სვეტების რაოდენობა მთელი რიცხვი უნდა იყოს.","chooseColor":"არჩევა"},"cellPad":"უჯრის კიდე (padding)","cellSpace":"უჯრის სივრცე (spacing)","column":{"menu":"სვეტი","insertBefore":"სვეტის ჩამატება წინ","insertAfter":"სვეტის ჩამატება მერე","deleteColumn":"სვეტების წაშლა"},"columns":"სვეტი","deleteTable":"ცხრილის წაშლა","headers":"სათაურები","headersBoth":"ორივე","headersColumn":"პირველი სვეტი","headersNone":"არაფერი","headersRow":"პირველი სტრიქონი","invalidBorder":"ჩარჩოს ზომა რიცხვით უდნა იყოს წარმოდგენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდა იყოს წარმოდგენილი.","invalidCols":"სვეტების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidHeight":"ცხრილის სიმაღლე რიცხვით უნდა იყოს წარმოდგენილი.","invalidRows":"სტრიქონების რაოდენობა დადებითი რიცხვი უნდა იყოს.","invalidWidth":"ცხრილის სიგანე რიცხვით უნდა იყოს წარმოდგენილი.","menu":"ცხრილის პარამეტრები","row":{"menu":"სტრიქონი","insertBefore":"სტრიქონის ჩამატება წინ","insertAfter":"სტრიქონის ჩამატება მერე","deleteRow":"სტრიქონების წაშლა"},"rows":"სტრიქონი","summary":"შეჯამება","title":"ცხრილის პარამეტრები","toolbar":"ცხრილი","widthPc":"პროცენტი","widthPx":"წერტილი","widthUnit":"საზომი ერთეული"},"undo":{"redo":"გამეორება","undo":"გაუქმება"},"justify":{"block":"გადასწორება","center":"შუაში სწორება","left":"მარცხნივ სწორება","right":"მარჯვნივ სწორება"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"არეების ჩვენება"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/km.js b/core/misc/ckeditor/lang/km.js
deleted file mode 100644
index c199cbf..0000000
--- a/core/misc/ckeditor/lang/km.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['km']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"មើល","url":"URL","protocol":"ប្រូតូកូល","upload":"ទាញយក","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់ជ្រើសរើស","radio":"ប៉ូតុនរង្វង់មូល","textField":"ជួរសរសេរអត្ថបទ","textarea":"តំបន់សរសេរអត្ថបទ","hiddenField":"ជួរលាក់","button":"ប៉ូតុន","select":"ជួរជ្រើសរើស","imageButton":"ប៉ូតុនរូបភាព","notSet":"<មិនមែន>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRtl":"ពីស្តាំទៅឆ្វេង(RTL)","langCode":"លេខកូតភាសា","longDescr":"អធិប្បាយ URL វែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណងជើង ប្រឹក្សា","cssStyle":"ម៉ូត","ok":"យល់ព្រម","cancel":"មិនយល់ព្រម","close":"Close","preview":"មើលសាកល្បង","resize":"Resize","generalTab":"General","advancedTab":"កំរិតខ្ពស់","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"គោលដៅ","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","styles":"ម៉ូត","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណត់ទីតាំង","alignLeft":"ខាងឆ្វង","alignRight":"ខាងស្តាំ","alignCenter":"កណ្តាល","alignTop":"ខាងលើ","alignMiddle":"កណ្តាល","alignBottom":"ខាងក្រោម","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"អក្សរដិតធំ","italic":"អក្សរផ្តេក","strike":"ដិតបន្ទាត់ពាក់កណ្តាលអក្សរ","subscript":"អក្សរតូចក្រោម","superscript":"អក្សរតូចលើ","underline":"ដិតបន្ទាត់ពីក្រោមអក្សរ"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"ចំលងយក","copyError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ ចំលងអត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ (Ctrl/Cmd+C)។","cut":"កាត់យក","cutError":"ការកំណត់សុវត្ថភាពរបស់កម្មវិធីរុករករបស់លោកអ្នក នេះ​មិនអាចធ្វើកម្មវិធីតាក់តែងអត្ថបទ កាត់អត្ថបទយកដោយស្វ័យប្រវត្តបានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនេះ  (Ctrl/Cmd+X) ។","paste":"ចំលងដាក់","pasteArea":"Paste Area","pasteMsg":"សូមចំលងអត្ថបទទៅដាក់ក្នុងប្រអប់ដូចខាងក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl/Cmd+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"ចំលងដាក់"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"បញ្ជីជារង្វង់មូល","numberedlist":"បញ្ជីជាអក្សរ"},"indent":{"indent":"បន្ថែមការចូលបន្ទាត់","outdent":"បន្ថយការចូលបន្ទាត់"},"format":{"label":"រចនា","panelTitle":"រចនា","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"បន្ថែមបន្ទាត់ផ្តេក"},"image":{"alertUrl":"សូមសរសេរងាស័យដ្ឋានរបស់រូបភាព","alt":"អត្ថបទជំនួស","border":"ស៊ុម","btnUpload":"បញ្ជូនទៅកាន់ម៉ាស៊ីនផ្តល់សេវា","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"គំលាតទទឹង","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ពត៌មានអំពីរូបភាព","linkTab":"ឈ្នាប់","lockRatio":"អត្រាឡុក","menu":"ការកំណត់រូបភាព","resetSize":"កំណត់ទំហំឡើងវិញ","title":"ការកំណត់រូបភាព","titleButton":"ការកំណត់ប៉ូតុនរូបភាព","upload":"ទាញយក","urlMissing":"Image source URL is missing.","vSpace":"គំលាតបណ្តោយ","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"ឃី សំរាប់ចូល","advanced":"កំរិតខ្ពស់","advisoryContentType":"ប្រភេទអត្ថបទ ប្រឹក្សា","advisoryTitle":"ចំណងជើង ប្រឹក្សា","anchor":{"toolbar":"បន្ថែម/កែប្រែ យុថ្កា","menu":"ការកំណត់យុថ្កា","title":"ការកំណត់យុថ្កា","name":"ឈ្មោះយុទ្ធថ្កា","errorName":"សូមសរសេរ ឈ្មោះយុទ្ធថ្កា","remove":"Remove Anchor"},"anchorId":"តាម Id","anchorName":"តាមឈ្មោះរបស់យុថ្កា","charset":"លេខកូតអក្សររបស់ឈ្នាប់","cssClasses":"Stylesheet Classes","emailAddress":"អ៊ីមែល","emailBody":"អត្ថបទ","emailSubject":"ចំណងជើងអត្ថបទ","id":"Id","info":"ពត៌មានអំពីឈ្នាប់","langCode":"ទិសដៅភាសា","langDir":"ទិសដៅភាសា","langDirLTR":"ពីឆ្វេងទៅស្តាំ(LTR)","langDirRTL":"ពីស្តាំទៅឆ្វេង(RTL)","menu":"កែប្រែឈ្នាប់","name":"ឈ្មោះ","noAnchors":"(No anchors available in the document)","noEmail":"សូមសរសេរ អាស័យដ្ឋាន អ៊ីមែល","noUrl":"សូមសរសេរ អាស័យដ្ឋាន URL","other":"<other>","popupDependent":"អាស្រ័យលើ (Netscape)","popupFeatures":"លក្ខណះរបស់វីនដូលលោត","popupFullScreen":"អេក្រុងពេញ(IE)","popupLeft":"ទីតាំងខាងឆ្វេង","popupLocationBar":"របា ទីតាំង","popupMenuBar":"របា មឺនុយ","popupResizable":"Resizable","popupScrollBars":"របា ទាញ","popupStatusBar":"របា ពត៌មាន","popupToolbar":"របា ឩបករណ៍","popupTop":"ទីតាំងខាងលើ","rel":"Relationship","selectAnchor":"ជ្រើសរើសយុថ្កា","styles":"ម៉ូត","tabIndex":"លេខ Tab","target":"គោលដៅ","targetFrame":"<ហ្វ្រេម>","targetFrameName":"ឈ្មោះហ្រ្វេមដែលជាគោលដៅ","targetPopup":"<វីនដូវ លោត>","targetPopupName":"ឈ្មោះវីនដូវលោត","title":"ឈ្នាប់","toAnchor":"យុថ្កានៅក្នុងទំព័រនេះ","toEmail":"អ៊ីមែល","toUrl":"URL","toolbar":"បន្ថែម/កែប្រែ ឈ្នាប់","type":"ប្រភេទឈ្នាប់","unlink":"លប់ឈ្នាប់","upload":"ទាញយក"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"ចំលងដាក់អត្ថបទធម្មតា","title":"ចំលងដាក់អត្ថបទធម្មតា"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"ចំលងដាក់ពី Word","toolbar":"ចំលងដាក់ពី Word"},"removeformat":{"toolbar":"លប់ចោល ការរចនា"},"sourcearea":{"toolbar":"កូត"},"specialchar":{"options":"Special Character Options","title":"តូអក្សរពិសេស","toolbar":"បន្ថែមអក្សរពិសេស"},"stylescombo":{"label":"ម៉ូត","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"ទំហំស៊ុម","caption":"ចំណងជើង","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"លប់សែល","merge":"បញ្ជូលសែល","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"គែមសែល","cellSpace":"គំលាតសែល","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"លប់ជួរឈរ"},"columns":"ជួរឈរ","deleteTable":"លប់តារាង","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"ការកំណត់ តារាង","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"លប់ជួរផ្តេក"},"rows":"ជួរផ្តេក","summary":"សេចក្តីសង្ខេប","title":"ការកំណត់ តារាង","toolbar":"តារាង","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"width unit"},"undo":{"redo":"ធ្វើឡើងវិញ","undo":"សារឡើងវិញ"},"justify":{"block":"តំរឹមសងខាង","center":"តំរឹមកណ្តាល","left":"តំរឹមឆ្វេង","right":"តំរឹមស្តាំ"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ko.js b/core/misc/ckeditor/lang/ko.js
deleted file mode 100644
index 105da61..0000000
--- a/core/misc/ckeditor/lang/ko.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ko']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"서버 보기","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"이미지","flash":"플래쉬","form":"폼","checkbox":"체크박스","radio":"라디오버튼","textField":"입력필드","textarea":"입력영역","hiddenField":"숨김필드","button":"버튼","select":"펼침목록","imageButton":"이미지버튼","notSet":"<설정되지 않음>","id":"ID","name":"Name","langDir":"쓰기 방향","langDirLtr":"왼쪽에서 오른쪽 (LTR)","langDirRtl":"오른쪽에서 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"URL 설명","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"예","cancel":"아니오","close":"Close","preview":"미리보기","resize":"Resize","generalTab":"General","advancedTab":"자세히","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"타겟","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"너비","height":"높이","align":"정렬","alignLeft":"왼쪽","alignRight":"오른쪽","alignCenter":"가운데","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"진하게","italic":"이텔릭","strike":"취소선","subscript":"아래 첨자","superscript":"위 첨자","underline":"밑줄"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"복사하기","copyError":"브라우저의 보안설정때문에 복사하기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요.  (Ctrl/Cmd+C).","cut":"잘라내기","cutError":"브라우저의 보안설정때문에 잘라내기 기능을 실행할 수 없습니다. 키보드 명령을 사용하십시요. (Ctrl/Cmd+X).","paste":"붙여넣기","pasteArea":"Paste Area","pasteMsg":"키보드의 (<STRONG>Ctrl/Cmd+V</STRONG>) 를 이용해서 상자안에 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.","securityMsg":"브러우저 보안 설정으로 인해, 클립보드의 자료를 직접 접근할 수 없습니다. 이 창에 다시 붙여넣기 하십시오.","title":"붙여넣기"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"순서없는 목록","numberedlist":"순서있는 목록"},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"format":{"label":"포맷","panelTitle":"포맷","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"수평선 삽입"},"image":{"alertUrl":"이미지 URL을 입력하십시요","alt":"이미지 설명","border":"테두리","btnUpload":"서버로 전송","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"수평여백","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"이미지 정보","linkTab":"링크","lockRatio":"비율 유지","menu":"이미지 설정","resetSize":"원래 크기로","title":"이미지 설정","titleButton":"이미지버튼 속성","upload":"업로드","urlMissing":"Image source URL is missing.","vSpace":"수직여백","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"엑세스 키","advanced":"자세히","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"책갈피 삽입/변경","menu":"책갈피 속성","title":"책갈피 속성","name":"책갈피 이름","errorName":"책갈피 이름을 입력하십시요.","remove":"Remove Anchor"},"anchorId":"책갈피 ID","anchorName":"책갈피 이름","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"이메일 주소","emailBody":"내용","emailSubject":"제목","id":"ID","info":"링크 정보","langCode":"쓰기 방향","langDir":"쓰기 방향","langDirLTR":"왼쪽에서 오른쪽 (LTR)","langDirRTL":"오른쪽에서 왼쪽 (RTL)","menu":"링크 수정","name":"Name","noAnchors":"(문서에 책갈피가 없습니다.)","noEmail":"이메일주소를 입력하십시요.","noUrl":"링크 URL을 입력하십시요.","other":"<기타>","popupDependent":"Dependent (Netscape)","popupFeatures":"팝업창 설정","popupFullScreen":"전체화면 (IE)","popupLeft":"왼쪽 위치","popupLocationBar":"주소표시줄","popupMenuBar":"메뉴바","popupResizable":"Resizable","popupScrollBars":"스크롤바","popupStatusBar":"상태바","popupToolbar":"툴바","popupTop":"윗쪽 위치","rel":"Relationship","selectAnchor":"책갈피 선택","styles":"Style","tabIndex":"탭 순서","target":"타겟","targetFrame":"<프레임>","targetFrameName":"타겟 프레임 이름","targetPopup":"<팝업창>","targetPopupName":"팝업창 이름","title":"링크","toAnchor":"책갈피","toEmail":"이메일","toUrl":"URL","toolbar":"링크 삽입/변경","type":"링크 종류","unlink":"링크 삭제","upload":"업로드"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"텍스트로 붙여넣기","title":"텍스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"MS Word 형식에서 붙여넣기","toolbar":"MS Word 형식에서 붙여넣기"},"removeformat":{"toolbar":"포맷 지우기"},"sourcearea":{"toolbar":"소스"},"specialchar":{"options":"Special Character Options","title":"특수문자 선택","toolbar":"특수문자 삽입"},"stylescombo":{"label":"스타일","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"테두리 크기","caption":"캡션","cell":{"menu":"셀/칸(Cell)","insertBefore":"앞에 셀/칸 삽입","insertAfter":"뒤에 셀/칸 삽입","deleteCell":"셀 삭제","merge":"셀 합치기","mergeRight":"오른쪽 뭉치기","mergeDown":"왼쪽 뭉치기","splitHorizontal":"수평 나누기","splitVertical":"수직 나누기","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"셀 여백","cellSpace":"셀 간격","column":{"menu":"열(Column)","insertBefore":"앞에 열 삽입","insertAfter":"뒤에 열 삽입","deleteColumn":"세로줄 삭제"},"columns":"세로줄","deleteTable":"표 삭제","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"표 설정","row":{"menu":"행(Row)","insertBefore":"앞에 행 삽입","insertAfter":"뒤에 행 삽입","deleteRow":"가로줄 삭제"},"rows":"가로줄","summary":"Summary","title":"표 설정","toolbar":"표","widthPc":"퍼센트","widthPx":"픽셀","widthUnit":"width unit"},"undo":{"redo":"재실행","undo":"취소"},"justify":{"block":"양쪽 맞춤","center":"가운데 정렬","left":"왼쪽 정렬","right":"오른쪽 정렬"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ku.js b/core/misc/ckeditor/lang/ku.js
deleted file mode 100644
index f70a3b6..0000000
--- a/core/misc/ckeditor/lang/ku.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ku']={"dir":"rtl","editor":"سەرنووسەی دەقی بەپیت","common":{"editorHelp":"کلیکی ALT لهگهڵ 0 بکه بۆ یارمهتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"وێنە","flash":"فلاش","form":"داڕشتە","checkbox":"خانەی نیشانکردن","radio":"جێگرەوەی دوگمە","textField":"خانەی دەق","textarea":"ڕووبەری دەق","hiddenField":"شاردنەوی خانە","button":"دوگمە","select":"هەڵبژاردەی خانە","imageButton":"دوگمەی وێنە","notSet":"<هیچ دانەدراوە>","id":"ناسنامە","name":"ناو","langDir":"ئاراستەی زمان","langDirLtr":"چەپ بۆ ڕاست (LTR)","langDirRtl":"ڕاست بۆ چەپ (RTL)","langCode":"هێمای زمان","longDescr":"پێناسەی درێژی بەستەر","cssClass":"شێوازی چینی پهڕە","advisoryTitle":"ڕاوێژکاری سەردێڕ","cssStyle":"شێواز","ok":"باشە","cancel":"هەڵوەشاندن","close":"داخستن","preview":"پێشبینین","resize":"گۆڕینی ئەندازە","generalTab":"گشتی","advancedTab":"پهرهسهندوو","validateNumberFailed":"ئەم نرخە ژمارە نیه، تکایە نرخێکی ژمارە بنووسە.","confirmNewPage":"سەرجەم گۆڕانکاریەکان و پێکهاتەکانی ناوەووە لەدەست دەدەی گەر بێتوو پاشکەوتی نەکەی یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟","confirmCancel":"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی لهداخستنی ئەم دیالۆگە؟","options":"هەڵبژاردە","target":"ئامانج","targetNew":"پەنجەرەیهکی نوێ (_blank)","targetTop":"لووتکەی پەنجەرە (_top)","targetSelf":"لەهەمان پەنجەرە (_self)","targetParent":"پەنجەرەی باوان (_parent)","langDirLTR":"چەپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چەپ (RTL)","styles":"شێواز","cssClasses":"شێوازی چینی پەڕە","width":"پانی","height":"درێژی","align":"ڕێککەرەوە","alignLeft":"چەپ","alignRight":"ڕاست","alignCenter":"ناوەڕاست","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidCssLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).","invalidHtmlLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).","invalidInlineStyle":"دانهی نرخی شێوازی ناوهێڵ دهبێت پێکهاتبێت لهیهك یان زیاتری داڕشته \"ناو : نرخ\", جیاکردنهوهی بهفاریزهوخاڵ","cssLengthTooltip":"ژمارهیهك بنووسه بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).","unavailable":"%1<span class=\"cke_accessibility\">, ئامادە نیە</span>"},"about":{"copy":"مافی لهبهرگرتنهوهی &copy; $1. گشتی پارێزراوه.","dlgTitle":"دهربارهی CKEditor","help":"سهیری $1 بکه بۆ یارمهتی.","moreInfo":"بۆ زانیاری زیاتری مۆڵهت, تکایه سهردانی ماڵپهڕهکهمان بکه:","title":"دهربارهی CKEditor","userGuide":"ڕێپیشاندهری CKEditors"},"basicstyles":{"bold":"قەڵەو","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"blockquote":{"toolbar":"بەربەستکردنی وتەی وەرگیراو"},"clipboard":{"copy":"لەبەرگرنتەوه","copyError":"پارێزی وێبگەڕەکەت ڕێگهنادات بەسەرنووسەکە لە لکاندنی دەقی خۆکار. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگهنادات بە سەرنووسەکە لهبڕینی خۆکار. تکایە لەبری ئەمە ئەم فەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteArea":"ناوچهی لکاندن","pasteMsg":"تکایه بیلکێنه لهناوهوهی ئهم سنوقه لهڕێی تهختهکلیلهکهت بهباکارهێنانی کلیلی (<STRONG>Ctrl/Cmd+V</STRONG>) دووای کلیکی باشه بکه.","securityMsg":"بههۆی شێوهپێدانی پارێزی وێبگهڕهکهت، سهرنووسهکه ناتوانێت دهستبگهیهنێت بهههڵگیراوهکه ڕاستهوخۆ. بۆیه پێویسته دووباره بیلکێنیت لهم پهنجهرهیه.","title":"لکاندن"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"toolbar":{"toolbarCollapse":"شاردنەوی هێڵی تووڵامراز","toolbarExpand":"نیشاندانی هێڵی تووڵامراز","toolbarGroups":{"document":"پهڕه","clipboard":"بڕین/پووچکردنهوه","editing":"چاکسازی","forms":"داڕشته","basicstyles":"شێوازی بنچینهیی","paragraph":"بڕگه","links":"بهستهر","insert":"خستنه ناو","styles":"شێواز","colors":"ڕهنگهکان","tools":"ئامرازهکان"},"toolbars":"تووڵاەرازی دەسکاریکەر"},"elementspath":{"eleLabel":"ڕێڕهوی توخمهکان","eleTitle":"%1 توخم"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"format":{"label":"ڕازاندنهوه","panelTitle":"بهشی ڕازاندنهوه","tag_address":"ناونیشان","tag_div":"(DIV)-ی ئاسایی","tag_h1":"سهرنووسهی ١","tag_h2":"سهرنووسهی ٢","tag_h3":"سهرنووسهی ٣","tag_h4":"سهرنووسهی ٤","tag_h5":"سهرنووسهی ٥","tag_h6":"سهرنووسهی ٦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"horizontalrule":{"toolbar":"دانانی هێلی ئاسۆیی"},"image":{"alertUrl":"تکایه ناونیشانی بهستهری وێنه بنووسه","alt":"جێگرهوهی دهق","border":"پهراوێز","btnUpload":"ناردنی بۆ ڕاژه","button2Img":"تۆ دهتهوێت دوگمهی وێنهی دیاریکراو بگۆڕیت بۆ وێنهکی ئاسایی؟","hSpace":"بۆشایی ئاسۆیی","img2Button":"تۆ دهتهوێت وێنهی دیاریکراو بگۆڕیت بۆ دوگمهی وێنه؟","infoTab":"زانیاری وێنه","linkTab":"بهستهر","lockRatio":"داخستنی ڕێژه","menu":"خاسیهتی وێنه","resetSize":"ڕێکخستنهوهی قهباره","title":"خاسیهتی وێنه","titleButton":"خاسیهتی دوگمهی وێنه","upload":"بارکردن","urlMissing":"سهرچاوهی بهستهری وێنه بزره","vSpace":"بۆشایی ئهستونی","validateBorder":"پهراوێز دهبێت بهتهواوی تهنها ژماره بێت.","validateHSpace":"بۆشایی ئاسۆیی دهبێت بهتهواوی تهنها ژماره بێت.","validateVSpace":"بۆشایی ئهستونی دهبێت بهتهواوی تهنها ژماره بێت."},"fakeobjects":{"anchor":"لهنگهر","flash":"فلاش","hiddenfield":"شاردنهوهی خانه","iframe":"لهچوارچێوه","unknown":"بهرکارێکی نهناسراو"},"link":{"acccessKey":"کلیلی دهستپێگهیشتن","advanced":"پێشکهوتوو","advisoryContentType":"جۆری ناوهڕۆکی ڕاویژکار","advisoryTitle":"ڕاوێژکاری سهردێڕ","anchor":{"toolbar":"دانان/چاکسازی لهنگهر","menu":"چاکسازی لهنگهر","title":"خاسیهتی لهنگهر","name":"ناوی لهنگهر","errorName":"تکایه ناوی لهنگهر بنووسه","remove":"لابردنی لهنگهر"},"anchorId":"بهپێی ناسنامهی توخم","anchorName":"بهپێی ناوی لهنگهر","charset":"بەستەری سەرچاوەی نووسه","cssClasses":"شێوازی چینی پهڕه","emailAddress":"ناونیشانی ئیمهیل","emailBody":"ناوهڕۆکی نامه","emailSubject":"بابهتی نامه","id":"ناسنامه","info":"زانیاری بەستەر","langCode":"هێمای زمان","langDir":"ئاراستهی زمان","langDirLTR":"چهپ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ چهپ (RTL)","menu":"چاکسازی بەستەر","name":"ناو","noAnchors":"(هیچ جۆرێکی لهنگهر ئاماده نیه لهم پهڕهیه)","noEmail":"تکایه ناونیشانی ئیمهیل بنووسه","noUrl":"تکایه ناونیشانی بهستهر بنووسه","other":"<هیتر>","popupDependent":"پێوهبهستراو (Netscape)","popupFeatures":"خاسیهتی پهنجهرهی سهرههڵدهر","popupFullScreen":"پڕ بهپڕی شاشه (IE)","popupLeft":"جێگای چهپ","popupLocationBar":"هێڵی ناونیشانی بهستهر","popupMenuBar":"هێڵی لیسته","popupResizable":"توانای گۆڕینی قهباره","popupScrollBars":"هێڵی هاتووچۆپێکردن","popupStatusBar":"هێڵی دۆخ","popupToolbar":"هێڵی تووڵامراز","popupTop":"جێگای سهرهوه","rel":"پهیوهندی (rel)","selectAnchor":"ههڵبژاردنی لهنگهرێك","styles":"شێواز","tabIndex":"بازدهری تابی  ئیندێکس","target":"ئامانج","targetFrame":"<چووارچێوه>","targetFrameName":"ناوی ئامانجی چووارچێوه","targetPopup":"<پهنجهرهی سهرههڵدهر>","targetPopupName":"ناوی پهنجهرهی سهرههڵدهر","title":"بەستەر","toAnchor":"بهستهر بۆ لهنگهر له دهق","toEmail":"ئیمهیل","toUrl":"ناونیشانی بهستهر","toolbar":"دانان/ڕێکخستنی بەستەر","type":"جۆری بهستهر","unlink":"لابردنی بەستەر","upload":"بارکردن"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"ئەوپهڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"pastetext":{"button":"لکاندنی وهك دهقی ڕوون","title":"لکاندنی وهك دهقی ڕوون"},"pastefromword":{"confirmCleanup":"ئهم دهقهی بهتهمای بیلکێنی پێدهچێت له word هێنرابێت. دهتهوێت پاکی بکهیوه پێش ئهوهی بیلکێنی؟","error":"هیچ ڕێگهیهك نهبوو لهلکاندنی دهقهکه بههۆی ههڵهکی ناوهخۆیی","title":"لکاندنی لهلایهن Word","toolbar":"لکاندنی لهڕێی Word"},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"sourcearea":{"toolbar":"سەرچاوە"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانەی نووسەی تایبەتی"},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنهوه","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بهرکار"},"table":{"border":"گهورهیی پهراوێز","caption":"سهردێڕ","cell":{"menu":"خانه","insertBefore":"دانانی خانه لهپێش","insertAfter":"دانانی خانه لهپاش","deleteCell":"سڕینهوهی خانه","merge":"تێکهڵکردنی خانه","mergeRight":"تێکهڵکردنی لهگهڵ ڕاست","mergeDown":"تێکهڵکردنی لهگهڵ خوارهوه","splitHorizontal":"دابهشکردنی خانهی ئاسۆیی","splitVertical":"دابهشکردنی خانهی ئهستونی","title":"خاسیهتی خانه","cellType":"جۆری خانه","rowSpan":"ماوهی نێوان ڕیز","colSpan":"بستی ئهستونی","wordWrap":"پێچانهوهی وشه","hAlign":"ڕیزکردنی ئاسۆیی","vAlign":"ڕیزکردنی ئهستونی","alignBaseline":"هێڵهبنهڕهت","bgColor":"ڕهنگی پاشبنهما","borderColor":"ڕهنگی پهراوێز","data":"داتا","header":"سهرپهڕه","yes":"بهڵێ","no":"نهخێر","invalidWidth":"پانی خانه دهبێت بهتهواوی ژماره بێت.","invalidHeight":"درێژی خانه بهتهواوی دهبێت ژماره بێت.","invalidRowSpan":"ماوهی نێوان ڕیز بهتهواوی دهبێت ژماره بێت.","invalidColSpan":"ماوهی نێوان ئهستونی بهتهواوی دهبێت ژماره بێت.","chooseColor":"ههڵبژاردن"},"cellPad":"بۆشایی ناوپۆش","cellSpace":"بۆشایی خانه","column":{"menu":"ئهستون","insertBefore":"دانانی ئهستون لهپێش","insertAfter":"دانانی ئهستوون لهپاش","deleteColumn":"سڕینهوهی ئهستوون"},"columns":"ستوونهکان","deleteTable":"سڕینهوهی خشته","headers":"سهرپهڕه","headersBoth":"ههردووك","headersColumn":"یهکهم ئهستوون","headersNone":"هیچ","headersRow":"یهکهم ڕیز","invalidBorder":"ژمارهی پهراوێز دهبێت تهنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دهبێت ژمارهکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دهبێت ژمارهکی درووست بێت.","invalidCols":"ژمارهی ئهستوونی دهبێت گهورهتر بێت لهژمارهی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارهی ڕیز دهبێت گهورهتر بێت لهژمارهی 0.","invalidWidth":"پانی خشته دهبێت تهنها ژماره بێت.","menu":"خاسیهتی خشته","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز لهپێش","insertAfter":"دانانی ڕیز لهپاش","deleteRow":"سڕینهوهی ڕیز"},"rows":"ڕیز","summary":"کورته","title":"خاسیهتی خشته","toolbar":"خشته","widthPc":"لهسهدا","widthPx":"وێنهخاڵ - پیکسل","widthUnit":"پانی یهکه"},"undo":{"redo":"هەڵگەڕاندنەوه","undo":"پووچکردنەوه"},"justify":{"block":"هاوستوونی","center":"ناوهڕاست","left":"بههێڵ کردنی چهپ","right":"بههێڵ کردنی ڕاست"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"نیشاندانی بەربەستەکان"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/lt.js b/core/misc/ckeditor/lang/lt.js
deleted file mode 100644
index 200df1b..0000000
--- a/core/misc/ckeditor/lang/lt.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['lt']={"dir":"ltr","editor":"Pilnas redaktorius","common":{"editorHelp":"Spauskite ALT 0 dėl pagalbos","browseServer":"Naršyti po serverį","url":"URL","protocol":"Protokolas","upload":"Siųsti","uploadSubmit":"Siųsti į serverį","image":"Vaizdas","flash":"Flash","form":"Forma","checkbox":"Žymimasis langelis","radio":"Žymimoji akutė","textField":"Teksto laukas","textarea":"Teksto sritis","hiddenField":"Nerodomas laukas","button":"Mygtukas","select":"Atrankos laukas","imageButton":"Vaizdinis mygtukas","notSet":"<nėra nustatyta>","id":"Id","name":"Vardas","langDir":"Teksto kryptis","langDirLtr":"Iš kairės į dešinę (LTR)","langDirRtl":"Iš dešinės į kairę (RTL)","langCode":"Kalbos kodas","longDescr":"Ilgas aprašymas URL","cssClass":"Stilių lentelės klasės","advisoryTitle":"Konsultacinė antraštė","cssStyle":"Stilius","ok":"OK","cancel":"Nutraukti","close":"Uždaryti","preview":"Peržiūrėti","resize":"Pavilkite, kad pakeistumėte dydį","generalTab":"Bendros savybės","advancedTab":"Papildomas","validateNumberFailed":"Ši reikšmė nėra skaičius.","confirmNewPage":"Visas neišsaugotas turinys bus prarastas. Ar tikrai norite įkrauti naują puslapį?","confirmCancel":"Kai kurie parametrai pasikeitė. Ar tikrai norite užverti langą?","options":"Parametrai","target":"Tikslinė nuoroda","targetNew":"Naujas langas (_blank)","targetTop":"Viršutinis langas (_top)","targetSelf":"Esamas langas (_self)","targetParent":"Paskutinis langas (_parent)","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","styles":"Stilius","cssClasses":"Stilių klasės","width":"Plotis","height":"Aukštis","align":"Lygiuoti","alignLeft":"Kairę","alignRight":"Dešinę","alignCenter":"Centrą","alignTop":"Viršūnę","alignMiddle":"Vidurį","alignBottom":"Apačią","invalidValue":"Invalid value.","invalidHeight":"Aukštis turi būti nurodytas skaičiais.","invalidWidth":"Plotis turi būti nurodytas skaičiais.","invalidCssLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).","invalidHtmlLength":"Reikšmė nurodyta \"%1\" laukui, turi būti teigiamas skaičius su arba be tinkamo HTML matavimo vieneto (px arba %).","invalidInlineStyle":"Reikšmė nurodyta vidiniame stiliuje turi būti sudaryta iš vieno šių reikšmių \"vardas : reikšmė\", atskirta kabliataškiais.","cssLengthTooltip":"Įveskite reikšmę pikseliais arba skaičiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).","unavailable":"%1<span class=\"cke_accessibility\">, netinkamas</span>"},"about":{"copy":"Copyright &copy; $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor","help":"Patikrinkite $1 dėl pagalbos.","moreInfo":"Dėl licencijavimo apsilankykite mūsų svetainėje:","title":"Apie CKEditor","userGuide":"CKEditor Vartotojo Gidas"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"Viršutinis indeksas","underline":"Pabrauktas"},"blockquote":{"toolbar":"Citata"},"clipboard":{"copy":"Kopijuoti","copyError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti kopijavimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+C).","cut":"Iškirpti","cutError":"Jūsų naršyklės saugumo nustatymai neleidžia redaktoriui automatiškai įvykdyti iškirpimo operacijų. Tam prašome naudoti klaviatūrą (Ctrl/Cmd+X).","paste":"Įdėti","pasteArea":"Įkelti dalį","pasteMsg":"Žemiau esančiame įvedimo lauke įdėkite tekstą, naudodami klaviatūrą (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtuką <STRONG>OK</STRONG>.","securityMsg":"Dėl jūsų naršyklės saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartą į šį langą.","title":"Įdėti"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"toolbar":{"toolbarCollapse":"Apjungti įrankių juostą","toolbarExpand":"Išplėsti įrankių juostą","toolbarGroups":{"document":"Dokumentas","clipboard":"Atmintinė/Atgal","editing":"Redagavimas","forms":"Formos","basicstyles":"Pagrindiniai stiliai","paragraph":"Paragrafas","links":"Nuorodos","insert":"Įterpti","styles":"Stiliai","colors":"Spalvos","tools":"Įrankiai"},"toolbars":"Redaktoriaus įrankiai"},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"list":{"bulletedlist":"Suženklintas sąrašas","numberedlist":"Numeruotas sąrašas"},"indent":{"indent":"Padidinti įtrauką","outdent":"Sumažinti įtrauką"},"format":{"label":"Šrifto formatas","panelTitle":"Šrifto formatas","tag_address":"Kreipinio","tag_div":"Normalus (DIV)","tag_h1":"Antraštinis 1","tag_h2":"Antraštinis 2","tag_h3":"Antraštinis 3","tag_h4":"Antraštinis 4","tag_h5":"Antraštinis 5","tag_h6":"Antraštinis 6","tag_p":"Normalus","tag_pre":"Formuotas"},"horizontalrule":{"toolbar":"Įterpti horizontalią liniją"},"image":{"alertUrl":"Prašome įvesti vaizdo URL","alt":"Alternatyvus Tekstas","border":"Rėmelis","btnUpload":"Siųsti į serverį","button2Img":"Ar norite mygtuką paversti paprastu paveiksliuku?","hSpace":"Hor.Erdvė","img2Button":"Ar norite paveiksliuką paversti mygtuku?","infoTab":"Vaizdo informacija","linkTab":"Nuoroda","lockRatio":"Išlaikyti proporciją","menu":"Vaizdo savybės","resetSize":"Atstatyti dydį","title":"Vaizdo savybės","titleButton":"Vaizdinio mygtuko savybės","upload":"Nusiųsti","urlMissing":"Paveiksliuko nuorodos nėra.","vSpace":"Vert.Erdvė","validateBorder":"Reikšmė turi būti sveikas skaičius.","validateHSpace":"Reikšmė turi būti sveikas skaičius.","validateVSpace":"Reikšmė turi būti sveikas skaičius."},"fakeobjects":{"anchor":"Žymė","flash":"Flash animacija","hiddenfield":"Paslėptas laukas","iframe":"IFrame","unknown":"Nežinomas objektas"},"link":{"acccessKey":"Prieigos raktas","advanced":"Papildomas","advisoryContentType":"Konsultacinio turinio tipas","advisoryTitle":"Konsultacinė antraštė","anchor":{"toolbar":"Įterpti/modifikuoti žymę","menu":"Žymės savybės","title":"Žymės savybės","name":"Žymės vardas","errorName":"Prašome įvesti žymės vardą","remove":"Pašalinti žymę"},"anchorId":"Pagal žymės Id","anchorName":"Pagal žymės vardą","charset":"Susietų išteklių simbolių lentelė","cssClasses":"Stilių lentelės klasės","emailAddress":"El.pašto adresas","emailBody":"Žinutės turinys","emailSubject":"Žinutės tema","id":"Id","info":"Nuorodos informacija","langCode":"Teksto kryptis","langDir":"Teksto kryptis","langDirLTR":"Iš kairės į dešinę (LTR)","langDirRTL":"Iš dešinės į kairę (RTL)","menu":"Taisyti nuorodą","name":"Vardas","noAnchors":"(Šiame dokumente žymių nėra)","noEmail":"Prašome įvesti el.pašto adresą","noUrl":"Prašome įvesti nuorodos URL","other":"<kitas>","popupDependent":"Priklausomas (Netscape)","popupFeatures":"Išskleidžiamo lango savybės","popupFullScreen":"Visas ekranas (IE)","popupLeft":"Kairė pozicija","popupLocationBar":"Adreso juosta","popupMenuBar":"Meniu juosta","popupResizable":"Kintamas dydis","popupScrollBars":"Slinkties juostos","popupStatusBar":"Būsenos juosta","popupToolbar":"Mygtukų juosta","popupTop":"Viršutinė pozicija","rel":"Sąsajos","selectAnchor":"Pasirinkite žymę","styles":"Stilius","tabIndex":"Tabuliavimo indeksas","target":"Paskirties vieta","targetFrame":"<kadras>","targetFrameName":"Paskirties kadro vardas","targetPopup":"<išskleidžiamas langas>","targetPopupName":"Paskirties lango vardas","title":"Nuoroda","toAnchor":"Žymė šiame puslapyje","toEmail":"El.paštas","toUrl":"Nuoroda","toolbar":"Įterpti/taisyti nuorodą","type":"Nuorodos tipas","unlink":"Panaikinti nuorodą","upload":"Siųsti"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Išdidinti","minimize":"Sumažinti"},"pastetext":{"button":"Įdėti kaip gryną tekstą","title":"Įdėti kaip gryną tekstą"},"pastefromword":{"confirmCleanup":"Tekstas, kurį įkeliate yra kopijuojamas iš Word. Ar norite jį išvalyti prieš įkeliant?","error":"Dėl vidinių sutrikimų, nepavyko išvalyti įkeliamo teksto","title":"Įdėti iš Word","toolbar":"Įdėti iš Word"},"removeformat":{"toolbar":"Panaikinti formatą"},"sourcearea":{"toolbar":"Šaltinis"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Įterpti specialų simbolį"},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"table":{"border":"Rėmelio dydis","caption":"Antraštė","cell":{"menu":"Langelis","insertBefore":"Įterpti langelį prieš","insertAfter":"Įterpti langelį po","deleteCell":"Šalinti langelius","merge":"Sujungti langelius","mergeRight":"Sujungti su dešine","mergeDown":"Sujungti su apačia","splitHorizontal":"Skaidyti langelį horizontaliai","splitVertical":"Skaidyti langelį vertikaliai","title":"Cell nustatymai","cellType":"Cell rūšis","rowSpan":"Eilučių Span","colSpan":"Stulpelių Span","wordWrap":"Sutraukti raides","hAlign":"Horizontalus lygiavimas","vAlign":"Vertikalus lygiavimas","alignBaseline":"Apatinė linija","bgColor":"Fono spalva","borderColor":"Rėmelio spalva","data":"Data","header":"Antraštė","yes":"Taip","no":"Ne","invalidWidth":"Reikšmė turi būti skaičius.","invalidHeight":"Reikšmė turi būti skaičius.","invalidRowSpan":"Reikšmė turi būti skaičius.","invalidColSpan":"Reikšmė turi būti skaičius.","chooseColor":"Pasirinkite"},"cellPad":"Trapas nuo langelio rėmo iki teksto","cellSpace":"Tarpas tarp langelių","column":{"menu":"Stulpelis","insertBefore":"Įterpti stulpelį prieš","insertAfter":"Įterpti stulpelį po","deleteColumn":"Šalinti stulpelius"},"columns":"Stulpeliai","deleteTable":"Šalinti lentelę","headers":"Antraštės","headersBoth":"Abu","headersColumn":"Pirmas stulpelis","headersNone":"Nėra","headersRow":"Pirma eilutė","invalidBorder":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellPadding":"Reikšmė turi būti nurodyta skaičiumi.","invalidCellSpacing":"Reikšmė turi būti nurodyta skaičiumi.","invalidCols":"Skaičius turi būti didesnis nei 0.","invalidHeight":"Reikšmė turi būti nurodyta skaičiumi.","invalidRows":"Skaičius turi būti didesnis nei 0.","invalidWidth":"Reikšmė turi būti nurodyta skaičiumi.","menu":"Lentelės savybės","row":{"menu":"Eilutė","insertBefore":"Įterpti eilutę prieš","insertAfter":"Įterpti eilutę po","deleteRow":"Šalinti eilutes"},"rows":"Eilutės","summary":"Santrauka","title":"Lentelės savybės","toolbar":"Lentelė","widthPc":"procentais","widthPx":"taškais","widthUnit":"pločio vienetas"},"undo":{"redo":"Atstatyti","undo":"Atšaukti"},"justify":{"block":"Lygiuoti abi puses","center":"Centruoti","left":"Lygiuoti kairę","right":"Lygiuoti dešinę"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Rodyti blokus"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/lv.js b/core/misc/ckeditor/lang/lv.js
deleted file mode 100644
index 1ed9633..0000000
--- a/core/misc/ckeditor/lang/lv.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['lv']={"dir":"ltr","editor":"Bagātinātā teksta redaktors","common":{"editorHelp":"Palīdzībai, nospiediet ALT 0 ","browseServer":"Skatīt servera saturu","url":"URL","protocol":"Protokols","upload":"Augšupielādēt","uploadSubmit":"Nosūtīt serverim","image":"Attēls","flash":"Flash","form":"Forma","checkbox":"Atzīmēšanas kastīte","radio":"Izvēles poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"Paslēpta teksta rinda","button":"Poga","select":"Iezīmēšanas lauks","imageButton":"Attēlpoga","notSet":"<nav iestatīts>","id":"Id","name":"Nosaukums","langDir":"Valodas lasīšanas virziens","langDirLtr":"No kreisās uz labo (LTR)","langDirRtl":"No labās uz kreiso (RTL)","langCode":"Valodas kods","longDescr":"Gara apraksta Hipersaite","cssClass":"Stilu saraksta klases","advisoryTitle":"Konsultatīvs virsraksts","cssStyle":"Stils","ok":"Darīts!","cancel":"Atcelt","close":"Aizvērt","preview":"Priekšskatījums","resize":"Mērogot","generalTab":"Vispārīgi","advancedTab":"Izvērstais","validateNumberFailed":"Šī vērtība nav skaitlis","confirmNewPage":"Jebkuras nesaglabātās izmaiņas tiks zaudētas. Vai tiešām vēlaties atvērt jaunu lapu?","confirmCancel":"Daži no uzstādījumiem ir mainīti. Vai tiešām vēlaties aizvērt šo dialogu?","options":"Uzstādījumi","target":"Mērķis","targetNew":"Jauns logs (_blank)","targetTop":"Virsējais logs (_top)","targetSelf":"Tas pats logs (_self)","targetParent":"Avota logs (_parent)","langDirLTR":"Kreisais uz Labo (LTR)","langDirRTL":"Labais uz Kreiso (RTL)","styles":"Stils","cssClasses":"Stilu klases","width":"Platums","height":"Augstums","align":"Nolīdzināt","alignLeft":"Pa kreisi","alignRight":"Pa labi","alignCenter":"Centrēti","alignTop":"Augšā","alignMiddle":"Vertikāli centrēts","alignBottom":"Apakšā","invalidValue":"Nekorekta vērtība","invalidHeight":"Augstumam jābūt skaitlim.","invalidWidth":"Platumam jābūt skaitlim","invalidCssLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām CSS mērvienībām (px, %, in, cm, mm, em, ex, pt, vai pc).","invalidHtmlLength":"Laukam \"%1\" norādītajai vērtībai jābūt pozitīvam skaitlim ar vai bez korektām HTML mērvienībām (px vai %).","invalidInlineStyle":"Iekļautajā stilā norādītajai vērtībai jāsastāv no viena vai vairākiem pāriem pēc forma'ta \"nosaukums: vērtība\", atdalītiem ar semikolu.","cssLengthTooltip":"Ievadiet vērtību pikseļos vai skaitli ar derīgu CSS mērvienību (px, %, in, cm, mm, em, ex, pt, vai pc).","unavailable":"%1<span class=\"cke_accessibility\">, nav pieejams</span>"},"about":{"copy":"Kopēšanas tiesības &copy; $1. Visas tiesības rezervētas.","dlgTitle":"Par CKEditor","help":"Pārbaudiet $1 palīdzībai.","moreInfo":"Informācijai par licenzēšanu apmeklējiet mūsu mājas lapu:","title":"Par CKEditor","userGuide":"CKEditor Lietotāja pamācība"},"basicstyles":{"bold":"Treknināts","italic":"Kursīvs","strike":"Pārsvītrots","subscript":"Apakšrakstā","superscript":"Augšrakstā","underline":"Pasvītrots"},"blockquote":{"toolbar":"Bloka citāts"},"clipboard":{"copy":"Kopēt","copyError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt kopēšanas darbību.  Lūdzu, izmantojiet (Ctrl/Cmd+C), lai veiktu šo darbību.","cut":"Izgriezt","cutError":"Jūsu pārlūkprogrammas drošības iestatījumi nepieļauj redaktoram automātiski veikt izgriezšanas darbību.  Lūdzu, izmantojiet (Ctrl/Cmd+X), lai veiktu šo darbību.","paste":"Ielīmēt","pasteArea":"Ielīmēšanas zona","pasteMsg":"Lūdzu, ievietojiet tekstu šajā laukumā, izmantojot klaviatūru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>Darīts!</STRONG>.","securityMsg":"Jūsu pārlūka drošības uzstādījumu dēļ, nav iespējams tieši piekļūt jūsu starpliktuvei. Jums jāielīmē atkārtoti šajā logā.","title":"Ievietot"},"contextmenu":{"options":"Uznirstošās izvēlnes uzstādījumi"},"toolbar":{"toolbarCollapse":"Aizvērt rīkjoslu","toolbarExpand":"Atvērt rīkjoslu","toolbarGroups":{"document":"Dokuments","clipboard":"Starpliktuve/Atcelt","editing":"Labošana","forms":"Formas","basicstyles":"Pamata stili","paragraph":"Paragrāfs","links":"Saites","insert":"Ievietot","styles":"Stili","colors":"Krāsas","tools":"Rīki"},"toolbars":"Redaktora rīkjoslas"},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"list":{"bulletedlist":"Pievienot/Noņemt vienkāršu sarakstu","numberedlist":"Numurēts saraksts"},"indent":{"indent":"Palielināt atkāpi","outdent":"Samazināt atkāpi"},"format":{"label":"Formāts","panelTitle":"Formāts","tag_address":"Adrese","tag_div":"Rindkopa (DIV)","tag_h1":"Virsraksts 1","tag_h2":"Virsraksts 2","tag_h3":"Virsraksts 3","tag_h4":"Virsraksts 4","tag_h5":"Virsraksts 5","tag_h6":"Virsraksts 6","tag_p":"Normāls teksts","tag_pre":"Formatēts teksts"},"horizontalrule":{"toolbar":"Ievietot horizontālu Atdalītājsvītru"},"image":{"alertUrl":"Lūdzu norādīt attēla hipersaiti","alt":"Alternatīvais teksts","border":"Rāmis","btnUpload":"Nosūtīt serverim","button2Img":"Vai vēlaties pārveidot izvēlēto attēla pogu uz attēla?","hSpace":"Horizontālā telpa","img2Button":"Vai vēlaties pārveidot izvēlēto attēlu uz attēla pogas?","infoTab":"Informācija par attēlu","linkTab":"Hipersaite","lockRatio":"Nemainīga Augstuma/Platuma attiecība","menu":"Attēla īpašības","resetSize":"Atjaunot sākotnējo izmēru","title":"Attēla īpašības","titleButton":"Attēlpogas īpašības","upload":"Augšupielādēt","urlMissing":"Trūkst attēla atrašanās adrese.","vSpace":"Vertikālā telpa","validateBorder":"Apmalei jābūt veselam skaitlim","validateHSpace":"HSpace jābūt veselam skaitlim","validateVSpace":"VSpace jābūt veselam skaitlim"},"fakeobjects":{"anchor":"Iezīme","flash":"Flash animācija","hiddenfield":"Slēpts lauks","iframe":"Iframe","unknown":"Nezināms objekts"},"link":{"acccessKey":"Pieejas taustiņš","advanced":"Izvērstais","advisoryContentType":"Konsultatīvs satura tips","advisoryTitle":"Konsultatīvs virsraksts","anchor":{"toolbar":"Ievietot/Labot iezīmi","menu":"Labot iezīmi","title":"Iezīmes uzstādījumi","name":"Iezīmes nosaukums","errorName":"Lūdzu norādiet iezīmes nosaukumu","remove":"Noņemt iezīmi"},"anchorId":"Pēc elementa ID","anchorName":"Pēc iezīmes nosaukuma","charset":"Pievienotā resursa kodējums","cssClasses":"Stilu saraksta klases","emailAddress":"E-pasta adrese","emailBody":"Ziņas saturs","emailSubject":"Ziņas tēma","id":"ID","info":"Hipersaites informācija","langCode":"Valodas kods","langDir":"Valodas lasīšanas virziens","langDirLTR":"No kreisās uz labo (LTR)","langDirRTL":"No labās uz kreiso (RTL)","menu":"Labot hipersaiti","name":"Nosaukums","noAnchors":"(Šajā dokumentā nav iezīmju)","noEmail":"Lūdzu norādi e-pasta adresi","noUrl":"Lūdzu norādi hipersaiti","other":"<cits>","popupDependent":"Atkarīgs (Netscape)","popupFeatures":"Uznirstošā loga nosaukums īpašības","popupFullScreen":"Pilnā ekrānā (IE)","popupLeft":"Kreisā koordināte","popupLocationBar":"Atrašanās vietas josla","popupMenuBar":"Izvēlnes josla","popupResizable":"Mērogojams","popupScrollBars":"Ritjoslas","popupStatusBar":"Statusa josla","popupToolbar":"Rīku josla","popupTop":"Augšējā koordināte","rel":"Relācija","selectAnchor":"Izvēlēties iezīmi","styles":"Stils","tabIndex":"Ciļņu indekss","target":"Mērķis","targetFrame":"<ietvars>","targetFrameName":"Mērķa ietvara nosaukums","targetPopup":"<uznirstošā logā>","targetPopupName":"Uznirstošā loga nosaukums","title":"Hipersaite","toAnchor":"Iezīme šajā lapā","toEmail":"E-pasts","toUrl":"Adrese","toolbar":"Ievietot/Labot hipersaiti","type":"Hipersaites tips","unlink":"Noņemt hipersaiti","upload":"Augšupielādēt"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimizēt","minimize":"Minimizēt"},"pastetext":{"button":"Ievietot kā vienkāršu tekstu","title":"Ievietot kā vienkāršu tekstu"},"pastefromword":{"confirmCleanup":"Teksts, kuru vēlaties ielīmēt, izskatās ir nokopēts no Word. Vai vēlaties to iztīrīt pirms ielīmēšanas?","error":"Iekšējas kļūdas dēļ, neizdevās iztīrīt ielīmētos datus.","title":"Ievietot no Worda","toolbar":"Ievietot no Worda"},"removeformat":{"toolbar":"Noņemt stilus"},"sourcearea":{"toolbar":"HTML kods"},"specialchar":{"options":"Speciālo simbolu uzstādījumi","title":"Ievietot īpašu simbolu","toolbar":"Ievietot speciālo simbolu"},"stylescombo":{"label":"Stils","panelTitle":"Formatēšanas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"table":{"border":"Rāmja izmērs","caption":"Leģenda","cell":{"menu":"Šūna","insertBefore":"Pievienot šūnu pirms","insertAfter":"Pievienot šūnu pēc","deleteCell":"Dzēst rūtiņas","merge":"Apvienot rūtiņas","mergeRight":"Apvieno pa labi","mergeDown":"Apvienot uz leju","splitHorizontal":"Sadalīt šūnu horizontāli","splitVertical":"Sadalīt šūnu vertikāli","title":"Šūnas uzstādījumi","cellType":"Šūnas tips","rowSpan":"Apvienotas rindas","colSpan":"Apvienotas kolonas","wordWrap":"Vārdu pārnese","hAlign":"Horizontālais novietojums","vAlign":"Vertikālais novietojums","alignBaseline":"Pamatrinda","bgColor":"Fona krāsa","borderColor":"Rāmja krāsa","data":"Dati","header":"Virsraksts","yes":"Jā","no":"Nē","invalidWidth":"Šūnas platumam jābūt skaitlim","invalidHeight":"Šūnas augstumam jābūt skaitlim","invalidRowSpan":"Apvienojamo rindu skaitam jābūt veselam skaitlim","invalidColSpan":"Apvienojamo kolonu skaitam jābūt veselam skaitlim","chooseColor":"Izvēlēties"},"cellPad":"Rūtiņu nobīde","cellSpace":"Rūtiņu atstatums","column":{"menu":"Kolonna","insertBefore":"Ievietot kolonu pirms","insertAfter":"Ievieto kolonu pēc","deleteColumn":"Dzēst kolonnas"},"columns":"Kolonnas","deleteTable":"Dzēst tabulu","headers":"Virsraksti","headersBoth":"Abi","headersColumn":"Pirmā kolona","headersNone":"Nekas","headersRow":"Pirmā rinda","invalidBorder":"Rāmju izmēram jābūt skaitlim","invalidCellPadding":"Šūnu atkāpēm jābūt pozitīvam skaitlim","invalidCellSpacing":"Šūnu atstarpēm jābūt pozitīvam skaitlim","invalidCols":"Kolonu skaitam jābūt lielākam par 0","invalidHeight":"Tabulas augstumam jābūt skaitlim","invalidRows":"Rindu skaitam jābūt lielākam par 0","invalidWidth":"Tabulas platumam jābūt skaitlim","menu":"Tabulas īpašības","row":{"menu":"Rinda","insertBefore":"Ievietot rindu pirms","insertAfter":"Ievietot rindu pēc","deleteRow":"Dzēst rindas"},"rows":"Rindas","summary":"Anotācija","title":"Tabulas īpašības","toolbar":"Tabula","widthPc":"procentuāli","widthPx":"pikseļos","widthUnit":"platuma mērvienība"},"undo":{"redo":"Atkārtot","undo":"Atcelt"},"justify":{"block":"Izlīdzināt malas","center":"Izlīdzināt pret centru","left":"Izlīdzināt pa kreisi","right":"Izlīdzināt pa labi"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Parādīt blokus"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/mk.js b/core/misc/ckeditor/lang/mk.js
deleted file mode 100644
index 3292403..0000000
--- a/core/misc/ckeditor/lang/mk.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['mk']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"Општо","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"removeformat":{"toolbar":"Remove Format"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/mn.js b/core/misc/ckeditor/lang/mn.js
deleted file mode 100644
index 65e6a24..0000000
--- a/core/misc/ckeditor/lang/mn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['mn']={"dir":"ltr","editor":"Хэлбэрт бичвэр боловсруулагч","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Сервер харуулах","url":"URL","protocol":"Протокол","upload":"Хуулах","uploadSubmit":"Үүнийг сервэррүү илгээ","image":"Зураг","flash":"Флаш","form":"Форм","checkbox":"Чекбокс","radio":"Радио товч","textField":"Техт талбар","textarea":"Техт орчин","hiddenField":"Нууц талбар","button":"Товч","select":"Сонгогч талбар","imageButton":"Зурагтай товч","notSet":"<Оноохгүй>","id":"Id","name":"Нэр","langDir":"Хэлний чиглэл","langDirLtr":"Зүүнээс баруун (LTR)","langDirRtl":"Баруунаас зүүн (RTL)","langCode":"Хэлний код","longDescr":"URL-ын тайлбар","cssClass":"Stylesheet классууд","advisoryTitle":"Зөвлөлдөх гарчиг","cssStyle":"Загвар","ok":"OK","cancel":"Болих","close":"Хаах","preview":"Уридчлан харах","resize":"Resize","generalTab":"Ерөнхий","advancedTab":"Нэмэлт","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Сонголт","target":"Бай","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Зүүн талаас баруун тийшээ (LTR)","langDirRTL":"Баруун талаас зүүн тийшээ (RTL)","styles":"Загвар","cssClasses":"Stylesheet классууд","width":"Өргөн","height":"Өндөр","align":"Эгнээ","alignLeft":"Зүүн","alignRight":"Баруун","alignCenter":"Төвд","alignTop":"Дээд талд","alignMiddle":"Дунд талд","alignBottom":"Доод талд","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх ёстой.","invalidWidth":"Өргөн нь тоо байх ёстой.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Налуу","strike":"Дундуур нь зураастай болгох","subscript":"Суурь болгох","superscript":"Зэрэг болгох","underline":"Доогуур нь зураастай болгох"},"blockquote":{"toolbar":"Ишлэл хэсэг"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хослолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдэлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хослолыг ашиглана уу.","paste":"Буулгах","pasteArea":"Paste Area","pasteMsg":"(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste хийнэ үү. Мөн <strong>OK</strong> дар.","securityMsg":"Таны үзүүлэгч/browser/-н хамгаалалтын тохиргооноос болоод editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Энэ цонход дахин paste хийхийг оролд.","title":"Буулгах"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Холбоосууд","insert":"Оруулах","styles":"Загварууд","colors":"Онгөнүүд","tools":"Хэрэгслүүд"},"toolbars":"Болосруулагчийн хэрэгслийн самбар"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Цэгтэй жагсаалт","numberedlist":"Дугаарлагдсан жагсаалт"},"indent":{"indent":"Догол мөр хасах","outdent":"Догол мөр нэмэх"},"format":{"label":"Параргафын загвар","panelTitle":"Параргафын загвар","tag_address":"Хаяг","tag_div":"Paragraph (DIV)","tag_h1":"Гарчиг 1","tag_h2":"Гарчиг 2","tag_h3":"Гарчиг 3","tag_h4":"Гарчиг 4","tag_h5":"Гарчиг 5","tag_h6":"Гарчиг 6","tag_p":"Хэвийн","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Хөндлөн зураас оруулах"},"image":{"alertUrl":"Зурагны URL-ын төрлийн сонгоно уу","alt":"Зургийг орлох бичвэр","border":"Хүрээ","btnUpload":"Үүнийг сервэррүү илгээ","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хөндлөн зай","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Зурагны мэдээлэл","linkTab":"Холбоос","lockRatio":"Радио түгжих","menu":"Зураг","resetSize":"хэмжээ дахин оноох","title":"Зураг","titleButton":"Зурган товчны шинж чанар","upload":"Хуулах","urlMissing":"Зургийн эх сурвалжийн хаяг (URL) байхгүй байна.","vSpace":"Босоо зай","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Зангуу","flash":"Flash Animation","hiddenfield":"Нууц талбар","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Холбох түлхүүр","advanced":"Нэмэлт","advisoryContentType":"Зөвлөлдөх төрлийн агуулга","advisoryTitle":"Зөвлөлдөх гарчиг","anchor":{"toolbar":"Зангуу","menu":"Зангууг болосруулах","title":"Зангуугийн шинж чанар","name":"Зангуугийн нэр","errorName":"Зангуугийн нэрийг оруулна уу","remove":"Зангууг устгах"},"anchorId":"Элемэнтйн Id нэрээр","anchorName":"Зангуугийн нэрээр","charset":"Тэмдэгт оноох нөөцөд холбогдсон","cssClasses":"Stylesheet классууд","emailAddress":"Э-шуудангийн хаяг","emailBody":"Зурвасны их бие","emailSubject":"Зурвасны гарчиг","id":"Id","info":"Холбоосын тухай мэдээлэл","langCode":"Хэлний код","langDir":"Хэлний чиглэл","langDirLTR":"Зүүнээс баруун (LTR)","langDirRTL":"Баруунаас зүүн (RTL)","menu":"Холбоос засварлах","name":"Нэр","noAnchors":"(Баримт бичиг зангуугүй байна)","noEmail":"Э-шуудангий хаягаа шивнэ үү","noUrl":"Холбоосны URL хаягийг шивнэ үү","other":"<other>","popupDependent":"Хамаатай (Netscape)","popupFeatures":"Popup цонхны онцлог","popupFullScreen":"Цонх дүүргэх (Internet Explorer)","popupLeft":"Зүүн байрлал","popupLocationBar":"Location хэсэг","popupMenuBar":"Цэсний самбар","popupResizable":"Resizable","popupScrollBars":"Скрол хэсэгүүд","popupStatusBar":"Статус хэсэг","popupToolbar":"Багажны самбар","popupTop":"Дээд байрлал","rel":"Relationship","selectAnchor":"Нэг зангууг сонгоно уу","styles":"Загвар","tabIndex":"Tab индекс","target":"Байрлал","targetFrame":"<Агуулах хүрээ>","targetFrameName":"Очих фремын нэр","targetPopup":"<popup цонх>","targetPopupName":"Popup цонхны нэр","title":"Холбоос","toAnchor":"Энэ бичвэр дэх зангуу руу очих холбоос","toEmail":"Э-захиа","toUrl":"цахим хуудасны хаяг (URL)","toolbar":"Холбоос","type":"Линкийн төрөл","unlink":"Холбоос авч хаях","upload":"Хуулах"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Дэлгэц дүүргэх","minimize":"Цонхыг багсгаж харуулах"},"pastetext":{"button":"Энгийн бичвэрээр буулгах","title":"Энгийн бичвэрээр буулгах"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word-оос буулгах","toolbar":"Word-оос буулгах"},"removeformat":{"toolbar":"Параргафын загварыг авч хаях"},"sourcearea":{"toolbar":"Код"},"specialchar":{"options":"Special Character Options","title":"Онцгой тэмдэгт сонгох","toolbar":"Онцгой тэмдэгт оруулах"},"stylescombo":{"label":"Загвар","panelTitle":"Загвар хэлбэржүүлэх","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Хүрээний хэмжээ","caption":"Тайлбар","cell":{"menu":"Нүх/зай","insertBefore":"Нүх/зай өмнө нь оруулах","insertAfter":"Нүх/зай дараа нь оруулах","deleteCell":"Нүх устгах","merge":"Нүх нэгтэх","mergeRight":"Баруун тийш нэгтгэх","mergeDown":"Доош нэгтгэх","splitHorizontal":"Нүх/зайг босоогоор нь тусгаарлах","splitVertical":"Нүх/зайг хөндлөнгөөр нь тусгаарлах","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Хэвтээд тэгшлэх арга","vAlign":"Босоод тэгшлэх арга","alignBaseline":"Baseline","bgColor":"Дэвсгэр өнгө","borderColor":"Хүрээний өнгө","data":"Data","header":"Header","yes":"Тийм","no":"Үгүй","invalidWidth":"Нүдний өргөн нь тоо байх ёстой.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сонгох"},"cellPad":"Нүх доторлох(padding)","cellSpace":"Нүх хоорондын зай (spacing)","column":{"menu":"Багана","insertBefore":"Багана өмнө нь оруулах","insertAfter":"Багана дараа нь оруулах","deleteColumn":"Багана устгах"},"columns":"Багана","deleteTable":"Хүснэгт устгах","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Хүснэгтийн өргөн нь тоо байх ёстой.","menu":"Хүснэгт","row":{"menu":"Мөр","insertBefore":"Мөр өмнө нь оруулах","insertAfter":"Мөр дараа нь оруулах","deleteRow":"Мөр устгах"},"rows":"Мөр","summary":"Тайлбар","title":"Хүснэгт","toolbar":"Хүснэгт","widthPc":"хувь","widthPx":"цэг","widthUnit":"өргөний нэгж"},"undo":{"redo":"Өмнөх үйлдлээ сэргээх","undo":"Хүчингүй болгох"},"justify":{"block":"Тэгшлэх","center":"Голлуулах","left":"Зүүн талд тулгах","right":"Баруун талд тулгах"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Хавтангуудыг харуулах"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ms.js b/core/misc/ckeditor/lang/ms.js
deleted file mode 100644
index 4cc75fb..0000000
--- a/core/misc/ckeditor/lang/ms.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ms']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","flash":"Flash","form":"Borang","checkbox":"Checkbox","radio":"Butang Radio","textField":"Text Field","textarea":"Textarea","hiddenField":"Field Tersembunyi","button":"Butang","select":"Field Pilihan","imageButton":"Butang Bergambar","notSet":"<tidak di set>","id":"Id","name":"Nama","langDir":"Arah Tulisan","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri (RTL)","langCode":"Kod Bahasa","longDescr":"Butiran Panjang URL","cssClass":"Kelas-kelas Stylesheet","advisoryTitle":"Tajuk Makluman","cssStyle":"Stail","ok":"OK","cancel":"Batal","close":"Close","preview":"Prebiu","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Sasaran","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Stail","cssClasses":"Kelas-kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Jajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Salin","copyError":"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).","cut":"Potong","cutError":"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).","paste":"Tampal","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tampal"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Alamat","tag_div":"Perenggan (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Telah Diformat"},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"image":{"alertUrl":"Sila taip URL untuk fail gambar","alt":"Text Alternatif","border":"Border","btnUpload":"Hantar ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Ruang Melintang","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Imej","linkTab":"Sambungan","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","resetSize":"Saiz Set Semula","title":"Ciri-ciri Imej","titleButton":"Ciri-ciri Butang Bergambar","upload":"Muat Naik","urlMissing":"Image source URL is missing.","vSpace":"Ruang Menegak","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Kunci Akses","advanced":"Advanced","advisoryContentType":"Jenis Kandungan Makluman","advisoryTitle":"Tajuk Makluman","anchor":{"toolbar":"Masukkan/Sunting Pautan","menu":"Ciri-ciri Pautan","title":"Ciri-ciri Pautan","name":"Nama Pautan","errorName":"Sila taip nama pautan","remove":"Remove Anchor"},"anchorId":"dengan menggunakan ID elemen","anchorName":"dengan menggunakan nama pautan","charset":"Linked Resource Charset","cssClasses":"Kelas-kelas Stylesheet","emailAddress":"Alamat E-Mail","emailBody":"Isi Kandungan Mesej","emailSubject":"Subjek Mesej","id":"Id","info":"Butiran Sambungan","langCode":"Arah Tulisan","langDir":"Arah Tulisan","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Sunting Sambungan","name":"Nama","noAnchors":"(Tiada pautan terdapat dalam dokumen ini)","noEmail":"Sila taip alamat e-mail","noUrl":"Sila taip sambungan URL","other":"<lain>","popupDependent":"Bergantungan (Netscape)","popupFeatures":"Ciri Tetingkap Popup","popupFullScreen":"Skrin Penuh (IE)","popupLeft":"Posisi Kiri","popupLocationBar":"Bar Lokasi","popupMenuBar":"Bar Menu","popupResizable":"Resizable","popupScrollBars":"Bar-bar skrol","popupStatusBar":"Bar Status","popupToolbar":"Toolbar","popupTop":"Posisi Atas","rel":"Relationship","selectAnchor":"Sila pilih pautan","styles":"Stail","tabIndex":"Indeks Tab ","target":"Sasaran","targetFrame":"<bingkai>","targetFrameName":"Nama Bingkai Sasaran","targetPopup":"<tetingkap popup>","targetPopupName":"Nama Tetingkap Popup","title":"Sambungan","toAnchor":"Pautan dalam muka surat ini","toEmail":"E-Mail","toUrl":"URL","toolbar":"Masukkan/Sunting Sambungan","type":"Jenis Sambungan","unlink":"Buang Sambungan","upload":"Muat Naik"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Tampal sebagai text biasa","title":"Tampal sebagai text biasa"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Tampal dari Word","toolbar":"Tampal dari Word"},"removeformat":{"toolbar":"Buang Format"},"sourcearea":{"toolbar":"Sumber"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Saiz Border","caption":"Keterangan","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Buangkan Sel-sel","merge":"Cantumkan Sel-sel","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Tambahan Ruang Sel","cellSpace":"Ruangan Antara Sel","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Buangkan Lajur"},"columns":"Jaluran","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Ciri-ciri Jadual","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Buangkan Baris"},"rows":"Barisan","summary":"Summary","title":"Ciri-ciri Jadual","toolbar":"Jadual","widthPc":"peratus","widthPx":"piksel-piksel","widthUnit":"width unit"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"justify":{"block":"Jajaran Blok","center":"Jajaran Tengah","left":"Jajaran Kiri","right":"Jajaran Kanan"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/nb.js b/core/misc/ckeditor/lang/nb.js
deleted file mode 100644
index 0297f40..0000000
--- a/core/misc/ckeditor/lang/nb.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['nb']={"dir":"ltr","editor":"Rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"blockquote":{"toolbar":"Sitatblokk"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"removeformat":{"toolbar":"Fjern formatering"},"sourcearea":{"toolbar":"Kilde"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"undo":{"redo":"Gjør om","undo":"Angre"},"justify":{"block":"Blokkjuster","center":"Midtstill","left":"Venstrejuster","right":"Høyrejuster"},"placeholder":{"title":"Egenskaper for plassholder","toolbar":"Opprett plassholder","text":"Tekst for plassholder","edit":"Rediger plassholder","textMissing":"Plassholderen må inneholde tekst."},"showblocks":{"toolbar":"Vis blokker"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/nl.js b/core/misc/ckeditor/lang/nl.js
deleted file mode 100644
index 10792fb..0000000
--- a/core/misc/ckeditor/lang/nl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['nl']={"dir":"ltr","editor":"Tekstverwerker","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","flash":"Flash","form":"Formulier","checkbox":"Aanvinkvakje","radio":"Selectievakje","textField":"Tekstveld","textarea":"Tekstvak","hiddenField":"Verborgen veld","button":"Knop","select":"Selectieveld","imageButton":"Afbeeldingsknop","notSet":"<niet ingevuld>","id":"Id","name":"Naam","langDir":"Schrijfrichting","langDirLtr":"Links naar rechts (LTR)","langDirRtl":"Rechts naar links (RTL)","langCode":"Taalcode","longDescr":"Lange URL-omschrijving","cssClass":"Stylesheet-klassen","advisoryTitle":"Adviserende titel","cssStyle":"Stijl","ok":"OK","cancel":"Annuleren","close":"Sluiten","preview":"Voorbeeld","resize":"Sleep om te herschalen","generalTab":"Algemeen","advancedTab":"Geavanceerd","validateNumberFailed":"Deze waarde is geen geldig getal.","confirmNewPage":"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?","confirmCancel":"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?","options":"Opties","target":"Doelvenster","targetNew":"Nieuw venster (_blank)","targetTop":"Hele venster (_top)","targetSelf":"Zelfde venster (_self)","targetParent":"Origineel venster (_parent)","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","styles":"Stijl","cssClasses":"Stylesheet klassen","width":"Breedte","height":"Hoogte","align":"Uitlijning","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Centreren","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidCssLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).","invalidHtmlLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).","invalidInlineStyle":"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \"naam : waarde\", gescheiden door puntkomma's.","cssLengthTooltip":"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, niet beschikbaar</span>"},"about":{"copy":"Copyright &copy; $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor","help":"Bekijk de $1 voor hulp.","moreInfo":"Voor licentie informatie, bezoek onze website:","title":"Over CKEditor","userGuide":"CKEditor gebruiksaanwijzing"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstreept"},"blockquote":{"toolbar":"Citaatblok"},"clipboard":{"copy":"Kopiëren","copyError":"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.","cut":"Knippen","cutError":"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.","paste":"Plakken","pasteArea":"Plakgebied","pasteMsg":"Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op OK.","securityMsg":"Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.","title":"Plakken"},"contextmenu":{"options":"Contextmenu opties"},"toolbar":{"toolbarCollapse":"Werkbalk inklappen","toolbarExpand":"Werkbalk uitklappen","toolbarGroups":{"document":"Document","clipboard":"Klembord/Ongedaan maken","editing":"Bewerken","forms":"Formulieren","basicstyles":"Basisstijlen","paragraph":"Paragraaf","links":"Links","insert":"Invoegen","styles":"Stijlen","colors":"Kleuren","tools":"Toepassingen"},"toolbars":"Werkbalken"},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"list":{"bulletedlist":"Opsomming","numberedlist":"Genummerde lijst"},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Kop 1","tag_h2":"Kop 2","tag_h3":"Kop 3","tag_h4":"Kop 4","tag_h5":"Kop 5","tag_h6":"Kop 6","tag_p":"Normaal","tag_pre":"Met opmaak"},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"image":{"alertUrl":"Geef de URL van de afbeelding","alt":"Alternatieve tekst","border":"Rand","btnUpload":"Naar server verzenden","button2Img":"Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?","hSpace":"HSpace","img2Button":"Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?","infoTab":"Informatie afbeelding","linkTab":"Link","lockRatio":"Afmetingen vergrendelen","menu":"Eigenschappen afbeelding","resetSize":"Afmetingen resetten","title":"Eigenschappen afbeelding","titleButton":"Eigenschappen afbeeldingsknop","upload":"Upload","urlMissing":"De URL naar de afbeelding ontbreekt.","vSpace":"VSpace","validateBorder":"Rand moet een heel nummer zijn.","validateHSpace":"HSpace moet een heel nummer zijn.","validateVSpace":"VSpace moet een heel nummer zijn."},"fakeobjects":{"anchor":"Interne link","flash":"Flash animatie","hiddenfield":"Verborgen veld","iframe":"IFrame","unknown":"Onbekend object"},"link":{"acccessKey":"Toegangstoets","advanced":"Geavanceerd","advisoryContentType":"Aanbevolen content-type","advisoryTitle":"Adviserende titel","anchor":{"toolbar":"Interne link","menu":"Eigenschappen interne link","title":"Eigenschappen interne link","name":"Naam interne link","errorName":"Geef de naam van de interne link op","remove":"Interne link verwijderen"},"anchorId":"Op kenmerk interne link","anchorName":"Op naam interne link","charset":"Karakterset van gelinkte bron","cssClasses":"Stylesheet-klassen","emailAddress":"E-mailadres","emailBody":"Inhoud bericht","emailSubject":"Onderwerp bericht","id":"Id","info":"Linkomschrijving","langCode":"Taalcode","langDir":"Schrijfrichting","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","menu":"Link wijzigen","name":"Naam","noAnchors":"(Geen interne links in document gevonden)","noEmail":"Geef een e-mailadres","noUrl":"Geef de link van de URL","other":"<ander>","popupDependent":"Afhankelijk (Netscape)","popupFeatures":"Instellingen popupvenster","popupFullScreen":"Volledig scherm (IE)","popupLeft":"Positie links","popupLocationBar":"Locatiemenu","popupMenuBar":"Menubalk","popupResizable":"Herschaalbaar","popupScrollBars":"Schuifbalken","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Positie boven","rel":"Relatie","selectAnchor":"Kies een interne link","styles":"Stijl","tabIndex":"Tabvolgorde","target":"Doelvenster","targetFrame":"<frame>","targetFrameName":"Naam doelframe","targetPopup":"<popupvenster>","targetPopupName":"Naam popupvenster","title":"Link","toAnchor":"Interne link in pagina","toEmail":"E-mail","toUrl":"URL","toolbar":"Link invoegen/wijzigen","type":"Linktype","unlink":"Link verwijderen","upload":"Upload"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"pastetext":{"button":"Plakken als platte tekst","title":"Plakken als platte tekst"},"pastefromword":{"confirmCleanup":"De tekst die u plakte lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?","error":"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout","title":"Plakken als Word-gegevens","toolbar":"Plakken als Word-gegevens"},"removeformat":{"toolbar":"Opmaak verwijderen"},"sourcearea":{"toolbar":"Code"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"table":{"border":"Breedte rand","caption":"Naam","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in achter","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cellen horizontaal","splitVertical":"Splits cellen verticaal","title":"Cel eigenschappen","cellType":"Cel type","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Basislijn","bgColor":"Achtergrondkleur","borderColor":"Kleur rand","data":"Inhoud","header":"Kop","yes":"Ja","no":"Nee","invalidWidth":"De celbreedte moet een getal zijn.","invalidHeight":"De celhoogte moet een getal zijn.","invalidRowSpan":"Rijen samenvoegen moet een heel getal zijn.","invalidColSpan":"Kolommen samenvoegen moet een heel getal zijn.","chooseColor":"Kies"},"cellPad":"Ruimte in de cel","cellSpace":"Afstand tussen cellen","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in achter","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","invalidBorder":"De rand breedte moet een getal zijn.","invalidCellPadding":"Ruimte in de cel moet een getal zijn.","invalidCellSpacing":"Afstand tussen cellen moet een getal zijn.","invalidCols":"Het aantal kolommen moet een getal zijn groter dan 0.","invalidHeight":"De tabelhoogte moet een getal zijn.","invalidRows":"Het aantal rijen moet een getal zijn groter dan 0.","invalidWidth":"De tabelbreedte moet een getal zijn.","menu":"Eigenschappen tabel","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in achter","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Eigenschappen tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"justify":{"block":"Uitvullen","center":"Centreren","left":"Links uitlijnen","right":"Rechts uitlijnen"},"placeholder":{"title":"Eigenschappen placeholder","toolbar":"Placeholder aanmaken","text":"Placeholder tekst","edit":"Placeholder wijzigen","textMissing":"De placeholder moet tekst bevatten."},"showblocks":{"toolbar":"Toon blokken"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/no.js b/core/misc/ckeditor/lang/no.js
deleted file mode 100644
index 46a2b88..0000000
--- a/core/misc/ckeditor/lang/no.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['no']={"dir":"ltr","editor":"Rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"blockquote":{"toolbar":"Sitatblokk"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"removeformat":{"toolbar":"Fjern formatering"},"sourcearea":{"toolbar":"Kilde"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"undo":{"redo":"Gjør om","undo":"Angre"},"justify":{"block":"Blokkjuster","center":"Midtstill","left":"Venstrejuster","right":"Høyrejuster"},"placeholder":{"title":"Egenskaper for plassholder","toolbar":"Opprett plassholder","text":"Tekst for plassholder","edit":"Rediger plassholder","textMissing":"Plassholderen må inneholde tekst."},"showblocks":{"toolbar":"Vis blokker"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/pl.js b/core/misc/ckeditor/lang/pl.js
deleted file mode 100644
index ccf6d25..0000000
--- a/core/misc/ckeditor/lang/pl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['pl']={"dir":"ltr","editor":"Edytor tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciśnij ALT 0","browseServer":"Przeglądaj","url":"Adres URL","protocol":"Protokół","upload":"Wyślij","uploadSubmit":"Wyślij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod języka","longDescr":"Adres URL długiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"Podgląd","resize":"Przeciągnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbą.","confirmNewPage":"Wszystkie niezapisane zmiany zostaną utracone. Czy na pewno wczytać nową stronę?","confirmCancel":"Pewne opcje zostały zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzędne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","alignLeft":"Do lewej","alignRight":"Do prawej","alignCenter":"Do środka","alignTop":"Do góry","alignMiddle":"Do środka","alignBottom":"Do dołu","invalidValue":"Nieprawidłowa wartość.","invalidHeight":"Wysokość musi być liczbą.","invalidWidth":"Szerokość musi być liczbą.","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbą dodatnią bez jednostki lub z poprawną jednostką długości zgodną z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi składać się z jednej lub większej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych średnikami.","cssLengthTooltip":"Wpisz liczbę dla wartości w pikselach lub liczbę wraz z jednostką długości zgodną z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostępne</span>"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor","help":"Pomoc znajdziesz w $1.","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:","title":"Informacje o programie CKEditor","userGuide":"podręczniku użytkownika programu CKEditor"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"Przekreślenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"Podkreślenie"},"blockquote":{"toolbar":"Cytat"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeństwa Twojej przeglądarki nie pozwalają na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteArea":"Obszar wklejania","pasteMsg":"Wklej tekst w poniższym polu, używając skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.","securityMsg":"Zabezpieczenia przeglądarki uniemożliwiają wklejenie danych bezpośrednio do edytora. Proszę ponownie wkleić dane w tym oknie.","title":"Wklej"},"contextmenu":{"options":"Opcje menu kontekstowego"},"toolbar":{"toolbarCollapse":"Zwiń pasek narzędzi","toolbarExpand":"Rozwiń pasek narzędzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"Hiperłącza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"Narzędzia"},"toolbars":"Paski narzędzi edytora"},"elementspath":{"eleLabel":"Ścieżka elementów","eleTitle":"element %1"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"indent":{"indent":"Zwiększ wcięcie","outdent":"Zmniejsz wcięcie"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"horizontalrule":{"toolbar":"Wstaw poziomą linię"},"image":{"alertUrl":"Podaj adres obrazka.","alt":"Tekst zastępczy","border":"Obramowanie","btnUpload":"Wyślij","button2Img":"Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykłego obrazka?","hSpace":"Odstęp poziomy","img2Button":"Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?","infoTab":"Informacje o obrazku","linkTab":"Hiperłącze","lockRatio":"Zablokuj proporcje","menu":"Właściwości obrazka","resetSize":"Przywróć rozmiar","title":"Właściwości obrazka","titleButton":"Właściwości przycisku graficznego","upload":"Wyślij","urlMissing":"Podaj adres URL obrazka.","vSpace":"Odstęp pionowy","validateBorder":"Wartość obramowania musi być liczbą całkowitą.","validateHSpace":"Wartość odstępu poziomego musi być liczbą całkowitą.","validateVSpace":"Wartość odstępu pionowego musi być liczbą całkowitą."},"fakeobjects":{"anchor":"Kotwica","flash":"Animacja Flash","hiddenfield":"Pole ukryte","iframe":"IFrame","unknown":"Nieznany obiekt"},"link":{"acccessKey":"Klawisz dostępu","advanced":"Zaawansowane","advisoryContentType":"Typ MIME obiektu docelowego","advisoryTitle":"Opis obiektu docelowego","anchor":{"toolbar":"Wstaw/edytuj kotwicę","menu":"Właściwości kotwicy","title":"Właściwości kotwicy","name":"Nazwa kotwicy","errorName":"Wpisz nazwę kotwicy","remove":"Usuń kotwicę"},"anchorId":"Wg identyfikatora","anchorName":"Wg nazwy","charset":"Kodowanie znaków obiektu docelowego","cssClasses":"Nazwa klasy CSS","emailAddress":"Adres e-mail","emailBody":"Treść","emailSubject":"Temat","id":"Id","info":"Informacje ","langCode":"Kod języka","langDir":"Kierunek tekstu","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","menu":"Edytuj odnośnik","name":"Nazwa","noAnchors":"(W dokumencie nie zdefiniowano żadnych kotwic)","noEmail":"Podaj adres e-mail","noUrl":"Podaj adres URL","other":"<inny>","popupDependent":"Okno zależne (Netscape)","popupFeatures":"Właściwości wyskakującego okna","popupFullScreen":"Pełny ekran (IE)","popupLeft":"Pozycja w poziomie","popupLocationBar":"Pasek adresu","popupMenuBar":"Pasek menu","popupResizable":"Skalowalny","popupScrollBars":"Paski przewijania","popupStatusBar":"Pasek statusu","popupToolbar":"Pasek narzędzi","popupTop":"Pozycja w pionie","rel":"Relacja","selectAnchor":"Wybierz kotwicę","styles":"Styl","tabIndex":"Indeks kolejności","target":"Obiekt docelowy","targetFrame":"<ramka>","targetFrameName":"Nazwa ramki docelowej","targetPopup":"<wyskakujące okno>","targetPopupName":"Nazwa wyskakującego okna","title":"Odnośnik","toAnchor":"Odnośnik wewnątrz strony (kotwica)","toEmail":"Adres e-mail","toUrl":"Adres URL","toolbar":"Wstaw/edytuj odnośnik","type":"Typ odnośnika","unlink":"Usuń odnośnik","upload":"Wyślij"},"magicline":{"title":"Wstaw nowy paragraf"},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"pastetext":{"button":"Wklej jako czysty tekst","title":"Wklej jako czysty tekst"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyścić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie było możliwe z powodu wystąpienia błędu.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"removeformat":{"toolbar":"Usuń formatowanie"},"sourcearea":{"toolbar":"Źródło dokumentu"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"stylescombo":{"label":"Styl","panelTitle":"Style formatujące","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"table":{"border":"Grubość obramowania","caption":"Tytuł","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkę z lewej","insertAfter":"Wstaw komórkę z prawej","deleteCell":"Usuń komórki","merge":"Połącz komórki","mergeRight":"Połącz z komórką z prawej","mergeDown":"Połącz z komórką poniżej","splitHorizontal":"Podziel komórkę poziomo","splitVertical":"Podziel komórkę pionowo","title":"Właściwości komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tła","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbą.","invalidHeight":"Wysokość komórki musi być liczbą.","invalidRowSpan":"Scalenie wierszy musi być liczbą całkowitą.","invalidColSpan":"Scalenie komórek musi być liczbą całkowitą.","chooseColor":"Wybierz"},"cellPad":"Dopełnienie komórek","cellSpace":"Odstęp pomiędzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnę z lewej","insertAfter":"Wstaw kolumnę z prawej","deleteColumn":"Usuń kolumny"},"columns":"Liczba kolumn","deleteTable":"Usuń tabelę","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","invalidBorder":"Wartość obramowania musi być liczbą.","invalidCellPadding":"Dopełnienie komórek musi być liczbą dodatnią.","invalidCellSpacing":"Odstęp pomiędzy komórkami musi być liczbą dodatnią.","invalidCols":"Liczba kolumn musi być większa niż 0.","invalidHeight":"Wysokość tabeli musi być liczbą.","invalidRows":"Liczba wierszy musi być większa niż 0.","invalidWidth":"Szerokość tabeli musi być liczbą.","menu":"Właściwości tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"Usuń wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"Właściwości tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokości"},"undo":{"redo":"Ponów","undo":"Cofnij"},"justify":{"block":"Wyjustuj","center":"Wyśrodkuj","left":"Wyrównaj do lewej","right":"Wyrównaj do prawej"},"placeholder":{"title":"Właściwości wypełniacza","toolbar":"Utwórz wypełniacz","text":"Tekst wypełnienia","edit":"Edytuj wypełnienie","textMissing":"Wypełnienie musi posiadać jakiś tekst."},"showblocks":{"toolbar":"Pokaż bloki"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/pt-br.js b/core/misc/ckeditor/lang/pt-br.js
deleted file mode 100644
index 908ee68..0000000
--- a/core/misc/ckeditor/lang/pt-br.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['pt-br']={"dir":"ltr","editor":"Editor de Texto","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Localizar no Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar ao Servidor","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão de Opção","textField":"Caixa de Texto","textarea":"Área de Texto","hiddenField":"Campo Oculto","button":"Botão","select":"Caixa de Listagem","imageButton":"Botão de Imagem","notSet":"<não ajustado>","id":"Id","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para Direita (LTR)","langDirRtl":"Direita para Esquerda (RTL)","langCode":"Idioma","longDescr":"Descrição da URL","cssClass":"Classe de CSS","advisoryTitle":"Título","cssStyle":"Estilos","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Visualizar","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um número.","confirmNewPage":"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?","confirmCancel":"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela de Cima (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Pai (_parent)","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centralizado","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidCssLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px or %).","invalidInlineStyle":"O valor válido para estilo deve conter uma ou mais tuplas no formato \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"},"about":{"copy":"Copyright &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Verifique o $1 para obter ajuda.","moreInfo":"Para informações sobre a licença por favor visite o nosso site:","title":"Sobre o CKEditor","userGuide":"Guia do Usuário do CKEditor"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"blockquote":{"toolbar":"Citação"},"clipboard":{"copy":"Copiar","copyError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).","cut":"Recortar","cutError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Área para Colar","pasteMsg":"Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.","securityMsg":"As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.","title":"Colar"},"contextmenu":{"options":"Opções Menu de Contexto"},"toolbar":{"toolbarCollapse":"Diminuir Barra de Ferramentas","toolbarExpand":"Aumentar Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Clipboard/Desfazer","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Paragrafo","links":"Links","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barra de Ferramentas do Editor"},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"format":{"label":"Formatação","panelTitle":"Formatação","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"image":{"alertUrl":"Por favor, digite a URL da imagem.","alt":"Texto Alternativo","border":"Borda","btnUpload":"Enviar para o Servidor","button2Img":"Deseja transformar o botão de imagem em uma imagem comum?","hSpace":"HSpace","img2Button":"Deseja transformar a imagem em um botão de imagem?","infoTab":"Informações da Imagem","linkTab":"Link","lockRatio":"Travar Proporções","menu":"Formatar Imagem","resetSize":"Redefinir para o Tamanho Original","title":"Formatar Imagem","titleButton":"Formatar Botão de Imagem","upload":"Enviar","urlMissing":"URL da imagem está faltando.","vSpace":"VSpace","validateBorder":"A borda deve ser um número inteiro.","validateHSpace":"O HSpace deve ser um número inteiro.","validateVSpace":"O VSpace deve ser um número inteiro."},"fakeobjects":{"anchor":"Âncora","flash":"Animação em Flash","hiddenfield":"Campo Oculto","iframe":"IFrame","unknown":"Objeto desconhecido"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":"Inserir/Editar Âncora","menu":"Formatar Âncora","title":"Formatar Âncora","name":"Nome da Âncora","errorName":"Por favor, digite o nome da âncora","remove":"Remover Âncora"},"anchorId":"Id da âncora","anchorName":"Nome da âncora","charset":"Charset do Link","cssClasses":"Classe de CSS","emailAddress":"Endereço E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Assunto da Mensagem","id":"Id","info":"Informações","langCode":"Direção do idioma","langDir":"Direção do idioma","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","menu":"Editar Link","name":"Nome","noAnchors":"(Não há âncoras no documento)","noEmail":"Por favor, digite o endereço de e-mail","noUrl":"Por favor, digite o endereço do Link","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Propriedades da Janela Pop-up","popupFullScreen":"Modo Tela Cheia (IE)","popupLeft":"Esquerda","popupLocationBar":"Barra de Endereços","popupMenuBar":"Barra de Menus","popupResizable":"Redimensionável","popupScrollBars":"Barras de Rolagem","popupStatusBar":"Barra de Status","popupToolbar":"Barra de Ferramentas","popupTop":"Topo","rel":"Tipo de Relação","selectAnchor":"Selecione uma âncora","styles":"Estilos","tabIndex":"Índice de Tabulação","target":"Destino","targetFrame":"<frame>","targetFrameName":"Nome do Frame de Destino","targetPopup":"<janela popup>","targetPopupName":"Nome da Janela Pop-up","title":"Editar Link","toAnchor":"Âncora nesta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Link","type":"Tipo de hiperlink","unlink":"Remover Link","upload":"Enviar ao Servidor"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"pastetext":{"button":"Colar como Texto sem Formatação","title":"Colar como Texto sem Formatação"},"pastefromword":{"confirmCleanup":"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?","error":"Não foi possível limpar os dados colados devido a um erro interno","title":"Colar do Word","toolbar":"Colar do Word"},"removeformat":{"toolbar":"Remover Formatação"},"sourcearea":{"toolbar":"Código-Fonte"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"table":{"border":"Borda","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula a esquerda","insertAfter":"Inserir célula a direita","deleteCell":"Remover Células","merge":"Mesclar Células","mergeRight":"Mesclar com célula a direita","mergeDown":"Mesclar com célula abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas cobertas","colSpan":"Colunas cobertas","wordWrap":"Quebra de palavra","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Patamar de alinhamento","bgColor":"Cor de fundo","borderColor":"Cor das bordas","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula tem que ser um número.","invalidHeight":"A altura da célula tem que ser um número.","invalidRowSpan":"Linhas cobertas tem que ser um número inteiro.","invalidColSpan":"Colunas cobertas tem que ser um número inteiro.","chooseColor":"Escolher"},"cellPad":"Margem interna","cellSpace":"Espaçamento","column":{"menu":"Coluna","insertBefore":"Inserir coluna a esquerda","insertAfter":"Inserir coluna a direita","deleteColumn":"Remover Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalho","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","invalidBorder":"O tamanho da borda tem que ser um número.","invalidCellPadding":"A margem interna das células tem que ser um número.","invalidCellSpacing":"O espaçamento das células tem que ser um número.","invalidCols":"O número de colunas tem que ser um número maior que 0.","invalidHeight":"A altura da tabela tem que ser um número.","invalidRows":"O número de linhas tem que ser um número maior que 0.","invalidWidth":"A largura da tabela tem que ser um número.","menu":"Formatar Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha acima","insertAfter":"Inserir linha abaixo","deleteRow":"Remover Linhas"},"rows":"Linhas","summary":"Resumo","title":"Formatar Tabela","toolbar":"Tabela","widthPc":"%","widthPx":"pixels","widthUnit":"unidade largura"},"undo":{"redo":"Refazer","undo":"Desfazer"},"justify":{"block":"Justificado","center":"Centralizar","left":"Alinhar Esquerda","right":"Alinhar Direita"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Mostrar blocos de código"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/pt.js b/core/misc/ckeditor/lang/pt.js
deleted file mode 100644
index 781851f..0000000
--- a/core/misc/ckeditor/lang/pt.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['pt']={"dir":"ltr","editor":"Editor de texto enriquecido","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Navegar no Servidor","url":"URL","protocol":"Protocolo","upload":"Carregar","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Verificação","radio":"Botão de Opção","textField":"Campo de Texto","textarea":"Área de Texto","hiddenField":"Campo Escondido","button":"Botão","select":"Caixa de Combinação","imageButton":"Botão de Imagem","notSet":"<Não definido>","id":"Id","name":"Nome","langDir":"Orientação de idioma","langDirLtr":"Esquerda à Direita (LTR)","langDirRtl":"Direita a Esquerda (RTL)","langCode":"Código de Idioma","longDescr":"Descrição Completa do URL","cssClass":"Classes de Estilo de Folhas Classes","advisoryTitle":"Título","cssStyle":"Estilo","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Opções","target":"Alvo","targetNew":"Nova Janela (_blank)","targetTop":"Janela superior (_top)","targetSelf":"Mesma janela (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Esquerda à Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes de Estilo de Folhas Classes","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centrado","alignTop":"Topo","alignMiddle":"Centro","alignBottom":"Fundo","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à Linha","superscript":"Inferior à Linha","underline":"Sublinhado"},"blockquote":{"toolbar":"Bloco de citação"},"clipboard":{"copy":"Copiar","copyError":"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Paste Area","pasteMsg":"Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Colar"},"contextmenu":{"options":"Menu de opções de contexto"},"toolbar":{"toolbarCollapse":"Colapsar Barra","toolbarExpand":"Expandir Barra","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barras de ferramentas"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"indent":{"indent":"Aumentar Avanço","outdent":"Diminuir Avanço"},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"image":{"alertUrl":"Por favor introduza o URL da imagem","alt":"Texto Alternativo","border":"Limite","btnUpload":"Enviar para o Servidor","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Esp.Horiz","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Informação da Imagem","linkTab":"Hiperligação","lockRatio":"Proporcional","menu":"Propriedades da Imagem","resetSize":"Tamanho Original","title":"Propriedades da Imagem","titleButton":"Propriedades do Botão de imagens","upload":"Carregar","urlMissing":"Image source URL is missing.","vSpace":"Esp.Vert","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":" Inserir/Editar Âncora","flash":"Flash Animation","hiddenfield":"Campo Escondido","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":" Inserir/Editar Âncora","menu":"Propriedades da Âncora","title":"Propriedades da Âncora","name":"Nome da Âncora","errorName":"Por favor, introduza o nome da âncora","remove":"Remove Anchor"},"anchorId":"Por ID de elemento","anchorName":"Por Nome de Referência","charset":"Fonte de caracteres vinculado","cssClasses":"Classes de Estilo de Folhas Classes","emailAddress":"Endereço de E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Título de Mensagem","id":"ID","info":"Informação de Hiperligação","langCode":"Orientação de idioma","langDir":"Orientação de idioma","langDirLTR":"Esquerda à Direita (LTR)","langDirRTL":"Direita a Esquerda (RTL)","menu":"Editar Hiperligação","name":"Nome","noAnchors":"(Não há referências disponíveis no documento)","noEmail":"Por favor introduza o endereço de e-mail","noUrl":"Por favor introduza a hiperligação URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características de Janela de Popup","popupFullScreen":"Janela Completa (IE)","popupLeft":"Posição Esquerda","popupLocationBar":"Barra de localização","popupMenuBar":"Barra de Menu","popupResizable":"Redimensionável","popupScrollBars":"Barras de deslocamento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Ferramentas","popupTop":"Posição Direita","rel":"Relação","selectAnchor":"Seleccionar una referência","styles":"Estilo","tabIndex":"Índice de Tubulação","target":"Destino","targetFrame":"<Frame>","targetFrameName":"Nome do Frame Destino","targetPopup":"<Janela de popup>","targetPopupName":"Nome da Janela de Popup","title":"Hiperligação","toAnchor":"Referência a esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Hiperligação","type":"Tipo de Hiperligação","unlink":"Eliminar Hiperligação","upload":"Carregar"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"pastetext":{"button":"Colar como Texto Simples","title":"Colar como Texto Simples"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Colar do Word","toolbar":"Colar do Word"},"removeformat":{"toolbar":"Eliminar Formato"},"sourcearea":{"toolbar":"Fonte"},"specialchar":{"options":"Special Character Options","title":"Seleccione um caracter especial","toolbar":"Inserir Caracter Especial"},"stylescombo":{"label":"Estilo","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Tamanho do Limite","caption":"Título","cell":{"menu":"Célula","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Eliminar Célula","merge":"Unir Células","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Esp. interior","cellSpace":"Esp. e/células","column":{"menu":"Coluna","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Eliminar Coluna"},"columns":"Colunas","deleteTable":"Eliminar Tabela","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"Nenhum","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Propriedades da Tabela","row":{"menu":"Linha","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Eliminar Linhas"},"rows":"Linhas","summary":"Sumário","title":"Propriedades da Tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"pixeis","widthUnit":"width unit"},"undo":{"redo":"Repetir","undo":"Anular"},"justify":{"block":"Justificado","center":"Alinhar ao Centro","left":"Alinhar à Esquerda","right":"Alinhar à Direita"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Exibir blocos"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ro.js b/core/misc/ckeditor/lang/ro.js
deleted file mode 100644
index 189ce53..0000000
--- a/core/misc/ckeditor/lang/ro.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ro']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoieşte server","url":"URL","protocol":"Protocol","upload":"Încarcă","uploadSubmit":"Trimite la server","image":"Imagine","flash":"Flash","form":"Formular (Form)","checkbox":"Bifă (Checkbox)","radio":"Buton radio (RadioButton)","textField":"Câmp text (TextField)","textarea":"Suprafaţă text (Textarea)","hiddenField":"Câmp ascuns (HiddenField)","button":"Buton","select":"Câmp selecţie (SelectionField)","imageButton":"Buton imagine (ImageButton)","notSet":"<nesetat>","id":"Id","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"stânga-dreapta (LTR)","langDirRtl":"dreapta-stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea lungă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Trage pentru a redimensiona","generalTab":"General","advancedTab":"Avansat","validateNumberFailed":"Această valoare nu este un număr.","confirmNewPage":"Orice modificări nesalvate ale acestui conținut, vor fi pierdute. Sigur doriți încărcarea unei noi pagini?","confirmCancel":"Câteva opțiuni au fost schimbate. Sigur doriți să închideți dialogul?","options":"Opțiuni","target":"Țintă","targetNew":"Fereastră nouă (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"În aceeași fereastră (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Stânga spre Dreapta (LTR)","langDirRTL":"Dreapta spre Stânga (RTL)","styles":"Stil","cssClasses":"Stylesheet Classes","width":"Lăţime","height":"Înălţime","align":"Aliniere","alignLeft":"Mărește Bara","alignRight":"Dreapta","alignCenter":"Centru","alignTop":"Sus","alignMiddle":"Mijloc","alignBottom":"Jos","invalidValue":"Invalid value.","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"blockquote":{"toolbar":"Citat"},"clipboard":{"copy":"Copiază","copyError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).","cut":"Taie","cutError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).","paste":"Adaugă","pasteArea":"Suprafața de adăugare","pasteMsg":"Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<strong>Ctrl/Cmd+V</strong>) şi apăsaţi OK","securityMsg":"Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.","title":"Adaugă"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"toolbar":{"toolbarCollapse":"Micșorează Bara","toolbarExpand":"Mărește Bara","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editează bara de unelte"},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"%1 element"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"format":{"label":"Formatare","panelTitle":"Formatare","tag_address":"Adresă","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatat"},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"image":{"alertUrl":"Vă rugăm să scrieţi URL-ul imaginii","alt":"Text alternativ","border":"Margine","btnUpload":"Trimite la server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Informaţii despre imagine","linkTab":"Link (Legătură web)","lockRatio":"Păstrează proporţiile","menu":"Proprietăţile imaginii","resetSize":"Resetează mărimea","title":"Proprietăţile imaginii","titleButton":"Proprietăţi buton imagine (Image Button)","upload":"Încarcă","urlMissing":"Sursa URL a imaginii lipsește.","vSpace":"VSpace","validateBorder":"Bordura trebuie să fie un număr întreg.","validateHSpace":"Hspace trebuie să fie un număr întreg.","validateVSpace":"Vspace trebuie să fie un număr întreg."},"fakeobjects":{"anchor":"Inserează/Editează ancoră","flash":"Flash Animation","hiddenfield":"Câmp ascuns (HiddenField)","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Tasta de acces","advanced":"Avansat","advisoryContentType":"Tipul consultativ al titlului","advisoryTitle":"Titlul consultativ","anchor":{"toolbar":"Inserează/Editează ancoră","menu":"Proprietăţi ancoră","title":"Proprietăţi ancoră","name":"Numele ancorei","errorName":"Vă rugăm scrieţi numele ancorei","remove":"Elimină ancora"},"anchorId":"după Id-ul elementului","anchorName":"după numele ancorei","charset":"Setul de caractere al resursei legate","cssClasses":"Clasele cu stilul paginii (CSS)","emailAddress":"Adresă de e-mail","emailBody":"Opțiuni Meniu Contextual","emailSubject":"Subiectul mesajului","id":"Id","info":"Informaţii despre link (Legătură web)","langCode":"Direcţia cuvintelor","langDir":"Direcţia cuvintelor","langDirLTR":"stânga-dreapta (LTR)","langDirRTL":"dreapta-stânga (RTL)","menu":"Editează Link","name":"Nume","noAnchors":"(Nicio ancoră disponibilă în document)","noEmail":"Vă rugăm să scrieţi adresa de e-mail","noUrl":"Vă rugăm să scrieţi URL-ul","other":"<alt>","popupDependent":"Dependent (Netscape)","popupFeatures":"Proprietăţile ferestrei popup","popupFullScreen":"Tot ecranul (Full Screen)(IE)","popupLeft":"Poziţia la stânga","popupLocationBar":"Bara de locaţie","popupMenuBar":"Bara de meniu","popupResizable":"Redimensionabil","popupScrollBars":"Bare de derulare","popupStatusBar":"Bara de status","popupToolbar":"Bara de opţiuni","popupTop":"Poziţia la dreapta","rel":"Relație","selectAnchor":"Selectaţi o ancoră","styles":"Stil","tabIndex":"Indexul tabului","target":"Ţintă (Target)","targetFrame":"<frame>","targetFrameName":"Numele frameului ţintă","targetPopup":"<fereastra popup>","targetPopupName":"Numele ferestrei popup","title":"Link (Legătură web)","toAnchor":"Ancoră în această pagină","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserează/Editează link (legătură web)","type":"Tipul link-ului (al legăturii web)","unlink":"Înlătură link (legătură web)","upload":"Încarcă"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","title":"Adaugă ca text simplu (Plain Text)"},"pastefromword":{"confirmCleanup":"Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?","error":"Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne","title":"Adaugă din Word","toolbar":"Adaugă din Word"},"removeformat":{"toolbar":"Înlătură formatarea"},"sourcearea":{"toolbar":"Sursa"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"stylescombo":{"label":"Stil","panelTitle":"Formatarea stilurilor","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Mărimea marginii","caption":"Titlu (Caption)","cell":{"menu":"Celulă","insertBefore":"Inserează celulă înainte","insertAfter":"Inserează celulă după","deleteCell":"Şterge celule","merge":"Uneşte celule","mergeRight":"Uneşte la dreapta","mergeDown":"Uneşte jos","splitHorizontal":"Împarte celula pe orizontală","splitVertical":"Împarte celula pe verticală","title":"Proprietăți celulă","cellType":"Tipul celulei","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Aliniament orizontal","vAlign":"Aliniament vertical","alignBaseline":"Baseline","bgColor":"Culoare fundal","borderColor":"Culoare bordură","data":"Data","header":"Antet","yes":"Da","no":"Nu","invalidWidth":"Lățimea celulei trebuie să fie un număr.","invalidHeight":"Înălțimea celulei trebuie să fie un număr.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Alege"},"cellPad":"Spaţiu în cadrul celulei","cellSpace":"Spaţiu între celule","column":{"menu":"Coloană","insertBefore":"Inserează coloană înainte","insertAfter":"Inserează coloană după","deleteColumn":"Şterge celule"},"columns":"Coloane","deleteTable":"Şterge tabel","headers":"Antente","headersBoth":"Ambele","headersColumn":"Prima coloană","headersNone":"Nimic","headersRow":"Primul rând","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Table height must be a number.","invalidRows":"Numărul rândurilor trebuie să fie mai mare decât 0.","invalidWidth":"Lățimea tabelului trebuie să fie un număr.","menu":"Proprietăţile tabelului","row":{"menu":"Rând","insertBefore":"Inserează rând înainte","insertAfter":"Inserează rând după","deleteRow":"Şterge rânduri"},"rows":"Rânduri","summary":"Rezumat","title":"Proprietăţile tabelului","toolbar":"Tabel","widthPc":"procente","widthPx":"pixeli","widthUnit":"unitate lățime"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"justify":{"block":"Aliniere în bloc (Block Justify)","center":"Aliniere centrală","left":"Aliniere la stânga","right":"Aliniere la dreapta"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Arată blocurile"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ru.js b/core/misc/ckeditor/lang/ru.js
deleted file mode 100644
index 932a8d0..0000000
--- a/core/misc/ckeditor/lang/ru.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ru']={"dir":"ltr","editor":"Визуальный редактор текста","common":{"editorHelp":"нажмите ALT-0 для открытия справки","browseServer":"Выбор на сервере","url":"Ссылка","protocol":"Протокол","upload":"Загрузка","uploadSubmit":"Загрузить на сервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"Флаговая кнопка","radio":"Кнопка выбора","textField":"Текстовое поле","textarea":"Многострочное текстовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Список выбора","imageButton":"Изображение-кнопка","notSet":"<не указано>","id":"Идентификатор","name":"Имя","langDir":"Направление текста","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код языка","longDescr":"Длинное описание ссылки","cssClass":"Класс CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"Предпросмотр","resize":"Перетащите для изменения размера","generalTab":"Основное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не является числом.","confirmNewPage":"Несохранённые изменения будут потеряны! Вы действительно желаете перейти на другую страницу?","confirmCancel":"Некоторые параметры были изменены. Вы уверены, что желаете закрыть без сохранения?","options":"Параметры","target":"Цель","targetNew":"Новое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"Родительское окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"Классы CSS","width":"Ширина","height":"Высота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"По верху","alignMiddle":"По середине","alignBottom":"По низу","invalidValue":"Недопустимое значение.","invalidHeight":"Высота задается числом.","invalidWidth":"Ширина задается числом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым числом. Допускается указание единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное для стиля элемента, должно состоять из одной или нескольких пар данных в формате \"параметр : значение\", разделённых точкой с запятой.","cssLengthTooltip":"Введите значение в пикселях, либо число с корректной единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоступно</span>"},"about":{"copy":"Copyright &copy; $1. Все права защищены.","dlgTitle":"О CKEditor","help":"$1 содержит подробную справку по использованию.","moreInfo":"Для получения информации о лицензии, пожалуйста, перейдите на наш сайт:","title":"О CKEditor","userGuide":"Руководство пользователя CKEditor"},"basicstyles":{"bold":"Полужирный","italic":"Курсив","strike":"Зачеркнутый","subscript":"Подстрочный индекс","superscript":"Надстрочный индекс","underline":"Подчеркнутый"},"blockquote":{"toolbar":"Цитата"},"clipboard":{"copy":"Копировать","copyError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по копированию текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"Настройки безопасности вашего браузера не разрешают редактору выполнять операции по вырезке текста. Пожалуйста, используйте для этого клавиатуру (Ctrl/Cmd+X).","paste":"Вставить","pasteArea":"Зона для вставки","pasteMsg":"Пожалуйста, вставьте текст в зону ниже, используя клавиатуру (<strong>Ctrl/Cmd+V</strong>) и нажмите кнопку \"OK\".","securityMsg":"Настройки безопасности вашего браузера не разрешают редактору напрямую обращаться к буферу обмена. Вы должны вставить текст снова в это окно.","title":"Вставить"},"contextmenu":{"options":"Параметры контекстного меню"},"toolbar":{"toolbarCollapse":"Свернуть панель инструментов","toolbarExpand":"Развернуть панель инструментов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена действий","editing":"Корректировка","forms":"Формы","basicstyles":"Простые стили","paragraph":"Абзац","links":"Ссылки","insert":"Вставка","styles":"Стили","colors":"Цвета","tools":"Инструменты"},"toolbars":"Панели инструментов редактора"},"elementspath":{"eleLabel":"Путь элементов","eleTitle":"Элемент %1"},"list":{"bulletedlist":"Вставить / удалить маркированный список","numberedlist":"Вставить / удалить нумерованный список"},"indent":{"indent":"Увеличить отступ","outdent":"Уменьшить отступ"},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"Адрес","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"horizontalrule":{"toolbar":"Вставить горизонтальную линию"},"image":{"alertUrl":"Пожалуйста, введите ссылку на изображение","alt":"Альтернативный текст","border":"Граница","btnUpload":"Загрузить на сервер","button2Img":"Вы желаете преобразовать это изображение-кнопку в обычное изображение?","hSpace":"Гориз. отступ","img2Button":"Вы желаете преобразовать это обычное изображение в изображение-кнопку?","infoTab":"Данные об изображении","linkTab":"Ссылка","lockRatio":"Сохранять пропорции","menu":"Свойства изображения","resetSize":"Вернуть обычные размеры","title":"Свойства изображения","titleButton":"Свойства изображения-кнопки","upload":"Загрузить","urlMissing":"Не указана ссылка на изображение.","vSpace":"Вертик. отступ","validateBorder":"Размер границ должен быть задан числом.","validateHSpace":"Горизонтальный отступ должен быть задан числом.","validateVSpace":"Вертикальный отступ должен быть задан числом."},"fakeobjects":{"anchor":"Якорь","flash":"Flash анимация","hiddenfield":"Скрытое поле","iframe":"iFrame","unknown":"Неизвестный объект"},"link":{"acccessKey":"Клавиша доступа","advanced":"Дополнительно","advisoryContentType":"Тип содержимого","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставить / редактировать якорь","menu":"Изменить якорь","title":"Свойства якоря","name":"Имя якоря","errorName":"Пожалуйста, введите имя якоря","remove":"Удалить якорь"},"anchorId":"По идентификатору","anchorName":"По имени","charset":"Кодировка ресурса","cssClasses":"Классы CSS","emailAddress":"Email адрес","emailBody":"Текст сообщения","emailSubject":"Тема сообщения","id":"Идентификатор","info":"Информация о ссылке","langCode":"Код языка","langDir":"Направление текста","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","menu":"Редактировать ссылку","name":"Имя","noAnchors":"(В документе нет ни одного якоря)","noEmail":"Пожалуйста, введите email адрес","noUrl":"Пожалуйста, введите ссылку","other":"<другой>","popupDependent":"Зависимое (Netscape)","popupFeatures":"Параметры всплывающего окна","popupFullScreen":"Полноэкранное (IE)","popupLeft":"Отступ слева","popupLocationBar":"Панель адреса","popupMenuBar":"Панель меню","popupResizable":"Изменяемый размер","popupScrollBars":"Полосы прокрутки","popupStatusBar":"Строка состояния","popupToolbar":"Панель инструментов","popupTop":"Отступ сверху","rel":"Отношение","selectAnchor":"Выберите якорь","styles":"Стиль","tabIndex":"Последовательность перехода","target":"Цель","targetFrame":"<фрейм>","targetFrameName":"Имя целевого фрейма","targetPopup":"<всплывающее окно>","targetPopupName":"Имя всплывающего окна","title":"Ссылка","toAnchor":"Ссылка на якорь в тексте","toEmail":"Email","toUrl":"Ссылка","toolbar":"Вставить/Редактировать ссылку","type":"Тип ссылки","unlink":"Убрать ссылку","upload":"Загрузка"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"pastetext":{"button":"Вставить только текст","title":"Вставить только текст"},"pastefromword":{"confirmCleanup":"Текст, который вы желаете вставить, по всей видимости, был скопирован из Word. Следует ли очистить его перед вставкой?","error":"Невозможно очистить вставленные данные из-за внутренней ошибки","title":"Вставить из Word","toolbar":"Вставить из Word"},"removeformat":{"toolbar":"Убрать форматирование"},"sourcearea":{"toolbar":"Источник"},"specialchar":{"options":"Выбор специального символа","title":"Выберите специальный символ","toolbar":"Вставить специальный символ"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматирования","panelTitle1":"Стили блока","panelTitle2":"Стили элемента","panelTitle3":"Стили объекта"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Вставить ячейку слева","insertAfter":"Вставить ячейку справа","deleteCell":"Удалить ячейки","merge":"Объединить ячейки","mergeRight":"Объединить с правой","mergeDown":"Объединить с нижней","splitHorizontal":"Разделить ячейку по горизонтали","splitVertical":"Разделить ячейку по вертикали","title":"Свойства ячейки","cellType":"Тип ячейки","rowSpan":"Объединяет строк","colSpan":"Объединяет колонок","wordWrap":"Перенос по словам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Нет","invalidWidth":"Ширина ячейки должна быть числом.","invalidHeight":"Высота ячейки должна быть числом.","invalidRowSpan":"Количество объединяемых строк должно быть задано числом.","invalidColSpan":"Количество объединяемых колонок должно быть задано числом.","chooseColor":"Выберите"},"cellPad":"Внутренний отступ ячеек","cellSpace":"Внешний отступ ячеек","column":{"menu":"Колонка","insertBefore":"Вставить колонку слева","insertAfter":"Вставить колонку справа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и слева","headersColumn":"Левая колонка","headersNone":"Без заголовков","headersRow":"Верхняя строка","invalidBorder":"Размер границ должен быть числом.","invalidCellPadding":"Внутренний отступ ячеек (cellpadding) должен быть числом.","invalidCellSpacing":"Внешний отступ ячеек (cellspacing) должен быть числом.","invalidCols":"Количество столбцов должно быть больше 0.","invalidHeight":"Высота таблицы должна быть числом.","invalidRows":"Количество строк должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть числом.","menu":"Свойства таблицы","row":{"menu":"Строка","insertBefore":"Вставить строку сверху","insertAfter":"Вставить строку снизу","deleteRow":"Удалить строки"},"rows":"Строки","summary":"Итоги","title":"Свойства таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикселей","widthUnit":"единица измерения"},"undo":{"redo":"Повторить","undo":"Отменить"},"justify":{"block":"По ширине","center":"По центру","left":"По левому краю","right":"По правому краю"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Отображать блоки"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/sk.js b/core/misc/ckeditor/lang/sk.js
deleted file mode 100644
index f73b2d4..0000000
--- a/core/misc/ckeditor/lang/sk.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sk']={"dir":"ltr","editor":"Editor formátovaného textu","common":{"editorHelp":"Stlačte ALT 0 pre nápovedu","browseServer":"Prechádzať server","url":"URL","protocol":"Protokol","upload":"Odoslať","uploadSubmit":"Odoslať na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"Zaškrtávacie políčko","radio":"Prepínač","textField":"Textové pole","textarea":"Textová oblasť","hiddenField":"Skryté pole","button":"Tlačidlo","select":"Rozbaľovací zoznam","imageButton":"Obrázkové tlačidlo","notSet":"<nenastavené>","id":"Id","name":"Meno","langDir":"Orientácia jazyka","langDirLtr":"Zľava doprava (LTR)","langDirRtl":"Sprava doľava (RTL)","langCode":"Kód jazyka","longDescr":"Dlhý popis URL","cssClass":"Trieda štýlu","advisoryTitle":"Pomocný titulok","cssStyle":"Štýl","ok":"OK","cancel":"Zrušiť","close":"Zatvorit","preview":"Náhľad","resize":"Zmeniť veľkosť","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nieje číslo.","confirmNewPage":"Prajete si načítat novú stránku? Všetky neuložené zmeny budú stratené. ","confirmCancel":"Niektore možnosti boli zmenené. Naozaj chcete zavrieť okno?","options":"Možnosti","target":"Cieľ","targetNew":"Nové okno (_blank)","targetTop":"Najvrchnejšie okno (_top)","targetSelf":"To isté okno (_self)","targetParent":"Rodičovské okno (_parent)","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","styles":"Štýl","cssClasses":"Triedy štýlu","width":"Šírka","height":"Výška","align":"Zarovnanie","alignLeft":"Vľavo","alignRight":"Vpravo","alignCenter":"Na stred","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byť číslo.","invalidWidth":"Šírka musí byť číslo.","invalidCssLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).","invalidHtmlLength":"Špecifikovaná hodnota pre pole \"%1\" musí byť kladné číslo s alebo bez platnej HTML mernej jednotky (px alebo %).","invalidInlineStyle":"Zadaná hodnota pre inline štýl musí pozostávať s jedného, alebo viac dvojíc formátu \"názov: hodnota\", oddelených bodkočiarkou.","cssLengthTooltip":"Vložte číslo pre hodnotu v pixeloch alebo číslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>"},"about":{"copy":"Copyright &copy; $1. Všetky práva vyhradené.","dlgTitle":"O CKEditor-e","help":"Zaškrtnite $1 pre pomoc.","moreInfo":"Pre informácie o licenciách, prosíme, navštívte našu web stránku:","title":"O CKEditor-e","userGuide":"Používateľská príručka KCEditor-a"},"basicstyles":{"bold":"Tučné","italic":"Kurzíva","strike":"Prečiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"Podčiarknuté"},"blockquote":{"toolbar":"Citácia"},"clipboard":{"copy":"Kopírovať","copyError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu kopírovania. Prosím, použite na to klávesnicu (Ctrl/Cmd+C).","cut":"Vystrihnúť","cutError":"Bezpečnostné nastavenia Vášho prehliadača nedovoľujú editoru automaticky spustiť operáciu vystrihnutia. Prosím, použite na to klávesnicu (Ctrl/Cmd+X).","paste":"Vložiť","pasteArea":"Miesto pre vloženie","pasteMsg":"Prosím, vložte nasledovný rámček použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlačte OK.","securityMsg":"Kvôli vašim bezpečnostným nastaveniam prehliadača editor nie je schopný pristupovať k vašej schránke na kopírovanie priamo. Vložte to preto do tohto okna.","title":"Vložiť"},"contextmenu":{"options":"Možnosti kontextového menu"},"toolbar":{"toolbarCollapse":"Zbaliť lištu nástrojov","toolbarExpand":"Rozbaliť lištu nástrojov","toolbarGroups":{"document":"Dokument","clipboard":"Schránka pre kopírovanie/Späť","editing":"Upravovanie","forms":"Formuláre","basicstyles":"Základné štýly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložiť","styles":"Štýly","colors":"Farby","tools":"Nástroje"},"toolbars":"Lišty nástrojov editora"},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"list":{"bulletedlist":"Vložiť/Odstrániť zoznam s odrážkami","numberedlist":"Vložiť/Odstrániť číslovaný zoznam"},"indent":{"indent":"Zväčšiť odsadenie","outdent":"Zmenšiť odsadenie"},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normálny (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normálny","tag_pre":"Formátovaný"},"horizontalrule":{"toolbar":"Vložiť vodorovnú čiaru"},"image":{"alertUrl":"Zadajte prosím URL obrázka","alt":"Alternatívny text","border":"Rám (border)","btnUpload":"Odoslať to na server","button2Img":"Chcete zmeniť vybrané obrázkové tlačidlo na jednoduchý obrázok?","hSpace":"H-medzera","img2Button":"Chcete zmeniť vybraný obrázok na obrázkové tlačidlo?","infoTab":"Informácie o obrázku","linkTab":"Odkaz","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","resetSize":"Pôvodná veľkosť","title":"Vlastnosti obrázka","titleButton":"Vlastnosti obrázkového tlačidla","upload":"Nahrať","urlMissing":"Chýba URL zdroja obrázka.","vSpace":"V-medzera","validateBorder":"Rám (border) musí byť celé číslo.","validateHSpace":"H-medzera musí byť celé číslo.","validateVSpace":"V-medzera musí byť celé číslo."},"fakeobjects":{"anchor":"Kotva","flash":"Flash animácia","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámy objekt"},"link":{"acccessKey":"Prístupový kľúč","advanced":"Rozšírené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulok","anchor":{"toolbar":"Kotva","menu":"Upraviť kotvu","title":"Vlastnosti kotvy","name":"Názov kotvy","errorName":"Zadajte prosím názov kotvy","remove":"Odstrániť kotvu"},"anchorId":"Podľa Id objektu","anchorName":"Podľa mena kotvy","charset":"Priradená znaková sada","cssClasses":"Triedy štýlu","emailAddress":"E-Mailová adresa","emailBody":"Telo správy","emailSubject":"Predmet správy","id":"Id","info":"Informácie o odkaze","langCode":"Orientácia jazyka","langDir":"Orientácia jazyka","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","menu":"Upraviť odkaz","name":"Názov","noAnchors":"(V dokumente nie sú dostupné žiadne kotvy)","noEmail":"Zadajte prosím e-mailovú adresu","noUrl":"Zadajte prosím URL odkazu","other":"<iný>","popupDependent":"Závislosť (Netscape)","popupFeatures":"Vlastnosti vyskakovacieho okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Ľavý okraj","popupLocationBar":"Panel umiestnenia (location bar)","popupMenuBar":"Panel ponuky (menu bar)","popupResizable":"Meniteľná veľkosť (resizable)","popupScrollBars":"Posuvníky (scroll bars)","popupStatusBar":"Stavový riadok (status bar)","popupToolbar":"Panel nástrojov (toolbar)","popupTop":"Horný okraj","rel":"Vzťah (rel)","selectAnchor":"Vybrať kotvu","styles":"Štýl","tabIndex":"Poradie prvku (tab index)","target":"Cieľ","targetFrame":"<rámec>","targetFrameName":"Názov rámu cieľa","targetPopup":"<vyskakovacie okno>","targetPopupName":"Názov vyskakovacieho okna","title":"Odkaz","toAnchor":"Odkaz na kotvu v texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstrániť odkaz","upload":"Nahrať"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximalizovať","minimize":"Minimalizovať"},"pastetext":{"button":"Vložiť ako čistý text","title":"Vložiť ako čistý text"},"pastefromword":{"confirmCleanup":"Vkladaný text vyzerá byť skopírovaný z Wordu. Chcete ho automaticky vyčistiť pred vkladaním?","error":"Nebolo možné vyčistiť vložené dáta kvôli internej chybe","title":"Vložiť z Wordu","toolbar":"Vložiť z Wordu"},"removeformat":{"toolbar":"Odstrániť formátovanie"},"sourcearea":{"toolbar":"Zdroj"},"specialchar":{"options":"Možnosti špeciálneho znaku","title":"Výber špeciálneho znaku","toolbar":"Vložiť špeciálny znak"},"stylescombo":{"label":"Štýly","panelTitle":"Formátovanie štýlov","panelTitle1":"Štýly bloku","panelTitle2":"Vnútroriadkové (inline) štýly","panelTitle3":"Štýly objeku"},"table":{"border":"Šírka rámu (border)","caption":"Popis","cell":{"menu":"Bunka","insertBefore":"Vložiť bunku pred","insertAfter":"Vložiť bunku za","deleteCell":"Vymazať bunky","merge":"Zlúčiť bunky","mergeRight":"Zlúčiť doprava","mergeDown":"Zlúčiť dole","splitHorizontal":"Rozdeliť bunky horizontálne","splitVertical":"Rozdeliť bunky vertikálne","title":"Vlastnosti bunky","cellType":"Typ bunky","rowSpan":"Rozsah riadkov","colSpan":"Rozsah stĺpcov","wordWrap":"Zalomovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná čiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba rámu","data":"Dáta","header":"Hlavička","yes":"Áno","no":"Nie","invalidWidth":"Šírka bunky musí byť číslo.","invalidHeight":"Výška bunky musí byť číslo.","invalidRowSpan":"Rozsah riadkov musí byť celé číslo.","invalidColSpan":"Rozsah stĺpcov musí byť celé číslo.","chooseColor":"Vybrať"},"cellPad":"Odsadenie obsahu (cell padding)","cellSpace":"Vzdialenosť buniek (cell spacing)","column":{"menu":"Stĺpec","insertBefore":"Vložiť stĺpec pred","insertAfter":"Vložiť stĺpec po","deleteColumn":"Zmazať stĺpce"},"columns":"Stĺpce","deleteTable":"Vymazať tabuľku","headers":"Hlavička","headersBoth":"Obe","headersColumn":"Prvý stĺpec","headersNone":"Žiadne","headersRow":"Prvý riadok","invalidBorder":"Širka rámu musí byť číslo.","invalidCellPadding":"Odsadenie v bunkách (cell padding) musí byť kladné číslo.","invalidCellSpacing":"Medzera mädzi bunkami (cell spacing) musí byť kladné číslo.","invalidCols":"Počet stĺpcov musí byť číslo väčšie ako 0.","invalidHeight":"Výška tabuľky musí byť číslo.","invalidRows":"Počet riadkov musí byť číslo väčšie ako 0.","invalidWidth":"Širka tabuľky musí byť číslo.","menu":"Vlastnosti tabuľky","row":{"menu":"Riadok","insertBefore":"Vložiť riadok pred","insertAfter":"Vložiť riadok po","deleteRow":"Vymazať riadky"},"rows":"Riadky","summary":"Prehľad","title":"Vlastnosti tabuľky","toolbar":"Tabuľka","widthPc":"percent","widthPx":"pixelov","widthUnit":"jednotka šírky"},"undo":{"redo":"Znovu","undo":"Späť"},"justify":{"block":"Zarovnať do bloku","center":"Zarovnať na stred","left":"Zarovnať vľavo","right":"Zarovnať vpravo"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Ukázať bloky"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/sl.js b/core/misc/ckeditor/lang/sl.js
deleted file mode 100644
index d1ee5d0..0000000
--- a/core/misc/ckeditor/lang/sl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sl']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Prenesi","uploadSubmit":"Pošlji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Vnosno polje","textarea":"Vnosno območje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustni seznam","imageButton":"Gumb s sliko","notSet":"<ni postavljen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Oznaka jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razred stilne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"Prekliči","close":"Close","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"Splošno","advancedTab":"Napredno","validateNumberFailed":"Ta vrednost ni število.","confirmNewPage":"Vse neshranjene spremembe te vsebine bodo izgubljene. Ali gotovo želiš naložiti novo stran?","confirmCancel":"Nekaj možnosti je bilo spremenjenih. Ali gotovo želiš zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razred stilne predloge","width":"Širina","height":"Višina","align":"Poravnava","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredinsko","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","invalidValue":"Invalid value.","invalidHeight":"Višina mora biti število.","invalidWidth":"Širina mora biti število.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>"},"about":{"copy":"Copyright &copy; $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor","help":"Check $1 for help.","moreInfo":"Za informacijo o licenci prostim obiščite našo spletno stran:","title":"O programu CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Krepko","italic":"Ležeče","strike":"Prečrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"Podčrtano"},"blockquote":{"toolbar":"Citat"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuščajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteArea":"Paste Area","pasteMsg":"Prosim prilepite v sleči okvir s pomočjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.","securityMsg":"Zaradi varnostnih nastavitev vašega brskalnika urejevalnik ne more neposredno dostopati do odložišča. Vsebino odložišča ponovno prilepite v to okno.","title":"Prilepi"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Označen seznam","numberedlist":"Oštevilčen seznam"},"indent":{"indent":"Povečaj zamik","outdent":"Zmanjšaj zamik"},"format":{"label":"Oblika","panelTitle":"Oblika","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"horizontalrule":{"toolbar":"Vstavi vodoravno črto"},"image":{"alertUrl":"Vnesite URL slike","alt":"Nadomestno besedilo","border":"Obroba","btnUpload":"Pošlji na strežnik","button2Img":"Želiš pretvoriti izbrani gumb s sliko v preprosto sliko?","hSpace":"Vodoravni razmik","img2Button":"Želiš pretvoriti izbrano sliko v gumb s sliko?","infoTab":"Podatki o sliki","linkTab":"Povezava","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","resetSize":"Ponastavi velikost","title":"Lastnosti slike","titleButton":"Lastnosti gumba s sliko","upload":"Pošlji","urlMissing":"Manjka vir (URL) slike.","vSpace":"Navpični razmik","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Skrito polje","iframe":"IFrame","unknown":"Neznan objekt"},"link":{"acccessKey":"Vstopno geslo","advanced":"Napredno","advisoryContentType":"Predlagani tip vsebine (content-type)","advisoryTitle":"Predlagani naslov","anchor":{"toolbar":"Vstavi/uredi zaznamek","menu":"Lastnosti zaznamka","title":"Lastnosti zaznamka","name":"Ime zaznamka","errorName":"Prosim vnesite ime zaznamka","remove":"Remove Anchor"},"anchorId":"Po ID-ju elementa","anchorName":"Po imenu zaznamka","charset":"Kodna tabela povezanega vira","cssClasses":"Razred stilne predloge","emailAddress":"Elektronski naslov","emailBody":"Vsebina sporočila","emailSubject":"Predmet sporočila","id":"Id","info":"Podatki o povezavi","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","menu":"Uredi povezavo","name":"Ime","noAnchors":"(V tem dokumentu ni zaznamkov)","noEmail":"Vnesite elektronski naslov","noUrl":"Vnesite URL povezave","other":"<drug>","popupDependent":"Podokno (Netscape)","popupFeatures":"Značilnosti pojavnega okna","popupFullScreen":"Celozaslonska slika (IE)","popupLeft":"Lega levo","popupLocationBar":"Naslovna vrstica","popupMenuBar":"Menijska vrstica","popupResizable":"Spremenljive velikosti","popupScrollBars":"Drsniki","popupStatusBar":"Vrstica stanja","popupToolbar":"Orodna vrstica","popupTop":"Lega na vrhu","rel":"Relationship","selectAnchor":"Izberi zaznamek","styles":"Slog","tabIndex":"Številka tabulatorja","target":"Cilj","targetFrame":"<okvir>","targetFrameName":"Ime ciljnega okvirja","targetPopup":"<pojavno okno>","targetPopupName":"Ime pojavnega okna","title":"Povezava","toAnchor":"Zaznamek na tej strani","toEmail":"Elektronski naslov","toUrl":"URL","toolbar":"Vstavi/uredi povezavo","type":"Vrsta povezave","unlink":"Odstrani povezavo","upload":"Prenesi"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"pastetext":{"button":"Prilepi kot golo besedilo","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"sourcearea":{"toolbar":"Izvorna koda"},"specialchar":{"options":"Special Character Options","title":"Izberi posebni znak","toolbar":"Vstavi posebni znak"},"stylescombo":{"label":"Slog","panelTitle":"Formatting Styles","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"table":{"border":"Velikost obrobe","caption":"Naslov","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"Izbriši celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Druži navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpično","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"Navpična poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Širina celice mora biti število.","invalidHeight":"Višina celice mora biti število.","invalidRowSpan":"Razpon vrstic mora biti celo število.","invalidColSpan":"Razpon stolpcev mora biti celo število.","chooseColor":"Izberi"},"cellPad":"Polnilo med celicami","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"Izbriši stolpce"},"columns":"Stolpci","deleteTable":"Izbriši tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","invalidBorder":"Širina obrobe mora biti število.","invalidCellPadding":"Zamik celic mora biti število","invalidCellSpacing":"Razmik med celicami mora biti število.","invalidCols":"Število stolpcev mora biti večje od 0.","invalidHeight":"Višina tabele mora biti število.","invalidRows":"Število vrstic mora biti večje od 0.","invalidWidth":"Širina tabele mora biti število.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"Izbriši vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"procentov","widthPx":"pik","widthUnit":"width unit"},"undo":{"redo":"Ponovi","undo":"Razveljavi"},"justify":{"block":"Obojestranska poravnava","center":"Sredinska poravnava","left":"Leva poravnava","right":"Desna poravnava"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Prikaži ograde"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/sr-latn.js b/core/misc/ckeditor/lang/sr-latn.js
deleted file mode 100644
index d061afe..0000000
--- a/core/misc/ckeditor/lang/sr-latn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sr-latn']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"Pošalji","uploadSubmit":"Pošalji na server","image":"Slika","flash":"Fleš","form":"Forma","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Izborno polje","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smer jezika","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Pun opis URL","cssClass":"Stylesheet klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Close","preview":"Izgled stranice","resize":"Resize","generalTab":"General","advancedTab":"Napredni tagovi","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Meta","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"Stylesheet klase","width":"Širina","height":"Visina","align":"Ravnanje","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredina","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"Podvučeno"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+C).","cut":"Iseci","cutError":"Sigurnosna podešavanja Vašeg pretraživača ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite prečicu sa tastature (Ctrl/Cmd+X).","paste":"Zalepi","pasteArea":"Paste Area","pasteMsg":"Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu prečicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Zalepi"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Nenabrojiva lista","numberedlist":"Nabrojiva lista"},"indent":{"indent":"Uvećaj levu marginu","outdent":"Smanji levu marginu"},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"Pošalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zaključaj odnos","menu":"Osobine slika","resetSize":"Resetuj veličinu","title":"Osobine slika","titleButton":"Osobine dugmeta sa slikom","upload":"Pošalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Pristupni taster","advanced":"Napredni tagovi","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Unesi/izmeni sidro","menu":"Osobine sidra","title":"Osobine sidra","name":"Ime sidra","errorName":"Unesite ime sidra","remove":"Remove Anchor"},"anchorId":"Po Id-ju elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","menu":"Izmeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Otkucajte adresu elektronske pote","noUrl":"Unesite URL linka","other":"<остало>","popupDependent":"Zavisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Prikaz preko celog ekrana (IE)","popupLeft":"Od leve ivice ekrana (px)","popupLocationBar":"Lokacija","popupMenuBar":"Kontekstni meni","popupResizable":"Resizable","popupScrollBars":"Scroll bar","popupStatusBar":"Statusna linija","popupToolbar":"Toolbar","popupTop":"Od vrha ekrana (px)","rel":"Relationship","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Naziv odredišnog frejma","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Unesi/izmeni link","type":"Vrsta linka","unlink":"Ukloni link","upload":"Pošalji"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Zalepi kao čist tekst","title":"Zalepi kao čist tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"removeformat":{"toolbar":"Ukloni formatiranje"},"sourcearea":{"toolbar":"Kôd"},"specialchar":{"options":"Special Character Options","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Veličina okvira","caption":"Naslov tabele","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Obriši ćelije","merge":"Spoj celije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Obriši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Osobine tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Obriši redove"},"rows":"Redova","summary":"Summary","title":"Osobine tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"width unit"},"undo":{"redo":"Ponovi akciju","undo":"Poni�ti akciju"},"justify":{"block":"Obostrano ravnanje","center":"Centriran tekst","left":"Levo ravnanje","right":"Desno ravnanje"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/sr.js b/core/misc/ckeditor/lang/sr.js
deleted file mode 100644
index e7fb4eb..0000000
--- a/core/misc/ckeditor/lang/sr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sr']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Претражи сервер","url":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на сервер","image":"Слика","flash":"Флеш елемент","form":"Форма","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"Текстуално поље","textarea":"Зона текста","hiddenField":"Скривено поље","button":"Дугме","select":"Изборно поље","imageButton":"Дугме са сликом","notSet":"<није постављено>","id":"Ид","name":"Назив","langDir":"Смер језика","langDirLtr":"С лева на десно (LTR)","langDirRtl":"С десна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун опис УРЛ","cssClass":"Stylesheet класе","advisoryTitle":"Advisory наслов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","close":"Close","preview":"Изглед странице","resize":"Resize","generalTab":"General","advancedTab":"Напредни тагови","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"Meтa","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","styles":"Стил","cssClasses":"Stylesheet класе","width":"Ширина","height":"Висина","align":"Равнање","alignLeft":"Лево","alignRight":"Десно","alignCenter":"Средина","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"Индекс","superscript":"Степен","underline":"Подвучено"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Копирај","copyError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског копирања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+C).","cut":"Исеци","cutError":"Сигурносна подешавања Вашег претраживача не дозвољавају операције аутоматског исецања текста. Молимо Вас да користите пречицу са тастатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteArea":"Paste Area","pasteMsg":"Молимо Вас да залепите унутар доње површине користећи тастатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиснете <STRONG>OK</STRONG>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Залепи"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"Ненабројива листа","numberedlist":"Набројиву листу"},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи леву маргину"},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Унеси хоризонталну линију"},"image":{"alertUrl":"Унесите УРЛ слике","alt":"Алтернативни текст","border":"Оквир","btnUpload":"Пошаљи на сервер","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Инфо слике","linkTab":"Линк","lockRatio":"Закључај однос","menu":"Особине слика","resetSize":"Ресетуј величину","title":"Особине слика","titleButton":"Особине дугмета са сликом","upload":"Пошаљи","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"Приступни тастер","advanced":"Напредни тагови","advisoryContentType":"Advisory врста садржаја","advisoryTitle":"Advisory наслов","anchor":{"toolbar":"Унеси/измени сидро","menu":"Особине сидра","title":"Особине сидра","name":"Име сидра","errorName":"Молимо Вас да унесете име сидра","remove":"Remove Anchor"},"anchorId":"Пo Ид-jу елемента","anchorName":"По називу сидра","charset":"Linked Resource Charset","cssClasses":"Stylesheet класе","emailAddress":"Адреса електронске поште","emailBody":"Садржај поруке","emailSubject":"Наслов","id":"Ид","info":"Линк инфо","langCode":"Смер језика","langDir":"Смер језика","langDirLTR":"С лева на десно (LTR)","langDirRTL":"С десна на лево (RTL)","menu":"Промени линк","name":"Назив","noAnchors":"(Нема доступних сидра)","noEmail":"Откуцајте адресу електронске поште","noUrl":"Унесите УРЛ линка","other":"<other>","popupDependent":"Зависно (Netscape)","popupFeatures":"Могућности искачућег прозора","popupFullScreen":"Приказ преко целог екрана (ИE)","popupLeft":"Од леве ивице екрана (пиксела)","popupLocationBar":"Локација","popupMenuBar":"Контекстни мени","popupResizable":"Resizable","popupScrollBars":"Скрол бар","popupStatusBar":"Статусна линија","popupToolbar":"Toolbar","popupTop":"Од врха екрана (пиксела)","rel":"Relationship","selectAnchor":"Одабери сидро","styles":"Стил","tabIndex":"Таб индекс","target":"Meтa","targetFrame":"<оквир>","targetFrameName":"Назив одредишног фрејма","targetPopup":"<искачући прозор>","targetPopupName":"Назив искачућег прозора","title":"Линк","toAnchor":"Сидро на овој страници","toEmail":"Eлектронска пошта","toUrl":"УРЛ","toolbar":"Унеси/измени линк","type":"Врста линка","unlink":"Уклони линк","upload":"Пошаљи"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"Залепи као чист текст","title":"Залепи као чист текст"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"removeformat":{"toolbar":"Уклони форматирање"},"sourcearea":{"toolbar":"Kôд"},"specialchar":{"options":"Special Character Options","title":"Одаберите специјални карактер","toolbar":"Унеси специјални карактер"},"stylescombo":{"label":"Стил","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Величина оквира","caption":"Наслов табеле","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Обриши ћелије","merge":"Спој ћелије","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Размак ћелија","cellSpace":"Ћелијски простор","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Обриши колоне"},"columns":"Kолона","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Особине табеле","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Обриши редове"},"rows":"Редова","summary":"Summary","title":"Особине табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пиксела","widthUnit":"width unit"},"undo":{"redo":"Понови акцију","undo":"Поништи акцију"},"justify":{"block":"Обострано равнање","center":"Центриран текст","left":"Лево равнање","right":"Десно равнање"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/sv.js b/core/misc/ckeditor/lang/sv.js
deleted file mode 100644
index 01248a9..0000000
--- a/core/misc/ckeditor/lang/sv.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sv']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"<ej angivet>","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av de alternativ har ändrats. Är du säker på att stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","alignLeft":"Vänster","alignRight":"Höger","alignCenter":"Centrerad","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"rdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, Ej tillgänglig</span>"},"about":{"copy":"Copyright &copy; $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor","help":"Se $1 för hjälp.","moreInfo":"För information av licenciering besök vår hemsida:","title":"Om CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"blockquote":{"toolbar":"Blockcitat"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i Er webläsare tillåter inte åtgården Kopiera. Använd (Ctrl/Cmd+C) istället","cut":"Klipp ut","cutError":"Säkerhetsinställningar i Er webläsare tillåter inte åtgården Klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteArea":"Paste Area","pasteMsg":"Var god och klistra in Er text i rutan nedan genom att använda (<STRONG>Ctrl/Cmd+V</STRONG>) klicka sen på <STRONG>OK</STRONG>.","securityMsg":"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.","title":"Klistra in"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Redigera verktygsfält"},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"list":{"bulletedlist":"Punktlista","numberedlist":"Numrerad lista"},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"image":{"alertUrl":"Var god och ange bildens URL","alt":"Alternativ text","border":"Kant","btnUpload":"Skicka till server","button2Img":"Vill du omvandla den valda bildknappen på en enkel bild?","hSpace":"Horis. marginal","img2Button":"Vill du omvandla den valda bildknappen på en enkel bild?","infoTab":"Bildinformation","linkTab":"Länk","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","resetSize":"Återställ storlek","title":"Bildegenskaper","titleButton":"Egenskaper för bildknapp","upload":"Ladda upp","urlMissing":"Bildkällans URL saknas.","vSpace":"Vert. marginal","validateBorder":"Kantlinje måste vara ett heltal.","validateHSpace":"HSpace måste vara ett heltal.","validateVSpace":"VSpace måste vara ett heltal."},"fakeobjects":{"anchor":"Ankare","flash":"Flashanimation","hiddenfield":"Gömt fält","iframe":"iFrame","unknown":"Okänt objekt"},"link":{"acccessKey":"Behörighetsnyckel","advanced":"Avancerad","advisoryContentType":"Innehållstyp","advisoryTitle":"Titel","anchor":{"toolbar":"Infoga/Redigera ankarlänk","menu":"Egenskaper för ankarlänk","title":"Egenskaper för ankarlänk","name":"Ankarnamn","errorName":"Var god ange ett ankarnamn","remove":"Radera ankare"},"anchorId":"efter objektid","anchorName":"efter ankarnamn","charset":"Teckenuppställning","cssClasses":"Stylesheet class","emailAddress":"E-postadress","emailBody":"Innehåll","emailSubject":"Ämne","id":"Id","info":"Länkinformation","langCode":"Språkriktning","langDir":"Språkriktning","langDirLTR":"Vänster till höger (VTH)","langDirRTL":"Höger till vänster (HTV)","menu":"Redigera länk","name":"Namn","noAnchors":"(Inga ankare kunde hittas)","noEmail":"Var god ange E-postadress","noUrl":"Var god ange länkens URL","other":"<annan>","popupDependent":"Beroende (endast Netscape)","popupFeatures":"Popup-fönstrets egenskaper","popupFullScreen":"Helskärm (endast IE)","popupLeft":"Position från vänster","popupLocationBar":"Adressfält","popupMenuBar":"Menyfält","popupResizable":"Resizable","popupScrollBars":"Scrolllista","popupStatusBar":"Statusfält","popupToolbar":"Verktygsfält","popupTop":"Position från sidans topp","rel":"Förhållande","selectAnchor":"Välj ett ankare","styles":"Stilmall","tabIndex":"Tabindex","target":"Mål","targetFrame":"<ram>","targetFrameName":"Målets ramnamn","targetPopup":"<popup-fönster>","targetPopupName":"Popup-fönstrets namn","title":"Länk","toAnchor":"Ankare i sidan","toEmail":"E-post","toUrl":"URL","toolbar":"Infoga/Redigera länk","type":"Länktyp","unlink":"Radera länk","upload":"Ladda upp"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"pastetext":{"button":"Klistra in som vanlig text","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa innan du klistrar?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"removeformat":{"toolbar":"Radera formatering"},"sourcearea":{"toolbar":"Källa"},"specialchar":{"options":"Special Character Options","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"stylescombo":{"label":"Anpassad stil","panelTitle":"Formatmallar","panelTitle1":"Blockstil","panelTitle2":"Inbäddad stil","panelTitle3":"Objektets stil"},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till Rad Före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"undo":{"redo":"Gör om","undo":"Ångra"},"justify":{"block":"Justera till marginaler","center":"Centrera","left":"Vänsterjustera","right":"Högerjustera"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Visa block"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/th.js b/core/misc/ckeditor/lang/th.js
deleted file mode 100644
index 6e8283d..0000000
--- a/core/misc/ckeditor/lang/th.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['th']={"dir":"ltr","editor":"Rich Text Editor","common":{"editorHelp":"Press ALT 0 for help","browseServer":"เปิดหน้าต่างจัดการไฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","flash":"ไฟล์ Flash","form":"แบบฟอร์ม","checkbox":"เช็คบ๊อก","radio":"เรดิโอบัตตอน","textField":"เท็กซ์ฟิลด์","textarea":"เท็กซ์แอเรีย","hiddenField":"ฮิดเดนฟิลด์","button":"ปุ่ม","select":"แถบตัวเลือก","imageButton":"ปุ่มแบบรูปภาพ","notSet":"<ไม่ระบุ>","id":"ไอดี","name":"ชื่อ","langDir":"การเขียน-อ่านภาษา","langDirLtr":"จากซ้ายไปขวา (LTR)","langDirRtl":"จากขวามาซ้าย (RTL)","langCode":"รหัสภาษา","longDescr":"คำอธิบายประกอบ URL","cssClass":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","advisoryTitle":"คำเกริ่นนำ","cssStyle":"ลักษณะการแสดงผล","ok":"ตกลง","cancel":"ยกเลิก","close":"Close","preview":"ดูหน้าเอกสารตัวอย่าง","resize":"Resize","generalTab":"General","advancedTab":"ขั้นสูง","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"Some of the options have been changed. Are you sure to close the dialog?","options":"Options","target":"การเปิดหน้าลิงค์","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","styles":"ลักษณะการแสดงผล","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","width":"ความกว้าง","height":"ความสูง","align":"การจัดวาง","alignLeft":"ชิดซ้าย","alignRight":"ชิดขวา","alignCenter":"กึ่งกลาง","alignTop":"บนสุด","alignMiddle":"กึ่งกลางแนวตั้ง","alignBottom":"ชิดด้านล่าง","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยก","underline":"ตัวขีดเส้นใต้"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว C พร้อมกัน).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือกไว้ได้เนื่องจากการกำหนดค่าระดับความปลอดภัย. กรุณาใช้ปุ่มลัดเพื่อวางข้อความแทน (กดปุ่ม Ctrl/Cmd และตัว X พร้อมกัน).","paste":"วาง","pasteArea":"Paste Area","pasteMsg":"กรุณาใช้คีย์บอร์ดเท่านั้น โดยกดปุ๋ม (<strong>Ctrl/Cmd และ V</strong>)พร้อมๆกัน และกด <strong>OK</strong>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"วาง"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"list":{"bulletedlist":"ลำดับรายการแบบสัญลักษณ์","numberedlist":"ลำดับรายการแบบตัวเลข"},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"format":{"label":"รูปแบบ","panelTitle":"รูปแบบ","tag_address":"Address","tag_div":"Paragraph (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"แทรกเส้นคั่นบรรทัด"},"image":{"alertUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)","alt":"คำประกอบรูปภาพ","border":"ขนาดขอบรูป","btnUpload":"อัพโหลดไฟล์ไปเก็บไว้ที่เครื่องแม่ข่าย (เซิร์ฟเวอร์)","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"ระยะแนวนอน","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ข้อมูลของรูปภาพ","linkTab":"ลิ้งค์","lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่","menu":"คุณสมบัติของ รูปภาพ","resetSize":"กำหนดรูปเท่าขนาดจริง","title":"คุณสมบัติของ รูปภาพ","titleButton":"คุณสมบัติของ ปุ่มแบบรูปภาพ","upload":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","vSpace":"ระยะแนวตั้ง","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"แทรก/แก้ไข Anchor","flash":"Flash Animation","hiddenfield":"ฮิดเดนฟิลด์","iframe":"IFrame","unknown":"Unknown Object"},"link":{"acccessKey":"แอคเซส คีย์","advanced":"ขั้นสูง","advisoryContentType":"ชนิดของคำเกริ่นนำ","advisoryTitle":"คำเกริ่นนำ","anchor":{"toolbar":"แทรก/แก้ไข Anchor","menu":"รายละเอียด Anchor","title":"รายละเอียด Anchor","name":"ชื่อ Anchor","errorName":"กรุณาระบุชื่อของ Anchor","remove":"Remove Anchor"},"anchorId":"ไอดี","anchorName":"ชื่อ","charset":"ลิงค์เชื่อมโยงไปยังชุดตัวอักษร","cssClasses":"คลาสของไฟล์กำหนดลักษณะการแสดงผล","emailAddress":"อีเมล์ (E-Mail)","emailBody":"ข้อความ","emailSubject":"หัวเรื่อง","id":"ไอดี","info":"รายละเอียด","langCode":"การเขียน-อ่านภาษา","langDir":"การเขียน-อ่านภาษา","langDirLTR":"จากซ้ายไปขวา (LTR)","langDirRTL":"จากขวามาซ้าย (RTL)","menu":"แก้ไข ลิงค์","name":"ชื่อ","noAnchors":"(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอกสารนี้)","noEmail":"กรุณาระบุอีเมล์ (E-mail)","noUrl":"กรุณาระบุที่อยู่อ้างอิงออนไลน์ (URL)","other":"<อื่น ๆ>","popupDependent":"แสดงเต็มหน้าจอ (Netscape)","popupFeatures":"คุณสมบัติของหน้าจอเล็ก (Pop-up)","popupFullScreen":"แสดงเต็มหน้าจอ (IE5.5++ เท่านั้น)","popupLeft":"พิกัดซ้าย (Left Position)","popupLocationBar":"แสดงที่อยู่ของไฟล์","popupMenuBar":"แสดงแถบเมนู","popupResizable":"Resizable","popupScrollBars":"แสดงแถบเลื่อน","popupStatusBar":"แสดงแถบสถานะ","popupToolbar":"แสดงแถบเครื่องมือ","popupTop":"พิกัดบน (Top Position)","rel":"Relationship","selectAnchor":"ระบุข้อมูลของจุดเชื่อมโยง (Anchor)","styles":"ลักษณะการแสดงผล","tabIndex":"ลำดับของ แท็บ","target":"การเปิดหน้าลิงค์","targetFrame":"<เปิดในเฟรม>","targetFrameName":"ชื่อทาร์เก็ตเฟรม","targetPopup":"<เปิดหน้าจอเล็ก (Pop-up)>","targetPopupName":"ระบุชื่อหน้าจอเล็ก (Pop-up)","title":"ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ","toAnchor":"จุดเชื่อมโยง (Anchor)","toEmail":"ส่งอีเมล์ (E-Mail)","toUrl":"ที่อยู่อ้างอิง URL","toolbar":"แทรก/แก้ไข ลิงค์","type":"ประเภทของลิงค์","unlink":"ลบ ลิงค์","upload":"อัพโหลดไฟล์"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"pastetext":{"button":"วางแบบตัวอักษรธรรมดา","title":"วางแบบตัวอักษรธรรมดา"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"วางสำเนาจากตัวอักษรเวิร์ด","toolbar":"วางสำเนาจากตัวอักษรเวิร์ด"},"removeformat":{"toolbar":"ล้างรูปแบบ"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"specialchar":{"options":"Special Character Options","title":"แทรกตัวอักษรพิเศษ","toolbar":"แทรกตัวอักษรพิเศษ"},"stylescombo":{"label":"ลักษณะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"ขนาดเส้นขอบ","caption":"หัวเรื่องของตาราง","cell":{"menu":"ช่องตาราง","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ลบช่อง","merge":"ผสานช่อง","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ระยะแนวตั้ง","cellSpace":"ระยะแนวนอนน","column":{"menu":"คอลัมน์","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ลบสดมน์"},"columns":"สดมน์","deleteTable":"ลบตาราง","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"คุณสมบัติของ ตาราง","row":{"menu":"แถว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบแถว"},"rows":"แถว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"width unit"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยกเลิกคำสั่ง"},"justify":{"block":"จัดพอดีหน้ากระดาษ","center":"จัดกึ่งกลาง","left":"จัดชิดซ้าย","right":"จัดชิดขวา"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Show Blocks"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/tr.js b/core/misc/ckeditor/lang/tr.js
deleted file mode 100644
index be59de1..0000000
--- a/core/misc/ckeditor/lang/tr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['tr']={"dir":"ltr","editor":"Zengin Metin Editörü","common":{"editorHelp":"Yardım için ALT 0 tuşuna basın","browseServer":"Sunucuyu Gez","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Yolla","image":"Resim","flash":"Flash","form":"Form","checkbox":"Onay Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Girişi","textarea":"Çok Satırlı Metin","hiddenField":"Gizli Veri","button":"Düğme","select":"Seçim Menüsü","imageButton":"Resimli Düğme","notSet":"<tanımlanmamış>","id":"Kimlik","name":"Ad","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":"Dil Kodlaması","longDescr":"Uzun Tanımlı URL","cssClass":"Biçem Sayfası Sınıfları","advisoryTitle":"Danışma Başlığı","cssStyle":"Biçem","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Ön gösterim","resize":"Boyutlandırmak için sürükle","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer sayı değildir.","confirmNewPage":"İceriğiniz kayıt edilmediğinden dolayı kaybolacaktır. Yeni bir sayfa yüklemek istediğinize eminsiniz?","confirmCancel":"Bazı seçenekler değişmiştir. Dialog penceresini kapatmak istediğinize eminmisiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"Enüst Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Ana Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Stil","cssClasses":"Stil sayfası Sınıfı","width":"Genişlik","height":"Yükseklik","align":"Hizalama","alignLeft":"Sol","alignRight":"Sağ","alignCenter":"Merkez","alignTop":"Tepe","alignMiddle":"Orta","alignBottom":"Alt","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik sayı olmalıdır.","invalidWidth":"Genişlik bir sayı olmalıdır.","invalidCssLength":"Belirttiğiniz sayı \"%1\" alanı için pozitif bir sayı CSS birim değeri olmalıdır (px, %, in, cm, mm, em, ex, pt, veya pc).","invalidHtmlLength":"Belirttiğiniz sayı \"%1\" alanı için pozitif bir sayı HTML birim değeri olmalıdır (px veya %).","invalidInlineStyle":"Noktalı virgülle ayrılmış: \"değer adı,\" inline stil için belirtilen değer biçiminde bir veya daha fazla dizilerden oluşmalıdır.","cssLengthTooltip":"Pikseller için bir numara girin veya geçerli bir CSS numarası (px, %, in, cm, mm, em, ex, pt, veya pc).","unavailable":"%1<span class=\"cke_accessibility\">, hazır değildir</span>"},"about":{"copy":"Copyright &copy; $1. Tüm hakları saklıdır.","dlgTitle":"CKEditor Hakkında","help":"Yardım için $1 kontrol edin.","moreInfo":"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:","title":"CKEditor Hakkında","userGuide":"CKEditor Kullanıcı Kılavuzu"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"blockquote":{"toolbar":"Blok Oluştur"},"clipboard":{"copy":"Kopyala","copyError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.","cut":"Kes","cutError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.","paste":"Yapıştır","pasteArea":"Yapıştırma Alanı","pasteMsg":"Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.","securityMsg":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..","title":"Yapıştır"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"toolbar":{"toolbarCollapse":"Araç çubuklarını topla","toolbarExpand":"Araç çubuklarını aç","toolbarGroups":{"document":"Belge","clipboard":"Pano/Geri al","editing":"Düzenleme","forms":"Formlar","basicstyles":"Temel Stiller","paragraph":"Paragraf","links":"Bağlantılar","insert":"Ekle","styles":"Stiller","colors":"Renkler","tools":"Araçlar"},"toolbars":"Araç çubukları Editörü"},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"format":{"label":"Biçim","panelTitle":"Biçim","tag_address":"Adres","tag_div":"Paragraf (DIV)","tag_h1":"Başlık 1","tag_h2":"Başlık 2","tag_h3":"Başlık 3","tag_h4":"Başlık 4","tag_h5":"Başlık 5","tag_h6":"Başlık 6","tag_p":"Normal","tag_pre":"Biçimli"},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"image":{"alertUrl":"Lütfen resmin URL'sini yazınız","alt":"Alternatif Yazı","border":"Kenar","btnUpload":"Sunucuya Yolla","button2Img":"Seçili resim butonunu basit resime çevirmek istermisiniz?","hSpace":"Yatay Boşluk","img2Button":"Seçili olan resimi, resimli butona çevirmek istermisiniz?","infoTab":"Resim Bilgisi","linkTab":"Köprü","lockRatio":"Oranı Kilitle","menu":"Resim Özellikleri","resetSize":"Boyutu Başa Döndür","title":"Resim Özellikleri","titleButton":"Resimli Düğme Özellikleri","upload":"Karşıya Yükle","urlMissing":"Resmin URL kaynağı eksiktir.","vSpace":"Dikey Boşluk","validateBorder":"Çerçeve tam sayı olmalıdır.","validateHSpace":"HSpace tam sayı olmalıdır.","validateVSpace":"VSpace tam sayı olmalıdır."},"fakeobjects":{"anchor":"Bağlantı","flash":"Flash Animasyonu","hiddenfield":"Gizli Alan","iframe":"IFrame","unknown":"Bilinmeyen Nesne"},"link":{"acccessKey":"Erişim Tuşu","advanced":"Gelişmiş","advisoryContentType":"Danışma İçerik Türü","advisoryTitle":"Danışma Başlığı","anchor":{"toolbar":"Bağlantı Ekle/Düzenle","menu":"Bağlantı Özellikleri","title":"Bağlantı Özellikleri","name":"Bağlantı Adı","errorName":"Lütfen bağlantı için ad giriniz","remove":"Bağlantıyı Kaldır"},"anchorId":"Eleman Kimlik Numarası ile","anchorName":"Bağlantı Adı ile","charset":"Bağlı Kaynak Karakter Gurubu","cssClasses":"Biçem Sayfası Sınıfları","emailAddress":"E-Posta Adresi","emailBody":"İleti Gövdesi","emailSubject":"İleti Konusu","id":"Id","info":"Link Bilgisi","langCode":"Dil Yönü","langDir":"Dil Yönü","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","menu":"Link Düzenle","name":"Ad","noAnchors":"(Bu belgede hiç çapa yok)","noEmail":"Lütfen E-posta adresini yazın","noUrl":"Lütfen Link URL'sini yazın","other":"<diğer>","popupDependent":"Bağımlı (Netscape)","popupFeatures":"Yeni Açılan Pencere Özellikleri","popupFullScreen":"Tam Ekran (IE)","popupLeft":"Sola Göre Konum","popupLocationBar":"Yer Çubuğu","popupMenuBar":"Menü Çubuğu","popupResizable":"Resizable","popupScrollBars":"Kaydırma Çubukları","popupStatusBar":"Durum Çubuğu","popupToolbar":"Araç Çubuğu","popupTop":"Yukarıya Göre Konum","rel":"İlişki","selectAnchor":"Bağlantı Seç","styles":"Biçem","tabIndex":"Sekme İndeksi","target":"Hedef","targetFrame":"<çerçeve>","targetFrameName":"Hedef Çerçeve Adı","targetPopup":"<yeni açılan pencere>","targetPopupName":"Yeni Açılan Pencere Adı","title":"Link","toAnchor":"Bu sayfada çapa","toEmail":"E-Posta","toUrl":"URL","toolbar":"Link Ekle/Düzenle","type":"Link Türü","unlink":"Köprü Kaldır","upload":"Karşıya Yükle"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"pastetext":{"button":"Düz Metin Olarak Yapıştır","title":"Düz Metin Olarak Yapıştır"},"pastefromword":{"confirmCleanup":"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?","error":"Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir","title":"Word'den Yapıştır","toolbar":"Word'den Yapıştır"},"removeformat":{"toolbar":"Biçimi Kaldır"},"sourcearea":{"toolbar":"Kaynak"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"table":{"border":"Kenar Kalınlığı","caption":"Başlık","cell":{"menu":"Hücre","insertBefore":"Hücre Ekle - Önce","insertAfter":"Hücre Ekle - Sonra","deleteCell":"Hücre Sil","merge":"Hücreleri Birleştir","mergeRight":"Birleştir - Sağdaki İle ","mergeDown":"Birleştir - Aşağıdaki İle ","splitHorizontal":"Hücreyi Yatay Böl","splitVertical":"Hücreyi Dikey Böl","title":"Hücre Özellikleri","cellType":"Hücre Tipi","rowSpan":"Satırlar Mesafesi (Span)","colSpan":"Sütünlar Mesafesi (Span)","wordWrap":"Kelime Kaydırma","hAlign":"Düşey Hizalama","vAlign":"Yataş Hizalama","alignBaseline":"Tabana","bgColor":"Arkaplan Rengi","borderColor":"Çerçeve Rengi","data":"Veri","header":"Başlık","yes":"Evet","no":"Hayır","invalidWidth":"Hücre genişliği sayı olmalıdır.","invalidHeight":"Hücre yüksekliği sayı olmalıdır.","invalidRowSpan":"Satırların mesafesi tam sayı olmalıdır.","invalidColSpan":"Sütünların mesafesi tam sayı olmalıdır.","chooseColor":"Seçiniz"},"cellPad":"Izgara yazı arası","cellSpace":"Izgara kalınlığı","column":{"menu":"Sütun","insertBefore":"Kolon Ekle - Önce","insertAfter":"Kolon Ekle - Sonra","deleteColumn":"Sütun Sil"},"columns":"Sütunlar","deleteTable":"Tabloyu Sil","headers":"Başlıklar","headersBoth":"Her İkisi","headersColumn":"İlk Sütun","headersNone":"Yok","headersRow":"İlk Satır","invalidBorder":"Çerceve büyüklüklüğü sayı olmalıdır.","invalidCellPadding":"Hücre aralığı (padding) sayı olmalıdır.","invalidCellSpacing":"Hücre boşluğu (spacing) sayı olmalıdır.","invalidCols":"Sütün sayısı 0 sayısından büyük olmalıdır.","invalidHeight":"Tablo yüksekliği sayı olmalıdır.","invalidRows":"Satır sayısı 0 sayısından büyük olmalıdır.","invalidWidth":"Tablo genişliği sayı olmalıdır.","menu":"Tablo Özellikleri","row":{"menu":"Satır","insertBefore":"Satır Ekle - Önce","insertAfter":"Satır Ekle - Sonra","deleteRow":"Satır Sil"},"rows":"Satırlar","summary":"Özet","title":"Tablo Özellikleri","toolbar":"Tablo","widthPc":"yüzde","widthPx":"piksel","widthUnit":"genişlik birimi"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"justify":{"block":"İki Kenara Yaslanmış","center":"Ortalanmış","left":"Sola Dayalı","right":"Sağa Dayalı"},"placeholder":{"title":"Yer tutucu özellikleri","toolbar":"Yer tutucu oluşturun","text":"Yer tutucu metini","edit":"Yer tutucuyu düzenle","textMissing":"Yer tutucu metin içermelidir."},"showblocks":{"toolbar":"Blokları Göster"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/ug.js b/core/misc/ckeditor/lang/ug.js
deleted file mode 100644
index ce01412..0000000
--- a/core/misc/ckeditor/lang/ug.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ug']={"dir":"rtl","editor":"تەھرىرلىگۈچ","common":{"editorHelp":"ALT+0 نى بېسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمېتىر","url":"ئەسلى ھۆججەت","protocol":"كېلىشىم","upload":"يۈكلە","uploadSubmit":"مۇلازىمېتىرغا يۈكلە","image":"سۈرەت","flash":"Flash","form":"جەدۋەل","checkbox":"كۆپ تاللاش رامكىسى","radio":"يەككە تاللاش توپچىسى","textField":"يەككە قۇر تېكىست","textarea":"كۆپ قۇر تېكىست","hiddenField":"يوشۇرۇن دائىرە","button":"توپچا","select":"تىزىم/تىزىملىك","imageButton":"سۈرەت دائىرە","notSet":"‹تەڭشەلمىگەن›","id":"ID","name":"ئات","langDir":"تىل يۆنىلىشى","langDirLtr":"سولدىن ئوڭغا (LTR)","langDirRtl":"ئوڭدىن سولغا (RTL)","langCode":"تىل كودى","longDescr":"تەپسىلىي چۈشەندۈرۈش ئادرېسى","cssClass":"ئۇسلۇب خىلىنىڭ ئاتى","advisoryTitle":"ماۋزۇ","cssStyle":"قۇر ئىچىدىكى ئۇسلۇبى","ok":"جەزملە","cancel":"ۋاز كەچ","close":"تاقا","preview":"ئالدىن كۆزەت","resize":"چوڭلۇقىنى ئۆزگەرت","generalTab":"ئادەتتىكى","advancedTab":"ئالىي","validateNumberFailed":"سان پىچىمىدا كىرگۈزۈش زۆرۈر","confirmNewPage":"نۆۋەتتىكى پۈتۈك مەزمۇنى ساقلانمىدى، يېڭى پۈتۈك قۇرامسىز؟","confirmCancel":"قىسمەن ئۆزگەرتىش ساقلانمىدى، بۇ سۆزلەشكۈنى تاقامسىز؟","options":"تاللانما","target":"نىشان كۆزنەك","targetNew":"يېڭى كۆزنەك (_blank)","targetTop":"پۈتۈن بەت (_top)","targetSelf":"مەزكۇر كۆزنەك (_self)","targetParent":"ئاتا كۆزنەك (_parent)","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","styles":"ئۇسلۇبلار","cssClasses":"ئۇسلۇب خىللىرى","width":"كەڭلىك","height":"ئېگىزلىك","align":"توغرىلىنىشى","alignLeft":"سول","alignRight":"ئوڭ","alignCenter":"ئوتتۇرا","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","invalidValue":"Invalid value.","invalidHeight":"ئېگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidCssLength":"بۇ سۆز بۆلىكى چوقۇم مۇۋاپىق بولغان CSS ئۇزۇنلۇق قىممىتى بولۇشى زۆرۈر، بىرلىكى (px, %, in, cm, mm, em, ex, pt ياكى pc)","invalidHtmlLength":"بۇ سۆز بۆلىكى چوقۇم بىرىكمە HTML ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px ياكى %)","invalidInlineStyle":"ئىچكى باغلانما ئۇسلۇبى چوقۇم چېكىتلىك پەش بىلەن ئايرىلغان بىر ياكى كۆپ «خاسلىق ئاتى:خاسلىق قىممىتى» پىچىمىدا بولۇشى لازىم","cssLengthTooltip":"بۇ سۆز بۆلىكى بىرىكمە CSS ئۇزۇنلۇق قىممىتى بولۇشى كېرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px, %, in, cm, mm, em, ex, pt ياكى pc)","unavailable":"%1<span class=\\\\\"cke_accessibility\\\\\">، ئىشلەتكىلى بولمايدۇ</span>"},"about":{"copy":"Copyright &copy; $1. نەشر ھوقۇقىغا ئىگە","dlgTitle":"CKEditor ھەققىدە","help":"$1 نى زىيارەت قىلىپ ياردەمگە ئېرىشىڭ","moreInfo":"تور تۇرايىمىزنى زىيارەت قىلىپ كېلىشىمگە ئائىت تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ","title":"CKEditor ھەققىدە","userGuide":"CKEditor ئىشلەتكۈچى قوللانمىسى"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندېكس","superscript":"يۇقىرى ئىندېكس","underline":"ئاستى سىزىق"},"blockquote":{"toolbar":"بۆلەك نەقىل"},"clipboard":{"copy":"نەشر ھوقۇقىغا ئىگە بەلگىسى","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تېز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"ھەرپتاختا تېز كۇنۇپكا (<STRONG>Ctrl/Cmd+V</STRONG>) نى ئىشلىتىپ مەزمۇننى تۆۋەندىكى رامكىغا كۆچۈرۈڭ، ئاندىن <STRONG>جەزملە</STRONG>نى بېسىڭ","securityMsg":"توركۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى سەۋەبىدىن بۇ تەھرىرلىگۈچ چاپلاش تاختىسىدىكى مەزمۇننى بىۋاستە زىيارەت قىلالمايدۇ، بۇ كۆزنەكتە قايتا بىر قېتىم چاپلىشىڭىز كېرەك.","title":"چاپلا"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/يېنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"elementspath":{"eleLabel":"ئېلېمېنت يولى","eleTitle":"%1 ئېلېمېنت"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"format":{"label":"پىچىم","panelTitle":"پىچىم","tag_address":"ئادرېس","tag_div":"ئابزاس (DIV)","tag_h1":"ماۋزۇ 1","tag_h2":"ماۋزۇ 2","tag_h3":"ماۋزۇ 3","tag_h4":"ماۋزۇ 4","tag_h5":"ماۋزۇ 5","tag_h6":"ماۋزۇ 6","tag_p":"ئادەتتىكى","tag_pre":"تىزىلغان پىچىم"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"image":{"alertUrl":"سۈرەت ئادرېسىنى كىرگۈزۈڭ","alt":"تېكىست ئالماشتۇر","border":"گىرۋەك چوڭلۇقى","btnUpload":"مۇلازىمېتىرغا يۈكلە","button2Img":"نۆۋەتتىكى توپچىنى سۈرەتكە ئۆزگەرتەمسىز؟","hSpace":"توغرىسىغا ئارىلىقى","img2Button":"نۆۋەتتىكى سۈرەتنى توپچىغا ئۆزگەرتەمسىز؟","infoTab":"سۈرەت","linkTab":"ئۇلانما","lockRatio":"نىسبەتنى قۇلۇپلا","menu":"سۈرەت خاسلىقى","resetSize":"ئەسلى چوڭلۇق","title":"سۈرەت خاسلىقى","titleButton":"سۈرەت دائىرە خاسلىقى","upload":"يۈكلە","urlMissing":"سۈرەتنىڭ ئەسلى ھۆججەت ئادرېسى كەم","vSpace":"بويىغا ئارىلىقى","validateBorder":"گىرۋەك چوڭلۇقى چوقۇم سان بولىدۇ","validateHSpace":"توغرىسىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ","validateVSpace":"بويىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ"},"fakeobjects":{"anchor":"لەڭگەرلىك نۇقتا","flash":"Flash جانلاندۇرۇم","hiddenfield":"يوشۇرۇن دائىرە","iframe":"IFrame","unknown":"يوچۇن نەڭ"},"link":{"acccessKey":"زىيارەت كۇنۇپكا","advanced":"ئالىي","advisoryContentType":"مەزمۇن تىپى","advisoryTitle":"ماۋزۇ","anchor":{"toolbar":"لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە","menu":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","title":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","name":"لەڭگەرلىك نۇقتا ئاتى","errorName":"لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ","remove":"لەڭگەرلىك نۇقتا ئۆچۈر"},"anchorId":"لەڭگەرلىك نۇقتا ID سى بويىچە","anchorName":"لەڭگەرلىك نۇقتا ئاتى بويىچە","charset":"ھەرپ كودلىنىشى","cssClasses":"ئۇسلۇب خىلى ئاتى","emailAddress":"ئادرېس","emailBody":"مەزمۇن","emailSubject":"ماۋزۇ","id":"ID","info":"ئۇلانما ئۇچۇرى","langCode":"تىل كودى","langDir":"تىل يۆنىلىشى","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","menu":"ئۇلانما تەھرىر","name":"ئات","noAnchors":"(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)","noEmail":"ئېلخەت ئادرېسىنى كىرگۈزۈڭ","noUrl":"ئۇلانما ئادرېسىنى كىرگۈزۈڭ","other":"‹باشقا›","popupDependent":"تەۋە (NS)","popupFeatures":"قاڭقىش كۆزنەك خاسلىقى","popupFullScreen":"پۈتۈن ئېكران (IE)","popupLeft":"سول","popupLocationBar":"ئادرېس بالداق","popupMenuBar":"تىزىملىك بالداق","popupResizable":"چوڭلۇقى ئۆزگەرتىشچان","popupScrollBars":"دومىلىما سۈرگۈچ","popupStatusBar":"ھالەت بالداق","popupToolbar":"قورال بالداق","popupTop":"ئوڭ","rel":"باغلىنىش","selectAnchor":"بىر لەڭگەرلىك نۇقتا تاللاڭ","styles":"قۇر ئىچىدىكى ئۇسلۇبى","tabIndex":"Tab تەرتىپى","target":"نىشان","targetFrame":"‹كاندۇك›","targetFrameName":"نىشان كاندۇك ئاتى","targetPopup":"‹قاڭقىش كۆزنەك›","targetPopupName":"قاڭقىش كۆزنەك ئاتى","title":"ئۇلانما","toAnchor":"بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى","toEmail":"ئېلخەت","toUrl":"ئادرېس","toolbar":"ئۇلانما قىستۇر/تەھرىرلە","type":"ئۇلانما تىپى","unlink":"ئۇلانما بىكار قىل","upload":"يۈكلە"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"pastetext":{"button":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا","title":"پىچىمى يوق تېكىست سۈپىتىدە چاپلا"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن كېيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"sourcearea":{"toolbar":"مەنبە"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئېلېمېنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئېلېمېنت ئۇسلۇبى","panelTitle3":"نەڭ (Object) ئېلېمېنت ئۇسلۇبى"},"table":{"border":"گىرۋەك","caption":"ماۋزۇ","cell":{"menu":"كاتەكچە","insertBefore":"سولغا كاتەكچە قىستۇر","insertAfter":"ئوڭغا كاتەكچە قىستۇر","deleteCell":"كەتەكچە ئۆچۈر","merge":"كاتەكچە بىرلەشتۈر","mergeRight":"كاتەكچىنى ئوڭغا بىرلەشتۈر","mergeDown":"كاتەكچىنى ئاستىغا بىرلەشتۈر","splitHorizontal":"كاتەكچىنى توغرىسىغا بىرلەشتۈر","splitVertical":"كاتەكچىنى بويىغا بىرلەشتۈر","title":"كاتەكچە خاسلىقى","cellType":"كاتەكچە تىپى","rowSpan":"بويىغا چات ئارىسى قۇر سانى","colSpan":"توغرىسىغا چات ئارىسى ئىستون سانى","wordWrap":"ئۆزلۈكىدىن قۇر قاتلا","hAlign":"توغرىسىغا توغرىلا","vAlign":"بويىغا توغرىلا","alignBaseline":"ئاساسىي سىزىق","bgColor":"تەگلىك رەڭگى","borderColor":"گىرۋەك رەڭگى","data":"سانلىق مەلۇمات","header":"جەدۋەل باشى","yes":"ھەئە","no":"ياق","invalidWidth":"كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ","invalidHeight":"كاتەكچە ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRowSpan":"قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ","invalidColSpan":"ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ","chooseColor":"تاللاڭ"},"cellPad":"يان ئارىلىق","cellSpace":"ئارىلىق","column":{"menu":"ئىستون","insertBefore":"سولغا ئىستون قىستۇر","insertAfter":"ئوڭغا ئىستون قىستۇر","deleteColumn":"ئىستون ئۆچۈر"},"columns":"ئىستون سانى","deleteTable":"جەدۋەل ئۆچۈر","headers":"ماۋزۇ كاتەكچە","headersBoth":"بىرىنچى ئىستون ۋە بىرىنچى قۇر","headersColumn":"بىرىنچى ئىستون","headersNone":"يوق","headersRow":"بىرىنچى قۇر","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidHeight":"جەدۋەل ئېگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن چوڭ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسېل","widthUnit":"كەڭلىك بىرلىكى"},"undo":{"redo":"قايتىلا ","undo":"يېنىۋال"},"justify":{"block":"ئىككى تەرەپتىن توغرىلا","center":"ئوتتۇرىغا توغرىلا","left":"سولغا توغرىلا","right":"ئوڭغا توغرىلا"},"placeholder":{"title":"ئورۇن بەلگە خاسلىقى","toolbar":"ئورۇن بەلگە قۇر","text":"ئورۇن بەلگە تېكىستى","edit":"ئورۇن بەلگە تەھرىر","textMissing":"ئورۇن بەلگىسىدە چوقۇم تېكىست بولۇشى لازىم"},"showblocks":{"toolbar":"بۆلەكنى كۆرسەت"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/uk.js b/core/misc/ckeditor/lang/uk.js
deleted file mode 100644
index bd276c2..0000000
--- a/core/misc/ckeditor/lang/uk.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['uk']={"dir":"ltr","editor":"Текстовий редактор","common":{"editorHelp":"натисніть ALT 0 для довідки","browseServer":"Огляд","url":"URL","protocol":"Протокол","upload":"Надіслати","uploadSubmit":"Надіслати на сервер","image":"Зображення","flash":"Flash","form":"Форма","checkbox":"Галочка","radio":"Кнопка вибору","textField":"Текстове поле","textarea":"Текстова область","hiddenField":"Приховане поле","button":"Кнопка","select":"Список","imageButton":"Кнопка із зображенням","notSet":"<не визначено>","id":"Ідентифікатор","name":"Ім'я","langDir":"Напрямок мови","langDirLtr":"Зліва направо (LTR)","langDirRtl":"Справа наліво (RTL)","langCode":"Код мови","longDescr":"Довгий опис URL","cssClass":"Клас CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль CSS","ok":"ОК","cancel":"Скасувати","close":"Закрити","preview":"Попередній перегляд","resize":"Потягніть для зміни розмірів","generalTab":"Основне","advancedTab":"Додаткове","validateNumberFailed":"Значення не є цілим числом.","confirmNewPage":"Всі незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову сторінку?","confirmCancel":"Деякі опції змінено. Закрити вікно без збереження змін?","options":"Опції","target":"Ціль","targetNew":"Нове вікно (_blank)","targetTop":"Поточне вікно (_top)","targetSelf":"Поточний фрейм/вікно (_self)","targetParent":"Батьківський фрейм/вікно (_parent)","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","styles":"Стиль CSS","cssClasses":"Клас CSS","width":"Ширина","height":"Висота","align":"Вирівнювання","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignTop":"По верхньому краю","alignMiddle":"По середині","alignBottom":"По нижньому краю","invalidValue":"Invalid value.","invalidHeight":"Висота повинна бути цілим числом.","invalidWidth":"Ширина повинна бути цілим числом.","invalidCssLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру CSS блоку (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Значення, вказане для \"%1\" в полі повинно бути позитивним числом або без дійсного виміру HTML блоку (px or %).","invalidInlineStyle":"Значення, вказане для вбудованого стилю повинне складатися з одного чи кількох кортежів у форматі \"ім'я : значення\", розділених крапкою з комою.","cssLengthTooltip":"Введіть номер значення в пікселях або число з дійсною одиниці CSS (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, не доступне</span>"},"about":{"copy":"Copyright &copy; $1. Всі права застережено.","dlgTitle":"Про CKEditor","help":"Перевірте $1 для допомоги.","moreInfo":"Щодо інформації з ліцензування завітайте на наш сайт:","title":"Про CKEditor","userGuide":"Інструкція Користувача для CKEditor"},"basicstyles":{"bold":"Жирний","italic":"Курсив","strike":"Закреслений","subscript":"Нижній індекс","superscript":"Верхній індекс","underline":"Підкреслений"},"blockquote":{"toolbar":"Цитата"},"clipboard":{"copy":"Копіювати","copyError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції копіювання. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"Налаштування безпеки Вашого браузера не дозволяють редактору автоматично виконувати операції вирізування. Будь ласка, використовуйте клавіатуру для цього (Ctrl/Cmd+X)","paste":"Вставити","pasteArea":"Область вставки","pasteMsg":"Будь ласка, вставте інформацію з буфера обміну в цю область, користуючись комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натисніть <STRONG>OK</STRONG>.","securityMsg":"Редактор не може отримати прямий доступ до буферу обміну у зв'язку з налаштуваннями Вашого браузера. Вам потрібно вставити інформацію в це вікно.","title":"Вставити"},"contextmenu":{"options":"Опції контекстного меню"},"toolbar":{"toolbarCollapse":"Згорнути панель інструментів","toolbarExpand":"Розгорнути панель інструментів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / Скасувати","editing":"Редагування","forms":"Форми","basicstyles":"Основний Стиль","paragraph":"Параграф","links":"Посилання","insert":"Вставити","styles":"Стилі","colors":"Кольори","tools":"Інструменти"},"toolbars":"Панель інструментів редактора"},"elementspath":{"eleLabel":"Шлях","eleTitle":"%1 елемент"},"list":{"bulletedlist":"Маркірований список","numberedlist":"Нумерований список"},"indent":{"indent":"Збільшити відступ","outdent":"Зменшити відступ"},"format":{"label":"Форматування","panelTitle":"Форматування параграфа","tag_address":"Адреса","tag_div":"Нормальний (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Нормальний","tag_pre":"Форматований"},"horizontalrule":{"toolbar":"Горизонтальна лінія"},"image":{"alertUrl":"Будь ласка, вкажіть URL зображення","alt":"Альтернативний текст","border":"Рамка","btnUpload":"Надіслати на сервер","button2Img":"Бажаєте перетворити обрану кнопку-зображення на просте зображення?","hSpace":"Гориз. відступ","img2Button":"Бажаєте перетворити обране зображення на кнопку-зображення?","infoTab":"Інформація про зображення","linkTab":"Посилання","lockRatio":"Зберегти пропорції","menu":"Властивості зображення","resetSize":"Очистити поля розмірів","title":"Властивості зображення","titleButton":"Властивості кнопки із зображенням","upload":"Надіслати","urlMissing":"Вкажіть URL зображення.","vSpace":"Верт. відступ","validateBorder":"Ширина рамки повинна бути цілим числом.","validateHSpace":"Гориз. відступ повинен бути цілим числом.","validateVSpace":"Верт. відступ повинен бути цілим числом."},"fakeobjects":{"anchor":"Якір","flash":"Flash-анімація","hiddenfield":"Приховані Поля","iframe":"IFrame","unknown":"Невідомий об'єкт"},"link":{"acccessKey":"Гаряча клавіша","advanced":"Додаткове","advisoryContentType":"Тип вмісту","advisoryTitle":"Заголовок","anchor":{"toolbar":"Вставити/Редагувати якір","menu":"Властивості якоря","title":"Властивості якоря","name":"Ім'я якоря","errorName":"Будь ласка, вкажіть ім'я якоря","remove":"Прибрати якір"},"anchorId":"За ідентифікатором елементу","anchorName":"За ім'ям елементу","charset":"Кодування","cssClasses":"Клас CSS","emailAddress":"Адреса ел. пошти","emailBody":"Тіло повідомлення","emailSubject":"Тема листа","id":"Ідентифікатор","info":"Інформація посилання","langCode":"Код мови","langDir":"Напрямок мови","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","menu":"Вставити посилання","name":"Ім'я","noAnchors":"(В цьому документі немає якорів)","noEmail":"Будь ласка, вкажіть адрес ел. пошти","noUrl":"Будь ласка, вкажіть URL посилання","other":"<інший>","popupDependent":"Залежний (Netscape)","popupFeatures":"Властивості випливаючого вікна","popupFullScreen":"Повний екран (IE)","popupLeft":"Позиція зліва","popupLocationBar":"Панель локації","popupMenuBar":"Панель меню","popupResizable":"Масштабоване","popupScrollBars":"Стрічки прокрутки","popupStatusBar":"Рядок статусу","popupToolbar":"Панель інструментів","popupTop":"Позиція зверху","rel":"Зв'язок","selectAnchor":"Оберіть якір","styles":"Стиль CSS","tabIndex":"Послідовність переходу","target":"Ціль","targetFrame":"<фрейм>","targetFrameName":"Ім'я цільового фрейму","targetPopup":"<випливаюче вікно>","targetPopupName":"Ім'я випливаючого вікна","title":"Посилання","toAnchor":"Якір на цю сторінку","toEmail":"Ел. пошта","toUrl":"URL","toolbar":"Вставити/Редагувати посилання","type":"Тип посилання","unlink":"Видалити посилання","upload":"Надіслати"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Максимізувати","minimize":"Мінімізувати"},"pastetext":{"button":"Вставити тільки текст","title":"Вставити тільки текст"},"pastefromword":{"confirmCleanup":"Текст, що Ви намагаєтесь вставити, схожий на скопійований з Word. Бажаєте очистити його форматування перед вставлянням?","error":"Неможливо очистити форматування через внутрішню помилку.","title":"Вставити з Word","toolbar":"Вставити з Word"},"removeformat":{"toolbar":"Очистити форматування"},"sourcearea":{"toolbar":"Джерело"},"specialchar":{"options":"Опції","title":"Оберіть спеціальний символ","toolbar":"Спеціальний символ"},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматування","panelTitle1":"Блочні стилі","panelTitle2":"Рядкові стилі","panelTitle3":"Об'єктні стилі"},"table":{"border":"Розмір рамки","caption":"Заголовок таблиці","cell":{"menu":"Комірки","insertBefore":"Вставити комірку перед","insertAfter":"Вставити комірку після","deleteCell":"Видалити комірки","merge":"Об'єднати комірки","mergeRight":"Об'єднати справа","mergeDown":"Об'єднати донизу","splitHorizontal":"Розділити комірку по горизонталі","splitVertical":"Розділити комірку по вертикалі","title":"Властивості комірки","cellType":"Тип комірки","rowSpan":"Об'єднання рядків","colSpan":"Об'єднання стовпців","wordWrap":"Автоперенесення тексту","hAlign":"Гориз. вирівнювання","vAlign":"Верт. вирівнювання","alignBaseline":"По базовій лінії","bgColor":"Колір фону","borderColor":"Колір рамки","data":"Дані","header":"Заголовок","yes":"Так","no":"Ні","invalidWidth":"Ширина комірки повинна бути цілим числом.","invalidHeight":"Висота комірки повинна бути цілим числом.","invalidRowSpan":"Кількість об'єднуваних рядків повинна бути цілим числом.","invalidColSpan":"Кількість об'єднуваних стовбців повинна бути цілим числом.","chooseColor":"Обрати"},"cellPad":"Внутр. відступ","cellSpace":"Проміжок","column":{"menu":"Стовбці","insertBefore":"Вставити стовбець перед","insertAfter":"Вставити стовбець після","deleteColumn":"Видалити стовбці"},"columns":"Стовбці","deleteTable":"Видалити таблицю","headers":"Заголовки стовбців/рядків","headersBoth":"Стовбці і рядки","headersColumn":"Стовбці","headersNone":"Без заголовків","headersRow":"Рядки","invalidBorder":"Розмір рамки повинен бути цілим числом.","invalidCellPadding":"Внутр. відступ комірки повинен бути цілим числом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим числом.","invalidCols":"Кількість стовбців повинна бути більшою 0.","invalidHeight":"Висота таблиці повинна бути цілим числом.","invalidRows":"Кількість рядків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим числом.","menu":"Властивості таблиці","row":{"menu":"Рядки","insertBefore":"Вставити рядок перед","insertAfter":"Вставити рядок після","deleteRow":"Видалити рядки"},"rows":"Рядки","summary":"Детальний опис заголовку таблиці","title":"Властивості таблиці","toolbar":"Таблиця","widthPc":"відсотків","widthPx":"пікселів","widthUnit":"Одиниці вимір."},"undo":{"redo":"Повторити","undo":"Повернути"},"justify":{"block":"По ширині","center":"По центру","left":"По лівому краю","right":"По правому краю"},"placeholder":{"title":"Налаштування Заповнювача","toolbar":"Створити Заповнювач","text":"Текст Заповнювача","edit":"Редагувати Заповнювач","textMissing":"Заповнювач повинен містити текст."},"showblocks":{"toolbar":"Показувати блоки"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/vi.js b/core/misc/ckeditor/lang/vi.js
deleted file mode 100644
index fee34ce..0000000
--- a/core/misc/ckeditor/lang/vi.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['vi']={"dir":"ltr","editor":"Bộ soạn thảo","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt trên máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chọn","textField":"Trường văn bản","textarea":"Vùng văn bản","hiddenField":"Trường ẩn","button":"Nút","select":"Ô chọn","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Định danh","name":"Tên","langDir":"Hướng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lớp Stylesheet","advisoryTitle":"Nhan đề hướng dẫn","cssStyle":"Kiểu (style)","ok":"Đồng ý","cancel":"Bỏ qua","close":"Đóng","preview":"Xem trước","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rộng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Mọi thay đổi không được lưu lại, nội dung này sẽ bị mất. Bạn có chắc chắn muốn tải một trang mới?","confirmCancel":"Một vài tùy chọn đã bị thay đổi. Bạn có chắc chắn muốn đóng hộp thoại?","options":"Tùy chọn","target":"Đích đến","targetNew":"Cửa sổ mới (_blank)","targetTop":"Cửa sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cửa sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","styles":"Kiểu","cssClasses":"Lớp CSS","width":"Chiều rộng","height":"chiều cao","align":"Vị trí","alignLeft":"Trái","alignRight":"Phải","alignCenter":"Giữa","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"Dưới","invalidValue":"Invalid value.","invalidHeight":"Chiều cao phải là số nguyên.","invalidWidth":"Chiều rộng phải là số nguyên.","invalidCssLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","invalidHtmlLength":"Giá trị quy định cho trường \"%1\" phải là một số dương có hoặc không có một đơn vị đo HTML hợp lệ (px hoặc %).","invalidInlineStyle":"Giá trị quy định cho kiểu nội tuyến phải bao gồm một hoặc nhiều dữ liệu với định dạng \"tên:giá trị\", cách nhau bằng dấu chấm phẩy.","cssLengthTooltip":"Nhập một giá trị theo pixel hoặc một số với một đơn vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","unavailable":"%1<span class=\"cke_accessibility\">, không có</span>"},"about":{"copy":"Bản quyền &copy; $1. Giữ toàn quyền.","dlgTitle":"Thông tin về CKEditor","help":"Kiểm tra $1 để được giúp đỡ.","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin về giấy phép:","title":"Thông tin về CKEditor","userGuide":"Hướng dẫn sử dụng CKEditor"},"basicstyles":{"bold":"Đậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dưới","superscript":"Chỉ số trên","underline":"Gạch chân"},"blockquote":{"toolbar":"Khối trích dẫn"},"clipboard":{"copy":"Sao chép","copyError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh sao chép. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tự động thực thi lệnh cắt. Hãy sử dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteArea":"Khu vực dán","pasteMsg":"Hãy dán nội dung vào trong khung bên dưới, sử dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Đồng ý</STRONG>.","securityMsg":"Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trực tiếp vào nội dung đã sao chép. Bạn cần phải dán lại nội dung vào cửa sổ này.","title":"Dán"},"contextmenu":{"options":"Tùy chọn menu bổ xung"},"toolbar":{"toolbarCollapse":"Thu gọn thanh công cụ","toolbarExpand":"Mở rộng thnah công cụ","toolbarGroups":{"document":"Tài liệu","clipboard":"Clipboard/Undo","editing":"Chỉnh sửa","forms":"Bảng biểu","basicstyles":"Kiểu cơ bản","paragraph":"Đoạn","links":"Liên kết","insert":"Chèn","styles":"Kiểu","colors":"Màu sắc","tools":"Công cụ"},"toolbars":"Thanh công cụ"},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tự","numberedlist":"Chèn/Xoá Danh sách có thứ tự"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"format":{"label":"Định dạng","panelTitle":"Định dạng","tag_address":"Address","tag_div":"Bình thường (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Bình thường (P)","tag_pre":"Đã thiết lập"},"horizontalrule":{"toolbar":"Chèn đường phân cách ngang"},"image":{"alertUrl":"Hãy đưa vào đường dẫn của ảnh","alt":"Chú thích ảnh","border":"Đường viền","btnUpload":"Tải lên máy chủ","button2Img":"Bạn có muốn chuyển nút bấm bằng ảnh được chọn thành ảnh?","hSpace":"Khoảng đệm ngang","img2Button":"Bạn có muốn chuyển đổi ảnh được chọn thành nút bấm bằng ảnh?","infoTab":"Thông tin của ảnh","linkTab":"Tab liên kết","lockRatio":"Giữ nguyên tỷ lệ","menu":"Thuộc tính của ảnh","resetSize":"Kích thước gốc","title":"Thuộc tính của ảnh","titleButton":"Thuộc tính nút của ảnh","upload":"Tải lên","urlMissing":"Thiếu đường dẫn hình ảnh","vSpace":"Khoảng đệm dọc","validateBorder":"Chiều rộng của đường viền phải là một số nguyên dương","validateHSpace":"Khoảng đệm ngang phải là một số nguyên dương","validateVSpace":"Khoảng đệm dọc phải là một số nguyên dương"},"fakeobjects":{"anchor":"Điểm neo","flash":"Flash","hiddenfield":"Trường ẩn","iframe":"IFrame","unknown":"Đối tượng không rõ ràng"},"link":{"acccessKey":"Phím hỗ trợ truy cập","advanced":"Mở rộng","advisoryContentType":"Nội dung hướng dẫn","advisoryTitle":"Nhan đề hướng dẫn","anchor":{"toolbar":"Chèn/Sửa điểm neo","menu":"Thuộc tính điểm neo","title":"Thuộc tính điểm neo","name":"Tên của điểm neo","errorName":"Hãy nhập vào tên của điểm neo","remove":"Xóa neo"},"anchorId":"Theo định danh thành phần","anchorName":"Theo tên điểm neo","charset":"Bảng mã của tài nguyên được liên kết đến","cssClasses":"Lớp Stylesheet","emailAddress":"Thư điện tử","emailBody":"Nội dung thông điệp","emailSubject":"Tiêu đề thông điệp","id":"Định danh","info":"Thông tin liên kết","langCode":"Mã ngôn ngữ","langDir":"Hướng ngôn ngữ","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","menu":"Sửa liên kết","name":"Tên","noAnchors":"(Không có điểm neo nào trong tài liệu)","noEmail":"Hãy đưa vào địa chỉ thư điện tử","noUrl":"Hãy đưa vào đường dẫn liên kết (URL)","other":"<khác>","popupDependent":"Phụ thuộc (Netscape)","popupFeatures":"Đặc điểm của cửa sổ Popup","popupFullScreen":"Toàn màn hình (IE)","popupLeft":"Vị trí bên trái","popupLocationBar":"Thanh vị trí","popupMenuBar":"Thanh Menu","popupResizable":"Có thể thay đổi kích cỡ","popupScrollBars":"Thanh cuộn","popupStatusBar":"Thanh trạng thái","popupToolbar":"Thanh công cụ","popupTop":"Vị trí phía trên","rel":"Quan hệ","selectAnchor":"Chọn một điểm neo","styles":"Kiểu (style)","tabIndex":"Chỉ số của Tab","target":"Đích","targetFrame":"<khung>","targetFrameName":"Tên khung đích","targetPopup":"<cửa sổ popup>","targetPopupName":"Tên cửa sổ Popup","title":"Liên kết","toAnchor":"Neo trong trang này","toEmail":"Thư điện tử","toUrl":"URL","toolbar":"Chèn/Sửa liên kết","type":"Kiểu liên kết","unlink":"Xoá liên kết","upload":"Tải lên"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Phóng to tối đa","minimize":"Thu nhỏ"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","title":"Dán theo định dạng văn bản thuần"},"pastefromword":{"confirmCleanup":"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỏ định dạng Word trước khi dán?","error":"Không thể để làm sạch các dữ liệu dán do một lỗi nội bộ","title":"Dán với định dạng Word","toolbar":"Dán với định dạng Word"},"removeformat":{"toolbar":"Xoá định dạng"},"sourcearea":{"toolbar":"Mã HTML"},"specialchar":{"options":"Tùy chọn các ký tự đặc biệt","title":"Hãy chọn ký tự đặc biệt","toolbar":"Chèn ký tự đặc biệt"},"stylescombo":{"label":"Kiểu","panelTitle":"Phong cách định dạng","panelTitle1":"Kiểu khối","panelTitle2":"Kiểu trực tiếp","panelTitle3":"Kiểu đối tượng"},"table":{"border":"Kích thước đường viền","caption":"Đầu đề","cell":{"menu":"Ô","insertBefore":"Chèn ô Phía trước","insertAfter":"Chèn ô Phía sau","deleteCell":"Xoá ô","merge":"Kết hợp ô","mergeRight":"Kết hợp sang phải","mergeDown":"Kết hợp xuống dưới","splitHorizontal":"Phân tách ô theo chiều ngang","splitVertical":"Phân tách ô theo chiều dọc","title":"Thuộc tính của ô","cellType":"Kiểu của ô","rowSpan":"Kết hợp hàng","colSpan":"Kết hợp cột","wordWrap":"Chữ liền hàng","hAlign":"Canh lề ngang","vAlign":"Canh lề dọc","alignBaseline":"Đường cơ sở","bgColor":"Màu nền","borderColor":"Màu viền","data":"Dữ liệu","header":"Đầu đề","yes":"Có","no":"Không","invalidWidth":"Chiều rộng của ô phải là một số nguyên.","invalidHeight":"Chiều cao của ô phải là một số nguyên.","invalidRowSpan":"Số hàng kết hợp phải là một số nguyên.","invalidColSpan":"Số cột kết hợp phải là một số nguyên.","chooseColor":"Chọn màu"},"cellPad":"Khoảng đệm giữ ô và nội dung","cellSpace":"Khoảng cách giữa các ô","column":{"menu":"Cột","insertBefore":"Chèn cột phía trước","insertAfter":"Chèn cột phía sau","deleteColumn":"Xoá cột"},"columns":"Số cột","deleteTable":"Xóa bảng","headers":"Đầu đề","headersBoth":"Cả hai","headersColumn":"Cột đầu tiên","headersNone":"Không có","headersRow":"Hàng đầu tiên","invalidBorder":"Kích cỡ của đường biên phải là một số nguyên.","invalidCellPadding":"Khoảng đệm giữa ô và nội dung phải là một số nguyên.","invalidCellSpacing":"Khoảng cách giữa các ô phải là một số nguyên.","invalidCols":"Số lượng cột phải là một số lớn hơn 0.","invalidHeight":"Chiều cao của bảng phải là một số nguyên.","invalidRows":"Số lượng hàng phải là một số lớn hơn 0.","invalidWidth":"Chiều rộng của bảng phải là một số nguyên.","menu":"Thuộc tính bảng","row":{"menu":"Hàng","insertBefore":"Chèn hàng phía trước","insertAfter":"Chèn hàng phía sau","deleteRow":"Xoá hàng"},"rows":"Số hàng","summary":"Tóm lược","title":"Thuộc tính bảng","toolbar":"Bảng","widthPc":"Phần trăm (%)","widthPx":"Điểm ảnh (px)","widthUnit":"Đơn vị"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"justify":{"block":"Canh đều","center":"Canh giữa","left":"Canh trái","right":"Canh phải"},"placeholder":{"title":"Thuộc tính đặt chỗ","toolbar":"Tạo đặt chỗ","text":"Văn bản đặt chỗ","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"Hiển thị các khối"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/zh-cn.js b/core/misc/ckeditor/lang/zh-cn.js
deleted file mode 100644
index 2c4bf83..0000000
--- a/core/misc/ckeditor/lang/zh-cn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['zh-cn']={"dir":"ltr","editor":"所见即所得编辑器","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"浏览服务器","url":"源文件","protocol":"协议","upload":"上传","uploadSubmit":"上传到服务器上","image":"图象","flash":"Flash","form":"表单","checkbox":"复选框","radio":"单选按钮","textField":"单行文本","textarea":"多行文本","hiddenField":"隐藏域","button":"按钮","select":"列表/菜单","imageButton":"图像域","notSet":"<没有设置>","id":"ID","name":"名称","langDir":"语言方向","langDirLtr":"从左到右 (LTR)","langDirRtl":"从右到左 (RTL)","langCode":"语言代码","longDescr":"详细说明地址","cssClass":"样式类名称","advisoryTitle":"标题","cssStyle":"行内样式","ok":"确定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽以改变尺寸","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需要输入数字格式","confirmNewPage":"当前文档内容未保存,是否确认新建文档？","confirmCancel":"部分修改尚未保存，是否确认关闭对话框？","options":"选项","target":"目标窗口","targetNew":"新窗口 (_blank)","targetTop":"整页 (_top)","targetSelf":"本窗口 (_self)","targetParent":"父窗口 (_parent)","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","styles":"样式","cssClasses":"样式类","width":"宽度","height":"高度","align":"对齐方式","alignLeft":"左对齐","alignRight":"右对齐","alignCenter":"居中","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格式","invalidWidth":"宽度必须为数字格式","invalidCssLength":"该字段必须为合式的CSS长度值，包括单位(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"该字段必须为合式的HTML长度值，包括单位(px 或 %)","invalidInlineStyle":"内联样式必须为格式是以分号分隔的一个或多个“属性名 : 属性值”","cssLengthTooltip":"该字段必须为合式的CSS长度值，包括单位(px, %, in, cm, mm, em, ex, pt 或 pc)","unavailable":"%1<span class=\"cke_accessibility\">, 不可用</span>"},"about":{"copy":"Copyright &copy; $1. 版权所有。","dlgTitle":"关于CKEditor","help":"请访问 $1 以获取帮助.","moreInfo":"访问我们的网站以获取更多关于协议的信息","title":"关于CKEditor","userGuide":"CKEditor 用户向导"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"blockquote":{"toolbar":"块引用"},"clipboard":{"copy":"复制","copyError":"您的浏览器安全设置不允许编辑器自动执行复制操作, 请使用键盘快捷键(Ctrl/Cmd+C)来完成","cut":"剪切","cutError":"您的浏览器安全设置不允许编辑器自动执行剪切操作, 请使用键盘快捷键(Ctrl/Cmd+X)来完成","paste":"粘贴","pasteArea":"粘贴区域","pasteMsg":"请使用键盘快捷键(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下面的方框里，再按 <STRONG>确定</STRONG>","securityMsg":"因为您的浏览器的安全设置原因, 本编辑器不能直接访问您的剪贴板内容, 你需要在本窗口重新粘贴一次。","title":"粘贴"},"contextmenu":{"options":"快捷菜单选项"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"文档","clipboard":"剪贴板/撤销","editing":"编辑","forms":"表单","basicstyles":"基本格式","paragraph":"段落","links":"链接","insert":"插入","styles":"样式","colors":"颜色","tools":"工具"},"toolbars":"工具栏"},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"list":{"bulletedlist":"项目列表","numberedlist":"编号列表"},"indent":{"indent":"增加缩进量","outdent":"减少缩进量"},"format":{"label":"格式","panelTitle":"格式","tag_address":"地址","tag_div":"段落(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格式"},"horizontalrule":{"toolbar":"插入水平线"},"image":{"alertUrl":"请输入图象地址","alt":"替换文本","border":"边框大小","btnUpload":"上传到服务器上","button2Img":"确定要把当前按钮改变为图像吗?","hSpace":"水平间距","img2Button":"确定要把当前图像改变为按钮吗?","infoTab":"图象","linkTab":"链接","lockRatio":"锁定比例","menu":"图象属性","resetSize":"原始尺寸","title":"图象属性","titleButton":"图像域属性","upload":"上传","urlMissing":"缺少图像源文件地址","vSpace":"垂直间距","validateBorder":"边框大小必须为整数格式","validateHSpace":"水平间距必须为整数格式","validateVSpace":"垂直间距必须为整数格式"},"fakeobjects":{"anchor":"锚点","flash":"Flash 动画","hiddenfield":"隐藏域","iframe":"IFrame","unknown":"未知对象"},"link":{"acccessKey":"访问键","advanced":"高级","advisoryContentType":"内容类型","advisoryTitle":"标题","anchor":{"toolbar":"插入/编辑锚点链接","menu":"锚点链接属性","title":"锚点链接属性","name":"锚点名称","errorName":"请输入锚点名称","remove":"删除锚点"},"anchorId":"按锚点 ID","anchorName":"按锚点名称","charset":"字符编码","cssClasses":"样式类名称","emailAddress":"地址","emailBody":"内容","emailSubject":"主题","id":"ID","info":"超链接信息","langCode":"语言代码","langDir":"语言方向","langDirLTR":"从左到右 (LTR)","langDirRTL":"从右到左 (RTL)","menu":"编辑超链接","name":"名称","noAnchors":"(此文档没有可用的锚点)","noEmail":"请输入电子邮件地址","noUrl":"请输入超链接地址","other":"<其他>","popupDependent":"依附 (NS)","popupFeatures":"弹出窗口属性","popupFullScreen":"全屏 (IE)","popupLeft":"左","popupLocationBar":"地址栏","popupMenuBar":"菜单栏","popupResizable":"可缩放","popupScrollBars":"滚动条","popupStatusBar":"状态栏","popupToolbar":"工具栏","popupTop":"右","rel":"关联","selectAnchor":"选择一个锚点","styles":"行内样式","tabIndex":"Tab 键次序","target":"目标","targetFrame":"<框架>","targetFrameName":"目标框架名称","targetPopup":"<弹出窗口>","targetPopupName":"弹出窗口名称","title":"超链接","toAnchor":"页内锚点链接","toEmail":"电子邮件","toUrl":"地址","toolbar":"插入/编辑超链接","type":"超链接类型","unlink":"取消超链接","upload":"上传"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"全屏","minimize":"最小化"},"pastetext":{"button":"粘贴为无格式文本","title":"粘贴为无格式文本"},"pastefromword":{"confirmCleanup":"您要粘贴的内容好像是来自 MS Word, 是否要清除 MS Word 格式后再粘贴?","error":"由于内部错误无法清理要粘贴的数据","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"removeformat":{"toolbar":"清除格式"},"sourcearea":{"toolbar":"源码"},"specialchar":{"options":"特殊符号选项","title":"选择特殊符号","toolbar":"插入特殊符号"},"stylescombo":{"label":"样式","panelTitle":"样式","panelTitle1":"块级元素样式","panelTitle2":"内联元素样式","panelTitle3":"对象元素样式"},"table":{"border":"边框","caption":"标题","cell":{"menu":"单元格","insertBefore":"在左侧插入单元格","insertAfter":"在右侧插入单元格","deleteCell":"删除单元格","merge":"合并单元格","mergeRight":"向右合并单元格","mergeDown":"向下合并单元格","splitHorizontal":"水平拆分单元格","splitVertical":"垂直拆分单元格","title":"单元格属性","cellType":"单元格类型","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动换行","hAlign":"水平对齐","vAlign":"垂直对齐","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"数据","header":"表头","yes":"是","no":"否","invalidWidth":"单元格宽度必须为数字格式","invalidHeight":"单元格高度必须为数字格式","invalidRowSpan":"行跨度必须为整数格式","invalidColSpan":"列跨度必须为整数格式","chooseColor":"选择"},"cellPad":"边距","cellSpace":"间距","column":{"menu":"列","insertBefore":"在左侧插入列","insertAfter":"在右侧插入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题单元格","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"无","headersRow":"第一行","invalidBorder":"边框粗细必须为数字格式","invalidCellPadding":"单元格填充必须为数字格式","invalidCellSpacing":"单元格间距必须为数字格式","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格式","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格式","menu":"表格属性","row":{"menu":"行","insertBefore":"在上方插入行","insertAfter":"在下方插入行","deleteRow":"删除行"},"rows":"行数","summary":"摘要","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"宽度单位"},"undo":{"redo":"重做","undo":"撤消"},"justify":{"block":"两端对齐","center":"居中","left":"左对齐","right":"右对齐"},"placeholder":{"title":"占位符属性","toolbar":"创建占位符","text":"占位符文字","edit":"编辑占位符","textMissing":"占位符必需包含有文字"},"showblocks":{"toolbar":"显示区块"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/lang/zh.js b/core/misc/ckeditor/lang/zh.js
deleted file mode 100644
index 8aa4ea2..0000000
--- a/core/misc/ckeditor/lang/zh.js
+++ /dev/null
@@ -1,5 +0,0 @@
-﻿/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['zh']={"dir":"ltr","editor":"富文本編輯器","common":{"editorHelp":"按 ALT+0 以獲得幫助","browseServer":"瀏覽伺服器端","url":"URL","protocol":"通訊協定","upload":"上傳","uploadSubmit":"上傳至伺服器","image":"影像","flash":"Flash","form":"表單","checkbox":"核取方塊","radio":"選項按鈕","textField":"文字方塊","textarea":"文字區域","hiddenField":"隱藏欄位","button":"按鈕","select":"清單/選單","imageButton":"影像按鈕","notSet":"<尚未設定>","id":"ID","name":"名稱","langDir":"語言方向","langDirLtr":"由左而右 (LTR)","langDirRtl":"由右而左 (RTL)","langCode":"語言代碼","longDescr":"詳細 URL","cssClass":"樣式表類別","advisoryTitle":"標題","cssStyle":"樣式","ok":"確定","cancel":"取消","close":"关闭","preview":"预览","resize":"拖拽改變大小","generalTab":"一般","advancedTab":"進階","validateNumberFailed":"需要輸入數字格式","confirmNewPage":"現存的修改尚未儲存，要開新檔案？","confirmCancel":"部份選項尚未儲存，要關閉對話盒？","options":"选项","target":"目标","targetNew":"新窗口(_blank)","targetTop":"整页(_top)","targetSelf":"本窗口(_self)","targetParent":"父窗口(_parent)","langDirLTR":"由左而右 (LTR)","langDirRTL":"由右而左 (RTL)","styles":"樣式","cssClasses":"樣式表類別","width":"寬度","height":"高度","align":"對齊","alignLeft":"靠左對齊","alignRight":"靠右對齊","alignCenter":"置中","alignTop":"靠上對齊","alignMiddle":"置中對齊","alignBottom":"靠下對齊","invalidValue":"Invalid value.","invalidHeight":"高度必須為數字格式","invalidWidth":"寬度必須為數字格式","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, 已關閉</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"關於 CKEditor","help":"Check $1 for help.","moreInfo":"訪問我們的網站以獲取更多關於協議的信息","title":"關於 CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"粗體","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"blockquote":{"toolbar":"引用文字"},"clipboard":{"copy":"複製","copyError":"瀏覽器的安全性設定不允許編輯器自動執行複製動作。請使用快捷鍵 (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"瀏覽器的安全性設定不允許編輯器自動執行剪下動作。請使用快捷鍵 (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteArea":"Paste Area","pasteMsg":"請使用快捷鍵 (<strong>Ctrl/Cmd+V</strong>) 貼到下方區域中並按下 <strong>確定</strong>","securityMsg":"因為瀏覽器的安全性設定，本編輯器無法直接存取您的剪貼簿資料，請您自行在本視窗進行貼上動作。","title":"貼上"},"contextmenu":{"options":"Context Menu Options"},"toolbar":{"toolbarCollapse":"折叠工具栏","toolbarExpand":"展开工具栏","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編輯器工具欄"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 元素"},"list":{"bulletedlist":"項目清單","numberedlist":"編號清單"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"format":{"label":"格式","panelTitle":"格式","tag_address":"位址","tag_div":"一般 (DIV)","tag_h1":"標題 1","tag_h2":"標題 2","tag_h3":"標題 3","tag_h4":"標題 4","tag_h5":"標題 5","tag_h6":"標題 6","tag_p":"一般","tag_pre":"已格式化"},"horizontalrule":{"toolbar":"插入水平線"},"image":{"alertUrl":"請輸入影像 URL","alt":"替代文字","border":"邊框","btnUpload":"上傳至伺服器","button2Img":"要把影像按鈕改成影像嗎？","hSpace":"水平距離","img2Button":"要把影像改成影像按鈕嗎？","infoTab":"影像資訊","linkTab":"超連結","lockRatio":"等比例","menu":"影像屬性","resetSize":"重設為原大小","title":"影像屬性","titleButton":"影像按鈕屬性","upload":"上傳","urlMissing":"Image source URL is missing.","vSpace":"垂直距離","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"fakeobjects":{"anchor":"錨點","flash":"Flash 動畫","hiddenfield":"隱藏欄位","iframe":"IFrame","unknown":"不明物件"},"link":{"acccessKey":"存取鍵","advanced":"進階","advisoryContentType":"內容類型","advisoryTitle":"標題","anchor":{"toolbar":"插入/編輯錨點","menu":"錨點屬性","title":"錨點屬性","name":"錨點名稱","errorName":"請輸入錨點名稱","remove":"Remove Anchor"},"anchorId":"依元件 ID","anchorName":"依錨點名稱","charset":"連結資源之編碼","cssClasses":"樣式表類別","emailAddress":"電子郵件","emailBody":"郵件內容","emailSubject":"郵件主旨","id":"ID","info":"超連結資訊","langCode":"語言方向","langDir":"語言方向","langDirLTR":"由左而右 (LTR)","langDirRTL":"由右而左 (RTL)","menu":"編輯超連結","name":"名稱","noAnchors":"(本文件尚無可用之錨點)","noEmail":"請輸入電子郵件位址","noUrl":"請輸入欲連結的 URL","other":"<其他>","popupDependent":"從屬 (NS)","popupFeatures":"快顯視窗屬性","popupFullScreen":"全螢幕 (IE)","popupLeft":"左","popupLocationBar":"網址列","popupMenuBar":"選單列","popupResizable":"可縮放","popupScrollBars":"捲軸","popupStatusBar":"狀態列","popupToolbar":"工具列","popupTop":"右","rel":"Relationship","selectAnchor":"請選擇錨點","styles":"樣式","tabIndex":"定位順序","target":"目標","targetFrame":"<框架>","targetFrameName":"目標框架名稱","targetPopup":"<快顯視窗>","targetPopupName":"快顯視窗名稱","title":"超連結","toAnchor":"本頁錨點","toEmail":"電子郵件","toUrl":"URL","toolbar":"插入/編輯超連結","type":"超連接類型","unlink":"移除超連結","upload":"上傳"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"最大化","minimize":"最小化"},"pastetext":{"button":"貼為純文字格式","title":"貼為純文字格式"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來，請問您是否要先清除 Word 的格式後再行貼上？","error":"It was not possible to clean up the pasted data due to an internal error","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"removeformat":{"toolbar":"清除格式"},"sourcearea":{"toolbar":"原始碼"},"specialchar":{"options":"Special Character Options","title":"請選擇特殊符號","toolbar":"插入特殊符號"},"stylescombo":{"label":"樣式","panelTitle":"Formatting Styles","panelTitle1":"塊級元素樣式","panelTitle2":"內聯元素樣式","panelTitle3":"物件元素樣式"},"table":{"border":"邊框","caption":"標題","cell":{"menu":"儲存格","insertBefore":"向左插入儲存格","insertAfter":"向右插入儲存格","deleteCell":"刪除儲存格","merge":"合併儲存格","mergeRight":"向右合併儲存格","mergeDown":"向下合併儲存格","splitHorizontal":"橫向分割儲存格","splitVertical":"縱向分割儲存格","title":"儲存格屬性","cellType":"儲存格類別","rowSpan":"儲存格列數","colSpan":"儲存格欄數","wordWrap":"自動換行","hAlign":"水平對齊","vAlign":"垂直對齊","alignBaseline":"基線對齊","bgColor":"背景顏色","borderColor":"邊框顏色","data":"數據","header":"標題","yes":"是","no":"否","invalidWidth":"儲存格寬度必須為數字格式","invalidHeight":"儲存格高度必須為數字格式","invalidRowSpan":"儲存格列數必須為整數格式","invalidColSpan":"儲存格欄數度必須為整數格式","chooseColor":"Choose"},"cellPad":"內距","cellSpace":"間距","column":{"menu":"欄","insertBefore":"向左插入欄","insertAfter":"向右插入欄","deleteColumn":"刪除欄"},"columns":"欄數","deleteTable":"刪除表格","headers":"標題","headersBoth":"第一欄和第一列","headersColumn":"第一欄","headersNone":"無標題","headersRow":"第一列","invalidBorder":"邊框大小必須為數字格式","invalidCellPadding":"儲存格內距必須為數字格式","invalidCellSpacing":"儲存格間距必須為數字格式","invalidCols":"必須有一或更多的欄","invalidHeight":"表格高度必須為數字格式","invalidRows":"必須有一或更多的列","invalidWidth":"表格寬度必須為數字格式","menu":"表格屬性","row":{"menu":"列","insertBefore":"向上插入列","insertAfter":"向下插入列","deleteRow":"刪除列"},"rows":"列數","summary":"摘要","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"像素","widthUnit":"width unit"},"undo":{"redo":"重複","undo":"復原"},"justify":{"block":"左右對齊","center":"置中","left":"靠左對齊","right":"靠右對齊"},"placeholder":{"title":"Placeholder Properties","toolbar":"Create Placeholder","text":"Placeholder Text","edit":"Edit Placeholder","textMissing":"The placeholder must contain text."},"showblocks":{"toolbar":"顯示區塊"}};
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js
deleted file mode 100644
index 4bf2d3c..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("a11yHelp",function(j){var l=j.lang.a11yhelp,m=CKEDITOR.tools.getNextId(),d={8:"BACKSPACE",9:"TAB",13:"ENTER",16:"SHIFT",17:"CTRL",18:"ALT",19:"PAUSE",20:"CAPSLOCK",27:"ESCAPE",33:"PAGE UP",34:"PAGE DOWN",35:"END",36:"HOME",37:"LEFT ARROW",38:"UP ARROW",39:"RIGHT ARROW",40:"DOWN ARROW",45:"INSERT",46:"DELETE",91:"LEFT WINDOW KEY",92:"RIGHT WINDOW KEY",93:"SELECT KEY",96:"NUMPAD  0",97:"NUMPAD  1",98:"NUMPAD  2",99:"NUMPAD  3",100:"NUMPAD  4",101:"NUMPAD  5",102:"NUMPAD  6",103:"NUMPAD  7",
-104:"NUMPAD  8",105:"NUMPAD  9",106:"MULTIPLY",107:"ADD",109:"SUBTRACT",110:"DECIMAL POINT",111:"DIVIDE",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NUM LOCK",145:"SCROLL LOCK",186:"SEMI-COLON",187:"EQUAL SIGN",188:"COMMA",189:"DASH",190:"PERIOD",191:"FORWARD SLASH",192:"GRAVE ACCENT",219:"OPEN BRACKET",220:"BACK SLASH",221:"CLOSE BRAKET",222:"SINGLE QUOTE"};d[CKEDITOR.ALT]="ALT";d[CKEDITOR.SHIFT]="SHIFT";d[CKEDITOR.CTRL]="CTRL";
-var e=[CKEDITOR.ALT,CKEDITOR.SHIFT,CKEDITOR.CTRL],n=/\$\{(.*?)\}/g,q=function(){var o=j.keystrokeHandler.keystrokes,f={},b;for(b in o)f[o[b]]=b;return function(b,g){var a;if(f[g]){a=f[g];for(var h,i,k=[],c=0;c<e.length;c++)i=e[c],h=a/e[c],1<h&&2>=h&&(a-=i,k.push(d[i]));k.push(d[a]||String.fromCharCode(a));a=k.join("+")}else a=b;return a}}();return{title:l.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",
-focus:function(){this.getElement().focus()},html:function(){for(var d='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+m+'_arialbl" tabIndex="-1">%1</div><span id="'+m+'_arialbl" class="cke_voice_label">'+l.contents+" </span>",f=[],b=l.legend,j=b.length,g=0;g<j;g++){for(var a=b[g],h=[],i=a.items,k=i.length,c=0;c<k;c++){var e=i[c],p=e.legend.replace(n,q);p.match(n)||h.push("<dt>%1</dt><dd>%2</dd>".replace("%1",e.name).replace("%2",p))}f.push("<h1>%1</h1><dl>%2</dl>".replace("%1",
-a.name).replace("%2",h.join("")))}return d.replace("%1",f.join(""))}()+'<style type="text/css">.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,.cke_browser_ie6 .cke_accessibility_legend{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}</style>'}]}],
-buttons:[CKEDITOR.dialog.cancelButton]}});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt
deleted file mode 100644
index ec89e29..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-
-cs.js      Found: 30 Missing: 0
-cy.js      Found: 30 Missing: 0
-da.js      Found: 12 Missing: 18
-de.js      Found: 30 Missing: 0
-el.js      Found: 25 Missing: 5
-eo.js      Found: 30 Missing: 0
-fa.js      Found: 30 Missing: 0
-fi.js      Found: 30 Missing: 0
-fr.js      Found: 30 Missing: 0
-gu.js      Found: 12 Missing: 18
-he.js      Found: 30 Missing: 0
-it.js      Found: 30 Missing: 0
-mk.js      Found: 5 Missing: 25
-nb.js      Found: 30 Missing: 0
-nl.js      Found: 30 Missing: 0
-no.js      Found: 30 Missing: 0
-pt-br.js   Found: 30 Missing: 0
-ro.js      Found: 6 Missing: 24
-tr.js      Found: 30 Missing: 0
-ug.js      Found: 27 Missing: 3
-vi.js      Found: 6 Missing: 24
-zh-cn.js   Found: 30 Missing: 0
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
deleted file mode 100644
index 280f80a..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
deleted file mode 100644
index 1950e9a..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js
deleted file mode 100644
index 2e269ef..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor de quadre de diàleg",
-legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},{name:"Editor de menú contextual",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},
-{name:"Editor de caixa de llista",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor de barra de ruta de l'element",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
-{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Prem ${bold}"},{name:"Ordre cursiva",legend:"Prem ${italic}"},{name:"Ordre subratllat",legend:"Prem ${underline}"},{name:"Ordre enllaç",legend:"Prem ${link}"},{name:"Ordre amagar barra d'eines",legend:"Prem ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Ajuda d'accessibilitat",legend:"Prem ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js
deleted file mode 100644
index e0891be..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovědy. Pro uzavření tohoto dialogu stiskněte klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"Stiskněte${toolbarFocus} k procházení panelu nástrojů. Přejděte na další a předchozí skupiny pomocí TAB a SHIFT-TAB. Přechod na další a předchozí tlačítko panelu nástrojů je pomocí ŠIPKA VPRAVO nebo ŠIPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlačítko aktivujete."},{name:"Dialogové okno editoru",
-legend:"Uvnitř dialogového okna stiskněte TAB pro přesunutí na další pole, stiskněte SHIFT + TAB pro přesun na předchozí pole, stiskněte ENTER pro odeslání dialogu, stiskněte ESC pro jeho zrušení. Pro dialogová okna, která mají mnoho karet stiskněte ALT + F10 pr oprocházení seznamu karet. Pak se přesuňte na další kartu pomocí TAB nebo ŠIPKA VPRAVO. Pro přesun na předchozí stiskněte SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání stránky karet."},{name:"Kontextové menu editoru",
-legend:"Stiskněte ${contextMenu} nebo klávesu APPLICATION k otevření kontextového menu. Pak se přesuňte na další možnost menu pomocí TAB nebo ŠIPKY DOLŮ. Přesuňte se na předchozí možnost pomocí  SHIFT+TAB nebo ŠIPKY NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti menu. Podmenu současné možnosti otevřete pomocí MEZERNÍKU nebo ENTER či ŠIPKY DOLEVA. Kontextové menu uzavřete stiskem ESC."},{name:"Rámeček seznamu editoru",legend:"Uvnitř rámečku seznamu se přesunete na další položku menu pomocí TAB nebo ŠIPKA DOLŮ. Na předchozí položku se přesunete SHIFT + TAB nebo ŠIPKA NAHORU. Stiskněte MEZERNÍK nebo ENTER pro zvolení možnosti seznamu. Stiskněte ESC pro uzavření seznamu."},
-{name:"Lišta cesty prvku v editoru",legend:"Stiskněte ${elementsPathFocus} pro procházení lišty cesty prvku. Na další tlačítko prvku se přesunete pomocí TAB nebo ŠIPKA VPRAVO. Na předchozí položku se přesunete pomocí SHIFT + TAB nebo ŠIPKA VLEVO. Stiskněte MEZERNÍK nebo ENTER pro vybrání prvku v editoru."}]},{name:"Příkazy",items:[{name:" Příkaz Zpět",legend:"Stiskněte ${undo}"},{name:" Příkaz Znovu",legend:"Stiskněte ${redo}"},{name:" Příkaz Tučné",legend:"Stiskněte ${bold}"},{name:" Příkaz Kurzíva",
-legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",
-legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js
deleted file mode 100644
index 547e77c..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT-TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Tu mewn i'r deialog, pwyswch TAB i fynd i'r maes nesaf ar y deialog, pwyswch SHIFT + TAB i symud i faes blaenorol, pwyswch ENTER i gyflwyno'r deialog, pwyswch ESC i ddiddymu'r deialog. Ar gyfer deialogau sydd â thudalennau aml-tab, pwyswch ALT + F10 i lywio'r tab-restr. Yna symudwch i'r tab nesaf gyda TAB neu SAETH DDE. Symudwch i dab blaenorol gyda SHIFT + TAB neu'r SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis y dudalen tab."},
-{name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT + TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."},
-{name:"Blwch Rhestr y Golygydd",legend:"Tu mewn rhestr-bocs, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT + TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch $ {elementsPathFocus} i fynd i'r elfennau llwybr bar. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT + TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]},
-{name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/da.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/da.js
deleted file mode 100644
index fa0c807..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/da.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:" Bold command",legend:"Klik ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Klik ${underline}"},{name:" Link command",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Kilk ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/de.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
deleted file mode 100644
index 70ecde1..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste 'ESC' drücken.",legend:[{name:"Allgemein",items:[{name:"Editor Symbolleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT-TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."},
-{name:"Editor Dialog",legend:"Innerhalb des Dialogs drücken Sie TAB um zum nächsten Dialogfeld zu gelangen, drücken Sie SHIFT-TAG um zum vorherigen Feld zu wechseln, drücken Sie ENTER um den Dialog abzusenden und ESC um den Dialog zu abzubrechen. Um zwischen den Reitern innerhalb eines Dialogs zu wechseln drücken sie ALT-F10. Um zum nächsten Reiter zu gelangen können Sie TAB oder die rechte Pfeiltaste. Zurück gelangt man mit SHIFT-TAB oder der linken Pfeiltaste. Mit der Leertaste oder Enter kann man den Reiter auswählen."},
-{name:"Editor Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},{name:"Editor Listen",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der Shift-TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},
-{name:"Editor Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT-TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},{name:"Befehle",items:[{name:"Wiederholen Befehl",legend:"Drücken Sie ${undo}"},{name:"Rückgängig Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift Befehl",
-legend:"Drücken Sie ${bold}"},{name:"Italic Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichung Befehl",legend:"Drücken Sie ${underline}"},{name:"Link Befehl",legend:"Drücken Sie ${link}"},{name:"Symbolleiste zuammenklappen Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/el.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/el.js
deleted file mode 100644
index cbf7e6d..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/el.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες Προσβασιμότητας",contents:"Περιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"Εργαλειοθήκη Επεξεργαστή",legend:"Πατήστε ${toolbarFocus} για να περιηγηθείτε στην γραμμή εργαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γραμμής εργαλείων με TAB και Shift-TAB. Μετακινηθείτε ανάμεσα στα κουμπία εργαλείων με ΔΕΞΙ και ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΚΕΝΟ ή ENTER για να ενεργοποιήσετε το ενεργό κουμπί εργαλείου."},{name:"Παράθυρο Διαλόγου Επεξεργαστή",
-legend:"Μέσα σε ένα παράθυρο διαλόγου, πατήστε TAB για να μεταβείτε στο επόμενο πεδίο ή SHIFT + TAB για να μεταβείτε στο προηγούμενο. Πατήστε ENTER για να υποβάλετε την φόρμα. Πατήστε ESC για να ακυρώσετε την διαδικασία της φόρμας. Για παράθυρα διαλόγων που έχουν πολλές σελίδες σε καρτέλες πατήστε ALT + F10 για να μεταβείτε στην λίστα των καρτέλων. Στην συνέχεια μπορείτε να μεταβείτε στην επόμενη καρτέλα πατώντας TAB ή RIGHT ARROW. Μπορείτε να μεταβείτε στην προηγούμενη καρτέλα πατώντας SHIFT + TAB ή LEFT ARROW. Πατήστε SPACE ή ENTER για να επιλέξετε την καρτέλα για προβολή."},
-{name:"Αναδυόμενο Μενού Επεξεργαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενού. Μετά μετακινηθείτε στην επόμενη επιλογή του μενού με  TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην προηγούμενη επιλογή με SHIFT+TAB ή ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το τρέχων στοιχείο. Ανοίξτε το αναδυόμενο μενού της τρέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αρχικό στοιχείο μενού με ESC ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο μενού με ESC."},
-{name:"Κουτί Λίστας Επεξεργαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο προηγούμενο στοιχείο με SHIFT + TAB ή ΠΑΝΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"Μπάρα Διαδρομών Στοιχείων Επεξεργαστή",legend:"Πατήστε ${elementsPathFocus} για να περιηγηθείτε στην μπάρα διαδρομών στοιχείων του επεξεργαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του προηγούμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεργαστή."}]},
-{name:"Εντολές",items:[{name:" Εντολή αναίρεσης",legend:"Πατήστε ${undo}"},{name:" Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:" Εντολή έντονης γραφής",legend:"Πατήστε ${bold}"},{name:" Εντολή πλάγιας γραφής",legend:"Πατήστε ${italic}"},{name:" Εντολή υπογράμμισης",legend:"Πατήστε ${underline}"},{name:" Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:" Εντολή Σύμπτηξης Εργαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Βοήθεια Προσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
deleted file mode 100644
index 0124a3c..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js
deleted file mode 100644
index eed3898..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Ĝeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. Moviĝu al la sekva aŭ antaŭa grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA-TABA. Moviĝu al la sekva aŭ antaŭa butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por aktivigi la ilbretbutonon."},
-{name:"Redaktildialogo",legend:"En dialogo, premu la TABAN klavon por navigi al la sekva dialogkampo, premu la MAJUSKLIGAN + TABAN klavojn por reveni al la antaŭa kampo, premu la ENENklavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Por dialogoj kun pluraj retpaĝoj sub langetoj, premu ALT + F10 por navigi al la langetlisto. Poste moviĝu al la sekva langeto per la klavo TABA aŭ SAGO DEKSTREN. Moviĝu al la antaŭa langeto per la klavoj MAJUSKLIGA + TABA aŭ  SAGO MALDEKSTREN. Premu la SPACETklavon aŭ la ENENklavon por selekti la langetretpaĝon."},
-{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aŭ entajpu la KLAVKOMBINAĴON por malfermi la kuntekstan menuon. Poste moviĝu al la sekva opcio de la menuo per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa opcio per la klavoj MAJUSKLGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aŭ la ENENklavo aŭ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aŭ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."},
-{name:"Fallisto de la redaktilo",legend:"En fallisto, moviĝu al la sekva listelemento per la klavoj TABA aŭ SAGO SUBEN. Moviĝu al la antaŭa listelemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO SUPREN. Premu la SPACETklavon aŭ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. Moviĝu al la butono de la sekva elemento per la klavoj TABA aŭ SAGO DEKSTREN. Moviĝu al la butono de la antaŭa elemento per la klavoj MAJUSKLIGA + TABA aŭ SAGO MALDEKSTREN. Premu la SPACETklavon aŭ ENENklavon por selekti la elementon en la redaktilo."}]},
-{name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/es.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/es.js
deleted file mode 100644
index 877dc8c..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/es.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de acceso",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY-TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo",
-legend:"Dentro de un cuadro de diálogo, presione la tecla TAB para desplazarse al campo siguiente del cuadro de diálogo, pulse SHIFT + TAB para desplazarse al campo anterior, pulse ENTER para presentar cuadro de diálogo, pulse la tecla ESC para cancelar el diálogo. Para los diálogos que tienen varias páginas, presione ALT + F10 para navegar a la pestaña de la lista. Luego pasar a la siguiente pestaña con TAB o FLECHA DERECHA. Para ir a la ficha anterior con SHIFT + TAB o FLECHA IZQUIERDA. Presione ESPACIO o ENTRAR para seleccionar la página de ficha."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/et.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/et.js
deleted file mode 100644
index 5e95b6a..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/et.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Üldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js
deleted file mode 100644
index 4b182de..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعملهای دسترسی",contents:"راهنمای فهرست مطالب. برای بستن این کادر محاورهای ESC را فشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بفشارید. با کلید Tab و Shif-Tab در مجموعه نوار ابزار بعدی و قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی و بعدی با کلید جهتنمای راست و چپ جابجا شوید. کلید Space یا Enter را برای فعال کردن کلید نوار ابزار بفشارید."},{name:"پنجره محاورهای ویرایشگر",
-legend:"در داخل یک پنجره محاورهای، کلید Tab را بفشارید تا به پنجرهی بعدی بروید، Shift+Tab برای حرکت به فیلد قبلی، فشردن Enter برای ثبت اطلاعات پنجره، فشردن Esc برای لغو پنجره محاورهای و برای پنجرههایی که چندین برگه دارند، فشردن Alt+F10 جهت رفتن به Tab-List. در نهایت حرکت به برگه بعدی با Tab یا کلید جهتنمای راست. حرکت به برگه قبلی با Shift+Tab یا کلید جهتنمای چپ. فشردن Space یا Enter برای انتخاب یک برگه."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بفشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab و یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. فشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter و یا کلید جهتنمای راست و چپ. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای چپ. بستن منوی متن با Esc."},
-{name:"جعبه فهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB و یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بفشارید. کلید ESC را برای بستن جعبه لیست بفشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رفتن به مسیر عناصر ${elementsPathFocus} را بفشارید. حرکت به کلید عنصر بعدی با کلید Tab یا  کلید جهتنمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهتنمای چپ. فشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]},
-{name:"فرمانها",items:[{name:"بازگشت فرمان",legend:"فشردن ${undo}"},{name:"انجام مجدد فرمان",legend:"فشردن ${redo}"},{name:"فرمان متن درشت",legend:"فشردن ${bold}"},{name:"فرمان متن کج",legend:"فشردن ${italic}"},{name:"فرمان متن زیرخطدار",legend:"فشردن ${underline}"},{name:"فرمان پیوند",legend:"فشردن ${link}"},{name:"بستن نوار ابزار فرمان",legend:"فشردن ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"راهنمای دسترسی",legend:"فشردن ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js
deleted file mode 100644
index e0b7558..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT-TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."},
-{name:"Editorin dialogi",legend:"Dialogin sisällä, painamalla TAB siirryt seuraavaan dialogin kenttään, painamalla SHIFT+TAB siirryt aiempaan kenttään, painamalla ENTER lähetät dialogin, painamalla ESC peruutat dialogin. Dialogeille joissa on useita välilehtiä, paina ALT+F10 siirtyäksesi välillehtilistaan. Siirtyäksesi seuraavaan välilehteen paina TAB tai NUOLI OIKEALLE. Siirry edelliseen välilehteen painamalla SHIFT+TAB tai nuoli vasemmalle. Paina VÄLILYÖNTI tai ENTER valitaksesi välilehden."},{name:"Editorin oheisvalikko",
-legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."},{name:"Editorin listalaatikko",
-legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]},
-{name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js
deleted file mode 100644
index 1d2a58a..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions pour l'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche ESC (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."},
-{name:"Dialogue de léditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."},
-{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches  SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."},
-{name:"Zone de liste en menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de léditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]},
-{name:"Commandes",items:[{name:" Commande défaire",legend:"Appuyer sur ${undo}"},{name:" Commande refaire",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
deleted file mode 100644
index 23ea2c4..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"એક્ક્ષેબિલિટી ની વિગતો",contents:"હેલ્પ. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"એડિટર ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"એડિટર ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અન્ડું કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલ્દનો કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/he.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/he.js
deleted file mode 100644
index 34bceac..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/he.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הוראות נגישות",contents:"הוראות נגישות. לסגירה לחץ אסקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלים",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלים. עבור לכפתור הבא עם מקש הטאב (TAB) או חץ שמאלי. עבור לכפתור הקודם עם מקש השיפט (SHIFT) + טאב (TAB) או חץ ימני. לחץ רווח או אנטר (ENTER) כדי להפעיל את הכפתור הנבחר."},{name:"דיאלוגים (חלונות תשאול)",legend:"בתוך דיאלוג, לחץ טאב (TAB) כדי לנווט לשדה הבא, לחץ שיפט (SHIFT) + טאב (TAB) כדי לנווט לשדה הקודם, לחץ אנטר (ENTER) כדי לשלוח את הדיאלוג, לחץ אסקייפ (ESC) כדי לבטל. בתוך דיאלוגים בעלי מספר טאבים (לשוניות), לחץ אלט (ALT) + F10 כדי לנווט לשורת הטאבים. נווט לטאב הבא עם טאב (TAB) או חץ שמאלי. עבור לטאב הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי להיכנס לטאב."},
-{name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} או APPLICATION KEYכדי לפתוח את תפריט ההקשר. עבור לאפשרות הבאה עם טאב (TAB) או חץ למטה. עבור לאפשרות הקודמת עם שיפט (SHIFT) + טאב (TAB) או חץ למעלה. לחץ רווח או אנטר (ENTER) כדי לבחור את האפשרות. פתח את תת התפריט (Sub-menu) של האפשרות הנוכחית עם רווח או אנטר (ENTER) או חץ שמאלי. חזור לתפריט האב עם אסקייפ (ESC) או חץ שמאלי. סגור את תפריט ההקשר עם אסקייפ (ESC)."},{name:"תפריטים צפים (List boxes)",legend:"בתוך תפריט צף, עבור לפריט הבא עם טאב (TAB) או חץ למטה. עבור לתפריט הקודם עם שיפט (SHIFT) + טאב (TAB) or חץ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"עץ אלמנטים (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ האלמנטים. עבור לפריט הבא עם טאב (TAB) או חץ ימני. עבור לפריט הקודם עם שיפט (SHIFT) + טאב (TAB) או חץ שמאלי. לחץ רווח או אנטר (ENTER) כדי לבחור את האלמנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד אחרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד אחרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק",
-legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלים",legend:"לחץ ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" הוראות נגישות",legend:"לחץ ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
deleted file mode 100644
index 4a8f179..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामान्य",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js
deleted file mode 100644
index b8ff14a..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Općenito",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js
deleted file mode 100644
index f3bd161..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Általános",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/it.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/it.js
deleted file mode 100644
index e734f7d..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/it.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premi ${toolbarFocus} per navigare fino alla barra degli strumenti. Muoviti tra i gruppi della barra degli strumenti con i tasti Tab e Maiusc-Tab. Spostati tra il successivo ed il precedente pulsante della barra degli strumenti usando le frecce direzionali Destra e Sinistra. Premi Spazio o Invio per attivare il pulsante della barra degli strumenti."},
-{name:"Finestra Editor",legend:"All'interno di una finestra di dialogo, premi Tab per navigare fino al campo successivo della finestra di dialogo, premi Maiusc-Tab per tornare al campo precedente, premi Invio per inviare la finestra di dialogo, premi Esc per uscire. Per le finestre che hanno schede multiple, premi Alt+F10 per navigare nella lista delle schede. Quindi spostati alla scheda successiva con il tasto Tab oppure con la Freccia Destra. Torna alla scheda precedente con Maiusc+Tab oppure con la Freccia Sinistra. Premi Spazio o Invio per scegliere la scheda."},
-{name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con  MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."},
-{name:"Box Lista Editor",legend:"Dentro un box-lista, muoviti al prossimo elemento della lista con TAB o con la Freccia direzionale giù. Spostati all'elemento precedente con MAIUSC+TAB oppure con Freccia direzionale sopra. Premi SPAZIO o INVIO per scegliere l'opzione della lista. Premi ESC per chiudere il box-lista."},{name:"Barra percorso elementi editor",legend:"Premi ${elementsPathFocus} per navigare tra gli elementi della barra percorso. Muoviti al prossimo pulsante di elemento con TAB o la Freccia direzionale destra. Muoviti al pulsante precedente con MAIUSC+TAB o la Freccia Direzionale Sinistra. Premi SPAZIO o INVIO per scegliere l'elemento nell'editor."}]},
-{name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js
deleted file mode 100644
index 28cd800..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"全般",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js
deleted file mode 100644
index c85c682..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی ده‌ستكاریكه‌ر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB له‌گه‌ڵ‌ SHIFT-TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی ده‌ستكاریكه‌ر",
-legend:"لەهەمانکاتدا کەتۆ لەدیالۆگی, کلیکی کلیلی TAB بۆ ڕابەری خانەی دیالۆگێکی تر, داگرتنی کلیلی SHIFT + TAB بۆ گواستنەوەی بۆ خانەی پێشووتر, کلیكی کلیلی ENTER بۆ ڕازیکردنی دیالۆگەکە, کلیكی کلیلی ESC بۆ هەڵوەشاندنەوەی دیالۆگەکە. بۆ دیالۆگی لەبازدەری (تابی) زیاتر, کلیكی کلیلی ALT + F10 بۆ ڕابه‌ری لیستی بازده‌ره‌کان. بۆ چوونه‌ بازده‌ری تابی داهاتوو کلیكی کلیلی TAB یان کلیلی تیری ده‌ستی ڕاست. بۆچوونه‌ بازده‌ری تابی پێشوو داگرتنی کلیلی SHIFT + TAB یان کلیلی تیری ده‌ستی چه‌پ. کلیی کلیلی SPACE یان ENTER بۆ هه‌ڵبژاردنی بازده‌ر (تاب)."},
-{name:"پێڕستی سه‌رنووسه‌ر",legend:"کلیك ${contextMenu} یان دوگمه‌ی لیسته‌(Menu) بۆ کردنه‌وه‌ی لیسته‌ی ده‌ق. بۆ چوونه‌ هه‌ڵبژارده‌یه‌کی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو له‌خواره‌وه‌ بۆ چوون بۆ هه‌ڵبژارده‌ی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سه‌ره‌وه. داگرتنی کلیلی SPACE یان ENTER بۆ هه‌ڵبژاردنی هه‌ڵبژارده‌ی لیسته‌. بۆ کردنه‌وه‌ی لقی ژێر لیسته‌ له‌هه‌ڵبژارده‌ی لیسته‌ کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری ده‌ستی ڕاست. بۆ گه‌ڕانه‌وه بۆ سه‌ره‌وه‌ی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری ده‌ستی چه‌پ. بۆ داخستنی لیسته‌ کلیكی کلیلی ESC بکه."},
-{name:"لیستی سنووقی سه‌رنووسه‌ر",legend:"له‌ناو سنوقی لیست, چۆن بۆ هه‌ڵنبژارده‌ی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو له‌خوار. چوون بۆ هه‌ڵبژارده‌ی لیستی پێشوو کلیکی کلیلی SHIFT + TAB یان کلیلی تیری ڕوو له‌سه‌ره‌وه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هه‌ڵبژارده‌ی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابه‌ری تووڵامرازی توخمه‌کان. چوون بۆ دوگمه‌ی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری ده‌ستی ڕاست. چوون بۆ دوگمه‌ی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری ده‌ستی چه‌پ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمه‌که‌ له‌سه‌رنووسه."}]},
-{name:"فه‌رمانه‌کان",items:[{name:"فه‌رمانی پووچکردنه‌وه",legend:"کلیك ${undo}"},{name:"فه‌رمانی هه‌ڵگه‌ڕانه‌وه",legend:"کلیك ${redo}"},{name:"فه‌رمانی ده‌قی قه‌ڵه‌و",legend:"کلیك ${bold}"},{name:"فه‌رمانی ده‌قی لار",legend:"کلیك ${italic}"},{name:"فه‌رمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"فه‌رمانی به‌سته‌ر",legend:"کلیك ${link}"},{name:"شارده‌نه‌وه‌ی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"ده‌ستپێگه‌یشتنی یارمه‌تی",legend:"کلیك ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
deleted file mode 100644
index 1cbb428..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybės",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js
deleted file mode 100644
index d93a754..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"Pieejamības instrukcija",contents:"Palīdzības saturs. Lai aizvērtu ciet šo dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rīkjosla",legend:"Nospiediet ${toolbarFocus} lai pārvietotos uz rīkjoslu. Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas grupu izmantojiet pogu TAB un SHIFT+TAB.  Lai pārvietotos uz nākošo vai iepriekšējo rīkjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizētu rīkjosla pogu."},
-{name:"Redaktora dialoga  logs",legend:"Dialoga logā nospiediet pogu TAB lai pārvietotos uz nākošo dialoga loga lauku, nospiediet SHIFT+TAB lai atgrieztos iepriekšējā laukā, nospiediet ENTER lai apstiprinātu dialoga datus, nospiediet ESC lai aizvērtu šo dialogu. Dialogam kuram ir vairākas cilnes, nospiediet ALT+F10 lai pārvietotos uz nepieciešamo cilni.  Lai pārvietotos uz nākošo cilni izmantojiet pogu TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo cilni nospiediet SHIFT+TAB vai kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos lapas cilni."},
-{name:"Redaktora satura izvēle",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvērtu satura izvēlni. Lai pārvietotos uz nākošo izvēlnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pārvietotos uz iepriekšējo opciju izmantojiet  SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvelētos izvēlnes opciju. Atveriet tekošajā opcija apakšizvēlni ar SAPCE vai ENTER ka ari to var izdarīt ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvēlni nospiediet ESC vai Kreiso bultiņu. Lai aizvērtu ciet izvēlnes saturu nospiediet ESC."},
-{name:"Redaktora saraksta lauks",legend:"Saraksta laukā, lai pārvietotos uz nākošo saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pārvietotos uz iepriekšējo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augšu. Nospiediet SPACE vai ENTER lai izvēlētos saraksta opcijas. Nospiediet ESC lai aizvērtu saraksta lauku. "},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pārvietotos uz  elementa ceļa joslu. Lai pārvietotos uz nākošo elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pārvietotos uz iepriekšējo elementa pogu  izmantojiet SHIFT + TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvēlētos elementu redaktorā."}]},
-{name:"Komandas",items:[{name:"Komanda atcelt darbību",legend:"Nospiediet ${undo}"},{name:"Komanda atkārtot darbību",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"Kursīva komanda",legend:"Nospiediet ${italic}"},{name:"Apakšsvītras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"Rīkjoslas aizvēršanas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:" Access previous focus space command",
-legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
deleted file mode 100644
index 9353161..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"Инструкции за пристапност",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиснете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот",
-legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},
-{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
-{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
deleted file mode 100644
index f9588d6..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js
deleted file mode 100644
index 7bb3de5..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor",
-legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."},
-{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]},
-{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js
deleted file mode 100644
index 524cdfd..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."},
-{name:"Dialoog tekstverwerker",legend:"In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Voor dialoogvensters met meerdere tabbladen, druk op ALT+F10 om naar de tabset te navigeren. Schakel naar het volgende tabblad met TAB of PIJL RECHTS. Schakel naar het vorige tabblad met SHIFT+TAB of PIJL LINKS. Druk op SPATIE of ENTER om het tabblad te selecteren."},
-{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."},{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."},
-{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]},{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht",
-legend:"Druk up ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/no.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/no.js
deleted file mode 100644
index dfb8493..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/no.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor",
-legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."},
-{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]},
-{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js
deleted file mode 100644
index 7bbc9e4..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ogólne",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js
deleted file mode 100644
index cc8d4f4..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT-TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."},
-{name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo campo, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para enviar o diálogo, pressione ESC para cancelar o diálogo. Para diálogos que tem múltiplas abas, pressione ALT + F10 para navegar para a lista de abas, então mova para a próxima aba com SHIFT + TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar a aba."},{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."},
-{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT + TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."},{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com  SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},
-{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"},{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
deleted file mode 100644
index 08e50f8..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Geral",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js
deleted file mode 100644
index e4794d2..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara.",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialog editor",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor meniu contextual",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
deleted file mode 100644
index cf0fce5..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Основное",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js
deleted file mode 100644
index 1093ed9..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"Inštrukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlačte ESC.",legend:[{name:"Všeobecne",items:[{name:"Lišta nástrojov editora",legend:"Stlačte ${toolbarFocus} pre navigáciu na lištu nástrojov. Medzi ďalšou a predchádzajúcou lištou nástrojov sa pohybujete s TAB a SHIFT-TAB. Medzi ďalším a predchádzajúcim tlačidlom na lište nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. Stlačte medzerník alebo ENTER pre aktiváciu tlačidla lišty nástrojov."},
-{name:"Editorový dialóg",legend:"V dialogu, stlačte TAB pre navigáciu na ďalšie dialógové pole, stlačte STIFT + TAB pre presun na predchádzajúce pole, stlačte ENTER pre odoslanie dialógu, stlačte ESC pre zrušenie dialógu. Pre dialógy, ktoré majú viac záložiek, stlačte ALT + F10 pre navigácou do zoznamu záložiek. Potom sa posúvajte k ďalšej žáložke pomocou TAB alebo pravou šípkou. Pre presun k predchádzajúcej záložke, stlačte SHIFT + TAB alebo ľavú šípku. Stlačte medzerník alebo ENTER pre vybranie záložky."},
-{name:"Editorové kontextové menu",legend:"Stlačte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ďalšie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodičovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."},
-{name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ďalšiu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT + TAB alebo hornou šípkou. Stlačte medzerník alebo ENTER pre výber možnosti zoznamu. Stlačte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"Stlačte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlačidlo ďalšieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlačidlu s SHIFT + TAB alebo ľavou šípkou. Stlačte medzerník alebo ENTER pre výber prvku v editore."}]},
-{name:"Príkazy",items:[{name:"Vrátiť príkazy",legend:"Stlačte ${undo}"},{name:"Nanovo vrátiť príkaz",legend:"Stlačte ${redo}"},{name:"Príkaz na stučnenie",legend:"Stlačte ${bold}"},{name:"Príkaz na kurzívu",legend:"Stlačte ${italic}"},{name:"Príkaz na podčiarknutie",legend:"Stlačte ${underline}"},{name:"Príkaz na odkaz",legend:"Stlačte ${link}"},{name:"Príkaz na zbalenie lišty nástrojov",legend:"Stlačte ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc prístupnosti",legend:"Stlačte ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js
deleted file mode 100644
index d6ad1c4..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Splošno",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
deleted file mode 100644
index cf50e4b..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på $ {toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT-TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck Space eller ENTER för att aktivera knappen i verktygsfältet."},
-{name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan. Du trycker SKIFT + TAB för att flytta till föregående fält. Tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT + F10 navigera till fliklistan. Flytta sedan till nästa flik med HÖGERPIL. Flytta till föregående flik med SHIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja fliken."},{name:"Editor för innehållsmeny",
-legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},{name:"Editor för List Box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT + TAB eller UPPIL. Tryck Space eller ENTER för att välja listan alternativet. Tryck ESC för att stänga listan-boxen."},
-{name:"Editor för elementens sökväg",legend:"Tryck på $ {elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja element i redigeraren."}]},{name:"Kommandon",items:[{name:"Kommandot ångra",legend:"Tryck på ${undo}"},{name:"Kommandot gör om",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"},
-{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Hjälp om hjälpmedel",legend:"Tryck på $ {a11yHelp}"},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js
deleted file mode 100644
index bef899b..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js
+++ /dev/null
@@ -1,10 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Araç Çubuğu Editörü",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT-TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."},
-{name:"Dialog Editörü",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."},
-{name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT + TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."},
-{name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT + TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"${undo} basın"},{name:" Tekrar komutu uygula",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"},
-{name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:"Erişilebilirlik Yardımı",legend:"${a11yHelp} basın"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js
deleted file mode 100644
index c6c174f..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بېسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بېسىلسا قورال بالداققا يېتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"تەھرىرلىگۈچ تىزىمى",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"تەھرىرلىگۈچ ئېلېمېنت يول بالداق",legend:"${elementsPathFocus} بېسىلسا ئېلېمېنت يول بالداققا يېتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا كېيىنكى ئېلېمېنت تاللىنىدۇ،  SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئېلېمېنت تاللىنىدۇ،  بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئېلېمېنت تاللىنىدۇ."}]},{name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن يېنىۋال",legend:"${undo} نى بېسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بېسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بېسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بېسىڭ"},
-{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بېسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بېسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بېسىڭ"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بېسىڭ"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js
deleted file mode 100644
index 2451e8c..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Основне",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js
deleted file mode 100644
index e23f1f0..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"Accessibility Instructions",contents:"Nội dung Hỗ trợ. Nhấn ESC để đóng hộp thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn th",legend:"Nhấn ${toolbarFocus} để điều hướng đến thanh công cụ. Nhấn TAB và SHIFT-TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÁI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÍM CÁCH hoặc ENTER để kích hoạt nút trên thanh công c."},{name:"Hộp thoại Biên t",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Trình đơn Ngữ cảnh cBộ soạn thảo",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with  SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
deleted file mode 100644
index ef3a2db..0000000
--- a/core/misc/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
+++ /dev/null
@@ -1,7 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助说明",contents:"帮助内容。要关闭此对话框请按 ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具栏",legend:"按 ${toolbarFocus} 导航到工具栏，使用 TAB 键或 SHIFT+TAB 组合键选择工具栏组，使用左右箭头键选择按钮，按空格键或回车键以应用选中的按钮。"},{name:"编辑器对话框",legend:"在对话框内，TAB 键移动到下一个字段，SHIFT + TAB 组合键移动到上一个字段，ENTER 键提交对话框，ESC 键取消对话框。对于有多标签的对话框，用ALT + F10来移到标签列表。然后用 TAB 键或者向右箭头来移动到下一个标签；SHIFT + TAB 组合键或者向左箭头移动到上一个标签。用 SPACE 键或者 ENTER 键选择标签。"},{name:"编辑器上下文菜单",legend:"用 ${contextMenu}或者 应用程序键 打开上下文菜单。然后用 TAB 键或者下箭头键来移动到下一个菜单项；SHIFT + TAB 组合键或者上箭头键移动到上一个菜单项。用 SPACE 键或者 ENTER 键选择菜单项。用 SPACE 键，ENTER 键或者右箭头键打开子菜单。返回菜单用 ESC 键或者左箭头键。用 ESC 键关闭上下文菜单。"},
-{name:"编辑器列表框",legend:"在列表框中，移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT + TAB 组合键或者上箭头键，用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径栏",legend:"按 ${elementsPathFocus} 以导航到元素路径栏，使用 TAB 键或右箭头键选择下一个元素，使用 SHIFT+TAB 组合键或左箭头键选择上一个元素，按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" 重做命令",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具栏折叠命令",legend:"按 ${toolbarCollapse}"},
-{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" 无障碍设计说明",legend:"按 ${a11yHelp}"}]}]});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/about/dialogs/about.js b/core/misc/ckeditor/plugins/about/dialogs/about.js
deleted file mode 100644
index 3d9156b..0000000
--- a/core/misc/ckeditor/plugins/about/dialogs/about.js
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("about",function(a){a=a.lang.about;return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+CKEDITOR.plugins.get("about").path+'dialogs/logo_ckeditor.png);background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}</style><div class="cke_about_container"><div class="cke_about_logo"></div><p>CKEditor '+
-CKEDITOR.version+" (revision "+CKEDITOR.revision+')<br><a href="http://ckeditor.com/">http://ckeditor.com</a></p><p>'+a.help.replace("$1",'<a href="http://docs.ckeditor.com/user">'+a.userGuide+"</a>")+"</p><p>"+a.moreInfo+'<br><a href="http://ckeditor.com/about/license">http://ckeditor.com/about/license</a></p><p>'+a.copy.replace("$1",'<a href="http://cksource.com/">CKSource</a> - Frederico Knabben')+"</p></div>"}]}],buttons:[CKEDITOR.dialog.cancelButton]}});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/about/dialogs/logo_ckeditor.png b/core/misc/ckeditor/plugins/about/dialogs/logo_ckeditor.png
deleted file mode 100644
index ad01902..0000000
--- a/core/misc/ckeditor/plugins/about/dialogs/logo_ckeditor.png
+++ /dev/null
@@ -1,10 +0,0 @@
-PNG
-
-   IHDR      =   )  PLTE&8<=\ dY%2颤72N[ju`cdҚ|jA\d6oz}~w"^֘SzP~Snyݽ6Ia$*T,sSVW.#UA尳UEIJ+-mpqׯ~oi(_.7J*W</4HMmy8ދE3r:0݈Dr<lۋ:ꕗD;=gvK=D	x]c
-|_S;$qF`={??	Հ؂|  IDATx^s<sm۶ml۶mm~۝l^Kz=dv6{Iw\tcsKշb_<Mͧ_qVNs?㚬ٞ㮼Z(F4&9ah|MՍY"#ō^3!)K㮝h&SZ:(hE|O$*c\0$A{_>tg1FϐQ^y2\9Zwm7/-rggXAN.YCш1^1? c׽On1Ÿxc|0᥌.,Yyȗhmb<5	dXX0QcC"1\sdw>~=99Gb46z5:~&6a }5(4xI}j{SD=SS<}M oxa?سAu
-w1Z1.}pF/wҠ~ 8v_0́ѡɱcs
-,vY
-(ƈIPǕ:6|sa΂QhP&y.Jm2nUE<ٸa 3 ͙ˌ;]3;|Q"$3 ޕwy~GLѻ%H2Ud$2_-fN4fѠ=]bOx~I~ƍ+{xL,)2q@#[͒qMxf2Lƾ#^E-2%!R)$qY1;߅\1Bnӏ$%Qouwej4,X>hLlǖyrA9 0xϺdH<}'޸@RԌUA*|c^h,D]A|[#&K^灊AXHu$g1{FgF7ض1$~Êw5:CLnA4hS)Ay|q'ӓcUdXh޹^|{jCS+]e*\j[
-{/+=ڀxݳ
- aF6l9̱(*{m$m, #iUѠDF3>ұgY^*+1!˹|Em4+c+\ؠ(~4}è`OSAAD~mclPO"҄96lpoB⾯J{^j1lPOcmR%%̵H4JHWc5V30عE"agQr\#4UhS=W=FڷE`H'a{x w{R\ɨD9ՍA}#lqPO㯰~ߵHGlzN^B
->kAb4ae Ȉcذx߸9;H()PmdT9Sl̂)ƭo; LDB5		Dina#f<qk)0z/.=M'[qPKgLXkܜbZG?%(43[X"g@sc}3"lYxQԋٍZ,>aMRN=orgFcSk<P1k_-?Oxul||stb! `'PWCYᑙM5qqWs)22Ә	(ȸV 0<yN}6bӦ4ԩ4E?L mޔ"(#IIkD1`&Fi	Zۛ6;ᑸk}nBEVkZ3T5T6T7rrrbSwEiU0    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/clipboard/dialogs/paste.js b/core/misc/ckeditor/plugins/clipboard/dialogs/paste.js
deleted file mode 100644
index 8f94a71..0000000
--- a/core/misc/ckeditor/plugins/clipboard/dialogs/paste.js
+++ /dev/null
@@ -1,11 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("paste",function(c){function g(a){var b=new CKEDITOR.dom.document(a.document),d=b.getBody(),e=b.getById("cke_actscrpt");e&&e.remove();d.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement));
-b.getWindow().getFrame().removeCustomData("pendingFocus")&&d.focus()}var f=c.lang.clipboard,h=CKEDITOR.env.isCustomDomain();c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data})},null,null,1E3);return{title:f.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||f.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat||
-CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'<div style="white-space:normal;width:340px">'+f.securityMsg+"</div>"},{type:"html",id:"pasteMsg",html:'<div style="white-space:normal;width:340px">'+f.pasteMsg+"</div>"},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(),
-b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='<html dir="'+c.config.contentsLangDirection+'" lang="'+(c.config.contentsLanguage||c.langCode)+'"><head><style>body{margin:3px;height:95%}</style></head><body><script id="cke_actscrpt" type="text/javascript">window.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(g,a)+",this);<\/script></body></html>",d=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0"  allowTransparency="true" src="'+
-(CKEDITOR.env.air?"javascript:void(0)":h?"javascript:void((function(){document.open();document.domain='"+document.domain+"';document.close();})())\"":"")+'" role="region" aria-label="'+f.pasteArea+'" aria-describedby="'+a.getContentElement("general","pasteMsg").domId+'" aria-multiple="true"></iframe>');d.on("load",function(a){a.removeListener();a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody());CKEDITOR.env.air&&g.call(this,a.getWindow().$)},a);d.setCustomData("dialog",a);a=this.getElement();
-a.setHtml("");a.append(d);if(CKEDITOR.env.ie){var e=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute" role="presentation"></span>');e.on("focus",function(){d.$.contentWindow.focus()});a.append(e);this.focus=function(){e.focus();this.fire("focus")}}this.getInputElement=function(){return d};CKEDITOR.env.ie&&(a.setStyle("display","block"),a.setStyle("height",d.$.offsetHeight+2+"px"))},commit:function(){var a=this.getDialog().getParentEditor(),b=this.getInputElement().getFrameDocument().getBody(),
-d=b.getBogus(),c;d&&d.remove();c=b.getHtml();setTimeout(function(){a.fire("pasteDialogCommit",c)},0)}}]}]}});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/dialog/dialogDefinition.js b/core/misc/ckeditor/plugins/dialog/dialogDefinition.js
deleted file mode 100644
index 2cb5d24..0000000
--- a/core/misc/ckeditor/plugins/dialog/dialogDefinition.js
+++ /dev/null
@@ -1,4 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
diff --git a/core/misc/ckeditor/plugins/fakeobjects/images/spacer.gif b/core/misc/ckeditor/plugins/fakeobjects/images/spacer.gif
deleted file mode 100644
index 5bfd67a..0000000
--- a/core/misc/ckeditor/plugins/fakeobjects/images/spacer.gif
+++ /dev/null
@@ -1 +0,0 @@
-GIF89a          !    ,       D ;
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/icons.png b/core/misc/ckeditor/plugins/icons.png
deleted file mode 100644
index 87c33cb..0000000
--- a/core/misc/ckeditor/plugins/icons.png
+++ /dev/null
@@ -1,43 +0,0 @@
-PNG
-
-   IHDR         xY    IDATx}ktՕwjCjI-zX-Y2e1xȅ5pYss@d0 0db2aB101K1l=GwU*UUWuyZ9_Oucc ]zι, {̙3n###8s9
-/+3[t [z|~dd˗޿S^m)3)UWWD" =[lWۇΝ;nNN |EU@c֬YLȮcˌcPWW(kl  "zF<4ɛ.]*TWWW*0zܡ)X744222sv:uP	lZӅVt/DAkDp/5
-Gi_>33sceeOO[螴JBD?!#D(( c >	p.LF$";c3g0eʔF&Q 1]HF H0LGǌODA7[,n 	FTԠlիa"Bٳg NHn?0>f͚pAAl֬YC	 JZyDQ  E &/\phmb،cl&cl9clq\www`yŚrD'|rMMkIHp8ܼppDC{ƌ<pHs8K,CDv9s-YD(((p@1v#c: o<Z;Ǹ
-D, c999uuuQ@	 hl p8<y2Ο?B ѣGaz`3O</^cl,Yx ]< `^?@D#W &	ܲ` AB!<xpWLlpv
->Iq!g7 tuum#0^i$cX,/> 1v,- o1.IH$!< j
-
-|~.<BFrM7$L:5HDF5X,(1(}lF>L`۔)SBYYY0zzz8duNo![V׿U D$kf:"L lr ; 8+~j=).//qphbϾ}F/]\\<|VXAE{{{|rcjhmm磾_~BE;@01&!CDhhh@,9حFX?c猱ea]ٳ~iNpBq@ v#kCڃ1FdH#]~#x'sX,O? cL Eu h?W^ w^8 10.!\adXB&MBYYۋ{/mmmW;W_}022<ľ*++1^іѣDtOD'h\1	` _`ѳIvz	q&Ҭ8׊)K%K^w\ K,{)U~뭷Z`hsQQmmmK dDDM ]`Aunn .]tiǎc읤0[1(z?jTX{ tz7F Րzolll_0[PP0PWW' `Vero5QSWW^ Nsh'+(,=MDh\}@DTh`8 D0s7c*S(H,&	`|>%/LDKԩS XTfLI0,~ ^omS^2q 088+&H04<c`1U"ƒ`M)$A1	` WLV8 X9P%uG?%|4珋7*O&`ҥakq= //Ou> KeG$q D2)wHX,X,Fy@ܧ bU/v*b<<O2_AAAA4EFFHR`eeeK ,PjZuAԜMR^}+**Bs)\uUBss*7>F>ħSnڴE7""_ CAʅJ.!N`Nn4^`0rO\$[%m5uT!''GZ5ovpWόh˦;cyvv6c8s^|e $ϝ;wYf8~W`> uhCCCFnn. W\D,üys HOOw%[??@ww7FFFSo駟i½ۦ4 o-ZoJJJK0qIIڄI&'ѦQnMMMϬY~Z x&C}뤷M6MMDh\e^$u
-2eJ=MJD/.@tt,F[zP}ǉnOQL~` &VLHtUUInn`Z 	O%" #5}I Hs8D =L̨EvujZq
-1fhTA 00Z2*'.H t&?%$_*=?cB4Ytօll &	 &?0>`D0"R ~i} M+eND`w-[u8/AiX^XjUAQQaDz뭧tjp<|ߏv9iӦ:`ݏby}vcǎ1k# G,{Ӄh4
->}zîc#U`q/ұHQQ{GO*x&`p8\;::c!SE3r ;AxSw޿ hpIʨw+	MMMNÇttt<Ϯ*ė.F|bK<rηܱcǣL%GМ9sz<N<Uj\.?#xQa=":]TTE|j\(+++j}
-L~))[.<Vpk׮ `lW\`uKKf חȭ J5LD!EGDQX5L &?&?0L s	LN\.r	 Ne.K{)uV.** `ӦM #4=Z?n6mZ}kkk" \~~Ϟ='Nt Tx<Dd6";`qqqF刈
-Fqd``@.DQm0CmVRUj&혖e&zZ2V!
-I_ֺ2V*XteaUEj i,۠ յABѣGc|8K5<Ud' UUU]ЉX%#0P|e2y0	` L~ $ȧH3L 
-|hEV;lǅ46E˖--[&  V`씇]XXhll(((Pw͛-++;TVVvhjD9я)J§'L3Ι3G3g@?"7fK,fU(nf;dmٲ3Ԍ&?0L *F#z˭PPP B١ 4ݞH|v7OeDF?  زen9jF &	t(+ʌNk"0 v M N"Jߛ9WtIvH'$fȣ4jF)c̛ N32ƪ<<l2QtQ-OP3*$ke0H$Ut֑ ,H٨{Z}:&A=g"1fjF=?fLm?fi4L |KnL.QXyy]O S1y/"cLTVϗ
-ҮGD!>Tjҟ3F@6pݒ/UdIAUuڥHϕ]\2 R|c }Pu0.XkD6P&upH"*e d&	`|~ 2$AUUc }ZXX(4 `0(/ES\~O~@(-=< l6A+[fM@ |FW1mJH@>u": 45ϑuDiiiJ$C *hb_5dxdffZ/6Hz6b8d!!B1vIL~` &K@ɫ`3'bh5##$k@Z<xhZ6x.H2" &	T: ш;&M"w& ~姂 +UAoH H5Ӿ%/33SODћ|ArQ~1R@+;4@Q~yC9  O<cOj͓ &	 D_iD!"b1AlذA7k0R1<#WXu	vRT&#bD"+G
-)X `ۑ'Hh4D"y{pBzː\[vҜ@/7&Ԍ/?[9###-p+? 	ihHA(֯_od &gL>k ްw設 Q&1qoexQVV&UkSГJaa k}w޹ɓ֮]?IY al^" {u,}7N
-x9 >###cS{{w֬Y(**z@!-**EKK 폷71455Nʥy(//Ξ=VkZ<?<L4	<σqqEtvvZ E}}}(bc(// "<</;[ $WTy7E9@1aaነ, &	  kX,/^|91Ɓ>L:PMM0k,v -T444>FFF.1rQWWǁDÖZرcO5//^{- fff BHFhii-[ #
-!##i#F傒wVD"I;`x{O@bJ AHhT|$O%i`X (B h4ZW	 ~}BEEEtv,w:_ZZP^uY"v"ZGDy9`Iğ&MNH!KN $Rb0$1e͂ t`,0){͚5KGs@GVi la͚5`!GEww7RVVVnee%>lQF >?ʿ9Cyy9*++C(sLG|d\p8,'=F|B!(/ҧ X, 7B(B4X,*ޠ:	 C6/pr*\.233a@DBP t'Y"ذaÎҝJ!??wAsD"#۵IE1heO,\v'L~` &)Z>= sļ*r8BD(fB8"i <7&Uj};w[,b s5~$Ae^ p1+,,|p$Ӡm15n' $"!"
- bׯ_!W\mʕ4ph;J ;EʫD<玈yVPIt1s_ 1	` $X,CPn8?BJ~ZPk(8KnPLD{;w bŊGı 8 5? qΜ9i <yrÇ+]bڦŋ﫬fΜ9HD{NʤXa(l'O={vA|-l  rrrzAZy߳ \8w w:t۳d_r&RE@D0L+-eee̙3ٳg6M Nm60{la̙4
- ())cYYYiՉ(pWn;w.nݎ3gn#,a}W{yw#e^e `# 믿^X2qF]Z[[q" ZhmmZ"ߗ͟B[g{<V"z<RAZq~xA"dXFeQ8B[[UUUhkkPt
-ǆ-Z$
-JODu¢E$MYڼyQTWWv7 ;c-b:u
-NoF|l(BII	FGGaZ 
-jnEIIznB!XVttt,f16z<qBB"f#c&	`%'].r '2); 0@ǪU  ===شi) =Z?n6mZ}kkkUZ &:qDGMM`JID DON1mI|l,..ʭ000[G$bvutlVvRzЦgee%]] (
-5j[,6-Ŵ6Hn'6dQKKKTGWVVVv!uE"GD	{\?s+i#L~` &@:y'm~t:JJ\Bn(2@Ϗs] r	gP| } k	>!O3|Be>.WDj.Lp @Aƒ.g0	` I+xޤ@A+ohw㮻:ZyW]~0}`0ZŘ<r1?@*-~ `F%YLPL%Tt	qr%oe2$RPʊB D* QU #ՕT bÇ[  4!͛7Ow42P[[ՙ&	`| 䯎(f:U\"tg0 ]`.gr)8 |@Ȉ3$ UN?9!g9&	`|Dfj D"ÈF8|@^B0'''=PW_]
-`^>ڪ~ߒ5i ?\TT퍽ka|[0UVyA3gxDUXWqbA8FAA
-F122UVHVH\馛,9tĉŪB.  7~aƌ\$[m'lYYGevpj /|>^^^PH0%e,"vӧO_ti/UaR I# j͘1q\=+o#',yvG  :IDAT.+?iG~~ >Pp'Y
-
-
-<xp'}|EL D(0a:iAwOrrr)B/Cyy!I@II! *  01vF< 2e
-ɓ $ KOIꪫ0c8V {WKK`7_s5Ua={-No Uvv3g.TΔ q81
-e1酦(q_SKáLX sAqX,U.J/.vF)i (0* !ad0>IHR..uuu}A|>U )|~61tWhr3|79<C$s 9D"g9D>n7^. x<k[[[^9DbDt̙˳O
- ~;ógϾZù
-n𵦦(Ĥݣ̗ ZV/qr9 P	sp	&	`\I=   .0xaT/ & ڊpk.]zcG?Ѷ(c,z'oVa(8?W^- $D1ڰrJog@D뚛;ov@ь^nc``nAs:G#/^  K2eH$`0xN?<<|ypNT0< 8x`A,0oƫ?`0*  _
-B8{l˿q/^eff7/BccXBD7n|CegPWV:PssbŊDM-D.11͞mmm?sуo)"㌱#|vq(knn>;{	=b |MVggg?"pA"N%: &	pń!db;q'(ߡSb1k$ᤍHܗO7s1pY088Q -allDNNLD$(57751"[ιzXGzFޤ>Ǔ9&/E.ELqtu.@׈ wn=`*
-Ws%P:t:	D41!	{hL +,w,2hw |7ppNJ19sN>hTqi @rko|Fb8>q G	 -Zv<˻IFQn梴k N |{Ifx^XVB!<n yyyl۷/0222]v[UUUt´i 7|b
-+<+HDtmOBDDi~}ݷ@̔KDnOVL~` &_<8W<9i9Cl:vm>o'TeiXknlO'-᪫x<p8fC?^~ )򂂂MpyXPH	yuuu\qqq*SꬬgɓC 'MZM/pw :c2ߖϞ=׿uZ<`|1e_OM$t:vvvxĽMFp$ݠŒz"DD?u1	` eb 1	` %y_={zs|_d&	`|D<љ@ᝯZ|>XVÉ|DߏC5~ic,CZ
-U>9s*>*䠠0$hޅ* 鴂YiJ' &	`|VDH?"I-@q3ɥX8Sɼb
-RxǇ~wyGu^@D1hvHgLC AdaZZo $'"_9mmmb1HD^" I୩k,!!&zПDV~U-~O")5zŒr?122"VBw+DԋcP:A3L H}DQ\t	LA7W-5) &*W)A066>4˷JӉ!?Fcl,Az*' ?0L 3 o\Rrl֬Y͕U=I3h&TU(..F~~>V'_HVt@D11nt+rq|`"\򃬬,Hۋhf/ &	Ȣdٵk @310w\̊+A ,ˉ'TyVXAcrٳG<jkkbԩ8 Ƙ*m MV|>̘1صkN?{E"XX  "a칞]oyX6>êꢢ"AL2E/ӋVp8000HK.5Auw6XV|> @vv6JKKn:twwyAR( ^us tuunP `y@ Nj%kLoRa$,X+g8%tbq`&~ojjRIϟݻw
-II!D `ҟ^(]QL "ܻt>*<|	8q > ^W DIϻT>kv#ct @-D9`|c q'tU@!ibHW"@m }}q\LtwMX_kAD8~8 ޱX6,ZD SO=oC<?Pq۶mp^ [nU+Q\v9!|&?0L KZ\ :<&xV|>Gx^!A#].#İqt=҇JbB(>z"(߳%m.[V\@GL>A2SM(G<$N!D"SE\@
- GDNHiq=a0$n\)D    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/image/dialogs/image.js b/core/misc/ckeditor/plugins/image/dialogs/image.js
deleted file mode 100644
index 35903de..0000000
--- a/core/misc/ckeditor/plugins/image/dialogs/image.js
+++ /dev/null
@@ -1,41 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-(function(){var r=function(c,j){function r(){var a=arguments,b=this.getContentElement("advanced","txtdlgGenStyle");b&&b.commit.apply(b,a);this.foreach(function(b){b.commit&&"txtdlgGenStyle"!=b.id&&b.commit.apply(b,a)})}function i(a){if(!s){s=1;var b=this.getDialog(),d=b.imageElement;if(d){this.commit(f,d);for(var a=[].concat(a),e=a.length,c,g=0;g<e;g++)(c=b.getContentElement.apply(b,a[g].split(":")))&&c.setup(f,d)}s=0}}var f=1,k=/^\s*(\d+)((px)|\%)?\s*$/i,v=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,o=/^\d+px$/,
-w=function(){var a=this.getValue(),b=this.getDialog(),d=a.match(k);d&&("%"==d[2]&&l(b,!1),a=d[1]);b.lockRatio&&(d=b.originalElement,"true"==d.getCustomData("isReady")&&("txtHeight"==this.id?(a&&"0"!=a&&(a=Math.round(d.$.width*(a/d.$.height))),isNaN(a)||b.setValueOf("info","txtWidth",a)):(a&&"0"!=a&&(a=Math.round(d.$.height*(a/d.$.width))),isNaN(a)||b.setValueOf("info","txtHeight",a))));g(b)},g=function(a){if(!a.originalElement||!a.preview)return 1;a.commitContent(4,a.preview);return 0},s,l=function(a,
-b){if(!a.getContentElement("info","ratioLock"))return null;var d=a.originalElement;if(!d)return null;if("check"==b){if(!a.userlockRatio&&"true"==d.getCustomData("isReady")){var e=a.getValueOf("info","txtWidth"),c=a.getValueOf("info","txtHeight"),d=1E3*d.$.width/d.$.height,f=1E3*e/c;a.lockRatio=!1;!e&&!c?a.lockRatio=!0:!isNaN(d)&&!isNaN(f)&&Math.round(d)==Math.round(f)&&(a.lockRatio=!0)}}else void 0!=b?a.lockRatio=b:(a.userlockRatio=1,a.lockRatio=!a.lockRatio);e=CKEDITOR.document.getById(p);a.lockRatio?
-e.removeClass("cke_btn_unlocked"):e.addClass("cke_btn_unlocked");e.setAttribute("aria-checked",a.lockRatio);CKEDITOR.env.hc&&e.getChild(0).setHtml(a.lockRatio?CKEDITOR.env.ie?"■":"▣":CKEDITOR.env.ie?"□":"▢");return a.lockRatio},x=function(a){var b=a.originalElement;if("true"==b.getCustomData("isReady")){var d=a.getContentElement("info","txtWidth"),e=a.getContentElement("info","txtHeight");d&&d.setValue(b.$.width);e&&e.setValue(b.$.height)}g(a)},y=function(a,b){function d(a,b){var d=a.match(k);return d?
-("%"==d[2]&&(d[1]+="%",l(e,!1)),d[1]):b}if(a==f){var e=this.getDialog(),c="",g="txtWidth"==this.id?"width":"height",h=b.getAttribute(g);h&&(c=d(h,c));c=d(b.getStyle(g),c);this.setValue(c)}},t,q=function(){var a=this.originalElement;a.setCustomData("isReady","true");a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);CKEDITOR.document.getById(m).setStyle("display","none");this.dontResetSize||x(this);this.firstLoad&&CKEDITOR.tools.setTimeout(function(){l(this,"check")},
-0,this);this.dontResetSize=this.firstLoad=!1},h=function(){var a=this.originalElement;a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);a=CKEDITOR.getUrl(CKEDITOR.plugins.get("image").path+"images/noimage.png");this.preview&&this.preview.setAttribute("src",a);CKEDITOR.document.getById(m).setStyle("display","none");l(this,!1)},n=function(a){return CKEDITOR.tools.getNextId()+"_"+a},p=n("btnLockSizes"),u=n("btnResetSize"),m=n("ImagePreviewLoader"),A=n("previewLink"),
-z=n("previewImage");return{title:c.lang.image["image"==j?"title":"titleButton"],minWidth:420,minHeight:360,onShow:function(){this.linkEditMode=this.imageEditMode=this.linkElement=this.imageElement=!1;this.lockRatio=!0;this.userlockRatio=0;this.dontResetSize=!1;this.firstLoad=!0;this.addLink=!1;var a=this.getParentEditor(),b=a.getSelection(),d=(b=b&&b.getSelectedElement())&&a.elementPath(b).contains("a",1);CKEDITOR.document.getById(m).setStyle("display","none");t=new CKEDITOR.dom.element("img",a.document);
-this.preview=CKEDITOR.document.getById(z);this.originalElement=a.document.createElement("img");this.originalElement.setAttribute("alt","");this.originalElement.setCustomData("isReady","false");if(d){this.linkElement=d;this.linkEditMode=!0;var c=d.getChildren();if(1==c.count()){var g=c.getItem(0).getName();if("img"==g||"input"==g)this.imageElement=c.getItem(0),"img"==this.imageElement.getName()?this.imageEditMode="img":"input"==this.imageElement.getName()&&(this.imageEditMode="input")}"image"==j&&
-this.setupContent(2,d)}if(b&&"img"==b.getName()&&!b.data("cke-realelement")||b&&"input"==b.getName()&&"image"==b.getAttribute("type"))this.imageEditMode=b.getName(),this.imageElement=b;this.imageEditMode?(this.cleanImageElement=this.imageElement,this.imageElement=this.cleanImageElement.clone(!0,!0),this.setupContent(f,this.imageElement)):this.imageElement=a.document.createElement("img");l(this,!0);CKEDITOR.tools.trim(this.getValueOf("info","txtUrl"))||(this.preview.removeAttribute("src"),this.preview.setStyle("display",
-"none"))},onOk:function(){if(this.imageEditMode){var a=this.imageEditMode;"image"==j&&"input"==a&&confirm(c.lang.image.button2Img)?(this.imageElement=c.document.createElement("img"),this.imageElement.setAttribute("alt",""),c.insertElement(this.imageElement)):"image"!=j&&"img"==a&&confirm(c.lang.image.img2Button)?(this.imageElement=c.document.createElement("input"),this.imageElement.setAttributes({type:"image",alt:""}),c.insertElement(this.imageElement)):(this.imageElement=this.cleanImageElement,delete this.cleanImageElement)}else"image"==
-j?this.imageElement=c.document.createElement("img"):(this.imageElement=c.document.createElement("input"),this.imageElement.setAttribute("type","image")),this.imageElement.setAttribute("alt","");this.linkEditMode||(this.linkElement=c.document.createElement("a"));this.commitContent(f,this.imageElement);this.commitContent(2,this.linkElement);this.imageElement.getAttribute("style")||this.imageElement.removeAttribute("style");this.imageEditMode?!this.linkEditMode&&this.addLink?(c.insertElement(this.linkElement),
-this.imageElement.appendTo(this.linkElement)):this.linkEditMode&&!this.addLink&&(c.getSelection().selectElement(this.linkElement),c.insertElement(this.imageElement)):this.addLink?this.linkEditMode?c.insertElement(this.imageElement):(c.insertElement(this.linkElement),this.linkElement.append(this.imageElement,!1)):c.insertElement(this.imageElement)},onLoad:function(){"image"!=j&&this.hidePage("Link");var a=this._.element.getDocument();this.getContentElement("info","ratioLock")&&(this.addFocusable(a.getById(u),
-5),this.addFocusable(a.getById(p),5));this.commitContent=r},onHide:function(){this.preview&&this.commitContent(8,this.preview);this.originalElement&&(this.originalElement.removeListener("load",q),this.originalElement.removeListener("error",h),this.originalElement.removeListener("abort",h),this.originalElement.remove(),this.originalElement=!1);delete this.imageElement},contents:[{id:"info",label:c.lang.image.infoTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px",
-"110px"],align:"right",children:[{id:"txtUrl",type:"text",label:c.lang.common.url,required:!0,onChange:function(){var a=this.getDialog(),b=this.getValue();if(0<b.length){var a=this.getDialog(),d=a.originalElement;a.preview.removeStyle("display");d.setCustomData("isReady","false");var c=CKEDITOR.document.getById(m);c&&c.setStyle("display","");d.on("load",q,a);d.on("error",h,a);d.on("abort",h,a);d.setAttribute("src",b);t.setAttribute("src",b);a.preview.setAttribute("src",t.$.src);g(a)}else a.preview&&
-(a.preview.removeAttribute("src"),a.preview.setStyle("display","none"))},setup:function(a,b){if(a==f){var d=b.data("cke-saved-src")||b.getAttribute("src");this.getDialog().dontResetSize=!0;this.setValue(d);this.setInitValue()}},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())?(b.data("cke-saved-src",this.getValue()),b.setAttribute("src",this.getValue())):8==a&&(b.setAttribute("src",""),b.removeAttribute("src"))},validate:CKEDITOR.dialog.validate.notEmpty(c.lang.image.urlMissing)},{type:"button",
-id:"browse",style:"display:inline-block;margin-top:10px;",align:"center",label:c.lang.common.browseServer,hidden:!0,filebrowser:"info:txtUrl"}]}]},{id:"txtAlt",type:"text",label:c.lang.image.alt,accessKey:"T","default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("alt"))},commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("alt",this.getValue()):4==a?b.setAttribute("alt",this.getValue()):8==a&&b.removeAttribute("alt")}},
-{type:"hbox",children:[{id:"basic",type:"vbox",children:[{type:"hbox",widths:["50%","50%"],children:[{type:"vbox",padding:1,children:[{type:"text",width:"40px",id:"txtWidth",label:c.lang.common.width,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidWidth);return a},setup:y,commit:function(a,b,d){var c=this.getValue();a==f?(c?b.setStyle("width",CKEDITOR.tools.cssLength(c)):
-b.removeStyle("width"),!d&&b.removeAttribute("width")):4==a?c.match(k)?b.setStyle("width",CKEDITOR.tools.cssLength(c)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("width",a.$.width+"px")):8==a&&(b.removeAttribute("width"),b.removeStyle("width"))}},{type:"text",id:"txtHeight",width:"40px",label:c.lang.common.height,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],
-10)))||alert(c.lang.common.invalidHeight);return a},setup:y,commit:function(a,b,d){var c=this.getValue();a==f?(c?b.setStyle("height",CKEDITOR.tools.cssLength(c)):b.removeStyle("height"),!d&&b.removeAttribute("height")):4==a?c.match(k)?b.setStyle("height",CKEDITOR.tools.cssLength(c)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("height",a.$.height+"px")):8==a&&(b.removeAttribute("height"),b.removeStyle("height"))}}]},{id:"ratioLock",type:"html",style:"margin-top:30px;width:40px;height:40px;",
-onLoad:function(){var a=CKEDITOR.document.getById(u),b=CKEDITOR.document.getById(p);a&&(a.on("click",function(a){x(this);a.data&&a.data.preventDefault()},this.getDialog()),a.on("mouseover",function(){this.addClass("cke_btn_over")},a),a.on("mouseout",function(){this.removeClass("cke_btn_over")},a));b&&(b.on("click",function(a){l(this);var b=this.originalElement,c=this.getValueOf("info","txtWidth");if(b.getCustomData("isReady")=="true"&&c){b=b.$.height/b.$.width*c;if(!isNaN(b)){this.setValueOf("info",
-"txtHeight",Math.round(b));g(this)}}a.data&&a.data.preventDefault()},this.getDialog()),b.on("mouseover",function(){this.addClass("cke_btn_over")},b),b.on("mouseout",function(){this.removeClass("cke_btn_over")},b))},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.lockRatio+'" class="cke_btn_locked" id="'+p+'" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+c.lang.image.lockRatio+'</span></a><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.resetSize+
-'" class="cke_btn_reset" id="'+u+'" role="button"><span class="cke_label">'+c.lang.image.resetSize+"</span></a></div>"}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d=(d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&&
-parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",
-width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace),setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d;isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,c){var e=parseInt(this.getValue(),
-10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")):(b.setStyle("margin-left",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(e))),!c&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,
-"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace),setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e=b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):
-(b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))),!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",type:"select",widths:["35%","65%"],style:"width:90px",label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this,
-"advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float");switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&&a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",
-id:"htmlPreview",style:"width:95%;",html:"<div>"+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+'<br><div id="'+m+'" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div><div class="ImagePreviewBox"><table><tr><td><a href="javascript:void(0)" target="_blank" onclick="return false;" id="'+A+'"><img id="'+z+'" alt="" /></a>'+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+
-"</td></tr></table></div></div>"}]}]}]},{id:"Link",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=decodeURI(this.getValue());b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink=
-!0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")||
-"")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"],
-children:[{type:"text",id:"linkId",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))},commit:function(a,
-b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))},commit:function(a,b){a==f&&(this.getValue()||
-this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",label:c.lang.common.advisoryTitle,"default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))},
-commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a,b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width,
-e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}};CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})();
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/image/images/noimage.png b/core/misc/ckeditor/plugins/image/images/noimage.png
deleted file mode 100644
index 1598113..0000000
--- a/core/misc/ckeditor/plugins/image/images/noimage.png
+++ /dev/null
@@ -1,7 +0,0 @@
-PNG
-
-   IHDR   (   (    H_   PLTEVV\\TT⟟XX⠠▖bbIIff``CCFFMMZZ㮮㳳SSᆆ቉⚚wwWWxx~~⑑ጌ㭭㣣DD㻻nn⨨ᐐⓓ^^XXᗗNNooKKAAllttUU└JJᎎ㵵㱱㽽uvee㲲⥥㼼PPፍ㪪[[㺺㶶mm㾾qq}}yyPPQQ㰰㷷⛛☘ss❝rrss㯯✜ᄄኊ㫫ዋ⭭ለ]]||㝝GG♙㘘ddiikk潽ppzzHH➞NN䟞㴴⣣^^??;;aa⦦ᕕSS>>||ᇇᅅ⸸ⱱ⪪㢢⬬ႂ人QQ㸸䱱㿿hh㧧RR⎎jj㜜ab毮䥥⽽⮮⫫洴⢢㬬汱䵵䷷⧧㦦庹绺䨨ᄃRRᓓ㹹䠟UU99@@JJ77䪪SSPPff躹似䲲᜜Ⲳ❞ᘘ⋋纹⍍㚚ⷷrszzYp  IDATx^=H6m۶mo۶m۶͵WS[IʯPPرc?BQQ`4
-M<b%:m
-Vă^jWlKLrtq9F=ayyjSypFQУZyxŘ19 |#9fǎиLBp 4fJM}m݊]S7ZřpΙ(;\Y	Ѐ^	
-###CR(VS3Ե%0F)\0 ]/}MR\xۧ[?[S~yp]qzCȂ*oj!*jnkA]YW|ecc)###E"P`k1%j]AOMuh:AmQ(F	lxmrƖWNP6>GˆSPZ;vv$ EkXಹҥfSY%B9k@-:fA;4rD9)z@U^Ni̲\˻j+Iʲr$MWh|i]oi^HI:s]R@/͵k"LJ["ew3VJ뛒0JB1$mHV׵`>c{]j*iI筮+|} x)/buec1 Qe=޻1Uw]4ƻxgpzݜ_j]uYJgvh0`Zx'T/Z;JyׯM͛/*1G*+2ݽ^Xnv:>/0*Au[SqK`C^\ߢgz+KQ6.\:~l;zĨq{Y=̣K||gg3Chf
-=C(kAgOv|I&#`r4hӷE&X%!!av-}|ꕋ{qN)d2Q;͍g-@LTmt6>-,wy3:;;<(9,oTWbZZr8K.w|!"Bt6 }r9iX=9W`Ȇ݆;&j,sp ?騷-EwfzSb,Y2=s&ûy<{<O[Q'TFWgZ    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/link/dialogs/anchor.js b/core/misc/ckeditor/plugins/link/dialogs/anchor.js
deleted file mode 100644
index 4c5153c..0000000
--- a/core/misc/ckeditor/plugins/link/dialogs/anchor.js
+++ /dev/null
@@ -1,8 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("anchor",function(c){var d=function(a){this._.selectedElement=a;this.setValueOf("info","txtName",a.data("cke-saved-name")||"")};return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=c.document.createElement("a",{attributes:a}),c.createFakeElement(a,"cke_anchor","anchor").replace(this._.selectedElement)):
-this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(CKEDITOR.plugins.link.synAnchorSelector&&(a["class"]="cke_anchor_empty"),CKEDITOR.plugins.link.emptyAnchorFix&&(a.contenteditable="false",a["data-cke-editable"]=1),a=c.document.createElement("a",{attributes:a}),CKEDITOR.plugins.link.fakeAnchor&&(a=c.createFakeElement(a,"cke_anchor","anchor")),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",
-attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement();if(b)CKEDITOR.plugins.link.fakeAnchor?((a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b))&&d.call(this,a),this._.selectedElement=b):b.is("a")&&b.hasAttribute("name")&&d.call(this,b);else if(b=CKEDITOR.plugins.link.getSelectedLink(c))d.call(this,b),a.selectElement(b);this.getContentElement("info","txtName").focus()},contents:[{id:"info",
-label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/link/dialogs/link.js b/core/misc/ckeditor/plugins/link/dialogs/link.js
deleted file mode 100644
index 33533b5..0000000
--- a/core/misc/ckeditor/plugins/link/dialogs/link.js
+++ /dev/null
@@ -1,36 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("link",function(n){var p,q;function r(a){return a.replace(/'/g,"\\$&")}function t(a){var g,c=p,d,e;g=[q,"("];for(var b=0;b<c.length;b++)d=c[b].toLowerCase(),e=a[d],0<b&&g.push(","),g.push("'",e?r(encodeURIComponent(a[d])):"","'");g.push(")");return g.join("")}function u(a){for(var g,c=a.length,d=[],e=0;e<c;e++)g=a.charCodeAt(e),d.push(g);return"String.fromCharCode("+d.join(",")+")"}function v(a){return(a=a.getAttribute("class"))?a.replace(/\s*(?:cke_anchor_empty|cke_anchor)(?:\s*$)?/g,
-""):""}var w=CKEDITOR.plugins.link,s=function(){var a=this.getDialog(),g=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),c=this.getValue();if(g&&a)switch(g=g.getElement(),g.hide(),a.setValue(""),c){case "frame":a.setLabel(n.lang.link.targetFrameName);a.getElement().show();break;case "popup":g.show();a.setLabel(n.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(c),a.getElement().hide()}},x=/^javascript:/,y=/^mailto:([^?]+)(?:\?(.+))?$/,
-z=/subject=([^;?:@&=$,\/]*)/,A=/body=([^;?:@&=$,\/]*)/,B=/^#(.*)$/,C=/^((?:http|https|ftp|news):\/\/)?(.*)$/,D=/^(_(?:self|top|parent|blank))$/,E=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,F=/^javascript:([^(]+)\(([^)]+)\)$/,G=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,H=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,I=function(a,g){var c=g&&(g.data("cke-saved-href")||g.getAttribute("href"))||"",d,e,b=
-{};c.match(x)&&("encode"==o?c=c.replace(E,function(a,c,b){return"mailto:"+String.fromCharCode.apply(String,c.split(","))+(b&&b.replace(/\\'/g,"'"))}):o&&c.replace(F,function(a,c,d){if(c==q){b.type="email";for(var a=b.email={},c=/(^')|('$)/g,d=d.match(/[^,\s]+/g),e=d.length,g,f,h=0;h<e;h++)g=decodeURIComponent,f=d[h].replace(c,"").replace(/\\'/g,"'"),f=g(f),g=p[h].toLowerCase(),a[g]=f;a.address=[a.name,a.domain].join("@")}}));if(!b.type)if(d=c.match(B))b.type="anchor",b.anchor={},b.anchor.name=b.anchor.id=
-d[1];else if(d=c.match(y)){e=c.match(z);c=c.match(A);b.type="email";var f=b.email={};f.address=d[1];e&&(f.subject=decodeURIComponent(e[1]));c&&(f.body=decodeURIComponent(c[1]))}else c&&(e=c.match(C))?(b.type="url",b.url={},b.url.protocol=e[1],b.url.url=e[2]):b.type="url";if(g){d=g.getAttribute("target");b.target={};b.adv={};if(d)d.match(D)?b.target.type=b.target.name=d:(b.target.type="frame",b.target.name=d);else if(d=(d=g.data("cke-pa-onclick")||g.getAttribute("onclick"))&&d.match(G)){b.target.type=
-"popup";for(b.target.name=d[1];c=H.exec(d[2]);)("yes"==c[2]||"1"==c[2])&&!(c[1]in{height:1,width:1,top:1,left:1})?b.target[c[1]]=!0:isFinite(c[2])&&(b.target[c[1]]=c[2])}d=function(a,c){var d=g.getAttribute(c);null!==d&&(b.adv[a]=d||"")};d("advId","id");d("advLangDir","dir");d("advAccessKey","accessKey");b.adv.advName=g.data("cke-saved-name")||g.getAttribute("name")||"";d("advLangCode","lang");d("advTabIndex","tabindex");d("advTitle","title");d("advContentType","type");CKEDITOR.plugins.link.synAnchorSelector?
-b.adv.advCSSClasses=v(g):d("advCSSClasses","class");d("advCharset","charset");d("advStyles","style");d("advRel","rel")}d=b.anchors=[];var h;if(CKEDITOR.plugins.link.emptyAnchorFix){f=a.document.getElementsByTag("a");c=0;for(e=f.count();c<e;c++)if(h=f.getItem(c),h.data("cke-saved-name")||h.hasAttribute("name"))d.push({name:h.data("cke-saved-name")||h.getAttribute("name"),id:h.getAttribute("id")})}else{f=new CKEDITOR.dom.nodeList(a.document.$.anchors);c=0;for(e=f.count();c<e;c++)h=f.getItem(c),d[c]=
-{name:h.getAttribute("name"),id:h.getAttribute("id")}}if(CKEDITOR.plugins.link.fakeAnchor){f=a.document.getElementsByTag("img");c=0;for(e=f.count();c<e;c++)(h=CKEDITOR.plugins.link.tryRestoreFakeAnchor(a,f.getItem(c)))&&d.push({name:h.getAttribute("name"),id:h.getAttribute("id")})}this._.selectedElement=g;return b},j=function(a){a.target&&this.setValue(a.target[this.id]||"")},k=function(a){a.adv&&this.setValue(a.adv[this.id]||"")},l=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||
-""},m=function(a){a.adv||(a.adv={});a.adv[this.id]=this.getValue()||""},o=n.config.emailProtection||"";o&&"encode"!=o&&(q=p=void 0,o.replace(/^([^(]+)\(([^)]+)\)$/,function(a,b,c){q=b;p=[];c.replace(/[^,\s]+/g,function(a){p.push(a)})}));var i=n.lang.common,b=n.lang.link;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:"info",label:b.info,title:b.info,elements:[{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"],[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=
-this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],c=this.getValue(),d=a.definition.getContents("upload"),d=d&&d.hidden;if(c=="url"){n.config.linkShowTargetTab&&a.showPage("target");d||a.showPage("upload")}else{a.hidePage("target");d||a.hidePage("upload")}for(d=0;d<b.length;d++){var e=a.getContentElement("info",b[d]);if(e){e=e.getElement().getParent().getParent();b[d]==c+"Options"?e.show():e.hide()}}a.layout()},setup:function(a){a.type&&this.setValue(a.type)},commit:function(a){a.type=
-this.getValue()}},{type:"vbox",id:"urlOptions",children:[{type:"hbox",widths:["25%","75%"],children:[{id:"protocol",type:"select",label:i.protocol,"default":"http://",items:[["http://‎","http://"],["https://‎","https://"],["ftp://‎","ftp://"],["news://‎","news://"],[b.other,""]],setup:function(a){a.url&&this.setValue(a.url.protocol||"")},commit:function(a){if(!a.url)a.url={};a.url.protocol=this.getValue()}},{type:"text",id:"url",label:i.url,required:!0,onLoad:function(){this.allowOnChange=true},onKeyUp:function(){this.allowOnChange=
-false;var a=this.getDialog().getContentElement("info","protocol"),b=this.getValue(),c=/^((javascript:)|[#\/\.\?])/i,d=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);if(d){this.setValue(b.substr(d[0].length));a.setValue(d[0].toLowerCase())}else c.test(b)&&a.setValue("");this.allowOnChange=true},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();if(a.getContentElement("info","linkType")&&a.getValueOf("info","linkType")!="url")return true;if(/javascript\:/.test(this.getValue())){alert(i.invalidValue);
-return false}return this.getDialog().fakeObj?true:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=false;a.url&&this.setValue(a.url.url);this.allowOnChange=true},commit:function(a){this.onChange();if(!a.url)a.url={};a.url.url=this.getValue();this.allowOnChange=false}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().show()}},{type:"button",id:"browse",hidden:"true",filebrowser:"info:url",label:i.browseServer}]},
-{type:"vbox",id:"anchorOptions",width:260,align:"center",padding:0,children:[{type:"fieldset",id:"selectAnchorText",label:b.selectAnchor,setup:function(a){a.anchors.length>0?this.getElement().show():this.getElement().hide()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");for(var b=0;b<a.anchors.length;b++)a.anchors[b].name&&this.add(a.anchors[b].name);a.anchor&&
-this.setValue(a.anchor.name);(a=this.getDialog().getContentElement("info","linkType"))&&a.getValue()=="email"&&this.focus()},commit:function(a){if(!a.anchor)a.anchor={};a.anchor.name=this.getValue()}},{type:"select",id:"anchorId","default":"",label:b.anchorId,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");for(var b=0;b<a.anchors.length;b++)a.anchors[b].id&&this.add(a.anchors[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){if(!a.anchor)a.anchor={};a.anchor.id=
-this.getValue()}}],setup:function(a){a.anchors.length>0?this.getElement().show():this.getElement().hide()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'<div role="note" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(b.noAnchors)+"</div>",focus:!0,setup:function(a){a.anchors.length<1?this.getElement().show():this.getElement().hide()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",
-id:"emailAddress",label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||a.getValueOf("info","linkType")!="email"?true:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&a.getValue()=="email"&&this.select()},commit:function(a){if(!a.email)a.email={};a.email.address=this.getValue()}},{type:"text",id:"emailSubject",
-label:b.emailSubject,setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){if(!a.email)a.email={};a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){if(!a.email)a.email={};a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",label:b.target,title:b.target,elements:[{type:"hbox",
-widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:i.target,"default":"notSet",style:"width : 100%;",items:[[i.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[i.targetNew,"_blank"],[i.targetTop,"_top"],[i.targetSelf,"_self"],[i.targetParent,"_parent"]],onChange:s,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");s.call(this)},commit:function(a){if(!a.target)a.target={};a.target.type=this.getValue()}},{type:"text",id:"linkTargetName",label:b.targetFrameName,
-"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){if(!a.target)a.target={};a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:j,commit:l},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox",
-id:"location",label:b.popupLocationBar,setup:j,commit:l},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:j,commit:l},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:j,commit:l}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:j,commit:l},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:j,commit:l}]},{type:"hbox",children:[{type:"text",
-widths:["50%","50%"],labelLayout:"horizontal",label:i.width,id:"width",setup:j,commit:l},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:j,commit:l}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:i.height,id:"height",setup:j,commit:l},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:j,commit:l}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0,filebrowser:"uploadButton",
-elements:[{type:"file",id:"upload",label:i.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:i.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",label:b.id,setup:k,commit:m},{type:"select",id:"advLangDir",label:b.langDir,"default":"",style:"width:110px",items:[[i.notSet,""],[b.langDirLTR,"ltr"],
-[b.langDirRTL,"rtl"]],setup:k,commit:m},{type:"text",id:"advAccessKey",width:"80px",label:b.acccessKey,maxLength:1,setup:k,commit:m}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",setup:k,commit:m},{type:"text",label:b.langCode,id:"advLangCode",width:"110px","default":"",setup:k,commit:m},{type:"text",label:b.tabIndex,id:"advTabIndex",width:"80px",maxLength:5,setup:k,commit:m}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",
-label:b.advisoryTitle,"default":"",id:"advTitle",setup:k,commit:m},{type:"text",label:b.advisoryContentType,"default":"",id:"advContentType",setup:k,commit:m}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,"default":"",id:"advCSSClasses",setup:k,commit:m},{type:"text",label:b.charset,"default":"",id:"advCharset",setup:k,commit:m}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,"default":"",id:"advRel",setup:k,commit:m},{type:"text",label:b.styles,
-"default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(n.lang.common.invalidInlineStyle),setup:k,commit:m}]}]}]}],onShow:function(){var a=this.getParentEditor(),b=a.getSelection(),c=null;(c=w.getSelectedLink(a))&&c.hasAttribute("href")?b.selectElement(c):c=null;this.setupContent(I.apply(this,[a,c]))},onOk:function(){var a={},b=[],c={},d=this.getParentEditor();this.commitContent(c);switch(c.type||"url"){case "url":var e=c.url&&c.url.protocol!=void 0?c.url.protocol:"http://",i=c.url&&
-CKEDITOR.tools.trim(c.url.url)||"";a["data-cke-saved-href"]=i.indexOf("/")===0?i:e+i;break;case "anchor":e=c.anchor&&c.anchor.id;a["data-cke-saved-href"]="#"+(c.anchor&&c.anchor.name||e||"");break;case "email":var f=c.email,e=f.address;switch(o){case "":case "encode":var i=encodeURIComponent(f.subject||""),h=encodeURIComponent(f.body||""),f=[];i&&f.push("subject="+i);h&&f.push("body="+h);f=f.length?"?"+f.join("&"):"";if(o=="encode"){e=["javascript:void(location.href='mailto:'+",u(e)];f&&e.push("+'",
-r(f),"'");e.push(")")}else e=["mailto:",e,f];break;default:e=e.split("@",2);f.name=e[0];f.domain=e[1];e=["javascript:",t(f)]}a["data-cke-saved-href"]=e.join("")}if(c.target)if(c.target.type=="popup"){for(var e=["window.open(this.href, '",c.target.name||"","', '"],j=["resizable","status","location","toolbar","menubar","fullscreen","scrollbars","dependent"],i=j.length,f=function(a){c.target[a]&&j.push(a+"="+c.target[a])},h=0;h<i;h++)j[h]=j[h]+(c.target[j[h]]?"=yes":"=no");f("width");f("left");f("height");
-f("top");e.push(j.join(","),"'); return false;");a["data-cke-pa-onclick"]=e.join("");b.push("target")}else{c.target.type!="notSet"&&c.target.name?a.target=c.target.name:b.push("target");b.push("data-cke-pa-onclick","onclick")}if(c.adv){e=function(d,e){var f=c.adv[d];f?a[e]=f:b.push(e)};e("advId","id");e("advLangDir","dir");e("advAccessKey","accessKey");c.adv.advName?a.name=a["data-cke-saved-name"]=c.adv.advName:b=b.concat(["data-cke-saved-name","name"]);e("advLangCode","lang");e("advTabIndex","tabindex");
-e("advTitle","title");e("advContentType","type");e("advCSSClasses","class");e("advCharset","charset");e("advStyles","style");e("advRel","rel")}e=d.getSelection();a.href=a["data-cke-saved-href"];if(this._.selectedElement){d=this._.selectedElement;i=d.data("cke-saved-href");f=d.getHtml();d.setAttributes(a);d.removeAttributes(b);c.adv&&(c.adv.advName&&CKEDITOR.plugins.link.synAnchorSelector)&&d.addClass(d.getChildCount()?"cke_anchor":"cke_anchor_empty");if(i==f||c.type=="email"&&f.indexOf("@")!=-1)d.setHtml(c.type==
-"email"?c.email.address:a["data-cke-saved-href"]);e.selectElement(d);delete this._.selectedElement}else{e=e.getRanges(1)[0];if(e.collapsed){d=new CKEDITOR.dom.text(c.type=="email"?c.email.address:a["data-cke-saved-href"],d.document);e.insertNode(d);e.selectNodeContents(d)}d=new CKEDITOR.style({element:"a",attributes:a});d.type=CKEDITOR.STYLE_INLINE;d.applyToRange(e);e.select()}},onLoad:function(){n.config.linkShowAdvancedTab||this.hidePage("advanced");n.config.linkShowTargetTab||this.hidePage("target")},
-onFocus:function(){var a=this.getContentElement("info","linkType");if(a&&a.getValue()=="url"){a=this.getContentElement("info","url");a.select()}}}});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/link/images/anchor.png b/core/misc/ckeditor/plugins/link/images/anchor.png
deleted file mode 100644
index 5025df5..0000000
--- a/core/misc/ckeditor/plugins/link/images/anchor.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR         a   sBIT|d   	pHYs    B(x   tEXtSoftware www.inkscape.org<  IDAT8MKQd&qE%JEht֭]ǿ KMM~DE fSR&1J[jȼs|ѳ=<sx9RJ- pjzw$dAkwWj*'oI>#N R(-/Kqdϲd߲d?++r{~.$z7	 V1=5d.dkA'wKv*\/Y65{*{o mx	  փhp/A'j#jr}euw(jl"x87h>֮N.W}luuQ.^"c %Z\"Q׍m6}IN1McOJ\ 41G`1 ~YT `󩀿%m'    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/magicline/images/icon.png b/core/misc/ckeditor/plugins/magicline/images/icon.png
deleted file mode 100644
index b5de5ba..0000000
--- a/core/misc/ckeditor/plugins/magicline/images/icon.png
+++ /dev/null
@@ -1,4 +0,0 @@
-PNG
-
-   IHDR   	   
-   ft   bKGD      C   	pHYs        LIDATӅ10UڬBzb8	QvX0bܴI	Punm줁vcB7/'ܸ    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/pastefromword/filter/default.js b/core/misc/ckeditor/plugins/pastefromword/filter/default.js
deleted file mode 100644
index 769760a..0000000
--- a/core/misc/ckeditor/plugins/pastefromword/filter/default.js
+++ /dev/null
@@ -1,31 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-(function(){function z(a){for(var a=a.toUpperCase(),b=A.length,c=0,d=0;d<b;++d)for(var e=A[d],f=e[1].length;a.substr(0,f)==e[1];a=a.substr(f))c+=e[0];return c}function B(a){for(var a=a.toUpperCase(),b=C.length,c=1,d=1;0<a.length;d*=b)c+=C.indexOf(a.charAt(a.length-1))*d,a=a.substr(0,a.length-1);return c}var D=CKEDITOR.htmlParser.fragment.prototype,v=CKEDITOR.htmlParser.element.prototype;D.onlyChild=v.onlyChild=function(){var a=this.children;return 1==a.length&&a[0]||null};v.removeAnyChildWithName=
-function(a){for(var b=this.children,c=[],d,e=0;e<b.length;e++)d=b[e],d.name&&(d.name==a&&(c.push(d),b.splice(e--,1)),c=c.concat(d.removeAnyChildWithName(a)));return c};v.getAncestor=function(a){for(var b=this.parent;b&&(!b.name||!b.name.match(a));)b=b.parent;return b};D.firstChild=v.firstChild=function(a){for(var b,c=0;c<this.children.length;c++)if(b=this.children[c],a(b)||b.name&&(b=b.firstChild(a)))return b;return null};v.addStyle=function(a,b,c){var d="";if("string"==typeof b)d+=a+":"+b+";";else{if("object"==
-typeof a)for(var e in a)a.hasOwnProperty(e)&&(d+=e+":"+a[e]+";");else d+=a;c=b}this.attributes||(this.attributes={});a=this.attributes.style||"";a=(c?[d,a]:[a,d]).join(";");this.attributes.style=a.replace(/^;|;(?=;)/,"")};v.getStyle=function(a){var b=this.attributes.style;if(b)return b=CKEDITOR.tools.parseCssText(b,1),b[a]};CKEDITOR.dtd.parentOf=function(a){var b={},c;for(c in this)-1==c.indexOf("$")&&this[c][a]&&(b[c]=1);return b};var H=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i,
-E=/^(?:\b0[^\s]*\s*){1,4}$/,y={ol:{decimal:/\d+/,"lower-roman":/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/,"upper-roman":/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"lower-alpha":/^[a-z]+$/,"upper-alpha":/^[A-Z]+$/},ul:{disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/}},A=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]],C="ABCDEFGHIJKLMNOPQRSTUVWXYZ",w=0,o=null,x,F=CKEDITOR.plugins.pastefromword=
-{utils:{createListBulletMarker:function(a,b){var c=new CKEDITOR.htmlParser.element("cke:listbullet");c.attributes={"cke:listsymbol":a[0]};c.add(new CKEDITOR.htmlParser.text(b));return c},isListBulletIndicator:function(a){if(/mso-list\s*:\s*Ignore/i.test(a.attributes&&a.attributes.style))return!0},isContainingOnlySpaces:function(a){var b;return(b=a.onlyChild())&&/^(:?\s|&nbsp;)+$/.test(b.value)},resolveList:function(a){var b=a.attributes,c;if((c=a.removeAnyChildWithName("cke:listbullet"))&&c.length&&
-(c=c[0]))return a.name="cke:li",b.style&&(b.style=F.filters.stylesFilter([["text-indent"],["line-height"],[/^margin(:?-left)?$/,null,function(a){a=a.split(" ");a=CKEDITOR.tools.convertToPx(a[3]||a[1]||a[0]);!w&&(null!==o&&a>o)&&(w=a-o);o=a;b["cke:indent"]=w&&Math.ceil(a/w)+1||1}],[/^mso-list$/,null,function(a){var a=a.split(" "),c=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(c!==x&&(b["cke:reset"]=1),x=c);b["cke:indent"]=a}]])(b.style,a)||""),b["cke:indent"]||(o=0,b["cke:indent"]=
-1),CKEDITOR.tools.extend(b,c.attributes),!0;x=o=w=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(b,c,d){a.setStyle(b,c);for(var b={},c=d.length,e=0;e<c;e++)b[d[e]]=a.getStyle(d[e]);return b}}(),listDtdParents:CKEDITOR.dtd.parentOf("ol")},filters:{flattenList:function(a,b){var b="number"==typeof b?b:1,c=a.attributes,d;switch(c.type){case "a":d=
-"lower-alpha";break;case "1":d="decimal"}for(var e=a.children,f,h=0;h<e.length;h++)if(f=e[h],f.name in CKEDITOR.dtd.$listItem){var g=f.attributes,i=f.children,m=i[i.length-1];m.name in CKEDITOR.dtd.$list&&(a.add(m,h+1),--i.length||e.splice(h--,1));f.name="cke:li";c.start&&!h&&(g.value=c.start);F.filters.stylesFilter([["tab-stops",null,function(a){(a=a.split(" ")[1].match(H))&&(o=CKEDITOR.tools.convertToPx(a[0]))}],1==b?["mso-list",null,function(a){a=a.split(" ");a=Number(a[0].match(/\d+/));a!==x&&
-(g["cke:reset"]=1);x=a}]:null])(g.style);g["cke:indent"]=b;g["cke:listtype"]=a.name;g["cke:list-style-type"]=d}else if(f.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[f,b+1]);e=e.slice(0,h).concat(f.children).concat(e.slice(h+1));a.children=[];f=0;for(i=e.length;f<i;f++)a.add(e[f])}delete a.name;c["cke:list"]=1},assembleList:function(a){for(var b=a.children,c,d,e,f,h,g,a=[],i,m,j,l,k,r,p=0;p<b.length;p++)if(c=b[p],"cke:li"==c.name)if(c.name="li",d=c.attributes,j=(j=d["cke:listsymbol"])&&
-j.match(/^(?:[(]?)([^\s]+?)([.)]?)$/),l=k=r=null,d["cke:ignored"])b.splice(p--,1);else{d["cke:reset"]&&(g=f=h=null);e=Number(d["cke:indent"]);e!=f&&(m=i=null);if(j){if(m&&y[m][i].test(j[1]))l=m,k=i;else for(var s in y)for(var t in y[s])if(y[s][t].test(j[1]))if("ol"==s&&/alpha|roman/.test(t)){if(i=/roman/.test(t)?z(j[1]):B(j[1]),!r||i<r)r=i,l=s,k=t}else{l=s;k=t;break}!l&&(l=j[2]?"ol":"ul")}else l=d["cke:listtype"]||"ol",k=d["cke:list-style-type"];m=l;i=k||("ol"==l?"decimal":"disc");k&&k!=("ol"==l?
-"decimal":"disc")&&c.addStyle("list-style-type",k);if("ol"==l&&j){switch(k){case "decimal":r=Number(j[1]);break;case "lower-roman":case "upper-roman":r=z(j[1]);break;case "lower-alpha":case "upper-alpha":r=B(j[1])}c.attributes.value=r}if(g){if(e>f)a.push(g=new CKEDITOR.htmlParser.element(l)),g.add(c),h.add(g);else{if(e<f){f-=e;for(var n;f--&&(n=g.parent);)g=n.parent}g.add(c)}b.splice(p--,1)}else a.push(g=new CKEDITOR.htmlParser.element(l)),g.add(c),b[p]=g;h=c;f=e}else g&&(g=f=h=null);for(p=0;p<a.length;p++)if(g=
-a[p],s=g.children,i=i=void 0,t=g.children.length,n=i=void 0,b=/list-style-type:(.*?)(?:;|$)/,f=CKEDITOR.plugins.pastefromword.filters.stylesFilter,i=g.attributes,!b.exec(i.style)){for(h=0;h<t;h++)if(i=s[h],i.attributes.value&&Number(i.attributes.value)==h+1&&delete i.attributes.value,i=b.exec(i.attributes.style))if(i[1]==n||!n)n=i[1];else{n=null;break}if(n){for(h=0;h<t;h++)i=s[h].attributes,i.style&&(i.style=f([["list-style-type"]])(i.style)||"");g.addStyle("list-style-type",n)}}x=o=w=null},falsyFilter:function(){return!1},
-stylesFilter:function(a,b){return function(c,d){var e=[];(c||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(c,g,f){g=g.toLowerCase();"font-family"==g&&(f=f.replace(/["']/g,""));for(var m,j,l,k=0;k<a.length;k++)if(a[k]&&(c=a[k][0],m=a[k][1],j=a[k][2],l=a[k][3],g.match(c)&&(!m||f.match(m)))){g=l||g;b&&(j=j||f);"function"==typeof j&&(j=j(f,d,g));j&&j.push&&(g=j[0],j=j[1]);"string"==typeof j&&e.push([g,j]);return}!b&&e.push([g,f])});for(var f=0;f<e.length;f++)e[f]=
-e[f].join(":");return e.length?e.join(";")+";":!1}},elementMigrateFilter:function(a,b){return a?function(c){var d=b?(new CKEDITOR.style(a,b))._.definition:a;c.name=d.element;CKEDITOR.tools.extend(c.attributes,CKEDITOR.tools.clone(d.attributes));c.addStyle(CKEDITOR.style.getStyleText(d))}:function(){}},styleMigrateFilter:function(a,b){var c=this.elementMigrateFilter;return a?function(d,e){var f=new CKEDITOR.htmlParser.element(null),h={};h[b]=d;c(a,h)(f);f.children=e.children;e.children=[f]}:function(){}},
-bogusAttrFilter:function(a,b){if(-1==b.name.indexOf("cke:"))return!1},applyStyleFilter:null},getRules:function(a){var b=CKEDITOR.dtd,c=CKEDITOR.tools.extend({},b.$block,b.$listItem,b.$tableContent),d=a.config,e=this.filters,a=e.falsyFilter,f=e.stylesFilter,h=e.elementMigrateFilter,g=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),i=this.utils.createListBulletMarker,m=e.flattenList,j=e.assembleList,l=this.utils.isListBulletIndicator,k=this.utils.isContainingOnlySpaces,r=this.utils.resolveList,
-p=function(a){a=CKEDITOR.tools.convertToPx(a);return isNaN(a)?a:a+"px"},s=this.utils.getStyleComponents,t=this.utils.listDtdParents,n=!1!==d.pasteFromWordRemoveFontStyles,o=!1!==d.pasteFromWordRemoveStyles;return{elementNames:[[/meta|link|script/,""]],root:function(a){a.filterChildren();j(a)},elements:{"^":function(a){var b;CKEDITOR.env.gecko&&(b=e.applyStyleFilter)&&b(a)},$:function(a){var u=a.name||"",e=a.attributes;u in c&&e.style&&(e.style=f([[/^(:?width|height)$/,null,p]])(e.style)||"");if(u.match(/h\d/)){a.filterChildren();
-if(r(a))return;h(d["format_"+u])(a)}else if(u in b.$inline)a.filterChildren(),k(a)&&delete a.name;else if(-1!=u.indexOf(":")&&-1==u.indexOf("cke")){a.filterChildren();if("v:imagedata"==u){if(u=a.attributes["o:href"])a.attributes.src=u;a.name="img";return}delete a.name}u in t&&(a.filterChildren(),j(a))},style:function(a){if(CKEDITOR.env.gecko){var a=(a=a.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/))&&a[1],b={};a&&(a.replace(/[\n\r]/g,"").replace(/(.+?)\{(.+?)\}/g,function(a,
-c,d){for(var c=c.split(","),a=c.length,q=0;q<a;q++)CKEDITOR.tools.trim(c[q]).replace(/^(\w+)(\.[\w-]+)?$/g,function(a,c,q){c=c||"*";q=q.substring(1,q.length);q.match(/MsoNormal/)||(b[c]||(b[c]={}),q?b[c][q]=d:b[c]=d)})}),e.applyStyleFilter=function(a){var c=b["*"]?"*":a.name,q=a.attributes&&a.attributes["class"];c in b&&(c=b[c],"object"==typeof c&&(c=c[q]),c&&a.addStyle(c,!0))})}return!1},p:function(a){if(/MsoListParagraph/i.exec(a.attributes["class"])||a.getStyle("mso-list")){var b=a.firstChild(function(a){return a.type==
-CKEDITOR.NODE_TEXT&&!k(a.parent)});(b=b&&b.parent)&&b.addStyle("mso-list","Ignore")}a.filterChildren();r(a)||(d.enterMode==CKEDITOR.ENTER_BR?(delete a.name,a.add(new CKEDITOR.htmlParser.element("br"))):h(d["format_"+(d.enterMode==CKEDITOR.ENTER_P?"p":"div")])(a))},div:function(a){var b=a.onlyChild();if(b&&"table"==b.name){var c=a.attributes;b.attributes=CKEDITOR.tools.extend(b.attributes,c);c.style&&b.addStyle(c.style);b=new CKEDITOR.htmlParser.element("div");b.addStyle("clear","both");a.add(b);delete a.name}},
-td:function(a){a.getAncestor("thead")&&(a.name="th")},ol:m,ul:m,dl:m,font:function(a){if(l(a.parent))delete a.name;else{a.filterChildren();var b=a.attributes,c=b.style,d=a.parent;"font"==d.name?(CKEDITOR.tools.extend(d.attributes,a.attributes),c&&d.addStyle(c),delete a.name):(c=c||"",b.color&&("#000000"!=b.color&&(c+="color:"+b.color+";"),delete b.color),b.face&&(c+="font-family:"+b.face+";",delete b.face),b.size&&(c+="font-size:"+(3<b.size?"large":3>b.size?"small":"medium")+";",delete b.size),a.name=
-"span",a.addStyle(c))}},span:function(a){if(l(a.parent))return!1;a.filterChildren();if(k(a))return delete a.name,null;if(l(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),c=(b=b&&(b.value||"l."))&&b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(c)return b=i(c,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(c=(b=a.attributes)&&b.style)b.style=f([["line-height"],[/^font-family$/,null,!n?g(d.font_style,"family"):
-null],[/^font-size$/,null,!n?g(d.fontSize_style,"size"):null],[/^color$/,null,!n?g(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!n?g(d.colorButton_backStyle,"color"):null]])(c,a)||"";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:h(d.coreStyles_bold),i:h(d.coreStyles_italic),u:h(d.coreStyles_underline),s:h(d.coreStyles_strike),sup:h(d.coreStyles_superscript),sub:h(d.coreStyles_subscript),a:function(a){var b=a.attributes;b&&!b.href&&b.name?delete a.name:
-CKEDITOR.env.webkit&&(b.href&&b.href.match(/file:\/\/\/[\S]+#/i))&&(b.href=b.href.replace(/file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:f(o?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left":"margin-right";
-if("margin"==c)a=s(c,a,[b])[b];else if(c!=b)return null;if(a&&!E.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,E],["text-indent","0cm"],["page-break-before"],["tab-stops"],
-["display","none"],n?[/font-?/]:null],o),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":a,bgcolor:a,valign:o?a:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(/<img.*?>/),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)</),i(d,c)):CKEDITOR.env.gecko&&c?(c=CKEDITOR.htmlParser.fragment.fromHtml(c[0]).children[0],
-(d=(d=(d=b.previous)&&d.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src=d),c):!1}:a}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),b=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(b,this.dataFilter);return b.getHtml(!0)}};CKEDITOR.cleanWord=function(a,b){CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&&
-(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi,"$1<span>$2</span>$3"));var c=new G,d=c.dataFilter;d.addRules(CKEDITOR.plugins.pastefromword.getRules(b));b.fire("beforeCleanWord",{filter:d});try{a=c.toHtml(a)}catch(e){alert(b.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(/<span>/g,"")}})();
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/placeholder/dialogs/placeholder.js b/core/misc/ckeditor/plugins/placeholder/dialogs/placeholder.js
deleted file mode 100644
index 4088050..0000000
--- a/core/misc/ckeditor/plugins/placeholder/dialogs/placeholder.js
+++ /dev/null
@@ -1,6 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-(function(){function b(a,b){var c=a.lang.placeholder,d=a.lang.common.generalTab;return{title:c.title,minWidth:300,minHeight:80,contents:[{id:"info",label:d,title:d,elements:[{id:"text",type:"text",style:"width: 100%;",label:c.text,"default":"",required:!0,validate:CKEDITOR.dialog.validate.notEmpty(c.textMissing),setup:function(a){b&&this.setValue(a.getText().slice(2,-2))},commit:function(b){var c="[["+this.getValue()+"]]";CKEDITOR.plugins.placeholder.createPlaceholder(a,b,c)}}]}],onShow:function(){b&&
-(this._element=CKEDITOR.plugins.placeholder.getSelectedPlaceHolder(a));this.setupContent(this._element)},onOk:function(){this.commitContent(this._element);delete this._element}}}CKEDITOR.dialog.add("createplaceholder",function(a){return b(a)});CKEDITOR.dialog.add("editplaceholder",function(a){return b(a,1)})})();
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_address.png b/core/misc/ckeditor/plugins/showblocks/images/block_address.png
deleted file mode 100644
index 1ee67aa..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_address.png
+++ /dev/null
@@ -1,5 +0,0 @@
-PNG
-
-   IHDR   ,      bݫ   PLTE֍   tRNS 0J   RIDAT(Ր;
-0Ť_CL'2th/_QBJLҞ1$2^C9
-Hm˹~ 1#    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_blockquote.png b/core/misc/ckeditor/plugins/showblocks/images/block_blockquote.png
deleted file mode 100644
index cae3aec..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_blockquote.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR   :      ,   PLTE֍   tRNS 0J   \IDAT(͒K !C_YQ!lFK=*0grȸ=RG䅳ƢQMB%*T{P<mn>ZX&ϕ.b/Mi5    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_div.png b/core/misc/ckeditor/plugins/showblocks/images/block_div.png
deleted file mode 100644
index c71f397..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_div.png
+++ /dev/null
@@ -1,4 +0,0 @@
-PNG
-
-   IHDR         <tY   PLTE֍   tRNS 0J   /IDATWc`He`` 3P(X(T(hn;d_P$
- 8Qe2    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_h1.png b/core/misc/ckeditor/plugins/showblocks/images/block_h1.png
deleted file mode 100644
index 3a64347..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_h1.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR         5o#   PLTE֍   tRNS 0J   &IDATc`DĊ0@htj"Fx, x: R    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_h2.png b/core/misc/ckeditor/plugins/showblocks/images/block_h2.png
deleted file mode 100644
index 8062ebe..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_h2.png
+++ /dev/null
@@ -1,4 +0,0 @@
-PNG
-
-   IHDR         5o#   PLTE֍   tRNS 0J   -IDATWc`DĊ0@Èg@E2Y+
- w =e    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_h3.png b/core/misc/ckeditor/plugins/showblocks/images/block_h3.png
deleted file mode 100644
index 5b6a403..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_h3.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR         5o#   PLTE֍   tRNS 0J   *IDATWc`DĊ0@Ègj.@- v O?kS    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_h4.png b/core/misc/ckeditor/plugins/showblocks/images/block_h4.png
deleted file mode 100644
index 6c7f795..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_h4.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR         Xo    PLTE֍   tRNS 0J   ,IDATWc` 1@ht!FB@ Ӎ,f<Y(BB  =Y\    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_h5.png b/core/misc/ckeditor/plugins/showblocks/images/block_h5.png
deleted file mode 100644
index e153de0..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_h5.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR         5o#   PLTE֍   tRNS 0J   ,IDATWc`DĊ0`S$1 18s % t L@    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_h6.png b/core/misc/ckeditor/plugins/showblocks/images/block_h6.png
deleted file mode 100644
index c8d993a..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_h6.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR         5o#   PLTE֍   tRNS 0J   (IDATc`DĊ0@AR ]x"D u PZM    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_p.png b/core/misc/ckeditor/plugins/showblocks/images/block_p.png
deleted file mode 100644
index 4e6035d..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_p.png
+++ /dev/null
@@ -1,3 +0,0 @@
-PNG
-
-   IHDR         E   PLTE֍   tRNS 0J   IDAT[c`Dx@Cf0Tǃry I" ?    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/showblocks/images/block_pre.png b/core/misc/ckeditor/plugins/showblocks/images/block_pre.png
deleted file mode 100644
index d11a0ff..0000000
--- a/core/misc/ckeditor/plugins/showblocks/images/block_pre.png
+++ /dev/null
@@ -1,4 +0,0 @@
-PNG
-
-   IHDR         ׳Z   PLTE֍   tRNS 0J   /IDATWc`
-Hf``@aAQWjaK0-cC    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt
deleted file mode 100644
index dc3c1fb..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-
-cs.js      Found: 118 Missing: 0
-cy.js      Found: 118 Missing: 0
-de.js      Found: 118 Missing: 0
-el.js      Found: 16 Missing: 102
-eo.js      Found: 118 Missing: 0
-et.js      Found: 31 Missing: 87
-fa.js      Found: 24 Missing: 94
-fi.js      Found: 23 Missing: 95
-fr.js      Found: 118 Missing: 0
-hr.js      Found: 23 Missing: 95
-it.js      Found: 118 Missing: 0
-nb.js      Found: 118 Missing: 0
-nl.js      Found: 118 Missing: 0
-no.js      Found: 118 Missing: 0
-tr.js      Found: 118 Missing: 0
-ug.js      Found: 39 Missing: 79
-zh-cn.js   Found: 118 Missing: 0
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ca.js
deleted file mode 100644
index 4704fef..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ca.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Símbol registrat",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/cs.js
deleted file mode 100644
index 78856a2..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/cs.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"Počáteční uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"Počáteční uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrácený vykřičník",cent:"Znak centu",pound:"Znak libry",curren:"Znak měny",yen:"Znak jenu",brvbar:"Přerušená svislá čára",sect:"Znak oddílu",uml:"Přehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo",
-not:"Logistický zápor",reg:"Znak registrace",macr:"Pomlčka nad",deg:"Znak stupně",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"Tečka uprostřed",cedil:"Ocásek vlevo",sup1:"Jednička jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"Obyčejný zlomek jedna čtvrtina",frac12:"Obyčejný zlomek jedna polovina",frac34:"Obyčejný zlomek tři čtvrtiny",iquest:"Znak obráceného otazníku",
-Agrave:"Velké písmeno latinky A s čárkou nad vlevo",Aacute:"Velké písmeno latinky A s čárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokáněm",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvěma tečkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s čárkou nad vlevo",Eacute:"Velké písmeno latinky E s čárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokáněm",
-Euml:"Velké písmeno latinky E s dvěma tečkami",Igrave:"Velké písmeno latinky I s čárkou nad vlevo",Iacute:"Velké písmeno latinky I s čárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokáněm",Iuml:"Velké písmeno latinky I s dvěma tečkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s čárkou nad vlevo",Oacute:"Velké písmeno latinky O s čárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokáněm",Otilde:"Velké písmeno latinky O s tildou",
-Ouml:"Velké písmeno latinky O s dvěma tečkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O přeškrtnuté",Ugrave:"Velké písmeno latinky U s čárkou nad vlevo",Uacute:"Velké písmeno latinky U s čárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokáněm",Uuml:"Velké písmeno latinky U s dvěma tečkami",Yacute:"Velké písmeno latinky Y s čárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s čárkou nad vlevo",aacute:"Malé písmeno latinky a s čárkou nad vpravo",
-acirc:"Malé písmeno latinky a s vokáněm",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvěma tečkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s čárkou nad vlevo",eacute:"Malé písmeno latinky e s čárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokáněm",euml:"Malé písmeno latinky e s dvěma tečkami",igrave:"Malé písmeno latinky i s čárkou nad vlevo",iacute:"Malé písmeno latinky i s čárkou nad vpravo",
-icirc:"Malé písmeno latinky i s vokáněm",iuml:"Malé písmeno latinky i s dvěma tečkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s čárkou nad vlevo",oacute:"Malé písmeno latinky o s čárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokáněm",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvěma tečkami",divide:"Znak dělení",oslash:"Malé písmeno latinky o přeškrtnuté",ugrave:"Malé písmeno latinky u s čárkou nad vlevo",
-uacute:"Malé písmeno latinky u s čárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokáněm",uuml:"Malé písmeno latinky u s dvěma tečkami",yacute:"Malé písmeno latinky y s čárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvěma tečkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokáněm",374:"Velké písmeno latinky Y s vokáněm",373:"Malé písmeno latinky w s vokáněm",375:"Malé písmeno latinky y s vokáněm",sbquo:"Dolní 9 uvozovka jednoduchá",
-8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"Trojtečkový úvod",trade:"Obchodní značka",9658:"Černý ukazatel směřující vpravo",bull:"Kolečko",rarr:"Šipka vpravo",rArr:"Dvojitá šipka vpravo",hArr:"Dvojitá šipka vlevo a vpravo",diams:"Černé piky",asymp:"Téměř se rovná"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/cy.js
deleted file mode 100644
index 19b86d6..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/cy.js
+++ /dev/null
@@ -1,14 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid",
-reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig",
-Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom",
-Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild",
-Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig",
-aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom",
-euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom",
-otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llyth",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod",
-OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith",
-diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/de.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/de.js
deleted file mode 100644
index 6def78b..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/de.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen",
-reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex",
-Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex",
-Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent",
-Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben",
-aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema",
-eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut",
-ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex",
-sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/el.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/el.js
deleted file mode 100644
index 73496fd..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/el.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","el",{euro:"Σύμβολο Ευρώ",lsquo:"Αριστερός χαρακτήρας μονού εισαγωγικού",rsquo:"Δεξιός χαρακτήρας μονού εισαγωγικού",ldquo:"Αριστερός χαρακτήρας διπλού εισαγωγικού",rdquo:"Δεξιός χαρακτήρας διπλού εισαγωγικού",ndash:"Παύλα en",mdash:"Παύλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"Σύμβολο Σεντ",pound:"Σύμβολο λίρας",curren:"Σύμβολο συναλλαγματικής μονάδας",yen:"Σύμβολο Γιέν",brvbar:"Σπασμένη μπάρα",sect:"Σύμβολο τμήματος",uml:"Διαίρεση",copy:"Σύμβολο πνευματικών δικαιωμάτων",
-ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",
-iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",
-Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",
-Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",
-acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",
-icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",
-ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",
-bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/en.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/en.js
deleted file mode 100644
index fdecfd2..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/en.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/eo.js
deleted file mode 100644
index 1a56c0b..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/eo.js
+++ /dev/null
@@ -1,12 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno",
-sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao",
-Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo",
-Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno",
-szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao",
-igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno",
-uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo",
-bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"Preskaŭ egala"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/et.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/et.js
deleted file mode 100644
index 3a619cc..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/et.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above",
-aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
-ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
-thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",
-bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fa.js
deleted file mode 100644
index 493e580..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fa.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت دوتایی نقل قول چپ",rdquo:"علامت دوتایی نقل قول راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت گذاری به عنوان علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"Diaeresis",copy:"نشان کپی رایت",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",not:"علامت ثبت نشده",
-reg:"علامت ثبت شده",macr:"Macron",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"Pilcrow sign",middot:"نقطه میانی",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",
-Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
-Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",
-Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",
-aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
-ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
-thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",
-bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"جهت‌نمای دوتایی چپ به راست",diams:"Black diamond suit",asymp:"تقریبا برابر با"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fi.js
deleted file mode 100644
index cee518a..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fi.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fr.js
deleted file mode 100644
index 0a80c07..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/fr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret bas underscore",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant",
-not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron",
-Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu",
-Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron",
-auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu",
-ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe",
-373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/he.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/he.js
deleted file mode 100644
index 17ee34f..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/he.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/hr.js
deleted file mode 100644
index 94f49fc..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/hr.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskličnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana prečka",sect:"Znak odjeljka",uml:"Diaeresis",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak",
-reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Srednja točka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"Latin capital letter A with acute accent",
-Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
-Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",
-Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",
-aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
-ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
-thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",
-bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/it.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/it.js
deleted file mode 100644
index b08b24d..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/it.js
+++ /dev/null
@@ -1,14 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte",
-not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave",
-Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso",
-Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso",
-Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S",
-agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto",
-ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto",
-ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn",
-yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale",
-trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ku.js
deleted file mode 100644
index 235d952..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ku.js
+++ /dev/null
@@ -1,14 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانه‌ی یۆرۆ",lsquo:"نیشانه‌ی فاریزه‌ی سه‌رووژێری تاکی چه‌پ",rsquo:"نیشانه‌ی فاریزه‌ی سه‌رووژێری تاکی ڕاست",ldquo:"نیشانه‌ی فاریزه‌ی سه‌رووژێری دووهێنده‌ی چه‌پ",rdquo:"نیشانه‌ی فاریزه‌ی سه‌رووژێری دووهێنده‌ی ڕاست",ndash:"ته‌قه‌ڵی کورت",mdash:"ته‌قه‌ڵی درێژ",iexcl:"نیشانه‌ی هه‌ڵه‌وگێڕی سه‌رسوڕمێنه‌ر",cent:"نیشانه‌ی سه‌نت",pound:"نیشانه‌ی پاوه‌ند",curren:"نیشانه‌ی دراو",yen:"نیشانه‌ی یه‌نی ژاپۆنی",brvbar:"شریتی ئه‌ستوونی پچڕاو",sect:"نیشانه‌ی دوو s له‌سه‌ریه‌ك",
-uml:"خاڵ",copy:"نیشانه‌ی مافی چاپ",ordf:"هێڵ له‌سه‌ر پیتی a",laquo:"دوو تیری به‌دووایه‌کی چه‌پ",not:"نیشانه‌ی نه‌خێر",reg:"نیشانه‌ی R له‌ناو بازنه‌دا",macr:"ماکڕوون",deg:"نیشانه‌ی پله",sup2:"سه‌رنووسی دوو",sup3:"سه‌رنووسی سێ",acute:"لاری تیژ",micro:"نیشانه‌ی u لق درێژی چه‌پی خواروو",para:"نیشانه‌یپه‌ڕه‌گراف",middot:"ناوه‌ڕاستی خاڵ",cedil:"نیشانه‌ی c ژێر چووکره‌",sup1:"سه‌رنووسی یه‌ك",ordm:"هێڵ له‌ژێر پیتی o",raquo:"دوو تیری به‌دووایه‌کی ڕاست",frac14:"یه‌ك له‌سه‌ر چووار",frac12:"یه‌ك له‌سه‌ر دوو",
-frac34:"سێ له‌سه‌ر چووار",iquest:"هێمای هه‌ڵه‌وگێری پرسیار",Agrave:"پیتی لاتینی A-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",Aacute:"پیتی لاتینی A-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Acirc:"پیتی لاتینی A-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Atilde:"پیتی لاتینی A-ی گه‌وره‌ له‌گه‌ڵ زه‌ڕه‌",Auml:"پیتی لاتینی A-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Aring:"پیتی لاتینی گه‌وره‌ی Å",AElig:"پیتی لاتینی گه‌وره‌ی Æ",Ccedil:"پیتی لاتینی C-ی گه‌وره‌ له‌گه‌ڵ ژێر چووکره‌",Egrave:"پیتی لاتینی E-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",
-Eacute:"پیتی لاتینی E-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Ecirc:"پیتی لاتینی E-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Euml:"پیتی لاتینی E-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Igrave:"پیتی لاتینی I-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",Iacute:"پیتی لاتینی I-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Icirc:"پیتی لاتینی I-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Iuml:"پیتی لاتینی I-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",ETH:"پیتی لاتینی E-ی گه‌وره‌ی",Ntilde:"پیتی لاتینی N-ی گه‌وره‌ له‌گه‌ڵ زه‌ڕه‌",Ograve:"پیتی لاتینی O-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",
-Oacute:"پیتی لاتینی O-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Ocirc:"پیتی لاتینی O-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Otilde:"پیتی لاتینی O-ی گه‌وره‌ له‌گه‌ڵ زه‌ڕه‌",Ouml:"پیتی لاتینی O-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",times:"نیشانه‌ی لێکدان",Oslash:"پیتی لاتینی گه‌وره‌ی Ø له‌گه‌ڵ هێمای دڵ وه‌ستان",Ugrave:"پیتی لاتینی U-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری لار",Uacute:"پیتی لاتینی U-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",Ucirc:"پیتی لاتینی U-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",Uuml:"پیتی لاتینی U-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",
-Yacute:"پیتی لاتینی Y-ی گه‌وره‌ له‌گه‌ڵ ڕوومه‌تداری تیژ",THORN:"پیتی لاتینی دڕکی گه‌وره",szlig:"پیتی لاتنی نووك تیژی s",agrave:"پیتی لاتینی a-ی بچووك له‌گه‌ڵ ڕوومه‌تداری لار",aacute:"پیتی لاتینی a-ی بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",acirc:"پیتی لاتینی a-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",atilde:"پیتی لاتینی a-ی بچووك له‌گه‌ڵ زه‌ڕه‌",auml:"پیتی لاتینی a-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك له‌گه‌ڵ ژێر چووکره‌",egrave:"پیتی لاتینی e-ی بچووك له‌گه‌ڵ ڕوومه‌تداری لار",
-eacute:"پیتی لاتینی e-ی بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",euml:"پیتی لاتینی e-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",igrave:"پیتی لاتینی i-ی بچووك له‌گه‌ڵ ڕوومه‌تداری لار",iacute:"پیتی لاتینی i-ی بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",icirc:"پیتی لاتینی i-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",iuml:"پیتی لاتینی i-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك له‌گه‌ڵ زه‌ڕه‌",ograve:"پیتی لاتینی o-ی بچووك له‌گه‌ڵ ڕوومه‌تداری لار",
-oacute:"پیتی لاتینی o-ی بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",otilde:"پیتی لاتینی o-ی بچووك له‌گه‌ڵ زه‌ڕه‌",ouml:"پیتی لاتینی o-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",divide:"نیشانه‌ی دابه‌ش",oslash:"پیتی لاتینی گه‌وره‌ی ø له‌گه‌ڵ هێمای دڵ وه‌ستان",ugrave:"پیتی لاتینی u-ی بچووك له‌گه‌ڵ ڕوومه‌تداری لار",uacute:"پیتی لاتینی u-ی بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",uuml:"پیتی لاتینی u-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",
-yacute:"پیتی لاتینی y-ی بچووك له‌گه‌ڵ ڕوومه‌تداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك له‌گه‌ڵ نیشانه‌ له‌سه‌ری",OElig:"پیتی لاتینی گه‌وره‌ی پێکه‌وه‌نووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکه‌وه‌نووسراوی oe",372:"پیتی لاتینی W-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",374:"پیتی لاتینی Y-ی گه‌وره‌ له‌گه‌ڵ نیشانه‌ له‌سه‌ری",373:"پیتی لاتینی w-ی بچووکی له‌گه‌ڵ نیشانه‌ له‌سه‌ری",375:"پیتی لاتینی y-ی بچووکی له‌گه‌ڵ نیشانه‌ له‌سه‌ری",sbquo:"نیشانه‌ی فاریزه‌ی نزم",8219:"نیشانه‌ی فاریزه‌ی به‌رزی پێچه‌وانه",
-bdquo:"دوو فاریزه‌ی ته‌نیش یه‌ك",hellip:"ئاسۆیی بازنه",trade:"نیشانه‌ی بازرگانی",9658:"ئاراسته‌ی ڕه‌شی ده‌ستی ڕاست",bull:"فیشه‌ك",rarr:"تیری ده‌ستی ڕاست",rArr:"دووتیری ده‌ستی ڕاست",hArr:"دوو تیری ڕاست و چه‌پ",diams:"ڕه‌شی پاقڵاوه‌یی",asymp:"نیشانه‌ی یه‌کسانه"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/lv.js
deleted file mode 100644
index f7a8250..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/lv.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zīme",lsquo:"Kreisā  vienkārtīga pēdiņa",rsquo:"Labā  vienkārtīga pēdiņa",ldquo:"Kreisā  dubult pēdiņa",rdquo:"Labā dubult pēdiņa",ndash:"En svītra",mdash:"Em svītra",iexcl:"Apgriezta izsaukuma zīme",cent:"Centu naudas zīme",pound:"Sterliņu mārciņu naudas zīme",curren:"Valūtas zīme",yen:"Jenu naudas zīme",brvbar:"Vertikāla pārrauta līnija",sect:"Paragrāfa zīme",uml:"Diakritiska zīme",copy:"Autortiesību zīme",ordf:"Sievišķas kārtas rādītājs",
-laquo:"Kreisā dubult stūra pēdiņu zīme",not:"Neparakstīts",reg:"Reģistrēta zīme",macr:"Garumzīme",deg:"Grādu zīme",sup2:"Augšraksts divi",sup3:"Augšraksts trīs",acute:"Akūta uzsvara zīme",micro:"Mikro zīme",para:"Rindkopas zīme ",middot:"Vidējs punkts",cedil:"Āķītis zem burta",sup1:"Augšraksts viens",ordm:"Vīrišķīgas kārtas rādītājs",raquo:"Labā dubult stūra pēdiņu zīme",frac14:"Vulgāra frakcija 1/4",frac12:"Vulgāra frakcija 1/2",frac34:"Vulgāra frakcija 3/4",iquest:"Apgriezta jautājuma zīme",Agrave:"Lielais latīņu burts A ar uzsvara zīmi",
-Aacute:"Lielais  latīņu burts A ar akūtu uzsvara zīmi",Acirc:"Lielais latīņu burts A ar diakritisku zīmi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zīmi",Aring:"Lielais latīņu burts A ar aplīti augšā",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar āķīti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akūtu uzsvara zīmi",Ecirc:"Lielais latīņu burts E ar diakritisko zīmi",Euml:"Lielais latīņu burts E ar diakritisko zīmi",
-Igrave:"Lielais latīņu burts I ar uzsvaras  zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi",
-times:"Reizināšanas zīme ",Oslash:"Lielais latīņu burts O ar iesvītrojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zīmi",Uacute:"Lielais latīņu burts U ar akūto uzsvars zīmi",Ucirc:"Lielais latīņu burts U ar diakritisko zīmi",Uuml:"Lielais latīņu burts U ar diakritisko zīmi",Yacute:"Lielais latīņu burts Y ar akūto uzsvaras zīmi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatūru",agrave:"Mazs latīņu burts a ar uzsvara zīmi",aacute:"Mazs latīņu burts a ar akūto uzsvara zīmi",
-acirc:"Mazs latīņu burts a ar diakritisko zīmi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zīmi",aring:"Mazs latīņu burts a ar aplīti augšā",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar āķīti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zīmi ",eacute:"Mazs latīņu burts e ar akūtu uzsvara zīmi",ecirc:"Mazs latīņu burts e ar diakritisko zīmi",euml:"Mazs latīņu burts e ar diakritisko zīmi",igrave:"Mazs latīņu burts i ar uzsvara zīmi ",iacute:"Mazs latīņu burts i ar akūtu uzsvara zīmi",
-icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ",
-uacute:"Mazs latīņu burts u ar  akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar  akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ",
-sbquo:"Mazas-9 vienkārtīgas pēdiņas",8219:"Lielas-9 vienkārtīgas apgrieztas pēdiņas",bdquo:"Mazas-9 dubultas pēdiņas",hellip:"Horizontāli daudzpunkti",trade:"Preču zīmes zīme",9658:"Melns pa labi pagriezts radītājs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"Gandrīz vienāds ar"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/nb.js
deleted file mode 100644
index 2758992..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/nb.js
+++ /dev/null
@@ -1,11 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn",
-reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde",
-Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel",
-times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent",
-ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks",
-uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil",
-rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/nl.js
deleted file mode 100644
index 5838991..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/nl.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken",
-reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Mico-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe",
-Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu",
-Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave",
-Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema",
-aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe",
-iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave",
-uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Œ",oelig:"Latijnse kleine letter œ",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe",
-375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/no.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/no.js
deleted file mode 100644
index dadc22e..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/no.js
+++ /dev/null
@@ -1,11 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn",
-reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde",
-Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel",
-times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent",
-ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks",
-uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil",
-rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js
deleted file mode 100644
index 98b8409..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js
+++ /dev/null
@@ -1,11 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada",
-macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema",
-Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo",
-Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema",
-aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo",
-otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo",
-373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/sk.js
deleted file mode 100644
index 8e3898a..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/sk.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlčka",mdash:"Em pomlčka",iexcl:"Obrátený výkričník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"Prerušená zvislá čiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor",
-reg:"Znak registrácie",macr:"Pomlčka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"Obyčajný zlomok jedna štvrtina",frac12:"Obyčajný zlomok jedna polovica",frac34:"Obyčajný zlomok tri štvrtiny",iquest:"Otočený otáznik",Agrave:"Veľké písmeno latinky A s accentom",
-Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkčeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkčeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom",
-Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkčeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkčeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preškrtnuté",Ugrave:"Veľké písmeno latinky U s accentom",
-Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkčeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkčeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad",
-aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkčeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkčeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom",
-oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkčeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preškrtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkčeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami",
-OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkčeňom",374:"Veľké písmeno latinky Y s mäkčeňom",373:"Malé písmeno latinky w s mäkčeňom",375:"Malé písmeno latinky y s mäkčeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otočená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej značky",9658:"Čierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá šipka vpravo",
-hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/sv.js
deleted file mode 100644
index 773c31b..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/sv.js
+++ /dev/null
@@ -1,11 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken",
-not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex",
-Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex",
-Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ",
-ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø",
-ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken",
-trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/tr.js
deleted file mode 100644
index 5c79517..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/tr.js
+++ /dev/null
@@ -1,12 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti",
-not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi",
-Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi",
-ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi",
-THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi",
-igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi",
-uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti",
-bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ug.js
deleted file mode 100644
index 5330acc..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/ug.js
+++ /dev/null
@@ -1,13 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ پەش سول",rsquo:"يالاڭ پەش ئوڭ",ldquo:"قوش پەش سول",rdquo:"قوش پەش ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"فوند ستېرلىڭ",curren:"پۇل بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگراف بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى",
-deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندېكىس 2",sup3:"يۇقىرى ئىندېكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا چېكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندېكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",
-Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
-Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",
-Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",
-ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent",
-oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",
-yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",
-rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/core/misc/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js
deleted file mode 100644
index 6452804..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js
+++ /dev/null
@@ -1,9 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符号",lsquo:"左单引号",rsquo:"右单引号",ldquo:"左双引号",rdquo:"右双引号",ndash:"短划线",mdash:"破折号",iexcl:"竖翻叹号",cent:"分币标记",pound:"英镑标记",curren:"货币标记",yen:"日元标记",brvbar:"间断条",sect:"节标记",uml:"分音符",copy:"版权所有标记",ordf:"阴性顺序指示符",laquo:"左指双尖引号",not:"非标记",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"锐音符",micro:"微符",para:"段落标记",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺序指示符",raquo:"右指双尖引号",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问号",
-Agrave:"带抑音符的拉丁文大写字母 A",Aacute:"带锐音符的拉丁文大写字母 A",Acirc:"带扬抑符的拉丁文大写字母 A",Atilde:"带颚化符的拉丁文大写字母 A",Auml:"带分音符的拉丁文大写字母 A",Aring:"带上圆圈的拉丁文大写字母 A",AElig:"拉丁文大写字母 Ae",Ccedil:"带下加符的拉丁文大写字母 C",Egrave:"带抑音符的拉丁文大写字母 E",Eacute:"带锐音符的拉丁文大写字母 E",Ecirc:"带扬抑符的拉丁文大写字母 E",Euml:"带分音符的拉丁文大写字母 E",Igrave:"带抑音符的拉丁文大写字母 I",Iacute:"带锐音符的拉丁文大写字母 I",Icirc:"带扬抑符的拉丁文大写字母 I",Iuml:"带分音符的拉丁文大写字母 I",ETH:"拉丁文大写字母 Eth",Ntilde:"带颚化符的拉丁文大写字母 N",Ograve:"带抑音符的拉丁文大写字母 O",Oacute:"带锐音符的拉丁文大写字母 O",Ocirc:"带扬抑符的拉丁文大写字母 O",Otilde:"带颚化符的拉丁文大写字母 O",
-Ouml:"带分音符的拉丁文大写字母 O",times:"乘号",Oslash:"带粗线的拉丁文大写字母 O",Ugrave:"带抑音符的拉丁文大写字母 U",Uacute:"带锐音符的拉丁文大写字母 U",Ucirc:"带扬抑符的拉丁文大写字母 U",Uuml:"带分音符的拉丁文大写字母 U",Yacute:"带抑音符的拉丁文大写字母 Y",THORN:"拉丁文大写字母 Thorn",szlig:"拉丁文小写字母清音 S",agrave:"带抑音符的拉丁文小写字母 A",aacute:"带锐音符的拉丁文小写字母 A",acirc:"带扬抑符的拉丁文小写字母 A",atilde:"带颚化符的拉丁文小写字母 A",auml:"带分音符的拉丁文小写字母 A",aring:"带上圆圈的拉丁文小写字母 A",aelig:"拉丁文小写字母 Ae",ccedil:"带下加符的拉丁文小写字母 C",egrave:"带抑音符的拉丁文小写字母 E",eacute:"带锐音符的拉丁文小写字母 E",ecirc:"带扬抑符的拉丁文小写字母 E",euml:"带分音符的拉丁文小写字母 E",igrave:"带抑音符的拉丁文小写字母 I",
-iacute:"带锐音符的拉丁文小写字母 I",icirc:"带扬抑符的拉丁文小写字母 I",iuml:"带分音符的拉丁文小写字母 I",eth:"拉丁文小写字母 Eth",ntilde:"带颚化符的拉丁文小写字母 N",ograve:"带抑音符的拉丁文小写字母 O",oacute:"带锐音符的拉丁文小写字母 O",ocirc:"带扬抑符的拉丁文小写字母 O",otilde:"带颚化符的拉丁文小写字母 O",ouml:"带分音符的拉丁文小写字母 O",divide:"除号",oslash:"带粗线的拉丁文小写字母 O",ugrave:"带抑音符的拉丁文小写字母 U",uacute:"带锐音符的拉丁文小写字母 U",ucirc:"带扬抑符的拉丁文小写字母 U",uuml:"带分音符的拉丁文小写字母 U",yacute:"带抑音符的拉丁文小写字母 Y",thorn:"拉丁文小写字母 Thorn",yuml:"带分音符的拉丁文小写字母 Y",OElig:"拉丁文大写连字 Oe",oelig:"拉丁文小写连字 Oe",372:"带扬抑符的拉丁文大写字母 W",374:"带扬抑符的拉丁文大写字母 Y",
-373:"带扬抑符的拉丁文小写字母 W",375:"带扬抑符的拉丁文小写字母 Y",sbquo:"单下 9 形引号",8219:"单高横翻 9 形引号",bdquo:"双下 9 形引号",hellip:"水平省略号",trade:"商标标志",9658:"实心右指指针",bull:"加重号",rarr:"向右箭头",rArr:"向右双线箭头",hArr:"左右双线箭头",diams:"实心方块纸牌",asymp:"约等于"});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/specialchar/dialogs/specialchar.js b/core/misc/ckeditor/plugins/specialchar/dialogs/specialchar.js
deleted file mode 100644
index acaea0c..0000000
--- a/core/misc/ckeditor/plugins/specialchar/dialogs/specialchar.js
+++ /dev/null
@@ -1,14 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j);
-var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("&nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("&nbsp;"),b.getParent().removeClass("cke_light_background"),
-j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault();
-break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):
-d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['<table role="listbox" aria-labelledby="'+a+'" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'],d=0,g=b.length,h,e;d<g;){f.push('<tr role="presentation">');for(var j=0;j<c;j++,
-d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("&","").replace(";","").replace("#",""),e=l[e]||h);var k="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(d+1)+'"',' aria-setsize="'+g+'"',' aria-labelledby="'+k+'"',' class="cke_specialchar" title="',CKEDITOR.tools.htmlEncode(e),'" onkeydown="CKEDITOR.tools.callFunction( '+n+
-', event, this )" onclick="CKEDITOR.tools.callFunction('+m+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit">'+h+'</span><span class="cke_voice_label" id="'+k+'">'+e+"</span></a>")}else f.push('<td class="cke_dark_background">&nbsp;');f.push("</td>")}f.push("</tr>")}f.push("</tbody></table>",'<span id="'+a+'" class="cke_voice_label">'+l.options+"</span>");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab,
-title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox",
-align:"top",children:[{type:"html",html:"<div></div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"<div>&nbsp;</div>"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",
-html:"<div>&nbsp;</div>"}]}]}]}]}]}});
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/table/dialogs/table.js b/core/misc/ckeditor/plugins/table/dialogs/table.js
deleted file mode 100644
index 01d9e38..0000000
--- a/core/misc/ckeditor/plugins/table/dialogs/table.js
+++ /dev/null
@@ -1,20 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-(function(){function r(a){for(var f=0,l=0,k=0,m,e=a.$.rows.length;k<e;k++){m=a.$.rows[k];for(var d=f=0,c,b=m.cells.length;d<b;d++)c=m.cells[d],f+=c.colSpan;f>l&&(l=f)}return l}function o(a){return function(){var f=this.getValue(),f=!!(CKEDITOR.dialog.validate.integer()(f)&&0<f);f||(alert(a),this.select());return f}}function n(a,f){var l=function(e){return new CKEDITOR.dom.element(e,a.document)},n=a.editable(),m=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?
-310:280,onLoad:function(){var e=this,a=e.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),b=e.getContentElement("info","txtWidth");b&&b.setValue(a,!0);a=this.getStyle("height","");(b=e.getContentElement("info","txtHeight"))&&b.setValue(a,!0)})},onShow:function(){var e=a.getSelection(),d=e.getRanges(),c,b=this.getContentElement("info","txtRows"),h=this.getContentElement("info","txtCols"),p=this.getContentElement("info","txtWidth"),g=this.getContentElement("info",
-"txtHeight");"tableProperties"==f&&((e=e.getSelectedElement())&&e.is("table")?c=e:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),c=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=c);c?(this.setupContent(c),b&&b.disable(),h&&h.disable()):(b&&b.enable(),h&&h.enable());p&&p.onChange();g&&g.onChange()},onOk:function(){var e=a.getSelection(),d=this._.selectedElement&&e.createBookmarks(),c=this._.selectedElement||l("table"),b={};this.commitContent(b,
-c);if(b.info){b=b.info;if(!this._.selectedElement)for(var h=c.append(l("tbody")),f=parseInt(b.txtRows,10)||0,g=parseInt(b.txtCols,10)||0,i=0;i<f;i++)for(var j=h.append(l("tr")),k=0;k<g;k++){var m=j.append(l("td"));CKEDITOR.env.ie||m.append(l("br"))}f=b.selHeaders;if(!c.$.tHead&&("row"==f||"both"==f)){j=new CKEDITOR.dom.element(c.$.createTHead());h=c.getElementsByTag("tbody").getItem(0);h=h.getElementsByTag("tr").getItem(0);for(i=0;i<h.getChildCount();i++)g=h.getChild(i),g.type==CKEDITOR.NODE_ELEMENT&&
-!g.data("cke-bookmark")&&(g.renameNode("th"),g.setAttribute("scope","col"));j.append(h.remove())}if(null!==c.$.tHead&&!("row"==f||"both"==f)){j=new CKEDITOR.dom.element(c.$.tHead);h=c.getElementsByTag("tbody").getItem(0);for(k=h.getFirst();0<j.getChildCount();){h=j.getFirst();for(i=0;i<h.getChildCount();i++)g=h.getChild(i),g.type==CKEDITOR.NODE_ELEMENT&&(g.renameNode("td"),g.removeAttribute("scope"));h.insertBefore(k)}j.remove()}if(!this.hasColumnHeaders&&("col"==f||"both"==f))for(j=0;j<c.$.rows.length;j++)g=
-new CKEDITOR.dom.element(c.$.rows[j].cells[0]),g.renameNode("th"),g.setAttribute("scope","row");if(this.hasColumnHeaders&&!("col"==f||"both"==f))for(i=0;i<c.$.rows.length;i++)j=new CKEDITOR.dom.element(c.$.rows[i]),"tbody"==j.getParent().getName()&&(g=new CKEDITOR.dom.element(j.$.cells[0]),g.renameNode("td"),g.removeAttribute("scope"));b.txtHeight?c.setStyle("height",b.txtHeight):c.removeStyle("height");b.txtWidth?c.setStyle("width",b.txtWidth):c.removeStyle("width");c.getAttribute("style")||c.removeAttribute("style")}if(this._.selectedElement)try{e.selectBookmarks(d)}catch(n){}else a.insertElement(c),
-setTimeout(function(){var e=new CKEDITOR.dom.element(c.$.rows[0].cells[0]),b=a.createRange();b.moveToPosition(e,CKEDITOR.POSITION_AFTER_START);b.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidRows),setup:function(e){this.setValue(e.$.rows.length)},
-commit:k},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidCols),setup:function(e){this.setValue(r(e))},commit:k},{type:"html",html:"&nbsp;"},{type:"select",id:"selHeaders","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(e){var a=this.getDialog();a.hasColumnHeaders=!0;for(var c=
-0;c<e.$.rows.length;c++){var b=e.$.rows[c].cells[0];if(b&&"th"!=b.nodeName.toLowerCase()){a.hasColumnHeaders=!1;break}}null!==e.$.tHead?this.setValue(a.hasColumnHeaders?"both":"row"):this.setValue(a.hasColumnHeaders?"col":"")},commit:k},{type:"text",id:"txtBorder","default":1,label:a.lang.table.border,controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")||"")},commit:function(a,d){this.getValue()?d.setAttribute("border",
-this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],setup:function(a){this.setValue(a.getAttribute("align")||"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]},{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",
-id:"txtWidth",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":500>n.getSize("width")?"100%":500,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",
-id:"txtHeight",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:"&nbsp;"},{type:"text",id:"txtCellSpace",
-controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":1,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing",this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":1,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||
-"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right",html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){var a=a.getItem(0),d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),
-this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var c=this.getValue(),b=d.getElementsByTag("caption");if(c)0<b.count()?(b=b.getItem(0),b.setHtml("")):(b=new CKEDITOR.dom.element("caption",a.document),d.getChildCount()?b.insertBefore(d.getFirst()):b.appendTo(d)),b.append(new CKEDITOR.dom.text(c,a.document));else if(0<b.count())for(c=b.count()-1;0<=c;c--)b.getItem(c).remove()}}},{type:"text",id:"txtSummary",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||
-"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()):d.removeAttribute("summary")}}]}]},m&&m.createAdvancedTab(a)]}}var q=CKEDITOR.tools.cssLength,k=function(a){var f=this.id;a.info||(a.info={});a.info[f]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return n(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return n(a,"tableProperties")})})();
\ No newline at end of file
diff --git a/core/misc/ckeditor/plugins/tabletools/dialogs/tableCell.js b/core/misc/ckeditor/plugins/tabletools/dialogs/tableCell.js
deleted file mode 100644
index 2c4e865..0000000
--- a/core/misc/ckeditor/plugins/tabletools/dialogs/tableCell.js
+++ /dev/null
@@ -1,16 +0,0 @@
-﻿/*
- Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("cellProperties",function(f){var g=f.lang.table,c=g.cell,d=f.lang.common,h=CKEDITOR.dialog.validate,j=/^(\d+(?:\.\d+)?)(px|%)$/,e={type:"html",html:"&nbsp;"},k="rtl"==f.lang.dir,i=f.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0,
-children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:d.width,validate:h.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info","widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:function(a){var b=parseInt(a.getAttribute("width"),10),a=parseInt(a.getStyle("width"),10);!isNaN(b)&&this.setValue(b);!isNaN(a)&&this.setValue(a)},
-commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType");isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType",label:f.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[g.widthPx,"px"],[g.widthPc,"%"]],setup:function(a){(a=j.exec(a.getStyle("width")||a.getAttribute("width")))&&this.setValue(a[2])}}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text",
-id:"height",label:d.height,width:"100px","default":"",validate:h.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:function(a){var b=parseInt(a.getAttribute("height"),10),a=parseInt(a.getStyle("height"),10);!isNaN(b)&&this.setValue(b);!isNaN(a)&&this.setValue(a)},commit:function(a){var b=parseInt(this.getValue(),
-10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"<br />"+g.widthPx}]},e,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:function(a){var b=a.getAttribute("noWrap");("nowrap"==a.getStyle("white-space")||b)&&this.setValue("no")},commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},
-e,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[d.notSet,""],[d.alignLeft,"left"],[d.alignCenter,"center"],[d.alignRight,"right"]],setup:function(a){var b=a.getAttribute("align");this.setValue(a.getStyle("text-align")||b||"")},commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align");a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[d.notSet,""],[d.alignTop,"top"],[d.alignMiddle,"middle"],[d.alignBottom,
-"bottom"],[c.alignBaseline,"baseline"]],setup:function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}this.setValue(a||b||"")},commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]},e,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],
-setup:function(a){this.setValue(a.getName())},commit:function(a){a.renameNode(this.getValue())}},e,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:h.integer(c.invalidRowSpan),setup:function(a){(a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a&&this.setValue(a)},commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()):a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:h.integer(c.invalidColSpan),
-setup:function(a){(a=parseInt(a.getAttribute("colSpan"),10))&&1!=a&&this.setValue(a)},commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},e,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:function(a){var b=a.getAttribute("bgColor");this.setValue(a.getStyle("background-color")||b)},commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):
-a.removeStyle("background-color");a.removeAttribute("bgColor")}},i?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){f.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:e]},e,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:function(a){var b=
-a.getAttribute("borderColor");this.setValue(a.getStyle("border-color")||b)},commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},i?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(k?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){f.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info",
-"borderColor").setValue(a);this.focus()},this)}}:e]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells[0])},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()}}});
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/dialog.css b/core/misc/ckeditor/skins/moono/dialog.css
deleted file mode 100644
index ab5c2b8..0000000
--- a/core/misc/ckeditor/skins/moono/dialog.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/dialog_ie.css b/core/misc/ckeditor/skins/moono/dialog_ie.css
deleted file mode 100644
index a80b3f0..0000000
--- a/core/misc/ckeditor/skins/moono/dialog_ie.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/dialog_ie7.css b/core/misc/ckeditor/skins/moono/dialog_ie7.css
deleted file mode 100644
index f07cdf6..0000000
--- a/core/misc/ckeditor/skins/moono/dialog_ie7.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/dialog_ie8.css b/core/misc/ckeditor/skins/moono/dialog_ie8.css
deleted file mode 100644
index b59d02e..0000000
--- a/core/misc/ckeditor/skins/moono/dialog_ie8.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/dialog_iequirks.css b/core/misc/ckeditor/skins/moono/dialog_iequirks.css
deleted file mode 100644
index fe9fc96..0000000
--- a/core/misc/ckeditor/skins/moono/dialog_iequirks.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/dialog_opera.css b/core/misc/ckeditor/skins/moono/dialog_opera.css
deleted file mode 100644
index 2f5072d..0000000
--- a/core/misc/ckeditor/skins/moono/dialog_opera.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_browser_gecko19 .cke_dialog_body{position:relative}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fffafafa',endColorstr='#ffededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:0 0;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:3px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}span.cke_dialog_ui_button{padding:0 12px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}a.cke_dialog_ui_button_ok span,a.cke_dialog_ui_button_cancel span{color:inherit;font-size:12px;font-weight:bold;text-shadow:0 1px 0 #fff;line-height:20px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ff9ad717',endColorstr='#ff69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:2px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:24px;line-height:24px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:2px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background-position:0 -32px;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:1px none;font-size:1px}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;background-position:0 0;background-image:url(images/mini.png);width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_unlocked{background-position:0 -16px;background-image:url(images/mini.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_dialog_footer{display:block;height:38px}.cke_ltr .cke_dialog_footer>*{float:right}.cke_rtl .cke_dialog_footer>*{float:left}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/editor.css b/core/misc/ckeditor/skins/moono/editor.css
deleted file mode 100644
index b34b049..0000000
--- a/core/misc/ckeditor/skins/moono/editor.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_button__justifyblock_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__justifycenter_icon{background: url(icons.png) no-repeat 0 -1376px !important;}.cke_button__justifyleft_icon{background: url(icons.png) no-repeat 0 -1408px !important;}.cke_button__justifyright_icon{background: url(icons.png) no-repeat 0 -1440px !important;}.cke_button__placeholder_icon{background: url(icons.png) no-repeat 0 -1472px !important;}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1504px !important;}.cke_ltr .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1536px !important;}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/editor_gecko.css b/core/misc/ckeditor/skins/moono/editor_gecko.css
deleted file mode 100644
index c4dd757..0000000
--- a/core/misc/ckeditor/skins/moono/editor_gecko.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_button__justifyblock_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__justifycenter_icon{background: url(icons.png) no-repeat 0 -1376px !important;}.cke_button__justifyleft_icon{background: url(icons.png) no-repeat 0 -1408px !important;}.cke_button__justifyright_icon{background: url(icons.png) no-repeat 0 -1440px !important;}.cke_button__placeholder_icon{background: url(icons.png) no-repeat 0 -1472px !important;}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1504px !important;}.cke_ltr .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1536px !important;}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/editor_ie.css b/core/misc/ckeditor/skins/moono/editor_ie.css
deleted file mode 100644
index 1f2c754..0000000
--- a/core/misc/ckeditor/skins/moono/editor_ie.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_button__justifyblock_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__justifycenter_icon{background: url(icons.png) no-repeat 0 -1376px !important;}.cke_button__justifyleft_icon{background: url(icons.png) no-repeat 0 -1408px !important;}.cke_button__justifyright_icon{background: url(icons.png) no-repeat 0 -1440px !important;}.cke_button__placeholder_icon{background: url(icons.png) no-repeat 0 -1472px !important;}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1504px !important;}.cke_ltr .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1536px !important;}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/editor_ie7.css b/core/misc/ckeditor/skins/moono/editor_ie7.css
deleted file mode 100644
index ac8aec8..0000000
--- a/core/misc/ckeditor/skins/moono/editor_ie7.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_button__justifyblock_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__justifycenter_icon{background: url(icons.png) no-repeat 0 -1376px !important;}.cke_button__justifyleft_icon{background: url(icons.png) no-repeat 0 -1408px !important;}.cke_button__justifyright_icon{background: url(icons.png) no-repeat 0 -1440px !important;}.cke_button__placeholder_icon{background: url(icons.png) no-repeat 0 -1472px !important;}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1504px !important;}.cke_ltr .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1536px !important;}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/editor_ie8.css b/core/misc/ckeditor/skins/moono/editor_ie8.css
deleted file mode 100644
index a5158f0..0000000
--- a/core/misc/ckeditor/skins/moono/editor_ie8.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_button__justifyblock_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__justifycenter_icon{background: url(icons.png) no-repeat 0 -1376px !important;}.cke_button__justifyleft_icon{background: url(icons.png) no-repeat 0 -1408px !important;}.cke_button__justifyright_icon{background: url(icons.png) no-repeat 0 -1440px !important;}.cke_button__placeholder_icon{background: url(icons.png) no-repeat 0 -1472px !important;}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1504px !important;}.cke_ltr .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1536px !important;}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/editor_iequirks.css b/core/misc/ckeditor/skins/moono/editor_iequirks.css
deleted file mode 100644
index a308844..0000000
--- a/core/misc/ckeditor/skins/moono/editor_iequirks.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffebebeb',endColorstr='#cfd1cf')}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff5f5f5',endColorstr='#ffcfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup *:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_rtl .cke_toolgroup *:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffffff',endColorstr='#ffe4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fff2f2f2',endColorstr='#ffcccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffaaaaaa',endColorstr='#ffcacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon,{display:inline-block;vertical-align:top}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon{background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon{background: url(icons.png) no-repeat 0 -32px !important;}.cke_button__italic_icon{background: url(icons.png) no-repeat 0 -64px !important;}.cke_button__strike_icon{background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__subscript_icon{background: url(icons.png) no-repeat 0 -128px !important;}.cke_button__superscript_icon{background: url(icons.png) no-repeat 0 -160px !important;}.cke_button__underline_icon{background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon{background: url(icons.png) no-repeat 0 -224px !important;}.cke_rtl .cke_button__copy_icon,.cke_mixed_dir_content .cke_rtl .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -256px !important;}.cke_ltr .cke_button__copy_icon{background: url(icons.png) no-repeat 0 -288px !important;}.cke_rtl .cke_button__cut_icon,.cke_mixed_dir_content .cke_rtl .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -320px !important;}.cke_ltr .cke_button__cut_icon{background: url(icons.png) no-repeat 0 -352px !important;}.cke_rtl .cke_button__paste_icon,.cke_mixed_dir_content .cke_rtl .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -384px !important;}.cke_ltr .cke_button__paste_icon{background: url(icons.png) no-repeat 0 -416px !important;}.cke_rtl .cke_button__bulletedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -448px !important;}.cke_ltr .cke_button__bulletedlist_icon{background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__numberedlist_icon,.cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -512px !important;}.cke_ltr .cke_button__numberedlist_icon{background: url(icons.png) no-repeat 0 -544px !important;}.cke_rtl .cke_button__indent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -576px !important;}.cke_ltr .cke_button__indent_icon{background: url(icons.png) no-repeat 0 -608px !important;}.cke_rtl .cke_button__outdent_icon,.cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -640px !important;}.cke_ltr .cke_button__outdent_icon{background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__horizontalrule_icon{background: url(icons.png) no-repeat 0 -704px !important;}.cke_button__image_icon{background: url(icons.png) no-repeat 0 -736px !important;}.cke_rtl .cke_button__anchor_icon,.cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -768px !important;}.cke_ltr .cke_button__anchor_icon{background: url(icons.png) no-repeat 0 -800px !important;}.cke_button__link_icon{background: url(icons.png) no-repeat 0 -832px !important;}.cke_button__unlink_icon{background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__maximize_icon{background: url(icons.png) no-repeat 0 -896px !important;}.cke_rtl .cke_button__pastetext_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -928px !important;}.cke_ltr .cke_button__pastetext_icon{background: url(icons.png) no-repeat 0 -960px !important;}.cke_rtl .cke_button__pastefromword_icon,.cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -992px !important;}.cke_ltr .cke_button__pastefromword_icon{background: url(icons.png) no-repeat 0 -1024px !important;}.cke_button__removeformat_icon{background: url(icons.png) no-repeat 0 -1056px !important;}.cke_rtl .cke_button__source_icon,.cke_mixed_dir_content .cke_rtl .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1088px !important;}.cke_ltr .cke_button__source_icon{background: url(icons.png) no-repeat 0 -1120px !important;}.cke_button__specialchar_icon{background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__table_icon{background: url(icons.png) no-repeat 0 -1184px !important;}.cke_rtl .cke_button__redo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1216px !important;}.cke_ltr .cke_button__redo_icon{background: url(icons.png) no-repeat 0 -1248px !important;}.cke_rtl .cke_button__undo_icon,.cke_mixed_dir_content .cke_rtl .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1280px !important;}.cke_ltr .cke_button__undo_icon{background: url(icons.png) no-repeat 0 -1312px !important;}.cke_button__justifyblock_icon{background: url(icons.png) no-repeat 0 -1344px !important;}.cke_button__justifycenter_icon{background: url(icons.png) no-repeat 0 -1376px !important;}.cke_button__justifyleft_icon{background: url(icons.png) no-repeat 0 -1408px !important;}.cke_button__justifyright_icon{background: url(icons.png) no-repeat 0 -1440px !important;}.cke_button__placeholder_icon{background: url(icons.png) no-repeat 0 -1472px !important;}.cke_rtl .cke_button__showblocks_icon,.cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1504px !important;}.cke_ltr .cke_button__showblocks_icon{background: url(icons.png) no-repeat 0 -1536px !important;}
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/icons.png b/core/misc/ckeditor/skins/moono/icons.png
deleted file mode 100644
index 87c33cb..0000000
--- a/core/misc/ckeditor/skins/moono/icons.png
+++ /dev/null
@@ -1,43 +0,0 @@
-PNG
-
-   IHDR         xY    IDATx}ktՕwjCjI-zX-Y2e1xȅ5pYss@d0 0db2aB101K1l=GwU*UUWuyZ9_Oucc ]zι, {̙3n###8s9
-/+3[t [z|~dd˗޿S^m)3)UWWD" =[lWۇΝ;nNN |EU@c֬YLȮcˌcPWW(kl  "zF<4ɛ.]*TWWW*0zܡ)X744222sv:uP	lZӅVt/DAkDp/5
-Gi_>33sceeOO[螴JBD?!#D(( c >	p.LF$";c3g0eʔF&Q 1]HF H0LGǌODA7[,n 	FTԠlիa"Bٳg NHn?0>f͚pAAl֬YC	 JZyDQ  E &/\phmb،cl&cl9clq\www`yŚrD'|rMMkIHp8ܼppDC{ƌ<pHs8K,CDv9s-YD(((p@1v#c: o<Z;Ǹ
-D, c999uuuQ@	 hl p8<y2Ο?B ѣGaz`3O</^cl,Yx ]< `^?@D#W &	ܲ` AB!<xpWLlpv
->Iq!g7 tuum#0^i$cX,/> 1v,- o1.IH$!< j
-
-|~.<BFrM7$L:5HDF5X,(1(}lF>L`۔)SBYYY0zzz8duNo![V׿U D$kf:"L lr ; 8+~j=).//qphbϾ}F/]\\<|VXAE{{{|rcjhmm磾_~BE;@01&!CDhhh@,9حFX?c猱ea]ٳ~iNpBq@ v#kCڃ1FdH#]~#x'sX,O? cL Eu h?W^ w^8 10.!\adXB&MBYYۋ{/mmmW;W_}022<ľ*++1^іѣDtOD'h\1	` _`ѳIvz	q&Ҭ8׊)K%K^w\ K,{)U~뭷Z`hsQQmmmK dDDM ]`Aunn .]tiǎc읤0[1(z?jTX{ tz7F Րzolll_0[PP0PWW' `Vero5QSWW^ Nsh'+(,=MDh\}@DTh`8 D0s7c*S(H,&	`|>%/LDKԩS XTfLI0,~ ^omS^2q 088+&H04<c`1U"ƒ`M)$A1	` WLV8 X9P%uG?%|4珋7*O&`ҥakq= //Ou> KeG$q D2)wHX,X,Fy@ܧ bU/v*b<<O2_AAAA4EFFHR`eeeK ,PjZuAԜMR^}+**Bs)\uUBss*7>F>ħSnڴE7""_ CAʅJ.!N`Nn4^`0rO\$[%m5uT!''GZ5ovpWόh˦;cyvv6c8s^|e $ϝ;wYf8~W`> uhCCCFnn. W\D,üys HOOw%[??@ww7FFFSo駟i½ۦ4 o-ZoJJJK0qIIڄI&'ѦQnMMMϬY~Z x&C}뤷M6MMDh\e^$u
-2eJ=MJD/.@tt,F[zP}ǉnOQL~` &VLHtUUInn`Z 	O%" #5}I Hs8D =L̨EvujZq
-1fhTA 00Z2*'.H t&?%$_*=?cB4Ytօll &	 &?0>`D0"R ~i} M+eND`w-[u8/AiX^XjUAQQaDz뭧tjp<|ߏv9iӦ:`ݏby}vcǎ1k# G,{Ӄh4
->}zîc#U`q/ұHQQ{GO*x&`p8\;::c!SE3r ;AxSw޿ hpIʨw+	MMMNÇttt<Ϯ*ė.F|bK<rηܱcǣL%GМ9sz<N<Uj\.?#xQa=":]TTE|j\(+++j}
-L~))[.<Vpk׮ `lW\`uKKf חȭ J5LD!EGDQX5L &?&?0L s	LN\.r	 Ne.K{)uV.** `ӦM #4=Z?n6mZ}kkk" \~~Ϟ='Nt Tx<Dd6";`qqqF刈
-Fqd``@.DQm0CmVRUj&혖e&zZ2V!
-I_ֺ2V*XteaUEj i,۠ յABѣGc|8K5<Ud' UUU]ЉX%#0P|e2y0	` L~ $ȧH3L 
-|hEV;lǅ46E˖--[&  V`씇]XXhll(((Pw͛-++;TVVvhjD9я)J§'L3Ι3G3g@?"7fK,fU(nf;dmٲ3Ԍ&?0L *F#z˭PPP B١ 4ݞH|v7OeDF?  زen9jF &	t(+ʌNk"0 v M N"Jߛ9WtIvH'$fȣ4jF)c̛ N32ƪ<<l2QtQ-OP3*$ke0H$Ut֑ ,H٨{Z}:&A=g"1fjF=?fLm?fi4L |KnL.QXyy]O S1y/"cLTVϗ
-ҮGD!>Tjҟ3F@6pݒ/UdIAUuڥHϕ]\2 R|c }Pu0.XkD6P&upH"*e d&	`|~ 2$AUUc }ZXX(4 `0(/ES\~O~@(-=< l6A+[fM@ |FW1mJH@>u": 45ϑuDiiiJ$C *hb_5dxdffZ/6Hz6b8d!!B1vIL~` &K@ɫ`3'bh5##$k@Z<xhZ6x.H2" &	T: ш;&M"w& ~姂 +UAoH H5Ӿ%/33SODћ|ArQ~1R@+;4@Q~yC9  O<cOj͓ &	 D_iD!"b1AlذA7k0R1<#WXu	vRT&#bD"+G
-)X `ۑ'Hh4D"y{pBzː\[vҜ@/7&Ԍ/?[9###-p+? 	ihHA(֯_od &gL>k ްw設 Q&1qoexQVV&UkSГJaa k}w޹ɓ֮]?IY al^" {u,}7N
-x9 >###cS{{w֬Y(**z@!-**EKK 폷71455Nʥy(//Ξ=VkZ<?<L4	<σqqEtvvZ E}}}(bc(// "<</;[ $WTy7E9@1aaነ, &	  kX,/^|91Ɓ>L:PMM0k,v -T444>FFF.1rQWWǁDÖZرcO5//^{- fff BHFhii-[ #
-!##i#F傒wVD"I;`x{O@bJ AHhT|$O%i`X (B h4ZW	 ~}BEEEtv,w:_ZZP^uY"v"ZGDy9`Iğ&MNH!KN $Rb0$1e͂ t`,0){͚5KGs@GVi la͚5`!GEww7RVVVnee%>lQF >?ʿ9Cyy9*++C(sLG|d\p8,'=F|B!(/ҧ X, 7B(B4X,*ޠ:	 C6/pr*\.233a@DBP t'Y"ذaÎҝJ!??wAsD"#۵IE1heO,\v'L~` &)Z>= sļ*r8BD(fB8"i <7&Uj};w[,b s5~$Ae^ p1+,,|p$Ӡm15n' $"!"
- bׯ_!W\mʕ4ph;J ;EʫD<玈yVPIt1s_ 1	` $X,CPn8?BJ~ZPk(8KnPLD{;w bŊGı 8 5? qΜ9i <yrÇ+]bڦŋ﫬fΜ9HD{NʤXa(l'O={vA|-l  rrrzAZy߳ \8w w:t۳d_r&RE@D0L+-eee̙3ٳg6M Nm60{la̙4
- ())cYYYiՉ(pWn;w.nݎ3gn#,a}W{yw#e^e `# 믿^X2qF]Z[[q" ZhmmZ"ߗ͟B[g{<V"z<RAZq~xA"dXFeQ8B[[UUUhkkPt
-ǆ-Z$
-JODu¢E$MYڼyQTWWv7 ;c-b:u
-NoF|l(BII	FGGaZ 
-jnEIIznB!XVttt,f16z<qBB"f#c&	`%'].r '2); 0@ǪU  ===شi) =Z?n6mZ}kkkUZ &:qDGMM`JID DON1mI|l,..ʭ000[G$bvutlVvRzЦgee%]] (
-5j[,6-Ŵ6Hn'6dQKKKTGWVVVv!uE"GD	{\?s+i#L~` &@:y'm~t:JJ\Bn(2@Ϗs] r	gP| } k	>!O3|Be>.WDj.Lp @Aƒ.g0	` I+xޤ@A+ohw㮻:ZyW]~0}`0ZŘ<r1?@*-~ `F%YLPL%Tt	qr%oe2$RPʊB D* QU #ՕT bÇ[  4!͛7Ow42P[[ՙ&	`| 䯎(f:U\"tg0 ]`.gr)8 |@Ȉ3$ UN?9!g9&	`|Dfj D"ÈF8|@^B0'''=PW_]
-`^>ڪ~ߒ5i ?\TT퍽ka|[0UVyA3gxDUXWqbA8FAA
-F122UVHVH\馛,9tĉŪB.  7~aƌ\$[m'lYYGevpj /|>^^^PH0%e,"vӧO_ti/UaR I# j͘1q\=+o#',yvG  :IDAT.+?iG~~ >Pp'Y
-
-
-<xp'}|EL D(0a:iAwOrrr)B/Cyy!I@II! *  01vF< 2e
-ɓ $ KOIꪫ0c8V {WKK`7_s5Ua={-No Uvv3g.TΔ q81
-e1酦(q_SKáLX sAqX,U.J/.vF)i (0* !ad0>IHR..uuu}A|>U )|~61tWhr3|79<C$s 9D"g9D>n7^. x<k[[[^9DbDt̙˳O
- ~;ógϾZù
-n𵦦(Ĥݣ̗ ZV/qr9 P	sp	&	`\I=   .0xaT/ & ڊpk.]zcG?Ѷ(c,z'oVa(8?W^- $D1ڰrJog@D뚛;ov@ь^nc``nAs:G#/^  K2eH$`0xN?<<|ypNT0< 8x`A,0oƫ?`0*  _
-B8{l˿q/^eff7/BccXBD7n|CegPWV:PssbŊDM-D.11͞mmm?sуo)"㌱#|vq(knn>;{	=b |MVggg?"pA"N%: &	pń!db;q'(ߡSb1k$ᤍHܗO7s1pY088Q -allDNNLD$(57751"[ιzXGzFޤ>Ǔ9&/E.ELqtu.@׈ wn=`*
-Ws%P:t:	D41!	{hL +,w,2hw |7ppNJ19sN>hTqi @rko|Fb8>q G	 -Zv<˻IFQn梴k N |{Ifx^XVB!<n yyyl۷/0222]v[UUUt´i 7|b
-+<+HDtmOBDDi~}ݷ@̔KDnOVL~` &_<8W<9i9Cl:vm>o'TeiXknlO'-᪫x<p8fC?^~ )򂂂MpyXPH	yuuu\qqq*SꬬgɓC 'MZM/pw :c2ߖϞ=׿uZ<`|1e_OM$t:vvvxĽMFp$ݠŒz"DD?u1	` eb 1	` %y_={zs|_d&	`|D<љ@ᝯZ|>XVÉ|DߏC5~ic,CZ
-U>9s*>*䠠0$hޅ* 鴂YiJ' &	`|VDH?"I-@q3ɥX8Sɼb
-RxǇ~wyGu^@D1hvHgLC AdaZZo $'"_9mmmb1HD^" I୩k,!!&zПDV~U-~O")5zŒr?122"VBw+DԋcP:A3L H}DQ\t	LA7W-5) &*W)A066>4˷JӉ!?Fcl,Az*' ?0L 3 o\Rrl֬Y͕U=I3h&TU(..F~~>V'_HVt@D11nt+rq|`"\򃬬,Hۋhf/ &	Ȣdٵk @310w\̊+A ,ˉ'TyVXAcrٳG<jkkbԩ8 Ƙ*m MV|>̘1صkN?{E"XX  "a칞]oyX6>êꢢ"AL2E/ӋVp8000HK.5Auw6XV|> @vv6JKKn:twwyAR( ^us tuunP `y@ Nj%kLoRa$,X+g8%tbq`&~ojjRIϟݻw
-II!D `ҟ^(]QL "ܻt>*<|	8q > ^W DIϻT>kv#ct @-D9`|c q'tU@!ibHW"@m }}q\LtwMX_kAD8~8 ޱX6,ZD SO=oC<?Pq۶mp^ [nU+Q\v9!|&?0L KZ\ :<&xV|>Gx^!A#].#İqt=҇JbB(>z"(߳%m.[V\@GL>A2SM(G<$N!D"SE\@
- GDNHiq=a0$n\)D    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/images/arrow.png b/core/misc/ckeditor/skins/moono/images/arrow.png
deleted file mode 100644
index 0d1eb39..0000000
--- a/core/misc/ckeditor/skins/moono/images/arrow.png
+++ /dev/null
@@ -1,4 +0,0 @@
-PNG
-
-   IHDR         Io   bKGD      	pHYs        tIME
-9sat   IDAT(!PDIT&u=wkHUlߟ*q;MvfR"0 =1x ϋ Pw+!#rf2w\}[7~&%$%Jj["HSuG݀wkMޭ    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/images/close.png b/core/misc/ckeditor/skins/moono/images/close.png
deleted file mode 100644
index a795fd5..0000000
--- a/core/misc/ckeditor/skins/moono/images/close.png
+++ /dev/null
@@ -1,4 +0,0 @@
-PNG
-
-   IHDR            tEXtSoftware Adobe ImageReadyqe<  'IDATxb?544PBB․UAAA9¥OD޽{wLXX
-(40Piq]8y}JJJ?c@|VUU1s}8J8ؽ{6~www ÇDp)O bO6(&F\Y_c@,!''$tǋ/|ǏH!! Fȏ +U')~>,D@lXHHc\EJ7F X;.}3  ,     IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/images/mini.png b/core/misc/ckeditor/skins/moono/images/mini.png
deleted file mode 100644
index 3e65bd5..0000000
--- a/core/misc/ckeditor/skins/moono/images/mini.png
+++ /dev/null
@@ -1,5 +0,0 @@
-PNG
-
-   IHDR      0   _W   tEXtSoftware Adobe ImageReadyqe<  IDATxV]hRa6g1$ņ1
-˂!V(Kk	vUH] &r .b]tedt`lyW),$PT###E"{{{FqRdyLOO,P(D"Uh{Im؛G/'@g!zFպkVMPqR*6!ad2ƈZflBl6lDB p8D*ು>7hPVUthS*mn!p6|Ƨ\$xi8Na xp<Yؾױ`pǚRrf<~f06PL(@V%)r|Do'tz>݇D&v!칾I)/LM=Om=c{os&qff_!WkLBrWX"!&B%Լ14FSFpl;VnK(k7G=V~Q8D^V0=ڢh}5+NHR
-F[׋%#)E{p. rϧ_ Q7sv    IENDB`
\ No newline at end of file
diff --git a/core/misc/ckeditor/skins/moono/readme.md b/core/misc/ckeditor/skins/moono/readme.md
deleted file mode 100644
index f24ec4f..0000000
--- a/core/misc/ckeditor/skins/moono/readme.md
+++ /dev/null
@@ -1,51 +0,0 @@
-"Moono" Skin
-====================
-
-This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor
-[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by
-the CKEditor team. "Moono" is maintained by the core developers.
-
-For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK)
-documentation.
-
-Features
--------------------
-"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency.
-It comes with the following features:
-
-- Chameleon feature with brightness,
-- high-contrast compatibility,
-- graphics source provided in SVG.
-
-Directory Structure
--------------------
-
-CSS parts:
-- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance,
-- **mainui.css**: the file contains styles of entire editor outline structures,
-- **toolbar.css**: the file contains styles of the editor toolbar space (top),
-- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar,
-- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded
-until the first panel open up,
-- **elementspath.css**: the file contains styles of the editor elements path bar (bottom),
-- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down,
-it's not loaded until the first menu open up,
-- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open,
-- **reset.css**: the file defines the basis of style resets among all editor UI spaces,
-- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference,
-- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks.
-
-Other parts:
-- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature,
-- **icons/**: contains all skin defined icons,
-- **images/**: contains a fill general used images,
-- **dev/**: contains SVG source of the skin icons.
-
-License
--------
-
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
-
-Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
-
-See LICENSE.md for more information.
diff --git a/core/misc/ckeditor/styles.js b/core/misc/ckeditor/styles.js
deleted file mode 100644
index 9cd1c13..0000000
--- a/core/misc/ckeditor/styles.js
+++ /dev/null
@@ -1,112 +0,0 @@
-﻿/**
- * Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.html or http://ckeditor.com/license
- */
-
-// This file contains style definitions that can be used by CKEditor plugins.
-//
-// The most common use for it is the "stylescombo" plugin, which shows a combo
-// in the editor toolbar, containing all styles. Other plugins instead, like
-// the div plugin, use a subset of the styles on their feature.
-//
-// If you don't have plugins that depend on this file, you can simply ignore it.
-// Otherwise it is strongly recommended to customize this file to match your
-// website requirements and design properly.
-
-CKEDITOR.stylesSet.add( 'default', [
-	/* Block Styles */
-
-	// These styles are already available in the "Format" combo ("format" plugin),
-	// so they are not needed here by default. You may enable them to avoid
-	// placing the "Format" combo in the toolbar, maintaining the same features.
-	/*
-	{ name: 'Paragraph',		element: 'p' },
-	{ name: 'Heading 1',		element: 'h1' },
-	{ name: 'Heading 2',		element: 'h2' },
-	{ name: 'Heading 3',		element: 'h3' },
-	{ name: 'Heading 4',		element: 'h4' },
-	{ name: 'Heading 5',		element: 'h5' },
-	{ name: 'Heading 6',		element: 'h6' },
-	{ name: 'Preformatted Text',element: 'pre' },
-	{ name: 'Address',			element: 'address' },
-	*/
-
-	{ name: 'Italic Title',		element: 'h2', styles: { 'font-style': 'italic' } },
-	{ name: 'Subtitle',			element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },
-	{
-		name: 'Special Container',
-		element: 'div',
-		styles: {
-			padding: '5px 10px',
-			background: '#eee',
-			border: '1px solid #ccc'
-		}
-	},
-
-	/* Inline Styles */
-
-	// These are core styles available as toolbar buttons. You may opt enabling
-	// some of them in the Styles combo, removing them from the toolbar.
-	// (This requires the "stylescombo" plugin)
-	/*
-	{ name: 'Strong',			element: 'strong', overrides: 'b' },
-	{ name: 'Emphasis',			element: 'em'	, overrides: 'i' },
-	{ name: 'Underline',		element: 'u' },
-	{ name: 'Strikethrough',	element: 'strike' },
-	{ name: 'Subscript',		element: 'sub' },
-	{ name: 'Superscript',		element: 'sup' },
-	*/
-
-	{ name: 'Marker: Yellow',	element: 'span', styles: { 'background-color': 'Yellow' } },
-	{ name: 'Marker: Green',	element: 'span', styles: { 'background-color': 'Lime' } },
-
-	{ name: 'Big',				element: 'big' },
-	{ name: 'Small',			element: 'small' },
-	{ name: 'Typewriter',		element: 'tt' },
-
-	{ name: 'Computer Code',	element: 'code' },
-	{ name: 'Keyboard Phrase',	element: 'kbd' },
-	{ name: 'Sample Text',		element: 'samp' },
-	{ name: 'Variable',			element: 'var' },
-
-	{ name: 'Deleted Text',		element: 'del' },
-	{ name: 'Inserted Text',	element: 'ins' },
-
-	{ name: 'Cited Work',		element: 'cite' },
-	{ name: 'Inline Quotation',	element: 'q' },
-
-	{ name: 'Language: RTL',	element: 'span', attributes: { 'dir': 'rtl' } },
-	{ name: 'Language: LTR',	element: 'span', attributes: { 'dir': 'ltr' } },
-
-	/* Object Styles */
-
-	{
-		name: 'Styled image (left)',
-		element: 'img',
-		attributes: { 'class': 'left' }
-	},
-
-	{
-		name: 'Styled image (right)',
-		element: 'img',
-		attributes: { 'class': 'right' }
-	},
-
-	{
-		name: 'Compact table',
-		element: 'table',
-		attributes: {
-			cellpadding: '5',
-			cellspacing: '0',
-			border: '1',
-			bordercolor: '#ccc'
-		},
-		styles: {
-			'border-collapse': 'collapse'
-		}
-	},
-
-	{ name: 'Borderless Table',		element: 'table',	styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },
-	{ name: 'Square Bulleted List',	element: 'ul',		styles: { 'list-style-type': 'square' } }
-]);
-
diff --git a/core/modules/action/action.views.inc b/core/modules/action/action.views.inc
index e933392..cb62a13 100644
--- a/core/modules/action/action.views.inc
+++ b/core/modules/action/action.views.inc
@@ -14,11 +14,7 @@
  *   the alter hook doesn't load the *.views.inc automatically.
  */
 function action_views_data() {
-  $data['action']['table']['group'] = t('Action');
-  $data['action']['table']['join'] = array(
-    '#global' => array(),
-  );
-  $data['action']['action_bulk_form'] = array(
+  $data['views']['action_bulk_form'] = array(
     'title' => t('Bulk update'),
     'help' => t('Allows users to apply an action to one or more items.'),
     'field' => array(
diff --git a/core/modules/action/lib/Drupal/action/Plugin/views/field/BulkForm.php b/core/modules/action/lib/Drupal/action/Plugin/views/field/BulkForm.php
index 33556de..23ec58f 100644
--- a/core/modules/action/lib/Drupal/action/Plugin/views/field/BulkForm.php
+++ b/core/modules/action/lib/Drupal/action/Plugin/views/field/BulkForm.php
@@ -8,22 +8,61 @@
 namespace Drupal\action\Plugin\views\field;
 
 use Drupal\Core\Annotation\Plugin;
-use Drupal\system\Plugin\views\field\BulkFormBase;
+use Drupal\views\Plugin\views\field\FieldPluginBase;
 
 /**
- * Defines a actions-based bulk operation form element.
+ * Defines a simple bulk operation form element.
  *
  * @Plugin(
  *   id = "action_bulk_form",
  *   module = "action"
  * )
  */
-class BulkForm extends BulkFormBase {
+class BulkForm extends FieldPluginBase {
 
   /**
-   * Implements \Drupal\system\Plugin\views\field\BulkFormBase::getBulkOptions().
+   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::render().
    */
-  protected function getBulkOptions() {
+  public function render($values) {
+    return '<!--form-item-' . $this->options['id'] . '--' . $this->view->row_index . '-->';
+  }
+
+  /**
+   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::pre_render().
+   */
+  public function pre_render(&$values) {
+    parent::pre_render($values);
+
+    // If the view is using a table style, provide a placeholder for a
+    // "select all" checkbox.
+    if (!empty($this->view->style_plugin) && $this->view->style_plugin instanceof \Drupal\views\Plugin\views\style\Table) {
+      // Add the tableselect css classes.
+      $this->options['element_label_class'] .= 'select-all';
+      // Hide the actual label of the field on the table header.
+      $this->options['label'] = '';
+    }
+  }
+
+  /**
+   * Implements \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::views_form().
+   */
+  public function views_form(&$form, &$form_state) {
+    // Add the tableselect javascript.
+    $form['#attached']['library'][] = array('system', 'drupal.tableselect');
+
+    // Render checkboxes for all rows.
+    $form[$this->options['id']]['#tree'] = TRUE;
+    foreach ($this->view->result as $row_index => $row) {
+      $form[$this->options['id']][$row_index] = array(
+        '#type' => 'checkbox',
+        // We are not able to determine a main "title" for each row, so we can
+        // only output a generic label.
+        '#title' => t('Update this item'),
+        '#title_display' => 'invisible',
+        '#default_value' => !empty($form_state['values'][$this->options['id']][$row_index]) ? 1 : NULL,
+      );
+    }
+
     // Get all available actions.
     $actions = action_get_all_actions();
     $entity_type = $this->getEntityType();
@@ -31,13 +70,36 @@ protected function getBulkOptions() {
     $actions = array_filter($actions, function($action) use ($entity_type) {
       return $action['type'] == $entity_type && empty($action['configurable']);
     });
-    return array_map(function($action) {
+    $options = array_map(function($action) {
       return $action['label'];
     }, $actions);
+
+    // Replace the form submit button label.
+    $form['actions']['submit']['#value'] = t('Apply');
+
+    // Ensure a consistent container for filters/operations in the view header.
+    $form['header'] = array(
+      '#type' => 'container',
+      '#weight' => -100,
+    );
+
+    // Build the bulk operations action widget for the header.
+    // Allow themes to apply .container-inline on this separate container.
+    $form['header'][$this->options['id']] = array(
+      '#type' => 'container',
+    );
+    $form['header'][$this->options['id']]['action'] = array(
+      '#type' => 'select',
+      '#title' => t('With selection'),
+      '#options' => $options,
+    );
+
+    // Duplicate the form actions into the action container in the header.
+    $form['header'][$this->options['id']]['actions'] = $form['actions'];
   }
 
   /**
-   * Implements \Drupal\system\Plugin\views\field\BulkFormBase::views_form_submit().
+   * Implements \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::views_form_submit().
    */
   public function views_form_submit(&$form, &$form_state) {
     if ($form_state['step'] == 'views_form_views_form') {
@@ -65,4 +127,10 @@ public function views_form_submit(&$form, &$form_state) {
     }
   }
 
+  /**
+   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::query().
+   */
+  public function query() {
+  }
+
 }
diff --git a/core/modules/action/tests/action_bulk_test/config/views.view.test_bulk_form.yml b/core/modules/action/tests/action_bulk_test/config/views.view.test_bulk_form.yml
index b1bb8eb..ea8f701 100644
--- a/core/modules/action/tests/action_bulk_test/config/views.view.test_bulk_form.yml
+++ b/core/modules/action/tests/action_bulk_test/config/views.view.test_bulk_form.yml
@@ -1,9 +1,10 @@
 base_table: node
-id: test_bulk_form
+name: test_bulk_form
 description: ''
 tag: ''
 human_name: form
 core: 8.x
+api_version: '3.0'
 display:
   default:
     display_plugin: default
@@ -73,7 +74,7 @@ display:
           link_to_node: '1'
         bulk_form:
           id: action_bulk_form
-          table: action
+          table: views
           field: action_bulk_form
           relationship: none
           group_type: group
diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index 2fd5929..35cdc19 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -371,9 +371,11 @@ function aggregator_save_category($edit) {
         ->condition('cid', $edit['cid'])
         ->execute();
       // Make sure there is no active block for this category.
-      if (module_exists('block')) {
-        foreach (entity_load_multiple_by_properties('block', array('plugin' => 'aggregator_category_block:' . $edit['cid'])) as $block) {
-          $block->delete();
+      $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
+      foreach ($block_configs as $config_id) {
+        $config = config($config_id);
+        if ($config->get('id') == 'aggregator_category_block:' . $edit['cid']) {
+          $config->delete();
         }
       }
       $edit['title'] = '';
@@ -437,9 +439,11 @@ function aggregator_save_feed($edit) {
       ->condition('fid', $edit['fid'])
       ->execute();
     // Make sure there is no active block for this feed.
-    if (module_exists('block')) {
-      foreach (entity_load_multiple_by_properties('block', array('plugin' => 'aggregator_feed_block:' . $edit['fid'])) as $block) {
-        $block->delete();
+    $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
+    foreach ($block_configs as $config_id) {
+      $config = config($config_id);
+      if ($config->get('id') == 'aggregator_feed_block:' . $edit['fid']) {
+        $config->delete();
       }
     }
   }
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorCategoryBlock.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorCategoryBlock.php
index 2f17216..4c2df27 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorCategoryBlock.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorCategoryBlock.php
@@ -24,9 +24,9 @@
 class AggregatorCategoryBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     // By default, the block will contain 10 feed items.
     return array(
       'block_count' => 10,
@@ -62,9 +62,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $id = $this->getPluginId();
     if ($category = db_query('SELECT cid, title, block FROM {aggregator_category} WHERE cid = :cid', array(':cid' => $id))->fetchObject()) {
       $result = db_query_range('SELECT i.* FROM {aggregator_category_item} ci LEFT JOIN {aggregator_item} i ON ci.iid = i.iid WHERE ci.cid = :cid ORDER BY i.timestamp DESC, i.iid DESC', 0, $this->configuration['block_count'], array(':cid' => $category->cid));
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php
index e5d125d..e902eb5 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Plugin/block/block/AggregatorFeedBlock.php
@@ -24,9 +24,9 @@
 class AggregatorFeedBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     // By default, the block will contain 10 feed items.
     return array(
       'block_count' => 10,
@@ -62,9 +62,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     // Plugin IDs look something like this: aggregator_feed_block:1.
     list(, $id) = explode(':', $this->getPluginId());
     if ($feed = db_query('SELECT fid, title, block FROM {aggregator_feed} WHERE block <> 0 AND fid = :fid', array(':fid' => $id))->fetchObject()) {
diff --git a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
index e1f8fcd..1f13232 100644
--- a/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
+++ b/core/modules/aggregator/lib/Drupal/aggregator/Tests/AggregatorRenderingTest.php
@@ -39,7 +39,8 @@ public function testBlockLinks() {
     $this->updateFeedItems($feed, $this->getDefaultFeedItemCount());
 
     // Clear the block cache to load the new block definitions.
-    $this->container->get('plugin.manager.block')->clearCachedDefinitions();
+    $manager = $this->container->get('plugin.manager.block');
+    $manager->clearCachedDefinitions();
 
     // Need admin user to be able to access block admin.
     $admin_user = $this->drupalCreateUser(array(
@@ -50,11 +51,15 @@ public function testBlockLinks() {
     ));
     $this->drupalLogin($admin_user);
 
-    $block = $this->drupalPlaceBlock("aggregator_feed_block:{$feed->fid}", array('label' => 'feed-' . $feed->title), array('block_count' => 2));
+    $block = array(
+      'title' => 'feed-' . $feed->title,
+      'block_count' => 2,
+    );
+    $this->drupalPlaceBlock("aggregator_feed_block:{$feed->fid}", $block);
 
     // Confirm that the block is now being displayed on pages.
     $this->drupalGet('node');
-    $this->assertText($block->label(), 'Feed block is displayed on the page.');
+    $this->assertText(t($block['title']), 'Feed block is displayed on the page.');
 
     // Find the expected read_more link.
     $href = 'aggregator/sources/' . $feed->fid;
@@ -72,7 +77,7 @@ public function testBlockLinks() {
     aggregator_save_feed((array) $feed);
     // Check that the block is no longer displayed.
     $this->drupalGet('node');
-    $this->assertNoText($block->label(), 'Feed block is not displayed on the page when number of items is set to 0.');
+    $this->assertNoText(t($block['title']), 'Feed block is not displayed on the page when number of items is set to 0.');
   }
 
   /**
diff --git a/core/modules/block/block.admin.inc b/core/modules/block/block.admin.inc
index e5e8d76..13f17ad 100644
--- a/core/modules/block/block.admin.inc
+++ b/core/modules/block/block.admin.inc
@@ -5,8 +5,6 @@
  * Admin page callbacks for the block module.
  */
 
-use Drupal\block\Plugin\Core\Entity\Block;
-
 /**
  * Page callback: Attaches CSS for the block region demo.
  *
@@ -20,82 +18,310 @@ function block_admin_demo($theme = NULL) {
 /**
  * Page callback: Shows the block administration page.
  *
- * @param string $theme
- *   The theme to display the administration page for.
- *
- * @return array
- *   A render array for a page containing a list of blocks.
+ * @param $theme
+ *   The theme to display the administration page for. If not provided, defaults
+ *   to the currently used theme.
  *
  * @see block_menu()
  */
-function block_admin_display($theme) {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getListController('block')
-    ->render($theme);
+function block_admin_display($theme = NULL) {
+  global $theme_key;
+
+  drupal_theme_initialize();
+
+  if (!isset($theme)) {
+    // If theme is not specifically set, rehash for the current theme.
+    $theme = $theme_key;
+  }
+
+  // Fetch and sort blocks.
+  $blocks = block_admin_display_prepare_blocks($theme);
+
+  return drupal_get_form('block_admin_display_form', $blocks, $theme);
 }
 
 /**
- * Page callback: Build the block instance add form.
+ * Prepares a list of blocks for display on the blocks administration page.
  *
- * @param string $plugin_id
- *   The plugin ID for the block instance.
- * @param string $theme
- *   The name of the theme for the block instance.
+ * @param $theme
+ *   The machine-readable name of the theme whose blocks should be returned.
+ *
+ * @return
+ *   An array of blocks, as returned by _block_rehash(), sorted by region in
+ *   preparation for display on the blocks administration page.
+ *
+ * @see block_admin_display_form()
+ */
+function block_admin_display_prepare_blocks($theme) {
+  $blocks = _block_rehash($theme);
+  $compare_theme = &drupal_static('_block_compare:theme');
+  $compare_theme = $theme;
+  usort($blocks, '_block_compare');
+  return $blocks;
+}
+
+/**
+ * Form constructor for the main block administration form.
+ *
+ * @param $blocks
+ *   An array of blocks, as returned by block_admin_display_prepare_blocks().
+ * @param $theme
+ *   A string representing the name of the theme to edit blocks for.
+ * @param $block_regions
+ *   (optional) An array of regions in which the blocks will be allowed to be
+ *   placed. Defaults to all visible regions for the theme whose blocks are
+ *   being configured. In all cases, a dummy region for disabled blocks will
+ *   also be displayed.
+ *
+ * @return
+ *   An array representing the form definition.
+ *
+ * @ingroup forms
+ * @see block_admin_display_form_submit()
+ */
+function block_admin_display_form($form, &$form_state, $blocks, $theme, $block_regions = NULL) {
+  $path = drupal_get_path('module', 'block');
+  $form['#attached']['css'][] = $path . '/block.admin.css';
+  $form['#attached']['library'][] = array('system', 'drupal.tableheader');
+  $form['#attached']['library'][] = array('block', 'drupal.block');
+
+  // Get a list of block regions if one was not provided.
+  if (!isset($block_regions)) {
+    $block_regions = system_region_list($theme, REGIONS_VISIBLE);
+  }
+  // Add a last region for disabled blocks.
+  $block_regions_with_disabled = $block_regions + array(BLOCK_REGION_NONE => BLOCK_REGION_NONE);
+
+  foreach ($block_regions_with_disabled as $region => $title) {
+    $form['#attached']['drupal_add_tabledrag'][] = array('blocks', 'match', 'sibling', 'block-region-select', 'block-region-' . $region, NULL, FALSE);
+    $form['#attached']['drupal_add_tabledrag'][] = array('blocks', 'order', 'sibling', 'block-weight', 'block-weight-' . $region);
+  }
+
+  // Weights range from -delta to +delta, so delta should be at least half
+  // of the amount of blocks present. This makes sure all blocks in the same
+  // region get an unique weight.
+  $weight_delta = round(count($blocks) / 2);
+
+  // Build the form tree.
+  $form['edited_theme'] = array(
+    '#type' => 'value',
+    '#value' => $theme,
+  );
+  $form['block_regions'] = array(
+    '#type' => 'value',
+    '#value' => $block_regions_with_disabled,
+  );
+  $form['blocks'] = array();
+  $form['#tree'] = TRUE;
+
+  foreach ($blocks as $key => $instance) {
+    $block = $instance->getConfig();
+    $form['blocks'][$key]['config_id'] = array(
+      '#type' => 'value',
+      '#value' => $block['config_id'],
+    );
+    $info = $instance->getDefinition();
+    $form['blocks'][$key]['info'] = array(
+      '#markup' => check_plain($info['subject']),
+    );
+    $form['blocks'][$key]['theme'] = array(
+      '#type' => 'hidden',
+      '#value' => $theme,
+    );
+    $form['blocks'][$key]['weight'] = array(
+      '#type' => 'weight',
+      '#default_value' => $block['weight'],
+      '#delta' => $weight_delta,
+      '#title_display' => 'invisible',
+      '#title' => t('Weight for @block block', array('@block' => $info['subject'])),
+    );
+    $form['blocks'][$key]['region'] = array(
+      '#type' => 'select',
+      '#default_value' => $block['region'] != BLOCK_REGION_NONE ? $block['region'] : NULL,
+      '#empty_value' => BLOCK_REGION_NONE,
+      '#title_display' => 'invisible',
+      '#title' => t('Region for @block block', array('@block' => $info['subject'])),
+      '#options' => $block_regions,
+    );
+    $links['configure'] = array(
+      'title' => t('configure'),
+      'href' => 'admin/structure/block/manage/' . $block['config_id'] . '/' . $theme . '/configure',
+    );
+    $links['delete'] = array(
+      'title' => t('delete'),
+      'href' => 'admin/structure/block/manage/' . $block['config_id'] . '/' . $theme . '/delete',
+    );
+    $form['blocks'][$key]['operations'] = array(
+      '#type' => 'operations',
+      '#links' => $links,
+    );
+  }
+  // Do not allow disabling the main system content block when it is present.
+  if (isset($form['blocks']['system_main']['region'])) {
+    $form['blocks']['system_main']['region']['#required'] = TRUE;
+  }
+
+  $form['actions'] = array(
+    '#tree' => FALSE,
+    '#type' => 'actions',
+  );
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save blocks'),
+    '#button_type' => 'primary',
+  );
+
+  return $form;
+}
+
+/**
+ * Form submission handler for block_admin_display_form().
  *
- * @return array
- *   The block instance edit form.
+ * @see block_admin_display_form()
  */
-function block_admin_add($plugin_id, $theme) {
-  $entity = entity_create('block', array(
-    'plugin' => $plugin_id,
-    'theme' => $theme,
-  ));
-  return entity_get_form($entity);
+function block_admin_display_form_submit($form, &$form_state) {
+  foreach ($form_state['values']['blocks'] as $block) {
+    $config = config($block['config_id']);
+    $config->set('weight', $block['weight']);
+    $config->set('region', $block['region']);
+    $config->save();
+  }
+  drupal_set_message(t('The block settings have been updated.'));
+  cache_invalidate_tags(array('content' => TRUE));
 }
 
 /**
- * Page callback: Build the block instance edit form.
+ * Sorts active blocks by region, then by weight; sorts inactive blocks by name.
+ *
+ * Callback for usort() in block_admin_display_prepare_blocks().
+ */
+function _block_compare($ainstance, $binstance) {
+  global $theme_key;
+  $a = $ainstance->getConfig();
+  $b = $binstance->getConfig();
+
+  // Theme should be set before calling this function, or the current theme
+  // is being used.
+  $theme = &drupal_static(__FUNCTION__ . ':theme');
+  if (!isset($theme)) {
+    $theme = $theme_key;
+  }
+
+  $regions = &drupal_static(__FUNCTION__ . ':regions');
+  // We need the region list to correctly order by region.
+  if (!isset($regions)) {
+    $regions = array_flip(array_keys(system_region_list($theme)));
+    $regions[BLOCK_REGION_NONE] = count($regions);
+  }
+
+  // Separate enabled from disabled.
+  $status = $b['status'] - $a['status'];
+  if ($status) {
+    return $status;
+  }
+  // Sort by region (in the order defined by theme .info file).
+  if ((!empty($a['region']) && !empty($b['region'])) && ($place = ($regions[$a['region']] - $regions[$b['region']]))) {
+    return $place;
+  }
+  // Sort by weight, unless disabled.
+  if ($a['region'] != BLOCK_REGION_NONE) {
+    $weight = $a['weight'] - $b['weight'];
+    if ($weight) {
+      return $weight;
+    }
+  }
+  // Sort by title.
+  $ainfo = $ainstance->getDefinition();
+  $binfo = $binstance->getDefinition();
+  return strcmp($ainfo['subject'], $binfo['subject']);
+}
+
+/**
+ * Form constructor for the block instance configuration form.
+ *
+ * @param string $plugin_id
+ *   The plugin ID for the block instance.
+ * @param string $theme
+ *   (optional) The name of the theme for the block instance. If no theme is
+ *   specified, the default theme will be used.
  *
- * @param \Drupal\block\Plugin\Core\Entity\Block $entity
- *   The block instance.
+ * @see block_menu()
+ * @see custom_block_menu()
+ * @see block_admin_configure_validate()
+ * @see block_admin_configure_submit()
  *
- * @return array
- *   The block instance edit form.
+ * @ingroup forms
  */
-function block_admin_edit(Block $entity) {
-  // Get the theme for the page title.
-  $admin_theme = config('system.theme')->get('admin');
-  $themes = list_themes();
-  $theme_key = $entity->get('theme');
-  $theme = $themes[$theme_key];
-  // Use meaningful titles for the main site and administrative themes.
-  $theme_title = $theme->info['name'];
-  if ($theme_key == variable_get('theme_default', 'stark')) {
-    $theme_title = t('!theme (default theme)', array('!theme' => $theme_title));
+function block_admin_configure($form, &$form_state, $plugin_id, $theme = NULL) {
+  $instance = block_load($plugin_id);
+  $form['#instance'] = $instance;
+  $config = $instance->getConfig();
+  if (!isset($config['config_id']) && !$theme) {
+    $theme = variable_get('theme_default', 'stark');
   }
-  elseif ($admin_theme && $theme_key == $admin_theme) {
-    $theme_title = t('!theme (administration theme)', array('!theme' => $theme_title));
+  elseif (!$theme && isset($config['config_id'])) {
+    list(, , , $theme) = explode('.', $config['config_id']);
   }
+  $form['theme'] = array(
+    '#type' => 'value',
+    '#value' => $theme,
+  );
+  $form += $instance->form($form, $form_state);
+  return $form;
+}
 
-  // Get the block subject for the page title.
-  drupal_set_title(t("Configure %label block in %theme", array('%label' => $entity->label(), '%theme' => $theme_title)), PASS_THROUGH);
+/**
+ * Form validation handler for block_admin_configure().
+ *
+ * @see block_admin_configure()
+ * @see block_admin_configure_submit()
+ */
+function block_admin_configure_validate($form, &$form_state) {
+  $form['#instance']->validate($form, $form_state);
+}
 
-  return entity_get_form($entity);
+/**
+ * Form submission handler for block_admin_configure().
+ *
+ * @see block_admin_configure()
+ * @see block_admin_configure_validate()
+ */
+function block_admin_configure_submit($form, &$form_state) {
+  $form['#instance']->submit($form, $form_state);
+  $config_values = $form['#instance']->getConfig();
+  $machine_name = 'plugin.core.block.' . $form_state['values']['theme'] . '.' . $form_state['values']['machine_name'];
+  $config = config($machine_name);
+  $config->set('id', $form['#instance']->getPluginId());
+  foreach ($config_values as $key => $value) {
+    $config->set($key, $value);
+  }
+  $config->save();
+  drupal_set_message(t('The block configuration has been saved.'));
+  cache_invalidate_tags(array('content' => TRUE));
+  $form_state['redirect'] = 'admin/structure/block/list/block_plugin_ui:' . $form_state['values']['theme'];
 }
 
 /**
  * Form constructor for the block instance deletion form.
  *
- * @param \Drupal\block\Plugin\Core\Entity\Block $entity
- *   The block instance.
+ * @param string $plugin_id
+ *   The plugin ID for the block instance.
+ * @param string $theme
+ *   The name of the theme for the block instance.
  *
  * @see block_menu()
  * @see block_admin_block_delete_submit()
  */
-function block_admin_block_delete(array $form, array &$form_state, Block $entity) {
-  $form['id'] = array('#type' => 'value', '#value' => $entity->id());
+function block_admin_block_delete($form, &$form_state, $plugin_id, $theme) {
+  $block = block_load($plugin_id);
+  $form['id'] = array('#type' => 'value', '#value' => $plugin_id);
+  $form['theme'] = array('#type' => 'value', '#value' => $theme);
+  $definition = $block->getDefinition();
+  $config = $block->getConfig();
+  $subject = empty($config['subject']) ? $definition['subject'] : $config['subject'];
+  $form['subject'] = array('#type' => 'value', '#value' => $subject);
 
-  return confirm_form($form, t('Are you sure you want to delete the block %name?', array('%name' => $entity->label())), 'admin/structure/block', '', t('Delete'), t('Cancel'));
+  return confirm_form($form, t('Are you sure you want to delete the block %name?', array('%name' => $subject)), 'admin/structure/block', '', t('Delete'), t('Cancel'));
 }
 
 /**
@@ -104,10 +330,10 @@ function block_admin_block_delete(array $form, array &$form_state, Block $entity
  * @see block_admin_block_delete()
  */
 function block_admin_block_delete_submit($form, &$form_state) {
-  $entity = entity_load('block', $form_state['values']['id']);
-  drupal_set_message(t('The block %name has been removed.', array('%name' => $entity->label())));
-  $form_state['redirect'] = 'admin/structure/block/list/block_plugin_ui:' . $entity->get('theme');
-  $entity->delete();
+  $config = config($form_state['values']['id']);
+  $config->delete();
+  drupal_set_message(t('The block %name has been removed.', array('%name' => $form_state['values']['subject'])));
+  $form_state['redirect'] = 'admin/structure/block/list/block_plugin_ui:' . $form_state['values']['theme'];
 }
 
 /**
diff --git a/core/modules/block/block.api.php b/core/modules/block/block.api.php
index c889e68..defde15 100644
--- a/core/modules/block/block.api.php
+++ b/core/modules/block/block.api.php
@@ -29,7 +29,7 @@
  * @see hook_block_view_ID_alter()
  * @see hook_block_view_NAME_alter()
  */
-function hook_block_view_alter(array &$build, \Drupal\block\Plugin\Core\Entity\Block $block) {
+function hook_block_view_alter(array &$build, \Drupal\block\BlockInterface $block) {
   // Remove the contextual links on all blocks that provide them.
   if (is_array($build) && isset($build['#contextual_links'])) {
     unset($build['#contextual_links']);
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index 6bc94f2..d9155c3 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -121,29 +121,22 @@ function block_menu() {
     'access arguments' => array('administer blocks'),
     'file' => 'block.admin.inc',
   );
-  $items['admin/structure/block/add/%/%'] = array(
+  $items['admin/structure/block/manage/%/%'] = array(
     'title' => 'Configure block',
-    'page callback' => 'block_admin_add',
-    'page arguments' => array(4, 5),
-    'access arguments' => array('administer blocks'),
-    'file' => 'block.admin.inc',
-  );
-  $items['admin/structure/block/manage/%block'] = array(
-    'title' => 'Configure block',
-    'page callback' => 'block_admin_edit',
-    'page arguments' => array(4),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('block_admin_configure', 4, 5),
     'access arguments' => array('administer blocks'),
     'file' => 'block.admin.inc',
   );
-  $items['admin/structure/block/manage/%block/configure'] = array(
+  $items['admin/structure/block/manage/%/%/configure'] = array(
     'title' => 'Configure block',
     'type' => MENU_DEFAULT_LOCAL_TASK,
     'context' => MENU_CONTEXT_INLINE,
   );
-  $items['admin/structure/block/manage/%block/delete'] = array(
+  $items['admin/structure/block/manage/%/%/delete'] = array(
     'title' => 'Delete block',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('block_admin_block_delete', 4),
+    'page arguments' => array('block_admin_block_delete', 4, 5),
     'access arguments' => array('administer blocks'),
     'type' => MENU_LOCAL_TASK,
     'context' => MENU_CONTEXT_NONE,
@@ -313,24 +306,27 @@ function _block_get_renderable_region($list = array()) {
     !in_array($_SERVER['REQUEST_METHOD'], array('GET', 'HEAD'));
 
   foreach ($list as $key => $block) {
-    $settings = $block->get('settings');
-    if ($not_cacheable || in_array($settings['cache'], array(DRUPAL_NO_CACHE, DRUPAL_CACHE_CUSTOM))) {
-      // Non-cached blocks get built immediately.
-      if ($block->access()) {
-        $build[$key] = entity_view($block, 'block');
-      }
+    $config = $block->getConfig();
+    $definition = $block->getDefinition();
+    $build[$key] = array(
+      '#block' => $block,
+      '#weight' => (int) $config['weight'],
+      '#theme_wrappers' => array('block'),
+    );
+
+    if ($not_cacheable || in_array($config['cache'], array(DRUPAL_NO_CACHE, DRUPAL_CACHE_CUSTOM))) {
+      // Non-cached blocks get built immediately. Provides more content
+      // that can be easily manipulated during hook_page_alter().
+      $build[$key] = _block_get_renderable_block($build[$key]);
     }
     else {
       $key_components = explode('.', $key);
       $id = array_pop($key_components);
-      $build[$key] = array(
-        '#block' => $block,
-        '#weight' => $block->get('weight'),
-        '#theme_wrappers' => array('block'),
+      $build[$key] += array(
         '#pre_render' => array('_block_get_renderable_block'),
         '#cache' => array(
-          'keys' => array($id, $block->get('module')),
-          'granularity' => $settings['cache'],
+          'keys' => array($id, $config['module']),
+          'granularity' => $config['cache'],
           'bin' => 'block',
           'tags' => array('content' => TRUE),
         ),
@@ -342,8 +338,9 @@ function _block_get_renderable_region($list = array()) {
     // skip the help block, since we assume that most users do not need or want
     // to perform contextual actions on the help block, and the links needlessly
     // draw attention on it.
-    if (!in_array($block->get('plugin'), array('system_help_block', 'system_main_block'))) {
-      $build[$key]['#contextual_links']['block'] = array('admin/structure/block/manage', array($key));
+    if ($definition['class'] != 'Drupal\\system\\Plugin\\block\\block\\SystemHelpBlock' && $definition['class'] != 'Drupal\\system\\Plugin\\block\\block\\SystemMainBlock') {
+      global $theme;
+      $build[$key]['#contextual_links']['block'] = array('admin/structure/block/manage', array($key, $theme));
     }
   }
   return $build;
@@ -360,25 +357,33 @@ function _block_get_renderable_region($list = array()) {
  *   Blocks currently exported by modules.
  */
 function _block_rehash($theme = NULL) {
+  $blocks = array();
+  $instances = array();
   $theme = $theme ? $theme : variable_get('theme_default', 'stark');
+  $block_configs = config_get_storage_names_with_prefix('plugin.core.block.' . $theme);
   $regions = system_region_list($theme);
-  $blocks = entity_load_multiple_by_properties('block', array('theme' => $theme));
-  foreach ($blocks as $block_id => $block) {
-    $region = $block->get('region');
-    $status = $block->get('status');
+  foreach ($block_configs as $config) {
+    // Only list valid block instances.
+    if (!$block = block_load($config)) {
+      continue;
+    }
+    $blocks[$config] = $block;
+    $config = config($config);
+    $region = $config->get('region');
+    $status = $config->get('status');
     // Disable blocks in invalid regions.
     if (!empty($region) && $region != BLOCK_REGION_NONE && !isset($regions[$region]) && $status == 1) {
-      drupal_set_message(t('The block %info was assigned to the invalid region %region and has been disabled.', array('%info' => $block_id, '%region' => $region)), 'warning');
+      drupal_set_message(t('The block %info was assigned to the invalid region %region and has been disabled.', array('%info' => $config->get('id'), '%region' => $region)), 'warning');
       // Disabled modules are moved into the BLOCK_REGION_NONE later so no
       // need to move the block to another region.
-      $block->set('status', 0);
-      $block->save();
+      $config->set('status', 0);
+      $config->save();
     }
     // Set region to none if not enabled and make sure status is set.
     if (empty($status)) {
-      $block->set('region', BLOCK_REGION_NONE);
-      $block->set('status', 0);
-      $block->save();
+      $config->set('region', BLOCK_REGION_NONE);
+      $config->set('status', 0);
+      $config->save();
     }
   }
   return $blocks;
@@ -409,22 +414,28 @@ function block_themes_enabled($theme_list) {
  */
 function block_theme_initialize($theme) {
   // Initialize theme's blocks if none already registered.
-  $has_blocks = entity_load_multiple_by_properties('block', array('theme' => $theme));
+  $has_blocks = config_get_storage_names_with_prefix('plugin.core.block.' . $theme);
   if (!$has_blocks) {
     $default_theme = variable_get('theme_default', 'stark');
     // Apply only to new theme's visible regions.
     $regions = system_region_list($theme, REGIONS_VISIBLE);
-    $default_theme_blocks = entity_load_multiple_by_properties('block', array('theme' => $default_theme));
-    foreach ($default_theme_blocks as $default_theme_block_id => $default_theme_block) {
-      list(, $machine_name) = explode('.', $default_theme_block_id);
-      $block = $default_theme_block->createDuplicate();
-      $block->set('id', $theme . '.' . $machine_name);
+    $default_theme_blocks = config_get_storage_names_with_prefix('plugin.core.block.' . $default_theme);
+    foreach ($default_theme_blocks as $config_id) {
+      $block_config = config($config_id)->get();
+      $machine_name = explode('.', $config_id);
+      $machine_name = array_pop($machine_name);
+      $new_config_id = 'plugin.core.block.' . $theme . '.' . $machine_name;
+      $new_block = config($new_config_id);
       // If the region isn't supported by the theme, assign the block to the
       // theme's default region.
-      if (!isset($regions[$block->get('region')])) {
-        $block->set('region', system_default_region($theme));
+      if (!isset($regions[$block_config['region']])) {
+        $new_block->set('region', system_default_region($theme));
+        unset($block_config['region']);
+      }
+      foreach ($block_config as $key => $value) {
+        $new_block->set($key, $value);
       }
-      $block->save();
+      $new_block->save();
     }
   }
 }
@@ -445,11 +456,7 @@ function block_list($region) {
   $blocks = &drupal_static(__FUNCTION__);
 
   if (!isset($blocks)) {
-    global $theme;
-    $blocks = array();
-    foreach (entity_load_multiple_by_properties('block', array('theme' => $theme)) as $block_id => $block) {
-      $blocks[$block->get('region')][$block_id] = $block;
-    }
+    $blocks = _block_load_blocks();
   }
 
   // Create an empty array if there are no entries.
@@ -463,16 +470,57 @@ function block_list($region) {
 /**
  * Loads a block instance.
  *
- * This should only be used when entity_load() cannot be used directly.
+ * @param string $plugin_id
+ *   The plugin ID to load.
+ * @param array $conf
+ *   An optional configuration array for creating a block instance manually
+ *   rather than retrieving it from the configuration system.
  *
- * @param string $entity_id
- *   The block ID.
+ * @return
+ *   A block object.
  *
- * @return \Drupal\block\Plugin\Core\Entity\Block
- *   The loaded block object.
+ * @todo Add block_load_multiple() and make this function a single-value wrapper.
  */
-function block_load($entity_id) {
-  return entity_load('block', $entity_id);
+function block_load($plugin_id, array $conf = array()) {
+  $manager = drupal_container()->get('plugin.manager.block');
+  if (!$block = $manager->getInstance(array('config' => $plugin_id))) {
+    // If the block instance does not exist, try to create it.
+    try {
+      $block = $manager->createInstance($plugin_id, $conf);
+    }
+    catch (PluginException $e) {
+      $config = config($plugin_id)->get();
+      // Ignore blocks belonging to disabled modules, but re-throw valid
+      // exceptions when the module is enabled and the plugin is misconfigured.
+      if (empty($config['module']) || module_exists($config['module'])) {
+        throw $e;
+      }
+      return FALSE;
+    }
+  }
+  return $block;
+}
+
+/**
+ * Loads blocks' information from the configuration management system.
+ *
+ * @return
+ *   An array of blocks grouped by region.
+ *
+ * @todo Remove this function, and replace it with a block_load_multiple().
+ */
+function _block_load_blocks() {
+  global $theme;
+  $blocks = array();
+  $instances = config_get_storage_names_with_prefix('plugin.core.block.' . $theme);
+  $manager = drupal_container()->get('plugin.manager.block');
+  foreach ($instances as $plugin_id) {
+    if ($block = block_load($plugin_id)) {
+      $config = $block->getConfig();
+      $blocks[$config['region']]["$plugin_id"] = $block;
+    }
+  }
+  return $blocks;
 }
 
 /**
@@ -490,7 +538,17 @@ function _block_get_renderable_block($element) {
   $block = $element['#block'];
   // Don't bother to build blocks that aren't accessible.
   if ($element['#access'] = $block->access()) {
-    $element += entity_view($block, 'block');
+    $build = $block->build();
+    if ($build) {
+      if (isset($build['#title'])) {
+        $element['#title'] = $build['#title'];
+      }
+      $element += $build;
+    }
+    else {
+      // @todo Add an inline comment explaining why this line is necessary.
+      $element = array();
+    }
   }
   return $element;
 }
@@ -532,9 +590,10 @@ function block_rebuild() {
  */
 function template_preprocess_block(&$variables) {
   $block_counter = &drupal_static(__FUNCTION__, array());
-
-  $variables['block'] = (object) $variables['elements']['#block_config'];
-
+  $variables['block'] = (object) array_merge($variables['elements']['#block']->getDefinition(), $variables['elements']['#block']->getConfig());
+  if (!empty($variables['elements']['#title']) && empty($variables['block']->subject)) {
+    $variables['block']->subject = $variables['elements']['#title'];
+  }
   // All blocks get an independent counter for each region.
   if (!isset($block_counter[$variables['block']->region])) {
     $block_counter[$variables['block']->region] = 1;
@@ -564,14 +623,14 @@ function template_preprocess_block(&$variables) {
 
   // We can safely explode on : because we know the Block plugin type manager
   // enforces that delimiter for all derivatives.
-  $parts = explode(':', $variables['elements']['#block']->get('plugin'));
+  $parts = explode(':', $variables['elements']['#block']->getPluginId());
   $suggestion = 'block';
   while ($part = array_shift($parts)) {
     $variables['theme_hook_suggestions'][] = $suggestion .= '__' . strtr($part, '-', '_');
   }
   // Create a valid HTML ID and make sure it is unique.
-  if ($id = $variables['elements']['#block']->id()) {
-    $config_id = explode('.', $id);
+  if (!empty($variables['block']->config_id)) {
+    $config_id = explode('.', $variables['block']->config_id);
     $machine_name = array_pop($config_id);
     $variables['block_html_id'] = drupal_html_id('block-' . $machine_name);
     $variables['theme_hook_suggestions'][] = 'block__' . $machine_name;
@@ -584,12 +643,14 @@ function template_preprocess_block(&$variables) {
  * Removes deleted role from blocks that use it.
  */
 function block_user_role_delete($role) {
-  foreach (entity_load_multiple('block') as $block_id => $block) {
-    $visibility = $block->get('visibility');
-    if (isset($visibility['roles']['roles'][$role->id()])) {
-      unset($visibility['roles']['roles'][$role->id()]);
-      $block->set('visibility', $visibility);
-      $block->save();
+  $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
+  foreach ($block_configs as $config_id) {
+    $config = config($config_id);
+    $roles = $config->get('visibility.role.roles');
+    if (isset($roles[$role->rid])) {
+      unset($roles[$role->rid]);
+      $config->set('visibility.role.roles', $roles);
+      $config->save();
     }
   }
 }
@@ -598,9 +659,11 @@ function block_user_role_delete($role) {
  * Implements hook_menu_delete().
  */
 function block_menu_delete($menu) {
-  foreach (entity_load_multiple('block') as $block_id => $block) {
-    if ($block->get('plugin') == 'menu_menu_block:' . $menu->id()) {
-      $block->delete();
+  $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
+  foreach ($block_configs as $config_id) {
+    $config = config($config_id);
+    if ($config->get('id') == 'menu_menu_block:' . $menu->id()) {
+      $config->delete();
     }
   }
 }
@@ -618,18 +681,35 @@ function block_admin_paths() {
 }
 
 /**
+ * Implements hook_modules_uninstalled().
+ *
+ * Cleans up any block configuration for uninstalled modules.
+ */
+function block_modules_uninstalled($modules) {
+  $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
+  foreach ($block_configs as $config_id) {
+    $config = config($config_id);
+    if (in_array($config->get('module'), $modules)) {
+      $config->delete();
+    }
+  }
+}
+
+/**
  * Implements hook_language_delete().
  *
  * Delete the potential block visibility settings of the deleted language.
  */
 function block_language_delete($language) {
   // Remove the block visibility settings for the deleted language.
-  foreach (entity_load_multiple('block') as $block_id => $block) {
-    $visibility = $block->get('visibility');
-    if (isset($visibility['language']['langcodes'][$language->langcode])) {
-      unset($visibility['language']['langcodes'][$language->langcode]);
-      $block->set('visibility', $visibility);
-      $block->save();
+  $block_configs = config_get_storage_names_with_prefix('plugin.core.block');
+  foreach ($block_configs as $config_id) {
+    $config = config($config_id);
+    $languages = $config->get('visibility.language.langcodes');
+    if (isset($languages[$language->langcode])) {
+      unset($languages[$language->langcode]);
+      $config->set('visibility.language.langcodes', $languages);
+      $config->save();
     }
   }
 }
diff --git a/core/modules/block/custom_block/custom_block.info b/core/modules/block/custom_block/custom_block.info
index f38e540..3dafb61 100644
--- a/core/modules/block/custom_block/custom_block.info
+++ b/core/modules/block/custom_block/custom_block.info
@@ -1,5 +1,5 @@
 name = Custom Block
-description = Allows the creation of custom blocks through the user interface.
+description = Allows the creaation of custom blocks through the user interface.
 package = Core
 version = VERSION
 core = 8.x
diff --git a/core/modules/block/custom_block/custom_block.module b/core/modules/block/custom_block/custom_block.module
index 8c7fdea..d3e1588 100644
--- a/core/modules/block/custom_block/custom_block.module
+++ b/core/modules/block/custom_block/custom_block.module
@@ -19,8 +19,8 @@ function custom_block_menu() {
       $items['admin/structure/block/list/' . $plugin_id . '/add/custom_blocks'] = array(
         'title' => 'Add custom block',
         'description' => 'Create a block with custom content and settings.',
-        'page callback' => 'block_admin_add',
-        'page arguments' => array('custom_block:custom_block', $theme),
+        'page callback' => 'drupal_get_form',
+        'page arguments' => array('block_admin_configure', 'custom_block:custom_block', $theme),
         'access callback' => TRUE,
         'type' => MENU_LOCAL_ACTION,
         'file' => 'block.admin.inc',
diff --git a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/block/block/CustomBlock.php b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/block/block/CustomBlock.php
index 84cd757..8b142ef 100644
--- a/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/block/block/CustomBlock.php
+++ b/core/modules/block/custom_block/lib/Drupal/custom_block/Plugin/block/block/CustomBlock.php
@@ -29,6 +29,17 @@
 class CustomBlock extends BlockBase {
 
   /**
+   * Overrides \Drupal\block\BlockBase::blockSettings().
+   */
+  public function blockSettings() {
+    // By default, use a blank block title rather than the block description
+    // (which is "Custom Block").
+    return array(
+      'subject' => '',
+    );
+  }
+
+  /**
    * Overrides \Drupal\block\BlockBase::getConfig().
    */
   public function getConfig() {
@@ -49,43 +60,29 @@ public function getConfig() {
   public function blockForm($form, &$form_state) {
     // @todo Disable this field when editing an existing block and provide a
     //   separate interface for administering custom blocks.
-    $form['info'] = array(
+    $form['custom_block']['info'] = array(
       '#type' => 'textfield',
-      '#title' => t('Description'),
+      '#title' => t('Block description'),
       '#required' => TRUE,
       '#default_value' => $this->configuration['info'],
       '#description' => t('A brief description of your block. Used on the <a href="@overview">Blocks administration page</a>. <strong>Changing this field will change the description for all copies of this block.</strong>', array('@overview' => url('admin/structure/block'))),
     );
     // @todo Disable this field when editing an existing block and provide a
     //   separate interface for administering custom blocks.
-    $form['body'] = array(
+    $form['custom_block']['body'] = array(
       '#type' => 'text_format',
-      '#title' => t('Body'),
+      '#title' => t('Block body'),
       '#default_value' => $this->configuration['body'],
       '#format' => isset($this->configuration['format']) ? $this->configuration['format'] : filter_default_format(),
       '#description' => t('The content of the block as shown to the user. <strong>Changing this field will change the block body everywhere it is used.</strong>'),
       '#rows' => 15,
       '#required' => TRUE,
     );
-    $form['title']['#description'] = t('The title of the block as shown to the user.');
+    $form['custom_block']['title']['#description'] = t('The title of the block as shown to the user.');
     return $form;
   }
 
   /**
-   * Overrides \Drupal\block\BlockBase::blockValidate().
-   */
-  public function blockValidate($form, &$form_state) {
-    list(, $bid) = explode(':', $form_state['entity']->get('plugin'));
-    $custom_block_exists = (bool) db_query_range('SELECT 1 FROM {block_custom} WHERE bid <> :bid AND info = :info', 0, 1, array(
-      ':bid' => $bid,
-      ':info' => $form_state['values']['info'],
-    ))->fetchField();
-    if (empty($form_state['values']['info']) || $custom_block_exists) {
-      form_set_error('info', t('Ensure that each block description is unique.'));
-    }
-  }
-
-  /**
    * Overrides \Drupal\block\BlockBase::blockSubmit().
    */
   public function blockSubmit($form, &$form_state) {
@@ -97,7 +94,7 @@ public function blockSubmit($form, &$form_state) {
       'bid' => is_numeric($bid) ? $bid : NULL,
     );
     drupal_write_record('block_custom', $block, !is_null($block['bid']) ? array('bid') : array());
-    $form_state['entity']->set('plugin', 'custom_block:' . $block['bid']);
+    $this->configuration['id'] = 'custom_block:' . $block['bid'];
     // Invalidate the block cache to update custom block-based derivatives.
     if (module_exists('block')) {
       drupal_container()->get('plugin.manager.block')->clearCachedDefinitions();
@@ -105,9 +102,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     // Populate the block with the user-defined block body.
     return array(
       '#theme' => 'custom_block_block',
diff --git a/core/modules/block/lib/Drupal/block/BlockAccessController.php b/core/modules/block/lib/Drupal/block/BlockAccessController.php
deleted file mode 100644
index 8e8a563..0000000
--- a/core/modules/block/lib/Drupal/block/BlockAccessController.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\block\BlockAccessController.
- */
-
-namespace Drupal\block;
-
-use Drupal\Core\Entity\EntityAccessController;
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\user\Plugin\Core\Entity\User;
-
-/**
- * Provides a Block access controller.
- */
-class BlockAccessController extends EntityAccessController {
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityAccessController::viewAccess().
-   */
-  public function viewAccess(EntityInterface $entity, $langcode = LANGUAGE_DEFAULT, User $account = NULL) {
-    return $entity->getPlugin()->access();
-  }
-
-}
diff --git a/core/modules/block/lib/Drupal/block/BlockBase.php b/core/modules/block/lib/Drupal/block/BlockBase.php
index 9e5bf6c..7d1356b 100644
--- a/core/modules/block/lib/Drupal/block/BlockBase.php
+++ b/core/modules/block/lib/Drupal/block/BlockBase.php
@@ -8,8 +8,6 @@
 namespace Drupal\block;
 
 use Drupal\Component\Plugin\PluginBase;
-use Drupal\block\Plugin\Core\Entity\Block;
-use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
 
 /**
  * Defines a base block implementation that most blocks plugins will extend.
@@ -21,19 +19,22 @@
 abstract class BlockBase extends PluginBase implements BlockInterface {
 
   /**
-   * The entity using this plugin.
+   * Implements \Drupal\block\BlockInterface::settings().
    *
-   * @var \Drupal\block\Plugin\Core\Entity\Block
-   */
-  protected $entity;
-
-  /**
-   * Overrides \Drupal\Component\Plugin\PluginBase::__construct().
+   * Most block plugins should not override this method. To add additional
+   * settings or change the default values for setting, override
+   * BlockBase::blockSettings().
+   *
+   * @see \Drupal\block\BlockBase::blockSettings()
    */
-  public function __construct(array $configuration, $plugin_id, DiscoveryInterface $discovery, Block $entity) {
-    parent::__construct($configuration, $plugin_id, $discovery);
-
-    $this->entity = $entity;
+  public function settings() {
+    $settings = $this->blockSettings();
+    // By default, blocks are enabled and not cached.
+    $settings += array(
+      'status' => TRUE,
+      'cache' => DRUPAL_NO_CACHE,
+    );
+    return $settings;
   }
 
   /**
@@ -48,7 +49,7 @@ public function __construct(array $configuration, $plugin_id, DiscoveryInterface
    *
    * @see \Drupal\block\BlockBase::settings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array();
   }
 
@@ -76,8 +77,6 @@ public function getConfig() {
         $this->configuration += array('subject' => $definition['subject']);
       }
     }
-    // Ensure that the default cache mode is set.
-    $this->configuration += array('cache' => DRUPAL_NO_CACHE);
     return $this->configuration;
   }
 
@@ -143,7 +142,7 @@ public function access() {
     global $user;
 
     // Deny access to disabled blocks.
-    if (!$this->entity->get('status')) {
+    if (empty($this->configuration['status'])) {
       return FALSE;
     }
 
@@ -151,27 +150,26 @@ public function access() {
     // If a block has no roles associated, it is displayed for every role.
     // For blocks with roles associated, if none of the user's roles matches
     // the settings from this block, access is denied.
-    $visibility = $this->entity->get('visibility');
-    if (!empty($visibility['role']['roles']) && !array_intersect(array_filter($visibility['role']['roles']), array_keys($user->roles))) {
+    if (!empty($this->configuration['visibility']['role']['roles']) && !array_intersect(array_filter($this->configuration['visibility']['role']['roles']), array_keys($user->roles))) {
       // No match.
       return FALSE;
     }
 
     // Page path handling.
     // Limited visibility blocks must list at least one page.
-    if (!empty($visibility['path']['visibility']) && $visibility['path']['visibility'] == BLOCK_VISIBILITY_LISTED && empty($visibility['path']['pages'])) {
+    if (!empty($this->configuration['visibility']['path']['visibility']) && $this->configuration['visibility']['path']['visibility'] == BLOCK_VISIBILITY_LISTED && empty($this->configuration['visibility']['path']['pages'])) {
       return FALSE;
     }
 
     // Match path if necessary.
-    if (!empty($visibility['path']['pages'])) {
+    if (!empty($this->configuration['visibility']['path']['pages'])) {
       // Assume there are no matches until one is found.
       $page_match = FALSE;
 
       // Convert path to lowercase. This allows comparison of the same path
       // with different case. Ex: /Page, /page, /PAGE.
-      $pages = drupal_strtolower($visibility['path']['pages']);
-      if ($visibility['path']['visibility'] < BLOCK_VISIBILITY_PHP) {
+      $pages = drupal_strtolower($this->configuration['visibility']['path']['pages']);
+      if ($this->configuration['visibility']['path']['visibility'] < BLOCK_VISIBILITY_PHP) {
         // Compare the lowercase path alias (if any) and internal path.
         $path = current_path();
         $path_alias = drupal_strtolower(drupal_container()->get('path.alias_manager')->getPathAlias($path));
@@ -181,10 +179,10 @@ public function access() {
         // except those listed in $block->pages. When set to 1
         // (BLOCK_VISIBILITY_LISTED), it is displayed only on those pages
         // listed in $block->pages.
-        $page_match = !($visibility['path']['visibility'] xor $page_match);
+        $page_match = !($this->configuration['visibility']['path']['visibility'] xor $page_match);
       }
       elseif (module_exists('php')) {
-        $page_match = php_eval($visibility['path']['pages']);
+        $page_match = php_eval($this->configuration['visibility']['path']['pages']);
       }
 
       // If there are page visibility restrictions and this page does not
@@ -195,15 +193,15 @@ public function access() {
     }
 
     // Language visibility settings.
-    if (!empty($visibility['language']['langcodes']) && array_filter($visibility['language']['langcodes'])) {
-      if (empty($visibility['language']['langcodes'][language($visibility['language']['language_type'])->langcode])) {
+    if (!empty($this->configuration['visibility']['language']['langcodes']) && array_filter($this->configuration['visibility']['language']['langcodes'])) {
+      if (empty($this->configuration['visibility']['language']['langcodes'][language($this->configuration['visibility']['language']['language_type'])->langcode])) {
         return FALSE;
       }
     }
 
     // Check other modules for block access rules.
     foreach (module_implements('block_access') as $module) {
-      if (module_invoke($module, 'block_access', $this->entity) === FALSE) {
+      if (module_invoke($module, 'block_access', $this) === FALSE) {
         return FALSE;
       }
     }
@@ -223,47 +221,71 @@ public function access() {
    * @see \Drupal\block\BlockBase::blockForm()
    */
   public function form($form, &$form_state) {
-    $entity = $form_state['entity'];
     $definition = $this->getDefinition();
+    $config = $this->getConfig();
     $form['id'] = array(
       '#type' => 'value',
-      '#value' => $entity->id(),
+      '#value' => $definition['id'],
     );
     $form['module'] = array(
       '#type' => 'value',
       '#value' => $definition['module'],
     );
 
-    $form['label'] = array(
+    // Get the block subject for the page title.
+    $subject = isset($config['subject']) ? $config['subject'] : '';
+
+    // Get the theme for the page title.
+    $theme_default = variable_get('theme_default', 'stark');
+    $admin_theme = config('system.theme')->get('admin');
+    $themes = list_themes();
+    $theme_key = $form['theme']['#value'];
+    $theme = $themes[$theme_key];
+    // Use meaningful titles for the main site and administrative themes.
+    $theme_title = $theme->info['name'];
+    if ($theme_key == $theme_default) {
+      $theme_title = t('!theme (default theme)', array('!theme' => $theme_title));
+    }
+    elseif ($admin_theme && $theme_key == $admin_theme) {
+      $theme_title = t('!theme (administration theme)', array('!theme' => $theme_title));
+    }
+
+    if ($subject) {
+      drupal_set_title(t("%subject block in %theme", array('%subject' => $subject, '%theme' => $theme_title)), PASS_THROUGH);
+    }
+
+    $form['settings'] = array(
+      '#weight' => -5,
+    );
+    $form['settings']['title'] = array(
       '#type' => 'textfield',
-      '#title' => t('Title'),
+      '#title' => t('Block title'),
       '#maxlength' => 255,
-      '#default_value' => !$entity->isNew() ? $entity->label() : $definition['subject'],
+      '#default_value' => isset($subject) ? $subject : '',
     );
-    $form['machine_name'] = array(
-      '#type' => 'machine_name',
-      '#title' => t('Machine name'),
+    $form['settings']['machine_name'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Block machine name'),
       '#maxlength' => 64,
       '#description' => t('A unique name to save this block configuration. Must be alpha-numeric and be underscore separated.'),
-      '#default_value' => $entity->id(),
-      '#machine_name' => array(
-        'exists' => 'block_load',
-        'replace_pattern' => '[^a-z0-9_.]+',
-      ),
+      '#default_value' => isset($config['config_id']) ? $config['config_id'] : '',
       '#required' => TRUE,
-      '#disabled' => !$entity->isNew(),
     );
+    if (isset($config['config_id'])) {
+      $form['settings']['machine_name']['#disabled'] = TRUE;
+    }
 
     // Region settings.
     $form['region'] = array(
       '#type' => 'select',
       '#title' => t('Region'),
       '#description' => t('Select the region where this block should be displayed.'),
-      '#default_value' => $entity->get('region'),
+      '#default_value' => !empty($config['region']) && $config['region'] != -1 ? $config['region'] : NULL,
       '#empty_value' => BLOCK_REGION_NONE,
-      '#options' => system_region_list($entity->get('theme'), REGIONS_VISIBLE),
+      '#options' => system_region_list($theme_key, REGIONS_VISIBLE),
     );
 
+
     // Visibility settings.
     $form['visibility'] = array(
       '#type' => 'vertical_tabs',
@@ -287,16 +309,15 @@ public function form($form, &$form_state) {
     // @todo remove this access check and inject it in some other way. In fact
     //   this entire visibility settings section probably needs a separate user
     //   interface in the near future.
-    $visibility = $entity->get('visibility');
     $access = user_access('use PHP for settings');
-    if (!empty($visibility['path']['visibility']) && $visibility['path']['visibility'] == BLOCK_VISIBILITY_PHP && !$access) {
+    if (!empty($config['visibility']['path']['visibility']) && $config['visibility']['path']['visibility'] == BLOCK_VISIBILITY_PHP && !$access) {
       $form['visibility']['path']['visibility'] = array(
         '#type' => 'value',
         '#value' => BLOCK_VISIBILITY_PHP,
       );
       $form['visibility']['path']['pages'] = array(
         '#type' => 'value',
-        '#value' => !empty($visibility['path']['pages']) ? $visibility['path']['pages'] : '',
+        '#value' => !empty($config['visibility']['path']['pages']) ? $config['visibility']['path']['pages'] : '',
       );
     }
     else {
@@ -318,12 +339,12 @@ public function form($form, &$form_state) {
         '#type' => 'radios',
         '#title' => t('Show block on specific pages'),
         '#options' => $options,
-        '#default_value' => !empty($visibility['path']['visibility']) ? $visibility['path']['visibility'] : BLOCK_VISIBILITY_NOTLISTED,
+        '#default_value' => !empty($this->configuration['visibility']['path']['visibility']) ? $this->configuration['visibility']['path']['visibility'] : BLOCK_VISIBILITY_NOTLISTED,
       );
       $form['visibility']['path']['pages'] = array(
         '#type' => 'textarea',
         '#title' => '<span class="element-invisible">' . $title . '</span>',
-        '#default_value' => !empty($visibility['path']['pages']) ? $visibility['path']['pages'] : '',
+        '#default_value' => !empty($this->configuration['visibility']['path']['pages']) ? $this->configuration['visibility']['path']['pages'] : '',
         '#description' => $description,
       );
     }
@@ -358,20 +379,20 @@ public function form($form, &$form_state) {
         '#type' => 'radios',
         '#title' => t('Language type'),
         '#options' => $language_type_options,
-        '#default_value' => !empty($visibility['language']['language_type']) ? $visibility['language']['language_type'] : $configurable_language_types[0],
+        '#default_value' => !empty($this->configuration['visibility']['language']['language_type']) ? $this->configuration['visibility']['language']['language_type'] : $configurable_language_types[0],
         '#access' => count($language_type_options) > 1,
       );
       $form['visibility']['language']['langcodes'] = array(
         '#type' => 'checkboxes',
         '#title' => t('Show this block only for specific languages'),
-        '#default_value' => !empty($visibility['language']['langcodes']) ? $visibility['language']['langcodes'] : array(),
+        '#default_value' => !empty($this->configuration['visibility']['language']['langcodes']) ? $this->configuration['visibility']['language']['langcodes'] : array(),
         '#options' => $langcodes_options,
         '#description' => t('Show this block only for the selected language(s). If you select no languages, the block will be visibile in all languages.'),
       );
     }
 
     // Per-role visibility.
-    $role_options = array_map('check_plain', user_role_names());
+    $role_options = array_map('check_plain', user_roles());
     $form['visibility']['role'] = array(
       '#type' => 'details',
       '#title' => t('Roles'),
@@ -382,13 +403,20 @@ public function form($form, &$form_state) {
     $form['visibility']['role']['roles'] = array(
       '#type' => 'checkboxes',
       '#title' => t('Show block for specific roles'),
-      '#default_value' => !empty($visibility['role']['roles']) ? $visibility['role']['roles'] : array(),
+      '#default_value' => !empty($this->configuration['visibility']['role']['roles']) ? $this->configuration['visibility']['role']['roles'] : array(),
       '#options' => $role_options,
       '#description' => t('Show this block only for the selected role(s). If you select no roles, the block will be visible to all users.'),
     );
 
-    // Add plugin-specific settings for this block type.
-    $form['settings'] = $this->blockForm(array(), $form_state);
+    // Add specific configuration for this block type.
+    $form += $this->blockForm($form, $form_state);
+
+    $form['actions'] = array('#type' => 'actions');
+    $form['actions']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Save block'),
+    );
+
     return $form;
   }
 
@@ -423,14 +451,30 @@ public function blockForm($form, &$form_state) {
    * @see \Drupal\block\BlockBase::blockValidate()
    */
   public function validate($form, &$form_state) {
-    if (!empty($form['machine_name']['#disabled'])) {
+    if (empty($form['settings']['machine_name']['#disabled'])) {
+      if (preg_match('/[^a-zA-Z0-9_]/', $form_state['values']['machine_name'])) {
+        form_set_error('machine_name', t('Block name must be alphanumeric or underscores only.'));
+      }
+      if (in_array('plugin.core.block.' . $form_state['values']['machine_name'], config_get_storage_names_with_prefix('plugin.core.block'))) {
+        form_set_error('machine_name', t('Block name must be unique.'));
+      }
+    }
+    else {
       $config_id = explode('.', $form_state['values']['machine_name']);
       $form_state['values']['machine_name'] = array_pop($config_id);
     }
-    $form_state['values']['visibility']['role']['roles'] = array_filter($form_state['values']['visibility']['role']['roles']);
-    if ($form_state['entity']->isNew()) {
-      form_set_value($form['id'], $form_state['entity']->get('theme') . '.' . $form_state['values']['machine_name'], $form_state);
+    if ($form_state['values']['module'] == 'block') {
+      $custom_block_exists = (bool) db_query_range('SELECT 1 FROM {block_custom} WHERE bid <> :bid AND info = :info', 0, 1, array(
+        ':bid' => $form_state['values']['delta'],
+        ':info' => $form_state['values']['info'],
+      ))->fetchField();
+      if (empty($form_state['values']['info']) || $custom_block_exists) {
+        form_set_error('info', t('Ensure that each block description is unique.'));
+      }
     }
+    $form_state['values']['visibility']['role']['roles'] = array_filter($form_state['values']['visibility']['role']['roles']);
+
+    // Perform block type-specific validation.
     $this->blockValidate($form, $form_state);
   }
 
@@ -464,11 +508,32 @@ public function blockValidate($form, &$form_state) {}
    */
   public function submit($form, &$form_state) {
     if (!form_get_errors()) {
-      $this->blockSubmit($form, $form_state);
+      $transaction = db_transaction();
+      try {
+        $keys = array(
+          'visibility' => 'visibility',
+          'pages' => 'pages',
+          'title' => 'subject',
+          'module' => 'module',
+          'region' => 'region',
+        );
+        foreach ($keys as $key => $new_key) {
+          if (isset($form_state['values'][$key])) {
+            $this->configuration[$new_key] = $form_state['values'][$key];
+          }
+        }
+      }
+      catch (Exception $e) {
+        $transaction->rollback();
+        watchdog_exception('block', $e);
+        throw $e;
+      }
+      if (empty($this->configuration['weight'])) {
+        $this->configuration['weight'] = 0;
+      }
 
-      drupal_set_message(t('The block configuration has been saved.'));
-      cache_invalidate_tags(array('content' => TRUE));
-      $form_state['redirect'] = 'admin/structure/block/list/block_plugin_ui:' . $form_state['entity']->get('theme');
+      // Perform block type-specific validation.
+      $this->blockSubmit($form, $form_state);
     }
   }
 
@@ -490,4 +555,46 @@ public function submit($form, &$form_state) {
    */
   public function blockSubmit($form, &$form_state) {}
 
+  /**
+   * Implements \Drupal\block\BlockInterface::build().
+   *
+   * Allows blocks to be altered after they are built.
+   *
+   * Most block plugins should not override this method. To define how a
+   * particular block is rendered, implement the abstract method
+   * BlockBase::blockBuild().
+   *
+   * @return array $build
+   *   A renderable array of data.
+   *   - #title: The default localized title of the block.
+   *
+   * @todo Add specific examples of $id and $name below.
+   *
+   * @see \Drupal\block\BlockBase::blockBuild()
+   */
+  public function build() {
+    // Allow modules to modify the block before it is viewed, via either
+    // hook_block_view_alter(), hook_block_view_ID_alter(), or
+    // hook_block_view_NAME_alter().
+    $id = str_replace(':', '__', $this->getPluginId());
+
+    $config = $this->getConfig();
+    $config_id = explode('.', $config['config_id']);
+    $name = array_pop($config_id);
+
+    $build = $this->blockBuild();
+    drupal_alter(array('block_view', "block_view_$id", "block_view_$name"), $build, $this);
+    return $build;
+  }
+
+  /**
+   * Builds the renderable array for a specific block type.
+   *
+   * @return array
+   *   A renderable array representing the output of the block.
+   *
+   * @see \Drupal\block\BlockBase::build()
+   */
+  abstract public function blockBuild();
+
 }
diff --git a/core/modules/block/lib/Drupal/block/BlockFormController.php b/core/modules/block/lib/Drupal/block/BlockFormController.php
deleted file mode 100644
index 8e95248..0000000
--- a/core/modules/block/lib/Drupal/block/BlockFormController.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\block\BlockFormController.
- */
-
-namespace Drupal\block;
-
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityFormController;
-
-/**
- * Provides form controller for block instance forms.
- */
-class BlockFormController extends EntityFormController {
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::form().
-   */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    return $entity->getPlugin()->form($form, $form_state);
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::actions().
-   */
-  protected function actions(array $form, array &$form_state) {
-    $actions = parent::actions($form, $form_state);
-    $actions['submit']['#value'] = t('Save block');
-    return $actions;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::validate().
-   */
-  public function validate(array $form, array &$form_state) {
-    parent::validate($form, $form_state);
-
-    $entity = $this->getEntity($form_state);
-    $entity->getPlugin()->validate($form, $form_state);
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::submit().
-   */
-  public function submit(array $form, array &$form_state) {
-    parent::submit($form, $form_state);
-
-    $entity = $this->getEntity($form_state);
-    // Call the plugin submit handler.
-    $entity->getPlugin()->submit($form, $form_state);
-
-    // Save the settings of the plugin.
-    $entity->set('settings', $entity->getPlugin()->getConfig());
-    $entity->save();
-  }
-
-}
diff --git a/core/modules/block/lib/Drupal/block/BlockInterface.php b/core/modules/block/lib/Drupal/block/BlockInterface.php
index 65bdee3..b419b27 100644
--- a/core/modules/block/lib/Drupal/block/BlockInterface.php
+++ b/core/modules/block/lib/Drupal/block/BlockInterface.php
@@ -1,7 +1,6 @@
 <?php
 
 /**
- * @file
  * Contains \Drupal\block\BlockInterface.
  */
 
@@ -39,8 +38,6 @@ public function settings();
    *
    * @return bool
    *   TRUE if the block should be shown, or FALSE otherwise.
-   *
-   * @see \Drupal\block\BlockAccessController
    */
   public function access();
 
@@ -58,7 +55,6 @@ public function access();
    * @return array $form
    *   The renderable form array representing the entire configuration form.
    *
-   * @see \Drupal\block\BlockFormController::form()
    * @see \Drupal\block\BlockInterace::validate()
    * @see \Drupal\block\BlockInterace::submit()
    */
@@ -72,7 +68,6 @@ public function form($form, &$form_state);
    * @param array $form_state
    *   An array containing the current state of the configuration form.
    *
-   * @see \Drupal\block\BlockFormController::validate()
    * @see \Drupal\block\BlockInterace::form()
    * @see \Drupal\block\BlockInterace::submit()
    */
@@ -86,19 +81,16 @@ public function validate($form, &$form_state);
    * @param array $form_state
    *   An array containing the current state of the configuration form.
    *
-   * @see \Drupal\block\BlockFormController::submit()
    * @see \Drupal\block\BlockInterace::form()
    * @see \Drupal\block\BlockInterace::validate()
    */
   public function submit($form, &$form_state);
 
   /**
-   * Builds and returns the renderable array for this block plugin.
+   * Builds and returns the renderable array for this block.
    *
    * @return array
-   *   A renderable array representing the content of the block.
-   *
-   * @see \Drupal\block\BlockRenderController
+   *   A renderable array representing the output of the block.
    */
   public function build();
 
diff --git a/core/modules/block/lib/Drupal/block/BlockListController.php b/core/modules/block/lib/Drupal/block/BlockListController.php
deleted file mode 100644
index d21e1a9..0000000
--- a/core/modules/block/lib/Drupal/block/BlockListController.php
+++ /dev/null
@@ -1,200 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\block\BlockListController.
- */
-
-namespace Drupal\block;
-
-use Drupal\Core\Config\Entity\ConfigEntityListController;
-use Drupal\block\Plugin\Core\Entity\Block;
-
-/**
- * Defines the block list controller.
- */
-class BlockListController extends ConfigEntityListController {
-
-  /**
-   * The regions containing the blocks.
-   *
-   * @var array
-   */
-  protected $regions;
-
-  /**
-   * The theme containing the blocks.
-   *
-   * @var string
-   */
-  protected $theme;
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigEntityListController::load().
-   */
-  public function load() {
-    // If no theme was specified, use the current theme.
-    if (!$this->theme) {
-      $this->theme = $GLOBALS['theme'];
-    }
-
-    // Store the region list.
-    $this->regions = system_region_list($this->theme, REGIONS_VISIBLE);
-
-    // Load only blocks for this theme, and sort them.
-    // @todo Move the functionality of _block_rehash() out of the listing page.
-    $entities = _block_rehash($this->theme);
-    uasort($entities, 'static::sort');
-    return $entities;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityListController::render().
-   */
-  public function render($theme = NULL) {
-    // If no theme was specified, use the current theme.
-    $this->theme = $theme ?: $GLOBALS['theme_key'];
-
-    $form_state = array();
-    $form_state['build_info']['args'] = array();
-    $form_state['build_info']['callback'] = array($this, 'form');
-    return drupal_build_form('block_admin_display_form', $form_state);
-  }
-
-  /**
-   * Sorts active blocks by region then weight; sorts inactive blocks by name.
-   */
-  protected function sort(Block $a, Block $b) {
-    static $regions;
-    // We need the region list to correctly order by region.
-    if (!isset($regions)) {
-      $regions = array_flip(array_keys($this->regions));
-      $regions[BLOCK_REGION_NONE] = count($regions);
-    }
-
-    // Separate enabled from disabled.
-    $status = $b->get('status') - $a->get('status');
-    if ($status) {
-      return $status;
-    }
-    // Sort by region (in the order defined by theme .info file).
-    $aregion = $a->get('region');
-    $bregion = $b->get('region');
-    if ((!empty($aregion) && !empty($bregion)) && ($place = ($regions[$aregion] - $regions[$bregion]))) {
-      return $place;
-    }
-    // Sort by weight, unless disabled.
-    if ($a->get('region') != BLOCK_REGION_NONE) {
-      $weight = $a->get('weight') - $b->get('weight');
-      if ($weight) {
-        return $weight;
-      }
-    }
-    // Sort by label.
-    return strcmp($a->label(), $b->label());
-  }
-
-  /**
-   * Form constructor for the main block administration form.
-   */
-  public function form($form, &$form_state) {
-    $entities = $this->load();
-    $form['#attached']['css'][] = drupal_get_path('module', 'block') . '/block.admin.css';
-    $form['#attached']['library'][] = array('system', 'drupal.tableheader');
-    $form['#attached']['library'][] = array('block', 'drupal.block');
-
-    // Add a last region for disabled blocks.
-    $block_regions_with_disabled = $this->regions + array(BLOCK_REGION_NONE => BLOCK_REGION_NONE);
-
-    foreach ($block_regions_with_disabled as $region => $title) {
-      $form['#attached']['drupal_add_tabledrag'][] = array('blocks', 'match', 'sibling', 'block-region-select', 'block-region-' . $region, NULL, FALSE);
-      $form['#attached']['drupal_add_tabledrag'][] = array('blocks', 'order', 'sibling', 'block-weight', 'block-weight-' . $region);
-    }
-    $form['block_regions'] = array(
-      '#type' => 'value',
-      '#value' => $block_regions_with_disabled,
-    );
-
-    // Weights range from -delta to +delta, so delta should be at least half
-    // of the amount of blocks present. This makes sure all blocks in the same
-    // region get an unique weight.
-    $weight_delta = round(count($entities) / 2);
-
-    // Build the form tree.
-    $form['edited_theme'] = array(
-      '#type' => 'value',
-      '#value' => $this->theme,
-    );
-    $form['blocks'] = array();
-    $form['#tree'] = TRUE;
-
-    foreach ($entities as $entity_id => $entity) {
-      $info = $entity->getPlugin()->getDefinition();
-      $form['blocks'][$entity_id]['info'] = array(
-        '#markup' => check_plain($info['subject']),
-      );
-      $form['blocks'][$entity_id]['theme'] = array(
-        '#type' => 'hidden',
-        '#value' => $this->theme,
-      );
-      $form['blocks'][$entity_id]['weight'] = array(
-        '#type' => 'weight',
-        '#default_value' => $entity->get('weight'),
-        '#delta' => $weight_delta,
-        '#title_display' => 'invisible',
-        '#title' => t('Weight for @block block', array('@block' => $info['subject'])),
-      );
-      $form['blocks'][$entity_id]['region'] = array(
-        '#type' => 'select',
-        '#default_value' => $entity->get('region') != BLOCK_REGION_NONE ? $entity->get('region') : NULL,
-        '#empty_value' => BLOCK_REGION_NONE,
-        '#title_display' => 'invisible',
-        '#title' => t('Region for @block block', array('@block' => $info['subject'])),
-        '#options' => $this->regions,
-      );
-      $links['configure'] = array(
-        'title' => t('configure'),
-        'href' => 'admin/structure/block/manage/' . $entity_id . '/configure',
-      );
-      $links['delete'] = array(
-        'title' => t('delete'),
-        'href' => 'admin/structure/block/manage/' . $entity_id . '/delete',
-      );
-      $form['blocks'][$entity_id]['operations'] = array(
-        '#type' => 'operations',
-        '#links' => $links,
-      );
-    }
-    // Do not allow disabling the main system content block when it is present.
-    if (isset($form['blocks']['system_main']['region'])) {
-      $form['blocks']['system_main']['region']['#required'] = TRUE;
-    }
-
-    $form['actions'] = array(
-      '#tree' => FALSE,
-      '#type' => 'actions',
-    );
-    $form['actions']['submit'] = array(
-      '#type' => 'submit',
-      '#value' => t('Save blocks'),
-      '#button_type' => 'primary',
-      '#submit' => array(array($this, 'submit')),
-    );
-    return $form;
-  }
-
-  /**
-   * Form submission handler for the main block administration form.
-   */
-  public function submit($form, &$form_state) {
-    $entities = entity_load_multiple('block', array_keys($form_state['values']['blocks']));
-    foreach ($entities as $entity_id => $entity) {
-      $entity->set('weight', $form_state['values']['blocks'][$entity_id]['weight']);
-      $entity->set('region', $form_state['values']['blocks'][$entity_id]['region']);
-      $entity->save();
-    }
-    drupal_set_message(t('The block settings have been updated.'));
-    cache_invalidate_tags(array('content' => TRUE));
-  }
-
-}
diff --git a/core/modules/block/lib/Drupal/block/BlockRenderController.php b/core/modules/block/lib/Drupal/block/BlockRenderController.php
deleted file mode 100644
index 9763193..0000000
--- a/core/modules/block/lib/Drupal/block/BlockRenderController.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\block\BlockRenderController.
- */
-
-namespace Drupal\block;
-
-use Drupal\Core\Entity\EntityRenderControllerInterface;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Provides a Block render controller.
- */
-class BlockRenderController implements EntityRenderControllerInterface {
-
-  /**
-   * Implements \Drupal\Core\Entity\EntityRenderControllerInterface::buildContent().
-   */
-  public function buildContent(array $entities, array $displays, $view_mode, $langcode = NULL) {
-    return array();
-  }
-
-  /**
-   * Provides entity-specific defaults to the build process.
-   *
-   * @param Drupal\Core\Entity\EntityInterface $entity
-   *   The entity for which the defaults should be provided.
-   * @param string $view_mode
-   *   The view mode that should be used.
-   * @param string $langcode
-   *   (optional) For which language the entity should be prepared, defaults to
-   *   the current content language.
-   *
-   * @return array
-   *   An array of defaults to add into the entity render array.
-   */
-  protected function getBuildDefaults(EntityInterface $entity, $view_mode, $langcode) {
-    // @todo \Drupal\block\Tests\BlockTest::testCustomBlock() assuemes that a
-    //   block can be rendered without any of its wrappers. To do so, it uses a
-    //   custom view mode, and we choose to only add the wrappers on the default
-    //   view mode, 'block'.
-    if ($view_mode != 'block') {
-      return array();
-    }
-
-    return array(
-      '#block' => $entity,
-      '#weight' => $entity->get('weight'),
-      '#theme_wrappers' => array('block'),
-      '#block_config' => array(
-        'id' => $entity->get('plugin'),
-        'region' => $entity->get('region'),
-        'module' => $entity->get('module'),
-        'subject' => $entity->label(),
-      ),
-    );
-  }
-
-  /**
-   * Implements Drupal\Core\Entity\EntityRenderControllerInterface::view().
-   */
-  public function view(EntityInterface $entity, $view_mode = 'full', $langcode = NULL) {
-    $build = $this->viewMultiple(array($entity), $view_mode, $langcode);
-    return reset($build);
-  }
-
-  /**
-   * Implements Drupal\Core\Entity\EntityRenderControllerInterface::viewMultiple().
-   */
-  public function viewMultiple(array $entities = array(), $view_mode = 'full', $langcode = NULL) {
-    $build = array();
-    foreach ($entities as $entity_id => $entity) {
-      // Allow blocks to be empty, do not add in the defaults.
-      if ($content = $entity->getPlugin()->build()) {
-        $build[$entity_id] = $this->getBuildDefaults($entity, $view_mode, $langcode);
-      }
-      $build[$entity_id]['content'] = $content;
-
-      // All blocks, even when empty, should be available for altering.
-      $id = str_replace(':', '__', $entity->get('plugin'));
-      list(, $name) = $entity->id();
-      drupal_alter(array('block_view', "block_view_$id", "block_view_$name"), $build[$entity_id], $entity);
-
-    }
-    return $build;
-  }
-
-}
diff --git a/core/modules/block/lib/Drupal/block/BlockStorageController.php b/core/modules/block/lib/Drupal/block/BlockStorageController.php
deleted file mode 100644
index a873c5d..0000000
--- a/core/modules/block/lib/Drupal/block/BlockStorageController.php
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\block\BlockStorageController.
- */
-
-namespace Drupal\block;
-
-use Drupal\Core\Config\Entity\ConfigStorageController;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Defines the storage controller class for Block entities.
- */
-class BlockStorageController extends ConfigStorageController {
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigStorageController::create().
-   */
-  public function create(array $values) {
-    $entity = parent::create($values);
-
-    if (!$entity->get('module')) {
-      $definition = $entity->getPlugin()->getDefinition();
-      $entity->set('module', $definition['module']);
-    }
-
-    return $entity;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigStorageController::load().
-   */
-  public function load(array $ids = NULL) {
-    $entities = parent::load($ids);
-    // Only blocks with a valid plugin should be loaded.
-    return array_filter($entities, function ($entity) {
-      return $entity->getPlugin();
-    });
-  }
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigStorageController::loadByProperties().
-   */
-  public function loadByProperties(array $values = array()) {
-    $blocks = $this->load();
-    foreach ($values as $key => $value) {
-      $blocks = array_filter($blocks, function($block) use ($key, $value) {
-        return $value === $block->get($key);
-      });
-    }
-    return $blocks;
-  }
-
-}
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php b/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
deleted file mode 100644
index 1bc4535..0000000
--- a/core/modules/block/lib/Drupal/block/Plugin/Core/Entity/Block.php
+++ /dev/null
@@ -1,194 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\block\Plugin\Core\Entity\Block.
- */
-
-namespace Drupal\block\Plugin\Core\Entity;
-
-use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-use Drupal\Component\Plugin\Exception\PluginException;
-
-/**
- * Defines a Block configuration entity class.
- *
- * @Plugin(
- *   id = "block",
- *   label = @Translation("Block"),
- *   module = "block",
- *   controller_class = "Drupal\block\BlockStorageController",
- *   access_controller_class = "Drupal\block\BlockAccessController",
- *   render_controller_class = "Drupal\block\BlockRenderController",
- *   list_controller_class = "Drupal\block\BlockListController",
- *   form_controller_class = {
- *     "default" = "Drupal\block\BlockFormController"
- *   },
- *   config_prefix = "block.block",
- *   fieldable = FALSE,
- *   entity_keys = {
- *     "id" = "id",
- *     "label" = "label",
- *     "uuid" = "uuid"
- *   }
- * )
- */
-class Block extends ConfigEntityBase {
-
-  /**
-   * The ID of the block.
-   *
-   * @var string
-   */
-  public $id;
-
-  /**
-   * The block label.
-   *
-   * @var string
-   */
-  public $label;
-
-  /**
-   * The block UUID.
-   *
-   * @var string
-   */
-  public $uuid;
-
-  /**
-   * The plugin instance settings.
-   *
-   * @var array
-   */
-  protected $settings = array();
-
-  /**
-   * The plugin instance.
-   *
-   * @var \Drupal\block\BlockInterface
-   */
-  protected $instance;
-
-  /**
-   * The region this block is placed in.
-   *
-   * @var string
-   */
-  protected $region = BLOCK_REGION_NONE;
-
-  /**
-   * Settings to control the block visibility.
-   *
-   * @var array
-   */
-  protected $visibility = array();
-
-  /**
-   * The weight of the block.
-   *
-   * @var int
-   */
-  protected $weight;
-
-  /**
-   * The module owning this plugin.
-   *
-   * @var string
-   */
-  protected $module;
-
-  /**
-   * The status of this block.
-   *
-   * @var bool
-   */
-  protected $status = TRUE;
-
-  /**
-   * The plugin instance ID.
-   *
-   * @var string
-   */
-  protected $plugin;
-
-  /**
-   * Returns the plugin instance.
-   *
-   * @return \Drupal\block\BlockInterface
-   *   The plugin instance for this block.
-   */
-  public function getPlugin() {
-    if (!$this->instance) {
-      // Throw an exception if no plugin string was provided.
-      if (!$this->plugin) {
-        throw new PluginException(format_string("The block '@block' did not specify a plugin.", array('@block' => $this->id())));
-      }
-
-      // Create a plugin instance and store its configuration as settings.
-      try {
-        $this->instance = drupal_container()->get('plugin.manager.block')->createInstance($this->plugin, $this->settings, $this);
-        $this->settings += $this->instance->getConfig();
-      }
-      catch (PluginException $e) {
-        // Ignore blocks belonging to disabled modules, but re-throw valid
-        // exceptions when the module is enabled and the plugin is misconfigured.
-        if (empty($this->module) || module_exists($this->module)) {
-          throw $e;
-        }
-      }
-    }
-    return $this->instance;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\Entity::uri();
-   */
-  public function uri() {
-    return array(
-      'path' => 'admin/structure/block/manage/' . $this->id(),
-      'options' => array(
-        'entity_type' => $this->entityType,
-        'entity' => $this,
-      ),
-    );
-  }
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigEntityBase::get();
-   */
-  public function get($property_name, $langcode = NULL) {
-    // The theme is stored in the entity ID.
-    $value = parent::get($property_name, $langcode);
-    if ($property_name == 'theme' && !$value) {
-      list($value) = explode('.', $this->id());
-    }
-    return $value;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigEntityBase::getExportProperties();
-   */
-  public function getExportProperties() {
-    $names = array(
-      'id',
-      'label',
-      'uuid',
-      'region',
-      'weight',
-      'module',
-      'status',
-      'visibility',
-      'plugin',
-      'settings',
-    );
-    $properties = array();
-    foreach ($names as $name) {
-      $properties[$name] = $this->get($name);
-    }
-    return $properties;
-  }
-
-}
diff --git a/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php b/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
index c977756..b7186b0 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/Type/BlockManager.php
@@ -12,7 +12,7 @@
 use Drupal\Core\Plugin\Discovery\AlterDecorator;
 use Drupal\Core\Plugin\Discovery\CacheDecorator;
 use Drupal\Component\Plugin\Factory\DefaultFactory;
-use Drupal\block\Plugin\Core\Entity\Block;
+use Drupal\Core\Plugin\Mapper\ConfigMapper;
 
 /**
  * Manages discovery and instantiation of block plugins.
@@ -31,14 +31,8 @@ public function __construct() {
     $this->discovery = new DerivativeDiscoveryDecorator($this->discovery);
     $this->discovery = new AlterDecorator($this->discovery, 'block');
     $this->discovery = new CacheDecorator($this->discovery, 'block_plugins:' . language(LANGUAGE_TYPE_INTERFACE)->langcode, 'cache_block');
-  }
-
-  /**
-   * Overrides \Drupal\Component\Plugin\PluginManagerBase::createInstance().
-   */
-  public function createInstance($plugin_id, array $configuration = array(), Block $entity = NULl) {
-    $plugin_class = DefaultFactory::getPluginClass($plugin_id, $this->discovery);
-    return new $plugin_class($configuration, $plugin_id, $this->discovery, $entity);
+    $this->factory = new DefaultFactory($this);
+    $this->mapper = new ConfigMapper($this);
   }
 
 }
diff --git a/core/modules/block/lib/Drupal/block/Plugin/system/plugin_ui/BlockPluginUI.php b/core/modules/block/lib/Drupal/block/Plugin/system/plugin_ui/BlockPluginUI.php
index 1ffe4e6..c6c1ed4 100644
--- a/core/modules/block/lib/Drupal/block/Plugin/system/plugin_ui/BlockPluginUI.php
+++ b/core/modules/block/lib/Drupal/block/Plugin/system/plugin_ui/BlockPluginUI.php
@@ -17,7 +17,7 @@
  *   id = "block_plugin_ui",
  *   module = "block",
  *   all_plugins = @Translation("All Blocks"),
- *   config_path = "admin/structure/block/add",
+ *   config_path = "admin/structure/block/manage",
  *   default_task = TRUE,
  *   derivative = "Drupal\block\Plugin\Derivative\BlockPluginUI",
  *   facets = {
@@ -116,7 +116,7 @@ public function formValidate($form, &$form_state) {
    * Overrides \Drupal\system\Plugin\PluginUIBase::formSubmit().
    */
   public function formSubmit($form, &$form_state) {
-    $form_state['redirect'] = 'admin/structure/block/add/' . $form_state['values']['block'] . '/' . $form_state['values']['theme'];
+    $form_state['redirect'] = 'admin/structure/block/manage/' . $form_state['values']['block'] . '/' . $form_state['values']['theme'];
   }
 
   /**
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php
index 96f9343..f40d4fa 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockCacheTest.php
@@ -24,7 +24,6 @@ class BlockCacheTest extends WebTestBase {
   protected $admin_user;
   protected $normal_user;
   protected $normal_user_alt;
-  protected $block;
 
   public static function getInfo() {
     return array(
@@ -50,7 +49,8 @@ function setUp() {
     $this->normal_user_alt->save();
 
     // Enable our test block.
-   $this->block = $this->drupalPlaceBlock('test_cache');
+   $block = $this->drupalPlaceBlock('test_cache');
+   $this->block_config_id = $block['config_id'];
   }
 
   /**
@@ -192,10 +192,15 @@ function testCachePerPage() {
    * Private helper method to set the test block's cache mode.
    */
   private function setCacheMode($cache_mode) {
-    $settings = $this->block->get('settings');
-    $settings['cache'] = $cache_mode;
-    $this->block->set('settings', $settings);
-    $this->block->save();
+    $block_config = config($this->block_config_id);
+    $block_config->set('cache', $cache_mode);
+    $block_config->save();
+
+    $instance = block_load($this->block_config_id);
+    $config = $instance->getConfig();
+    if ($config['cache'] != $cache_mode) {
+      $this->fail(t('Unable to set cache mode to %mode. Current mode: %current_mode', array('%mode' => $cache_mode, '%current_mode' => $config['cache'])));
+    }
+    $this->assertEqual($config['cache'], $cache_mode, t("Test block's database entry updated to DRUPAL_NO_CACHE."));
   }
-
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php
index ed2f280..e0d37da 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockHtmlIdTest.php
@@ -15,6 +15,11 @@
 class BlockHtmlIdTest extends WebTestBase {
 
   /**
+   * An administrative user to configure the test environment.
+   */
+  protected $adminUser;
+
+  /**
    * Modules to enable.
    *
    * @var array
@@ -32,14 +37,15 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $this->drupalLogin($this->root_user);
+    // Create an admin user, log in and enable test blocks.
+    $this->adminUser = $this->drupalCreateUser(array('administer blocks', 'access administration pages'));
+    $this->drupalLogin($this->adminUser);
 
     // Make sure the block has some content so it will appear.
     $current_content = $this->randomName();
     state()->set('block_test.content', $current_content);
 
-    // Enable our test blocks.
-    $this->drupalPlaceBlock('system_menu_block:menu-tools');
+    // Enable our test block.
     $this->drupalPlaceBlock('test_html_id', array('machine_name' => 'test_id_block'));
   }
 
@@ -49,8 +55,6 @@ function setUp() {
   function testHtmlId() {
     $this->drupalGet('');
     $this->assertRaw('id="block-test-id-block"', 'HTML ID for test block is valid.');
-    $elements = $this->xpath('//div[contains(@class, :div-class)]/div/ul[contains(@class, :ul-class)]/li', array(':div-class' => 'block-system', ':ul-class' => 'menu'));
-    $this->assertTrue(!empty($elements), 'The proper block markup was found.');
   }
 
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php
index 54417f8..ec41b39 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockInvalidRegionTest.php
@@ -46,10 +46,11 @@ function setUp() {
   function testBlockInInvalidRegion() {
     // Enable a test block and place it in an invalid region.
     $block = $this->drupalPlaceBlock('test_html_id');
-    $block->set('region', 'invalid_region');
-    $block->save();
+    $config = config($block['config_id']);
+    $config->set('region', 'invalid_region');
+    $config->save();
 
-    $warning_message = t('The block %info was assigned to the invalid region %region and has been disabled.', array('%info' => $block->id(), '%region' => 'invalid_region'));
+    $warning_message = t('The block %info was assigned to the invalid region %region and has been disabled.', array('%info' => $config->get('id'), '%region' => 'invalid_region'));
 
     // Clearing the cache should disable the test block placed in the invalid region.
     $this->drupalPost('admin/config/development/performance', array(), 'Clear all caches');
@@ -60,9 +61,8 @@ function testBlockInInvalidRegion() {
     $this->assertNoRaw($warning_message, 'Disabled block in the invalid region will not trigger the warning.');
 
     // Place disabled test block in the invalid region of the default theme.
-    $block = entity_load('block', $block->id());
-    $block->set('region', 'invalid_region');
-    $block->save();
+    $config->set('region', 'invalid_region');
+    $config->save();
 
     // Clear the cache to check if the warning message is not triggered.
     $this->drupalPost('admin/config/development/performance', array(), 'Clear all caches');
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockLanguageTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockLanguageTest.php
index 49fc6e2..2fa1d40 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockLanguageTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockLanguageTest.php
@@ -55,17 +55,17 @@ function setUp() {
   public function testLanguageBlockVisibility() {
     // Check if the visibility setting is available.
     $default_theme = variable_get('theme_default', 'stark');
-    $this->drupalGet('admin/structure/block/add/system_powered_by_block' . '/' . $default_theme);
+    $this->drupalGet('admin/structure/block/manage/system_powered_by_block' . '/' . $default_theme);
 
     $this->assertField('visibility[language][langcodes][en]', 'Language visibility field is visible.');
 
     // Enable a standard block and set the visibility setting for one language.
     $edit = array(
       'visibility[language][langcodes][en]' => TRUE,
-      'machine_name' => strtolower($this->randomName(8)),
+      'machine_name' => $this->randomName(8),
       'region' => 'sidebar_first',
     );
-    $this->drupalPost('admin/structure/block/add/system_powered_by_block' . '/' . $default_theme, $edit, t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/system_powered_by_block' . '/' . $default_theme, $edit, t('Save block'));
 
     // Change the default language.
     $edit = array(
@@ -89,23 +89,19 @@ public function testLanguageBlockVisibility() {
    * Tests if the visibility settings are removed if the language is deleted.
    */
   public function testLanguageBlockVisibilityLanguageDelete() {
+
+    $default_theme = variable_get('theme_default', 'stark');
     // Enable a standard block and set the visibility setting for one language.
     $edit = array(
-      'visibility' => array(
-        'language' => array(
-          'language_type' => 'language_interface',
-          'langcodes' => array(
-            'fr' => 'fr',
-          ),
-        ),
-      ),
+      'visibility[language][langcodes][fr]' => TRUE,
       'machine_name' => 'language_block_test',
+      'region' => 'sidebar_first',
     );
-    $block = $this->drupalPlaceBlock('system_powered_by_block', $edit);
+    $this->drupalPost('admin/structure/block/manage/system_powered_by_block' . '/' . $default_theme, $edit, t('Save block'));
 
     // Check that we have the language in config after saving the setting.
-    $visibility = $block->get('visibility');
-    $setting = $visibility['language']['langcodes']['fr'];
+    $config = config('plugin.core.block.' . $default_theme . '.language_block_test');
+    $setting = $config->get('visibility.language.langcodes.fr');
     $this->assertTrue('fr' === $setting, 'Language is set in the block configuration.');
 
     // Delete the language.
@@ -113,9 +109,9 @@ public function testLanguageBlockVisibilityLanguageDelete() {
 
     // Check that the language is no longer stored in the configuration after
     // it is deleted.
-    $block = entity_load('block', $block->id());
-    $visibility = $block->get('visibility');
-    $this->assertTrue(empty($visibility['language']['langcodes']['fr']), 'Language is no longer not set in the block configuration after deleting the block.');
+    $config = config('plugin.core.block.' . $default_theme . '.language_block_test');
+    $setting = $config->get('visibility.language.langcodes.fr');
+    $this->assertTrue(empty($setting), 'Language is no longer not set in the block configuration after deleting the block.');
   }
 
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockLibrarySearchTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockLibrarySearchTest.php
index 22f47e8..dc93755 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockLibrarySearchTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockLibrarySearchTest.php
@@ -54,7 +54,6 @@ function testBlockLibrarySearch() {
 
     // Check that the block search form redirects to the correct block form.
     $this->drupalPost('admin/structure/block/list/block_plugin_ui:stark/add', array('block' => 'system_main_block'), t('Next'));
-    $this->assertUrl('admin/structure/block/add/system_main_block/stark');
+    $this->assertUrl('admin/structure/block/manage/system_main_block/stark');
   }
-
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
deleted file mode 100644
index 596b88b..0000000
--- a/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
+++ /dev/null
@@ -1,206 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\block\Tests\BlockStorageUnitTest.
- */
-
-namespace Drupal\block\Tests;
-
-use Drupal\simpletest\DrupalUnitTestBase;
-use Drupal\block_test\Plugin\block\block\TestHtmlIdBlock;
-use Drupal\Component\Plugin\Exception\PluginException;
-use Drupal\block\BlockStorageController;
-use Drupal\Core\Entity\EntityMalformedException;
-use Drupal\block\Plugin\Core\Entity\Block;
-
-/**
- * Tests the storage of blocks.
- *
- * @see \Drupal\block\BlockStorageController
- */
-class BlockStorageUnitTest extends DrupalUnitTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('block_test');
-
-  /**
-   * The block storage controller.
-   *
-   * @var \Drupal\block\BlockStorageController.
-   */
-  protected $controller;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Block storage',
-      'description' => 'Tests the storage of blocks.',
-      'group' => 'Block'
-    );
-  }
-
-  protected function setUp() {
-    parent::setUp();
-
-    $this->enableModules(array('block'));
-    $this->controller = $this->container->get('plugin.manager.entity')->getStorageController('block');
-  }
-
-  /**
-   * Tests CRUD operations.
-   */
-  public function testBlockCRUD() {
-    $this->assertTrue($this->controller instanceof BlockStorageController, 'The block storage controller is loaded.');
-
-    // Run each test method in the same installation.
-    $this->createTests();
-    $this->loadTests();
-    $this->renderTests();
-    $this->deleteTests();
-  }
-
-  /**
-   * Tests the creation of blocks.
-   */
-  protected function createTests() {
-    // Attempt to create a block without a plugin.
-    try {
-      $entity = $this->controller->create(array());
-      $this->fail('A block without a plugin was created with no exception thrown.');
-    }
-    catch (PluginException $e) {
-      $this->assertEqual('The block \'\' did not specify a plugin.', $e->getMessage(), 'An exception was thrown when a block was created without a plugin.');
-    }
-
-    // Create a block with only required values.
-    $entity = $this->controller->create(array(
-      'id' => 'stark.test_block',
-      'plugin' => 'test_html_id',
-    ));
-    $entity->save();
-
-    $this->assertTrue($entity instanceof Block, 'The newly created entity is a Block.');
-
-    // Verify all of the block properties.
-    $actual_properties = config('block.block.stark.test_block')->get();
-    $this->assertTrue(!empty($actual_properties['uuid']), 'The block UUID is set.');
-    unset($actual_properties['uuid']);
-
-    // Ensure that default values are filled in.
-    $expected_properties = array(
-      'id' => 'stark.test_block',
-      'label' => '',
-      'region' => '-1',
-      'weight' => '',
-      'module' => 'block_test',
-      'status' => '1',
-      'visibility' => array(),
-      'plugin' => 'test_html_id',
-      'settings' => array(
-        'cache' => '1',
-        'subject' => t('Test block html id'),
-      ),
-    );
-    $this->assertIdentical($actual_properties, $expected_properties, 'The block properties are exported correctly.');
-
-    $this->assertTrue($entity->getPlugin() instanceof TestHtmlIdBlock, 'The entity has an instance of the correct block plugin.');
-  }
-
-  /**
-   * Tests the rendering of blocks.
-   */
-  protected function loadTests() {
-    $entities = $this->controller->load(array('stark.test_block'));
-    $entity = reset($entities);
-
-    $this->assertTrue($entity instanceof Block, 'The loaded entity is a Block.');
-
-    // Verify several properties of the block.
-    $this->assertEqual($entity->get('region'), '-1');
-    $this->assertTrue($entity->get('status'));
-    $this->assertEqual($entity->get('theme'), 'stark');
-    $this->assertEqual($entity->get('module'), 'block_test');
-    $this->assertTrue($entity->uuid());
-  }
-
-  /**
-   * Tests the rendering of blocks.
-   */
-  protected function renderTests() {
-    $entity = $this->controller->create(array(
-      'id' => 'stark.test_block',
-      'plugin' => 'test_html_id',
-    ));
-
-    // Test the rendering of a block.
-    $output = entity_view($entity, 'block');
-    $expected = array();
-    $expected[] = '  <div id="block-test-block"  class="block block-block-test">';
-    $expected[] = '';
-    $expected[] = '    ';
-    $expected[] = '  <div class="content">';
-    $expected[] = '      </div>';
-    $expected[] = '</div>';
-    $expected[] = '';
-    $expected_output = implode("\n", $expected);
-    $this->assertEqual(drupal_render($output), $expected_output, 'The block rendered correctly.');
-
-    // Reset the HTML IDs so that the next render is not affected.
-    drupal_static_reset('drupal_html_id');
-
-    // Test the rendering of a block with a given title.
-    $entity->set('label', 'Powered by Bananas');
-    $output = entity_view($entity, 'block');
-    $expected = array();
-    $expected[] = '  <div id="block-test-block"  class="block block-block-test">';
-    $expected[] = '';
-    $expected[] = '    <h2 class="">Powered by Bananas</h2>';
-    $expected[] = '  ';
-    $expected[] = '  <div class="content">';
-    $expected[] = '      </div>';
-    $expected[] = '</div>';
-    $expected[] = '';
-    $expected_output = implode("\n", $expected);
-    $this->assertEqual(drupal_render($output), $expected_output, 'The block rendered correctly.');
-  }
-
-  /**
-   * Tests the deleting of blocks.
-   */
-  protected function deleteTests() {
-    $entities = $this->controller->load(array('stark.test_block'));
-    $entity = reset($entities);
-
-    // Ensure that the storage isn't currently empty.
-    $config_storage = $this->container->get('config.storage');
-    $config = $config_storage->listAll('block.block.');
-    $this->assertFalse(empty($config), 'There are blocks in config storage.');
-
-    // Delete the block.
-    $entity->delete();
-
-    // Ensure that the storage is now empty.
-    $config = $config_storage->listAll('block.block.');
-    $this->assertTrue(empty($config), 'There are no blocks in config storage.');
-  }
-
-  /**
-   * Tests the installation of default blocks.
-   */
-  public function testDefaultBlocks() {
-    $entities = $this->controller->load();
-    $this->assertTrue(empty($entities), 'There are no blocks initially.');
-
-    // Install the block_test.module, so that its default config is installed.
-    $this->enableModules(array('block_test'));
-
-    $entities = $this->controller->load();
-    $entity = reset($entities);
-    $this->assertEqual($entity->id(), 'stark.test_block', 'The default test block was loaded.');
-  }
-
-}
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php
index c469eb6..fd75adf 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php
@@ -37,25 +37,18 @@ function testBlockThemeHookSuggestions() {
     // an underscore (not transformed) and a hyphen (transformed to underscore),
     // and generates possibilities for each level of derivative.
     // @todo Clarify this comment.
-    $block = entity_create('block', array(
-      'plugin' => 'system_menu_block:menu-admin',
+    $data = array(
       'region' => 'footer',
-      'id' => variable_get('theme_default', 'stark') . '.machinename',
-    ));
+    );
 
+    $block = drupal_container()->get('plugin.manager.block')->createInstance('system_menu_block:menu-admin', $data);
     $variables = array();
     $variables['elements']['#block'] = $block;
-    $variables['elements']['#block_config'] = $block->getPlugin()->getConfig() + array(
-      'id' => $block->get('plugin'),
-      'region' => $block->get('region'),
-      'module' => $block->get('module'),
-    );
     $variables['elements']['#children'] = '';
     // Test adding a class to the block content.
     $variables['content_attributes']['class'][] = 'test-class';
     template_preprocess_block($variables);
-    $this->assertEqual($variables['theme_hook_suggestions'], array('block__footer', 'block__system', 'block__system_menu_block', 'block__system_menu_block__menu_admin', 'block__machinename'));
+    $this->assertEqual($variables['theme_hook_suggestions'], array('block__footer', 'block__system', 'block__system_menu_block', 'block__system_menu_block__menu_admin'));
     $this->assertEqual($variables['content_attributes']['class'], array('test-class', 'content'), 'Default .content class added to block content_attributes_array');
   }
-
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockTest.php
index ee51d43..c607973 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockTest.php
@@ -36,11 +36,12 @@ function setUp() {
     config('system.site')->set('page.front', 'test-page')->save();
 
     // Create Full HTML text format.
-    $full_html_format = entity_create('filter_format', array(
+    $full_html_format = array(
       'format' => 'full_html',
       'name' => 'Full HTML',
-    ));
-    $full_html_format->save();
+    );
+    $full_html_format = (object) $full_html_format;
+    filter_format_save($full_html_format);
     $this->checkPermissions(array(), TRUE);
 
     // Create and log in an administrative user having access to the Full HTML
@@ -62,13 +63,27 @@ function setUp() {
   }
 
   /**
+   * Removes default blocks to avoid conflicts in the Block UI.
+   */
+  protected function removeDefaultBlocks() {
+    $default_theme = variable_get('theme_default', 'stark');
+    $manager = $this->container->get('plugin.manager.block');
+    $instances = config_get_storage_names_with_prefix('plugin.core.block.' . $default_theme);
+    foreach ($instances as $plugin_id) {
+      config($plugin_id)->delete();
+    }
+  }
+
+  /**
    * Test creating custom block, moving it to a specific region and then deleting it.
    */
   public function testCustomBlock() {
     $default_theme = variable_get('theme_default', 'stark');
+    $this->removeDefaultBlocks();
 
     // Clear the block cache to load the Custom Block module's block definitions.
-    $this->container->get('plugin.manager.block')->clearCachedDefinitions();
+    $manager = $this->container->get('plugin.manager.block');
+    $manager->clearCachedDefinitions();
 
     // Enable a second theme.
     theme_enable(array('seven'));
@@ -95,23 +110,21 @@ public function testCustomBlock() {
     $info = strtolower($this->randomName(8));
     $custom_block['machine_name'] = $info;
     $custom_block['info'] = $info;
-    $custom_block['label'] = $this->randomName(8);
+    $custom_block['title'] = $this->randomName(8);
     $custom_block['body[value]'] = $this->randomName(32);
     $custom_block['region'] = $this->regions[0];
     $this->drupalPost("admin/structure/block/list/block_plugin_ui:$default_theme/add/custom_blocks", $custom_block, t('Save block'));
-    $block = entity_load('block', $default_theme . '.' . $info);
+    $plugin_id = "plugin.core.block.$default_theme.$info";
+    $block = $manager->getInstance(array('config' => $plugin_id));
+    $config = $block->getConfig();
 
     // Confirm that the custom block has been created, and then query the created bid.
     $this->assertText(t('The block configuration has been saved.'), 'Custom block successfully created.');
 
-    // Check that entity_view() returns the correct title and content.
-    // @todo This assumes that a block's content can be rendered without its
-    //   wrappers. If this is a reasonable expectation, it should be documented
-    //   elsewhere.
-    $data = entity_view($block, 'content');
-    $definition = $block->getPlugin()->getDefinition();
-    $config = $definition['settings'];
-    $this->assertEqual(check_markup($custom_block['body[value]'], $config['format']), render($data), 'BlockInterface::build() provides correct block content.');
+    // Check that block_block_view() returns the correct title and content.
+    $data = $block->build();
+    $format = $config['format'];
+    $this->assertEqual(check_markup($custom_block['body[value]'], $format), render($data), 'BlockInterface::build() provides correct block content.');
 
     // Check whether the block can be moved to all available regions.
     $custom_block['module'] = 'block';
@@ -121,7 +134,7 @@ public function testCustomBlock() {
 
     // Verify presence of configure and delete links for custom block.
     $this->drupalGet('admin/structure/block');
-    $config_block_id = "admin/structure/block/manage/$default_theme.$info";
+    $config_block_id = "admin/structure/block/manage/plugin.core.block.$default_theme.$info/$default_theme";
     $this->assertLinkByHref("$config_block_id/configure", 0, 'Custom block configure link found.');
     $this->assertLinkByHref("$config_block_id/delete", 0, 'Custom block delete link found.');
 
@@ -133,9 +146,9 @@ public function testCustomBlock() {
     // Delete the created custom block & verify that it's been deleted and no longer appearing on the page.
     $this->clickLink(t('delete'));
     $this->drupalPost("$config_block_id/delete", array(), t('Delete'));
-    $this->assertRaw(t('The block %title has been removed.', array('%title' => $custom_block['label'])), 'Custom block successfully deleted.');
+    $this->assertRaw(t('The block %title has been removed.', array('%title' => $custom_block['title'])), 'Custom block successfully deleted.');
     $this->drupalGet(NULL);
-    $this->assertNoText(t($custom_block['label']), 'Custom block no longer appears on page.');
+    $this->assertNoText(t($custom_block['title']), 'Custom block no longer appears on page.');
   }
 
   /**
@@ -143,12 +156,13 @@ public function testCustomBlock() {
    */
   public function testCustomBlockFormat() {
     $default_theme = variable_get('theme_default', 'stark');
+    $this->removeDefaultBlocks();
 
     // Add a new custom block by filling out the input form on the admin/structure/block/add page.
-    $info = strtolower($this->randomName(8));
+    $info = $this->randomName(8);
     $custom_block['machine_name'] = $info;
     $custom_block['info'] = $info;
-    $custom_block['label'] = $this->randomName(8);
+    $custom_block['title'] = $this->randomName(8);
     $custom_block['body[value]'] = '<h1>Full HTML</h1>';
     $full_html_format = filter_format_load('full_html');
     $custom_block['body[format]'] = $full_html_format->format;
@@ -156,7 +170,7 @@ public function testCustomBlockFormat() {
     $this->drupalPost("admin/structure/block/list/block_plugin_ui:$default_theme/add/custom_blocks", $custom_block, t('Save block'));
 
     // Set the created custom block to a specific region.
-    $edit['blocks[' . $default_theme . '.' . $custom_block['machine_name'] . '][region]'] = $this->regions[1];
+    $edit['blocks[0][region]'] = $this->regions[1];
     $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
 
     // Confirm that the custom block is being displayed using configured text format.
@@ -166,10 +180,11 @@ public function testCustomBlockFormat() {
     // Confirm that a user without access to Full HTML can not see the body field,
     // but can still submit the form without errors.
     $block_admin = $this->drupalCreateUser(array('administer blocks'));
+    $config_block_id = "admin/structure/block/manage/plugin.core.block.$default_theme.$info/$default_theme";
     $this->drupalLogin($block_admin);
-    $this->drupalGet("admin/structure/block/manage/$default_theme.$info/configure");
+    $this->drupalGet("$config_block_id/configure");
     $this->assertFieldByXPath("//textarea[@name='body[value]' and @disabled='disabled']", t('This field has been disabled because you do not have sufficient permissions to edit it.'), 'Body field contains denied message');
-    $this->drupalPost("admin/structure/block/manage/$default_theme.$info/configure", array(), t('Save block'));
+    $this->drupalPost("$config_block_id/configure", array(), t('Save block'));
     $this->assertNoText(t('Ensure that each block description is unique.'));
 
     // Confirm that the custom block is still being displayed using configured text format.
@@ -187,15 +202,15 @@ function testBlockVisibility() {
     // Enable a standard block.
     $default_theme = variable_get('theme_default', 'stark');
     $edit = array(
-      'machine_name' => strtolower($this->randomName(8)),
+      'machine_name' => $this->randomName(8),
       'region' => 'sidebar_first',
-      'label' => $title,
+      'title' => $title,
     );
     // Set the block to be hidden on any user path, and to be shown only to
     // authenticated users.
     $edit['visibility[path][pages]'] = 'user*';
     $edit['visibility[role][roles][' . DRUPAL_AUTHENTICATED_RID . ']'] = TRUE;
-    $this->drupalPost('admin/structure/block/add/' . $block_name . '/' . $default_theme, $edit, t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/' . $block_name . '/' . $default_theme, $edit, t('Save block'));
     $this->assertText('The block configuration has been saved.', 'Block was saved');
 
     $this->drupalGet('');
@@ -227,14 +242,14 @@ function testBlockVisibilityListedEmpty() {
     // Enable a standard block.
     $default_theme = variable_get('theme_default', 'stark');
     $edit = array(
-      'machine_name' => strtolower($this->randomName(8)),
+      'machine_name' => $this->randomName(8),
       'region' => 'sidebar_first',
-      'label' => $title,
+      'title' => $title,
       'visibility[path][visibility]' => BLOCK_VISIBILITY_LISTED,
     );
     // Set the block to be hidden on any user path, and to be shown only to
     // authenticated users.
-    $this->drupalPost('admin/structure/block/add/' . $block_name . '/' . $default_theme, $edit, t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/' . $block_name . '/' . $default_theme, $edit, t('Save block'));
     $this->assertText('The block configuration has been saved.', 'Block was saved');
 
     $this->drupalGet('user');
@@ -253,21 +268,24 @@ function testBlockVisibilityListedEmpty() {
    * Test configuring and moving a module-define block to specific regions.
    */
   function testBlock() {
+    $this->removeDefaultBlocks();
     // Select the 'Powered by Drupal' block to be configured and moved.
     $block = array();
     $block['id'] = 'system_powered_by_block';
-    $block['label'] = $this->randomName(8);
-    $block['machine_name'] = strtolower($this->randomName(8));
+    $block['title'] = $this->randomName(8);
+    $block['machine_name'] = $this->randomName(8);
     $block['theme'] = variable_get('theme_default', 'stark');
     $block['region'] = 'header';
 
     // Set block title to confirm that interface works and override any custom titles.
-    $this->drupalPost('admin/structure/block/add/' . $block['id'] . '/' . $block['theme'], array('label' => $block['label'], 'machine_name' => $block['machine_name'], 'region' => $block['region']), t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/' . $block['id'] . '/' . $block['theme'], array('title' => $block['title'], 'machine_name' => $block['machine_name'], 'region' => $block['region']), t('Save block'));
     $this->assertText(t('The block configuration has been saved.'), 'Block title set.');
     // Check to see if the block was created by checking its configuration.
-    $instance = entity_load('block', $block['theme'] . '.' . $block['machine_name']);
+    $block['config_id'] = 'plugin.core.block.' . $block['theme'] . '.' . $block['machine_name'];
+    $instance = block_load($block['config_id']);
+    $config = $instance->getConfig();
 
-    $this->assertEqual($instance->label(), $block['label'], 'Stored block title found.');
+    $this->assertEqual($config['subject'], $block['title'], 'Stored block title found.');
 
     // Check whether the block can be moved to all available regions.
     foreach ($this->regions as $region) {
@@ -276,7 +294,7 @@ function testBlock() {
 
     // Set the block to the disabled region.
     $edit = array();
-    $edit['blocks[' . $block['theme'] . '.' . $block['machine_name'] . '][region]'] = -1;
+    $edit['blocks[0][region]'] = -1;
     $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
 
     // Confirm that the block is now listed as disabled.
@@ -284,7 +302,7 @@ function testBlock() {
 
     // Confirm that the block instance title and markup are not displayed.
     $this->drupalGet('node');
-    $this->assertNoText(t($block['label']));
+    $this->assertNoText(t($block['title']));
     // Check for <div id="block-my-block-instance-name"> if the machine name
     // is my_block_instance_name.
     $xpath = $this->buildXPathQuery('//div[@id=:id]/*', array(':id' => 'block-' . strtr(strtolower($block['machine_name']), '-', '_')));
@@ -305,9 +323,8 @@ function testBlock() {
    */
   function moveBlockToRegion(array $block, $region) {
     // Set the created block to a specific region.
-    $block += array('theme' => variable_get('theme_default', 'stark'));
     $edit = array();
-    $edit['blocks[' . $block['theme'] . '.' . $block['machine_name'] . '][region]'] = $region;
+    $edit['blocks[0][region]'] = $region;
     $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
 
     // Confirm that the block was moved to the proper region.
@@ -315,7 +332,7 @@ function moveBlockToRegion(array $block, $region) {
 
     // Confirm that the block is being displayed.
     $this->drupalGet('');
-    $this->assertText(t($block['label']), 'Block successfully being displayed on the page.');
+    $this->assertText(t($block['title']), 'Block successfully being displayed on the page.');
 
     // Confirm that the custom block was found at the proper region.
     $xpath = $this->buildXPathQuery('//div[@class=:region-class]//div[@id=:block-id]/*', array(
@@ -333,30 +350,34 @@ function testBlockRehash() {
     $this->assertTrue(module_exists('block_test'), 'Test block module enabled.');
 
     // Clear the block cache to load the block_test module's block definitions.
-    $this->container->get('plugin.manager.block')->clearCachedDefinitions();
+    $manager = $this->container->get('plugin.manager.block');
+    $manager->clearCachedDefinitions();
 
     // Add a test block.
+    $plugin = $manager->getDefinition('test_cache');
     $block = array();
     $block['id'] = 'test_cache';
-    $block['machine_name'] = strtolower($this->randomName(8));
+    $block['machine_name'] = $this->randomName(8);
     $block['theme'] = variable_get('theme_default', 'stark');
     $block['region'] = 'header';
-    $block = $this->drupalPlaceBlock('test_cache', array('region' => 'header'));
+    $this->drupalPost('admin/structure/block/manage/' . $block['id'] . '/' . $block['theme'], array('machine_name' => $block['machine_name'], 'region' => $block['region']), t('Save block'));
 
     // Our test block's caching should default to DRUPAL_CACHE_PER_ROLE.
-    $settings = $block->get('settings');
-    $this->assertEqual($settings['cache'], DRUPAL_CACHE_PER_ROLE, 'Test block cache mode defaults to DRUPAL_CACHE_PER_ROLE.');
+    $block['config_id'] = 'plugin.core.block.' . $block['theme'] . '.' . $block['machine_name'];
+    $instance = block_load($block['config_id']);
+    $config = $instance->getConfig();
+    $this->assertEqual($config['cache'], DRUPAL_CACHE_PER_ROLE, 'Test block cache mode defaults to DRUPAL_CACHE_PER_ROLE.');
 
     // Disable caching for this block.
-    $settings['cache'] = DRUPAL_NO_CACHE;
-    $block->set('settings', $settings);
-    $block->save();
+    $block_config = config($block['config_id']);
+    $block_config->set('cache', DRUPAL_NO_CACHE);
+    $block_config->save();
     // Flushing all caches should call _block_rehash().
     $this->resetAll();
     // Verify that block is updated with the new caching mode.
-    $block = entity_load('block', $block->id());
-    $settings = $block->get('settings');
-    $this->assertEqual($settings['cache'], DRUPAL_NO_CACHE, "Test block's database entry updated to DRUPAL_NO_CACHE.");
+    $instance = block_load($block['config_id']);
+    $config = $instance->getConfig();
+    $this->assertEqual($config['cache'], DRUPAL_NO_CACHE, "Test block's database entry updated to DRUPAL_NO_CACHE.");
   }
 
   /**
@@ -378,7 +399,7 @@ function testBlockModuleDisable() {
     }
     $this->drupalGet('');
     foreach ($regions as $region) {
-      $this->assertText($blocks[$region]->label());
+      $this->assertText($blocks[$region]['subject']);
     }
 
     // Disable the block test module and refresh the definitions cache.
@@ -394,7 +415,7 @@ function testBlockModuleDisable() {
 
     // Ensure that the disabled module's block instance is not listed.
     foreach ($regions as $region) {
-      $this->assertNoText($blocks[$region]->label());
+      $this->assertNoText($blocks[$region]['subject']);
     }
 
     // Ensure that the disabled module's block plugin is no longer available.
@@ -405,7 +426,7 @@ function testBlockModuleDisable() {
     $this->drupalGet('');
     $this->assertResponse(200);
     foreach ($regions as $region) {
-      $this->assertNoText($blocks[$region]->label());
+      $this->assertNoText($blocks[$region]['subject']);
     }
 
     // Confirm that a different block instance can still be enabled by
@@ -413,16 +434,16 @@ function testBlockModuleDisable() {
     // Emulate a POST submission rather than using drupalPlaceBlock() to ensure
     // that the form still functions as expected.
     $edit = array(
-      'label' => $this->randomName(8),
-      'machine_name' => strtolower($this->randomName(8)),
+      'title' => $this->randomName(8),
+      'machine_name' => $this->randomName(8),
       'region' => 'sidebar_first',
     );
-    $this->drupalPost('admin/structure/block/add/system_powered_by_block/stark', $edit, t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/system_powered_by_block/stark', $edit, t('Save block'));
     $this->assertText(t('The block configuration has been saved.'));
-    $this->assertText($edit['label']);
+    $this->assertText($edit['title']);
 
     // Update the weight of a block.
-    $edit = array('blocks[stark.' . $edit['machine_name'] . '][weight]' => -1);
+    $edit = array('blocks[0][weight]' => -1);
     $this->drupalPost('admin/structure/block', $edit, t('Save blocks'));
     $this->assertText(t('The block settings have been updated.'));
 
@@ -434,7 +455,7 @@ function testBlockModuleDisable() {
     // Reload the admin page and confirm the block can again be configured.
     $this->drupalGet('admin/structure/block');
     foreach ($regions as $region) {
-      $this->assertLinkByHref(url('admin/structure/block/manage/' . $blocks[$region]->id()));
+      $this->assertLinkByHref(url('admin/structure/block/manage/' . $blocks[$region]['config_id'] . '/stark/config'));
     }
 
     // Confirm that the blocks are again displayed on the front page in the
@@ -442,14 +463,14 @@ function testBlockModuleDisable() {
     $this->drupalGet('');
     foreach ($regions as $region) {
       // @todo Use a proper method for this.
-      $name_pieces = explode('.', $blocks[$region]->id());
+      $name_pieces = explode('.', $blocks[$region]['config_id']);
       $machine_name = array_pop($name_pieces);
       $xpath = $this->buildXPathQuery('//div[@class=:region-class]//div[@id=:block-id]/*', array(
         ':region-class' => 'region region-' . drupal_html_class($region),
         ':block-id' => 'block-' . strtr(strtolower($machine_name), '-', '_'),
     ));
       $this->assertFieldByXPath($xpath, NULL, format_string('Block %name found in the %region region.', array(
-        '%name' => $blocks[$region]->label(),
+        '%name' => $blocks[$region]['subject'],
         '%region' => $region,
       )));
     }
diff --git a/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php b/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php
index 190570c..d9be6f4 100644
--- a/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/NewDefaultThemeBlocksTest.php
@@ -56,8 +56,8 @@ function testNewDefaultThemeBlocks() {
     // Ensure that the new theme has all the blocks as the previous default.
     // @todo Replace the string manipulation below once the configuration
     //   system provides a method for extracting an ID in a given namespace.
-    $default_prefix = "block.block.$default_theme";
-    $new_prefix = "block.block.$new_theme";
+    $default_prefix = "plugin.core.block.$default_theme";
+    $new_prefix = "plugin.core.block.$new_theme";
     $default_block_names = config_get_storage_names_with_prefix($default_prefix);
     $new_blocks = array_flip(config_get_storage_names_with_prefix($new_prefix));
     $this->assertTrue(count($default_block_names) == count($new_blocks), 'The new default theme has the same number of blocks as the previous theme.');
@@ -65,8 +65,8 @@ function testNewDefaultThemeBlocks() {
       // Make sure the configuration object name is in the expected format.
       if (strpos($default_block_name, $default_prefix) === 0) {
         // Remove the matching block from the list of blocks in the new theme.
-        // E.g., if the old theme has block.block.stark.admin,
-        // unset block.block.bartik.admin.
+        // E.g., if the old theme has plugin.core.block.stark.admin,
+        // unset plugin.core.block.bartik.admin.
         $id = substr($default_block_name, (strlen($default_prefix) + 1));
         unset($new_blocks[$new_prefix . '.' . $id]);
       }
diff --git a/core/modules/block/tests/config/block.block.stark.test_block.yml b/core/modules/block/tests/config/block.block.stark.test_block.yml
deleted file mode 100644
index 7428765..0000000
--- a/core/modules/block/tests/config/block.block.stark.test_block.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-id: stark.test_block
-label: ''
-region: '-1'
-weight: ''
-module: block_test
-status: '1'
-visibility: {  }
-plugin: test_html_id
-settings:
-  cache: '1'
-  subject: 'Test block html id'
diff --git a/core/modules/block/tests/lib/Drupal/block_test/Plugin/block/block/TestCacheBlock.php b/core/modules/block/tests/lib/Drupal/block_test/Plugin/block/block/TestCacheBlock.php
index 6665e0d..aeb7709 100644
--- a/core/modules/block/tests/lib/Drupal/block_test/Plugin/block/block/TestCacheBlock.php
+++ b/core/modules/block/tests/lib/Drupal/block_test/Plugin/block/block/TestCacheBlock.php
@@ -23,20 +23,20 @@
 class TestCacheBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    *
    * Sets a different caching strategy for testing purposes.
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'cache' => DRUPAL_CACHE_PER_ROLE,
     );
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(
       '#children' => state()->get('block_test.content'),
     );
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index 248759f..99edfc5 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -250,14 +250,14 @@ function book_admin_paths() {
 }
 
 /**
- * Implements hook_entity_view_mode_info().
+ * Implements hook_entity_info().
  */
-function book_entity_view_mode_info() {
+function book_entity_info(&$info) {
   // Add the 'Print' view mode for nodes.
-  $view_modes['node']['print'] = array(
+  $info['node']['view_modes']['print'] = array(
     'label' => t('Print'),
+    'custom_settings' => FALSE,
   );
-  return $view_modes;
 }
 
 /**
@@ -425,7 +425,7 @@ function _book_add_form_elements(&$form, &$form_state, Node $node) {
     '#weight' => 10,
     '#collapsible' => TRUE,
     '#collapsed' => TRUE,
-    '#group' => 'advanced',
+    '#group' => 'additional_settings',
     '#attributes' => array(
       'class' => array('book-outline-form'),
     ),
diff --git a/core/modules/book/book.pages.inc b/core/modules/book/book.pages.inc
index f8ec0dc..5cf0bf7 100644
--- a/core/modules/book/book.pages.inc
+++ b/core/modules/book/book.pages.inc
@@ -86,6 +86,7 @@ function book_export($type, $nid) {
  */
 function book_export_html($nid) {
   if (user_access('access printer-friendly version')) {
+    $export_data = array();
     $node = node_load($nid);
     if (isset($node->book)) {
       $tree = book_menu_subtree_data($node->book);
diff --git a/core/modules/book/lib/Drupal/book/Plugin/block/block/BookNavigationBlock.php b/core/modules/book/lib/Drupal/book/Plugin/block/block/BookNavigationBlock.php
index bbce85c..c1823e1 100644
--- a/core/modules/book/lib/Drupal/book/Plugin/block/block/BookNavigationBlock.php
+++ b/core/modules/book/lib/Drupal/book/Plugin/block/block/BookNavigationBlock.php
@@ -23,9 +23,9 @@
 class BookNavigationBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'cache' => DRUPAL_CACHE_PER_PAGE | DRUPAL_CACHE_PER_ROLE,
       'block_mode' => "all pages",
@@ -59,9 +59,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $current_bid = 0;
     if ($node = menu_get_object()) {
       $current_bid = empty($node->book['bid']) ? 0 : $node->book['bid'];
diff --git a/core/modules/book/lib/Drupal/book/Tests/BookTest.php b/core/modules/book/lib/Drupal/book/Tests/BookTest.php
index 0a1ffcf..16c8ae3 100644
--- a/core/modules/book/lib/Drupal/book/Tests/BookTest.php
+++ b/core/modules/book/lib/Drupal/book/Tests/BookTest.php
@@ -321,7 +321,7 @@ function testBookNavigationBlock() {
     // Test correct display of the block.
     $nodes = $this->createBook();
     $this->drupalGet('<front>');
-    $this->assertText($block->label(), 'Book navigation block is displayed.');
+    $this->assertText($block['subject'], 'Book navigation block is displayed.');
     $this->assertText($this->book->label(), format_string('Link to book root (@title) is displayed.', array('@title' => $nodes[0]->label())));
     $this->assertNoText($nodes[0]->label(), 'No links to individual book pages are displayed.');
   }
@@ -331,7 +331,7 @@ function testBookNavigationBlock() {
    */
   function testNavigationBlockOnAccessModuleEnabled() {
     $this->drupalLogin($this->admin_user);
-    $block = $this->drupalPlaceBlock('book_navigation', array(), array('block_mode' => 'book pages'));
+    $block = $this->drupalPlaceBlock('book_navigation', array('book_block_mode' => 'book pages'));
 
     // Give anonymous users the permission 'node test view'.
     $edit = array();
@@ -345,16 +345,12 @@ function testNavigationBlockOnAccessModuleEnabled() {
     // Test correct display of the block to registered users.
     $this->drupalLogin($this->web_user);
     $this->drupalGet('node/' . $this->book->nid);
-    $this->assertText($block->label(), 'Book navigation block is displayed to registered users.');
+    $this->assertText($block['subject'], 'Book navigation block is displayed to registered users.');
     $this->drupalLogout();
 
     // Test correct display of the block to anonymous users.
     $this->drupalGet('node/' . $this->book->nid);
-    $this->assertText($block->label(), 'Book navigation block is displayed to anonymous users.');
-
-    // Test the 'book pages' block_mode setting.
-    $this->drupalGet('<front>');
-    $this->assertNoText($block->label(), 'Book navigation block is not shown on non-book pages.');
+    $this->assertText($block['subject'], 'Book navigation block is displayed to anonymous users.');
   }
 
   /**
diff --git a/core/modules/breakpoint/breakpoint.install b/core/modules/breakpoint/breakpoint.install
index cba7b1b..0e6bc30 100644
--- a/core/modules/breakpoint/breakpoint.install
+++ b/core/modules/breakpoint/breakpoint.install
@@ -18,5 +18,6 @@ function breakpoint_enable() {
   _breakpoint_theme_enabled(array_keys($themes));
 
   // Import breakpoints from modules.
-  _breakpoint_modules_enabled(array_keys(drupal_container()->get('module_handler')->getModuleList()));
+  $modules = module_list();
+  _breakpoint_modules_enabled(array_keys($modules));
 }
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 554b635..9cb4ebf 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -99,22 +99,11 @@ function comment_help($path, $arg) {
 }
 
 /**
- * Implements hook_entity_view_mode_info().
+ * Implements hook_entity_info().
  */
-function comment_entity_view_mode_info() {
-  $view_modes['comment']['full'] = array(
-    'label' => t('Full comment'),
-  );
-  return $view_modes;
-}
-
-/**
- * Implements hook_entity_bundle_info().
- */
-function comment_entity_bundle_info() {
-  $bundles = array();
+function comment_entity_info(&$info) {
   foreach (node_type_get_names() as $type => $name) {
-    $bundles['comment']['comment_node_' . $type] = array(
+    $info['comment']['bundles']['comment_node_' . $type] = array(
       'label' => t('@node_type comment', array('@node_type' => $name)),
       // Provide the node type/bundle name for other modules, so it does not
       // have to be extracted manually from the bundle name.
@@ -129,10 +118,10 @@ function comment_entity_bundle_info() {
         'path' => 'admin/structure/types/manage/%comment_node_type/comment',
         'bundle argument' => 4,
         'real path' => 'admin/structure/types/manage/' . $type . '/comment',
+        'access arguments' => array('administer content types'),
       ),
     );
   }
-  return $bundles;
 }
 
 /**
@@ -301,7 +290,7 @@ function comment_menu_alter(&$items) {
   $items['admin/content']['description'] = 'Administer content and comments.';
 
   // Adjust the Field UI tabs on admin/structure/types/manage/[node-type].
-  // See comment_entity_bundle_info().
+  // See comment_entity_info().
   $items['admin/structure/types/manage/%comment_node_type/comment/fields']['title'] = 'Comment fields';
   $items['admin/structure/types/manage/%comment_node_type/comment/fields']['weight'] = 3;
   $items['admin/structure/types/manage/%comment_node_type/comment/display']['title'] = 'Comment display';
@@ -1126,7 +1115,7 @@ function comment_form_node_form_alter(&$form, $form_state) {
     '#title' => t('Comment settings'),
     '#collapsible' => TRUE,
     '#collapsed' => TRUE,
-    '#group' => 'advanced',
+    '#group' => 'additional_settings',
     '#attributes' => array(
       'class' => array('comment-node-settings-form'),
     ),
@@ -1401,7 +1390,7 @@ function comment_delete_multiple($cids) {
  *   (optional) An array of entity IDs. If omitted, all entities are loaded.
  * @param bool $reset
  *   Whether to reset the internal static entity cache. Note that the static
- *   cache is disabled by default.
+ *   cache is disabled in comment_entity_info() by default.
  *
  * @return array
  *   An array of comment objects, indexed by comment ID.
@@ -1420,7 +1409,7 @@ function comment_load_multiple(array $cids = NULL, $reset = FALSE) {
  *   The ID of the comment to be loaded.
  * @param bool $reset
  *   Whether to reset the internal static entity cache. Note that the static
- *   cache is disabled by default.
+ *   cache is disabled in comment_entity_info() by default.
  *
  * @return
  *   The comment object.
diff --git a/core/modules/comment/comment.views.inc b/core/modules/comment/comment.views.inc
index f7ce2f9..e534854 100644
--- a/core/modules/comment/comment.views.inc
+++ b/core/modules/comment/comment.views.inc
@@ -32,6 +32,7 @@ function comment_views_data() {
     'help' => t('The title of the comment.'),
     'field' => array(
       'id' => 'comment',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'string',
@@ -50,6 +51,7 @@ function comment_views_data() {
     'help' => t('The comment ID of the field'),
     'field' => array(
       'id' => 'comment',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'numeric',
@@ -68,6 +70,7 @@ function comment_views_data() {
     'help' => t("The name of the comment's author. Can be rendered as a link to the author's homepage."),
     'field' => array(
       'id' => 'comment_username',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'string',
@@ -86,6 +89,7 @@ function comment_views_data() {
     'help' => t("The website address of the comment's author. Can be rendered as a link. Will be empty if the author is a registered user."),
     'field' => array(
       'id' => 'url',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'string',
@@ -104,6 +108,7 @@ function comment_views_data() {
     'help' => t('Hostname of user that posted the comment.'),
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE,
      ),
     'filter' => array(
       'id' => 'string',
@@ -122,6 +127,7 @@ function comment_views_data() {
     'help' => t('Email of user that posted the comment. Will be empty if the author is a registered user.'),
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE,
      ),
     'filter' => array(
       'id' => 'string',
@@ -140,6 +146,7 @@ function comment_views_data() {
     'help' => t('Date and time of when the comment was created.'),
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date',
@@ -156,6 +163,7 @@ function comment_views_data() {
       'help' => t('The language the comment is in.'),
       'field' => array(
         'id' => 'language',
+        'click sortable' => TRUE,
       ),
       'filter' => array(
         'id' => 'language',
@@ -175,6 +183,7 @@ function comment_views_data() {
     'help' => t('Date and time of when the comment was last updated.'),
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date',
@@ -244,6 +253,7 @@ function comment_views_data() {
     'help' => t('Whether the comment is approved (or still in the moderation queue).'),
     'field' => array(
       'id' => 'boolean',
+      'click sortable' => TRUE,
       'output formats' => array(
         'approved-not-approved' => array(t('Approved'), t('Not Approved')),
       ),
@@ -397,6 +407,7 @@ function comment_views_data() {
     'help' => t('Date and time of when the last comment was posted.'),
     'field' => array(
       'id' => 'comment_last_timestamp',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date',
@@ -412,6 +423,7 @@ function comment_views_data() {
     'help' => t('The name of the author of the last posted comment.'),
     'field' => array(
       'id' => 'comment_ncs_last_comment_name',
+      'click sortable' => TRUE,
       'no group by' => TRUE,
     ),
     'sort' => array(
@@ -426,6 +438,7 @@ function comment_views_data() {
     'help' => t('The number of comments a node has.'),
     'field' => array(
       'id' => 'numeric',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'numeric',
@@ -444,6 +457,7 @@ function comment_views_data() {
     'help' => t('The most recent of last comment posted or node updated time.'),
     'field' => array(
       'id' => 'comment_ncs_last_updated',
+      'click sortable' => TRUE,
       'no group by' => TRUE,
     ),
     'sort' => array(
@@ -523,6 +537,7 @@ function comment_views_data_alter(&$data) {
     'help' => t('Whether comments are enabled or disabled on the node.'),
     'field' => array(
       'id' => 'node_comment',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
diff --git a/core/modules/comment/lib/Drupal/comment/CommentStorageController.php b/core/modules/comment/lib/Drupal/comment/CommentStorageController.php
index dea2d36..4c91741 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentStorageController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentStorageController.php
@@ -55,11 +55,24 @@ protected function attachLoad(&$records, $load_revision = FALSE) {
    * Overrides Drupal\Core\Entity\DatabaseStorageControllerNG::create().
    */
   public function create(array $values) {
+    // We have to determine the bundle first.
     if (empty($values['node_type']) && !empty($values['nid'])) {
       $node = node_load($values['nid']);
       $values['node_type'] = 'comment_node_' . $node->type;
     }
-    return parent::create($values);
+    $comment = new $this->entityClass(array(), $this->entityType, $values['node_type']);
+
+    // Set all other given values.
+    foreach ($values as $name => $value) {
+      $comment->$name = $value;
+    }
+
+    // Assign a new UUID if there is none yet.
+    if ($this->uuidKey && !isset($comment->{$this->uuidKey})) {
+      $uuid = new Uuid();
+      $comment->{$this->uuidKey}->value = $uuid->generate();
+    }
+    return $comment;
   }
 
   /**
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
index 9493488..c6175af 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/Core/Entity/Comment.php
@@ -35,6 +35,12 @@
  *     "bundle" = "node_type",
  *     "label" = "subject",
  *     "uuid" = "uuid"
+ *   },
+ *   view_modes = {
+ *     "full" = {
+ *       "label" = "Full comment",
+ *       "custom_settings" = FALSE
+ *     }
  *   }
  * )
  */
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/block/block/RecentCommentsBlock.php b/core/modules/comment/lib/Drupal/comment/Plugin/block/block/RecentCommentsBlock.php
index 7920a68..d5c3d7b 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/block/block/RecentCommentsBlock.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/block/block/RecentCommentsBlock.php
@@ -23,9 +23,9 @@
 class RecentCommentsBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'block_count' => 10,
     );
@@ -59,9 +59,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(
       '#theme' => 'comment_block',
       '#number' => $this->configuration['block_count'],
diff --git a/core/modules/comment/lib/Drupal/comment/Plugin/views/row/Rss.php b/core/modules/comment/lib/Drupal/comment/Plugin/views/row/Rss.php
index 96809ef..3afa802 100644
--- a/core/modules/comment/lib/Drupal/comment/Plugin/views/row/Rss.php
+++ b/core/modules/comment/lib/Drupal/comment/Plugin/views/row/Rss.php
@@ -77,10 +77,12 @@ function pre_render($result) {
    * in views_plugin_row_comment|node_rss.inc
    */
   function options_form_summary_options() {
-    $view_modes = entity_get_view_modes('node');
+    $entity_info = entity_get_info('node');
     $options = array();
-    foreach ($view_modes as $mode => $settings) {
-      $options[$mode] = $settings['label'];
+    if (!empty($entity_info['view_modes'])) {
+      foreach ($entity_info['view_modes'] as $mode => $settings) {
+        $options[$mode] = $settings['label'];
+      }
     }
     $options['title'] = t('Title only');
     $options['default'] = t('Use site default RSS settings');
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php
index 901d325..8b4e842 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentBlockTest.php
@@ -46,7 +46,7 @@ public static function getInfo() {
    */
   function testRecentCommentBlock() {
     $this->drupalLogin($this->admin_user);
-    $block = $this->drupalPlaceBlock('recent_comments', array(), array('block_count' => 2));
+    $block = $this->drupalPlaceBlock('recent_comments', array('block_count' => 2));
 
     // Add some test comments, one without a subject.
     $comment1 = $this->postComment($this->node, $this->randomName(), $this->randomName());
@@ -61,15 +61,14 @@ function testRecentCommentBlock() {
     // posting a node from a node form.
     cache_invalidate_tags(array('content' => TRUE));
     $this->drupalGet('');
-    $label = $block->label();
-    $this->assertNoText($label, 'Block was not found.');
+    $this->assertNoText($block['subject'], 'Block was not found.');
     user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access comments'));
 
     // Test that a user with the 'access comments' permission can see the
     // block.
     $this->drupalLogin($this->web_user);
     $this->drupalGet('');
-    $this->assertText($label, 'Block was found.');
+    $this->assertText($block['subject'], 'Block was found.');
 
     // Test the only the 2 latest comments are shown and in the proper order.
     $this->assertNoText($comment1->subject->value, 'Comment not found in block.');
@@ -78,8 +77,15 @@ function testRecentCommentBlock() {
     $this->assertTrue(strpos($this->drupalGetContent(), $comment3->comment_body->value) < strpos($this->drupalGetContent(), $comment2->subject->value), 'Comments were ordered correctly in block.');
 
     // Set the number of recent comments to show to 10.
-    $block->set('settings', array('block_count' => 10));
-    $block->save();
+    $this->drupalLogout();
+    $this->drupalLogin($this->admin_user);
+    $edit = array(
+      'block_count' => 10,
+    );
+    $current_theme = variable_get('theme_default', 'stark');
+
+    $this->drupalPost('admin/structure/block/manage/' . $block['config_id'] . '/' . variable_get('theme_default', 'stark') . '/configure', $edit, t('Save block'));
+    $this->assertText(t('The block configuration has been saved.'), 'Block saved.');
 
     // Post an additional comment.
     $comment4 = $this->postComment($this->node, $this->randomName(), $this->randomName());
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php
index a29db8c..ab03d41 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentFieldsTest.php
@@ -72,23 +72,25 @@ function testCommentEnable() {
     $edit = array();
     $edit['modules[Core][comment][enable]'] = FALSE;
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->rebuildContainer();
+    $this->resetAll();
     $this->assertFalse(module_exists('comment'), 'Comment module disabled.');
 
-    // Enable core content type module (book).
+    // Enable core content type modules (book, and poll).
     $edit = array();
     $edit['modules[Core][book][enable]'] = 'book';
+    $edit['modules[Core][poll][enable]'] = 'poll';
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
 
     // Now enable the comment module.
     $edit = array();
     $edit['modules[Core][comment][enable]'] = 'comment';
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->rebuildContainer();
+    $this->resetAll();
     $this->assertTrue(module_exists('comment'), 'Comment module enabled.');
 
     // Create nodes of each type.
     $book_node = $this->drupalCreateNode(array('type' => 'book'));
+    $poll_node = $this->drupalCreateNode(array('type' => 'poll', 'active' => 1, 'runtime' => 0, 'choice' => array(array('chtext' => ''))));
 
     $this->drupalLogout();
 
@@ -98,6 +100,7 @@ function testCommentEnable() {
     $this->web_user = $this->drupalCreateUser(array('access content', 'access comments', 'post comments', 'skip comment approval'));
     $this->drupalLogin($this->web_user);
     $this->postComment($book_node, $this->randomName(), $this->randomName());
+    $this->postComment($poll_node, $this->randomName(), $this->randomName());
   }
 
   /**
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php
index 91cab48..d049aa3 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php
@@ -39,7 +39,7 @@ function testCommentLinks() {
 
     // Remove additional user permissions from $this->web_user added by setUp(),
     // since this test is limited to anonymous and authenticated roles only.
-    entity_delete_multiple('user_role', array(key($this->web_user->roles)));
+    user_role_delete(key($this->web_user->roles));
 
     // Matrix of possible environmental conditions and configuration settings.
     // See setEnvironment() for details.
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php
index 253136e..30ebbf6 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php
@@ -20,7 +20,7 @@
    *
    * @var array
    */
-  public static $modules = array('comment', 'node', 'history', 'field_ui');
+  public static $modules = array('comment', 'node', 'history');
 
   /**
    * An administrative user with permission to configure comment settings.
@@ -57,7 +57,6 @@ function setUp() {
     $this->admin_user = $this->drupalCreateUser(array(
       'administer content types',
       'administer comments',
-      'administer comment fields',
       'skip comment approval',
       'post comments',
       'access comments',
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/Views/WizardTest.php b/core/modules/comment/lib/Drupal/comment/Tests/Views/WizardTest.php
index f84cf64..02a6d23 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/Views/WizardTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/Views/WizardTest.php
@@ -38,7 +38,7 @@ public static function getInfo() {
   public function testCommentWizard() {
     $view = array();
     $view['human_name'] = $this->randomName(16);
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $view['show[wizard_key]'] = 'comment';
     $view['page[create]'] = TRUE;
     $view['page[path]'] = $this->randomName(16);
@@ -46,7 +46,7 @@ public function testCommentWizard() {
     // Just triggering the saving should automatically choose a proper row
     // plugin.
     $this->drupalPost('admin/structure/views/add', $view, t('Save and edit'));
-    $this->assertUrl('admin/structure/views/view/' . $view['id'], array(), 'Make sure the view saving was successful and the browser got redirected to the edit page.');
+    $this->assertUrl('admin/structure/views/view/' . $view['name'], array(), 'Make sure the view saving was successful and the browser got redirected to the edit page.');
 
     // If we update the type first we should get a selection of comment valid
     // row plugins as the select field.
@@ -67,11 +67,11 @@ public function testCommentWizard() {
     $expected_options = array('comment', 'fields');
     $this->assertEqual($options, $expected_options);
 
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $this->drupalPost(NULL, $view, t('Save and edit'));
-    $this->assertUrl('admin/structure/views/view/' . $view['id'], array(), 'Make sure the view saving was successful and the browser got redirected to the edit page.');
+    $this->assertUrl('admin/structure/views/view/' . $view['name'], array(), 'Make sure the view saving was successful and the browser got redirected to the edit page.');
 
-    $view = views_get_view($view['id']);
+    $view = views_get_view($view['name']);
     $view->initHandlers();
     $row = $view->display_handler->getOption('row');
     $this->assertEqual($row['type'], 'comment');
diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml
index 249fa76..3dc8c4d 100644
--- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml
+++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_rss.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_field: cid
 base_table: comment
 core: 8.x
@@ -59,6 +60,6 @@ display:
       path: test-comment-rss
 human_name: test_comment_rss
 module: views
-id: test_comment_rss
+name: test_comment_rss
 tag: ''
 uuid: 9b1b1e58-d41b-468a-9d04-4e6bde742c29
diff --git a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_user_uid.yml b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_user_uid.yml
index c3ef2e4..4dca1cd 100644
--- a/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_user_uid.yml
+++ b/core/modules/comment/tests/modules/comment_test_views/test_views/views.view.test_comment_user_uid.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -43,5 +44,5 @@ display:
     id: default
     position: '0'
 human_name: test_comment_user_uid
-id: test_comment_user_uid
+name: test_comment_user_uid
 tag: default
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityListTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityListTest.php
index f19c03d..13f5a76 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityListTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityListTest.php
@@ -35,8 +35,7 @@ public static function getInfo() {
    * Tests entity list controller methods.
    */
   function testList() {
-    $controller = $this->container->get('plugin.manager.entity')
-      ->getListController('config_test');
+    $controller = entity_list_controller('config_test');
 
     // Test getStorageController() method.
     $this->assertTrue($controller->getStorageController() instanceof EntityStorageControllerInterface, 'EntityStorageController instance in storage.');
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php
index e93b79f..efcbf0e 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityTest.php
@@ -175,11 +175,6 @@ function testCRUD() {
       $this->assertIdentical($config_test->id(), $new_id);
       $this->assertIdentical($config_test->getOriginalID(), $new_id);
     }
-
-    // Test config entity prepopulation.
-    state()->set('config_test.prepopulate', TRUE);
-    $config_test = entity_create('config_test', array('foo' => 'bar'));
-    $this->assertEqual($config_test->get('foo'), 'baz', 'Initial value correctly populated');
   }
 
   /**
diff --git a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php
index 32a198a..d64c73a 100644
--- a/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php
+++ b/core/modules/config/lib/Drupal/config/Tests/ConfigEntityUnitTest.php
@@ -33,7 +33,7 @@ public static function getInfo() {
    * Tests storage controller methods.
    */
   public function testStorageControllerMethods() {
-    $controller = $this->container->get('plugin.manager.entity')->getStorageController('config_test');
+    $controller = entity_get_controller('config_test');
     $info = entity_get_info('config_test');
 
     $expected = $info['config_prefix'] . '.';
diff --git a/core/modules/config/tests/config_test/config_test.module b/core/modules/config/tests/config_test/config_test.module
index 67c3056..5dbcb92 100644
--- a/core/modules/config/tests/config_test/config_test.module
+++ b/core/modules/config/tests/config_test/config_test.module
@@ -71,9 +71,8 @@ function config_test_load($id) {
  * Page callback; Lists available ConfigTest objects.
  */
 function config_test_list_page() {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getListController('config_test')
-    ->render();
+  $controller = entity_list_controller('config_test');
+  return $controller->render();
 }
 
 /**
@@ -137,12 +136,3 @@ function config_test_cache_flush() {
 
   return array();
 }
-
-/**
- * Implements hook_ENTITY_TYPE_create().
- */
-function config_test_config_test_create(ConfigTest $config_test) {
-  if (state()->get('config_test.prepopulate')) {
-    $config_test->set('foo', 'baz');
-  }
-}
diff --git a/core/modules/contact/contact.admin.inc b/core/modules/contact/contact.admin.inc
index bc706c3..a3e63f6 100644
--- a/core/modules/contact/contact.admin.inc
+++ b/core/modules/contact/contact.admin.inc
@@ -17,9 +17,7 @@
  */
 function contact_category_list() {
   drupal_set_title(t('Contact form categories'));
-  return drupal_container()->get('plugin.manager.entity')
-    ->getListController('contact_category')
-    ->render();
+  return entity_list_controller('contact_category')->render();
 }
 
 /**
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index 2686b80..44a6f5a 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -174,13 +174,12 @@ function _contact_personal_tab_access($account) {
 }
 
 /**
- * Implements hook_entity_bundle_info().
+ * Implements hook_entity_info().
  */
-function contact_entity_bundle_info() {
-  $bundles = array();
+function contact_entity_info(&$types) {
   foreach (config_get_storage_names_with_prefix('contact.category.') as $config_name) {
     $config = config($config_name);
-    $bundles['contact_message'][$config->get('id')] = array(
+    $types['contact_message']['bundles'][$config->get('id')] = array(
       'label' => $config->get('label'),
       'admin' => array(
         'path' => 'admin/structure/contact/manage/%contact_category',
@@ -190,7 +189,6 @@ function contact_entity_bundle_info() {
       ),
     );
   }
-  return $bundles;
 }
 
 /**
@@ -198,7 +196,8 @@ function contact_entity_bundle_info() {
  */
 function contact_field_extra_fields() {
   $fields = array();
-  foreach (array_keys(entity_get_bundles('contact_message')) as $bundle) {
+  $entity_info = entity_get_info('contact_message');
+  foreach (array_keys($entity_info['bundles']) as $bundle) {
     $fields['contact_message'][$bundle]['form']['name'] = array(
       'label' => t('Sender name'),
       'description' => t('Text'),
diff --git a/core/modules/dblog/lib/Drupal/dblog/Tests/DBLogTest.php b/core/modules/dblog/lib/Drupal/dblog/Tests/DBLogTest.php
index 1769605..ddfcac4 100644
--- a/core/modules/dblog/lib/Drupal/dblog/Tests/DBLogTest.php
+++ b/core/modules/dblog/lib/Drupal/dblog/Tests/DBLogTest.php
@@ -20,7 +20,7 @@ class DBLogTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('dblog', 'node', 'forum', 'help');
+  public static $modules = array('dblog', 'node', 'poll', 'help');
 
   /**
    * A user with some relevent administrative permissions.
@@ -202,7 +202,7 @@ private function verifyEvents() {
     $this->drupalCreateContentType(array('type' => 'page', 'name' => t('Basic page')));
     $this->doNode('article');
     $this->doNode('page');
-    $this->doNode('forum');
+    $this->doNode('poll');
 
     // When a user account is canceled, any content they created remains but the
     // uid = 0. Records in the watchdog table related to that user have the uid
@@ -297,7 +297,7 @@ private function doUser() {
    * Generates and then verifies some node events.
    *
    * @param string $type
-   *   A node type (e.g., 'article', 'page' or 'forum').
+   *   A node type (e.g., 'article', 'page' or 'poll').
    */
   private function doNode($type) {
     // Create user.
@@ -369,11 +369,11 @@ private function doNode($type) {
   private function getContent($type) {
     $langcode = LANGUAGE_NOT_SPECIFIED;
     switch ($type) {
-      case 'forum':
+      case 'poll':
         $content = array(
           "title" => $this->randomName(8),
-          "taxonomy_forums[$langcode]" => array(1),
-          "body[$langcode][0][value]" => $this->randomName(32),
+          'choice[new:0][chtext]' => $this->randomName(32),
+          'choice[new:1][chtext]' => $this->randomName(32),
         );
       break;
 
@@ -397,10 +397,21 @@ private function getContent($type) {
    *   Random content needed by various node types.
    */
   private function getContentUpdate($type) {
-    $langcode = LANGUAGE_NOT_SPECIFIED;
-    $content = array(
-      "body[$langcode][0][value]" => $this->randomName(32),
-    );
+    switch ($type) {
+      case 'poll':
+        $content = array(
+          'choice[chid:1][chtext]' => $this->randomName(32),
+          'choice[chid:2][chtext]' => $this->randomName(32),
+        );
+      break;
+
+      default:
+        $langcode = LANGUAGE_NOT_SPECIFIED;
+        $content = array(
+          "body[$langcode][0][value]" => $this->randomName(32),
+        );
+      break;
+    }
     return $content;
   }
 
diff --git a/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php b/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
index 3ec8ce2..29a01cb 100644
--- a/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
+++ b/core/modules/edit/lib/Drupal/edit/MetadataGenerator.php
@@ -80,7 +80,7 @@ public function generate(EntityInterface $entity, FieldInstance $instance, $lang
     $label = $instance['label'];
     $editor = $this->editorManager->createInstance($editor_id);
     $metadata = array(
-      'label' => check_plain($label),
+      'label' => $label,
       'access' => TRUE,
       'editor' => $editor_id,
       'aria' => t('Entity @type @id, field @field', array('@type' => $entity->entityType(), '@id' => $entity->id(), '@field' => $label)),
diff --git a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
index a8cec27..17bc891 100644
--- a/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
+++ b/core/modules/edit/lib/Drupal/edit/Tests/MetadataGeneratorTest.php
@@ -125,8 +125,7 @@ function testSimpleEntityType() {
   }
 
   function testEditorWithCustomMetadata() {
-    $this->installSchema('system', 'url_alias');
-    $this->enableModules(array('user', 'filter'));
+    $this->enableModules(array('filter'));
 
     // Enable edit_test module so that the WYSIWYG Create.js PropertyEditor
     // widget becomes available.
@@ -148,15 +147,16 @@ function testEditorWithCustomMetadata() {
     );
 
     // Create a text format.
-    $full_html_format = entity_create('filter_format', array(
+    $full_html_format = array(
       'format' => 'full_html',
       'name' => 'Full HTML',
       'weight' => 1,
       'filters' => array(
         'filter_htmlcorrector' => array('status' => 1),
       ),
-    ));
-    $full_html_format->save();
+    );
+    $full_html_format = (object) $full_html_format;
+    filter_format_save($full_html_format);
 
     // Create an entity with values for this rich text field.
     $this->entity = field_test_create_entity();
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
index f3b834a..19a0d9e 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditorAdminTest.php
@@ -32,14 +32,15 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    // Add text format.
-    $filtered_html_format = entity_create('filter_format', array(
+   // Add text format.
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
       'weight' => 0,
       'filters' => array(),
-    ));
-    $filtered_html_format->save();
+    );
+    $filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($filtered_html_format);
 
     // Create admin user.
     $this->admin_user = $this->drupalCreateUser(array('administer filters'));
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditorLoadingTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditorLoadingTest.php
index 755c2c0..81a3588 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditorLoadingTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditorLoadingTest.php
@@ -32,21 +32,23 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    // Add text formats.
-    $filtered_html_format = entity_create('filter_format', array(
+   // Add text formats.
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
       'weight' => 0,
       'filters' => array(),
-    ));
-    $filtered_html_format->save();
-    $full_html_format = entity_create('filter_format', array(
+    );
+    $filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($filtered_html_format);
+    $full_html_format = array(
       'format' => 'full_html',
       'name' => 'Full HTML',
       'weight' => 1,
       'filters' => array(),
-    ));
-    $full_html_format->save();
+    );
+    $full_html_format = (object) $full_html_format;
+    filter_format_save($full_html_format);
 
     // Create node type.
     $this->drupalCreateContentType(array(
diff --git a/core/modules/editor/lib/Drupal/editor/Tests/EditorManagerTest.php b/core/modules/editor/lib/Drupal/editor/Tests/EditorManagerTest.php
index f85f176..d01a7af 100644
--- a/core/modules/editor/lib/Drupal/editor/Tests/EditorManagerTest.php
+++ b/core/modules/editor/lib/Drupal/editor/Tests/EditorManagerTest.php
@@ -21,7 +21,7 @@ class EditorManagerTest extends DrupalUnitTestBase {
    *
    * @var array
    */
-  public static $modules = array('system', 'editor');
+  public static $modules = array('filter', 'editor');
 
   /**
    * The manager for text editor plugins.
@@ -42,24 +42,25 @@ function setUp() {
     parent::setUp();
 
     // Install the Filter module.
-    $this->installSchema('system', 'url_alias');
-    $this->enableModules(array('user', 'filter'));
+    $this->enableModules(array('filter'));
 
     // Add text formats.
-    $filtered_html_format = entity_create('filter_format', array(
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
       'weight' => 0,
       'filters' => array(),
-    ));
-    $filtered_html_format->save();
-    $full_html_format = entity_create('filter_format', array(
+    );
+    $filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($filtered_html_format);
+    $full_html_format = array(
       'format' => 'full_html',
       'name' => 'Full HTML',
       'weight' => 1,
       'filters' => array(),
-    ));
-    $full_html_format->save();
+    );
+    $full_html_format = (object) $full_html_format;
+    filter_format_save($full_html_format);
   }
 
   /**
diff --git a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
index 6d213f6..8b0ce69 100644
--- a/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
+++ b/core/modules/entity/lib/Drupal/entity/Tests/EntityDisplayTest.php
@@ -14,7 +14,7 @@
  */
 class EntityDisplayTest extends DrupalUnitTestBase {
 
-  public static $modules = array('entity', 'field', 'entity_test');
+  public static $modules = array('entity_test');
 
   public static function getInfo() {
     return array(
@@ -27,7 +27,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('field'));
+    $this->enableModules(array('system', 'entity', 'field'));
   }
 
   /**
diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 31bd918..27304f4 100644
--- a/core/modules/field/field.api.php
+++ b/core/modules/field/field.api.php
@@ -12,8 +12,9 @@
  * Exposes "pseudo-field" components on fieldable entities.
  *
  * Field UI's "Manage fields" and "Manage display" pages let users re-order
- * fields, but also non-field components. For nodes, these include the title
- * and other elements exposed by modules through hook_form() or hook_form_alter().
+ * fields, but also non-field components. For nodes, these include the title,
+ * poll choices, and other elements exposed by modules through hook_form() or
+ * hook_form_alter().
  *
  * Fieldable entities or modules that want to have their components supported
  * should expose them using this hook. The user-defined settings (weight,
@@ -37,40 +38,32 @@
  *     context.
  */
 function hook_field_extra_fields() {
-  $extra = array();
-  $module_language_enabled = module_exists('language');
-  $description = t('Node module element');
-
-  foreach (node_type_get_types() as $bundle) {
-    if ($bundle->has_title) {
-      $extra['node'][$bundle->type]['form']['title'] = array(
-        'label' => $bundle->title_label,
-        'description' => $description,
-        'weight' => -5,
-      );
-    }
-
-    // Add also the 'language' select if Language module is enabled and the
-    // bundle has multilingual support.
-    // Visibility of the ordering of the language selector is the same as on the
-    // node/add form.
-    if ($module_language_enabled) {
-      $configuration = language_get_default_configuration('node', $bundle->type);
-      if ($configuration['language_show']) {
-        $extra['node'][$bundle->type]['form']['language'] = array(
-          'label' => t('Language'),
-          'description' => $description,
-          'weight' => 0,
-        );
-      }
-    }
-    $extra['node'][$bundle->type]['display']['language'] = array(
-      'label' => t('Language'),
-      'description' => $description,
-      'weight' => 0,
-      'visible' => FALSE,
-    );
-  }
+  $extra['node']['poll'] = array(
+    'form' => array(
+      'choice_wrapper' => array(
+        'label' => t('Poll choices'),
+        'description' => t('Poll choices'),
+        'weight' => -4,
+      ),
+      'settings' => array(
+        'label' => t('Poll settings'),
+        'description' => t('Poll module settings'),
+        'weight' => -3,
+      ),
+    ),
+    'display' => array(
+      'poll_view_voting' => array(
+        'label' => t('Poll vote'),
+        'description' => t('Poll vote'),
+        'weight' => 0,
+      ),
+      'poll_view_results' => array(
+        'label' => t('Poll results'),
+        'description' => t('Poll results'),
+        'weight' => 0,
+      ),
+    )
+  );
 
   return $extra;
 }
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index b422b47..688d611 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -276,6 +276,31 @@ function field_info_storage_types($storage_type = NULL) {
 }
 
 /**
+ * Returns information about existing bundles.
+ *
+ * @param $entity_type
+ *   The type of entity; e.g. 'node' or 'user'.
+ *
+ * @return
+ *   An array of bundles for the $entity_type keyed by bundle name, or, if no
+ *   $entity_type was provided, the array of all existing bundles, keyed by
+ *   entity type.
+ */
+function field_info_bundles($entity_type = NULL) {
+  $info = entity_get_info();
+
+  if ($entity_type) {
+    return isset($info[$entity_type]['bundles']) ? $info[$entity_type]['bundles'] : array();
+  }
+
+  $bundles = array();
+  foreach ($info as $type => $entity_info) {
+    $bundles[$type] = $entity_info['bundles'];
+  }
+  return $bundles;
+}
+
+/**
  * Returns all field definitions.
  *
  * Use of this function should be avoided when possible, since it loads and
diff --git a/core/modules/field/field.module b/core/modules/field/field.module
index 7673ea7..e30f16a 100644
--- a/core/modules/field/field.module
+++ b/core/modules/field/field.module
@@ -541,7 +541,7 @@ function field_modules_disabled($modules) {
 function field_sync_field_status() {
   // Refresh the 'active' and 'storage_active' columns according to the current
   // set of enabled modules.
-  $modules = array_keys(drupal_container()->get('module_handler')->getModuleList());
+  $modules = module_list();
   foreach ($modules as $module_name) {
     field_associate_fields($module_name);
   }
@@ -746,8 +746,8 @@ function field_view_mode_settings($entity_type, $bundle) {
     // Include view modes for which nothing has been stored yet, but whose
     // definition in hook_entity_info_alter() specify they should use custom
     // settings by default.
-    $view_modes = entity_get_view_modes($entity_type);
-    foreach ($view_modes as $view_mode => $view_mode_info) {
+    $entity_info = entity_get_info($entity_type);
+    foreach ($entity_info['view_modes'] as $view_mode => $view_mode_info) {
       if (!isset($settings[$view_mode]['custom_settings']) && $view_mode_info['custom_settings']) {
         $settings[$view_mode]['custom_settings'] = TRUE;
       }
diff --git a/core/modules/field/field.views.inc b/core/modules/field/field.views.inc
index 6c769cd..2c5d5db 100644
--- a/core/modules/field/field.views.inc
+++ b/core/modules/field/field.views.inc
@@ -242,6 +242,7 @@ function field_views_field_default_views_data($field) {
     $data[$table][$column]['field'] = array(
       'table' => $table,
       'id' => 'field',
+      'click sortable' => TRUE,
       'field_name' => $field['field_name'],
       // Provide a real field for group by.
       'real field' => $column . '_' . $real_field,
diff --git a/core/modules/field/lib/Drupal/field/Tests/FormTest.php b/core/modules/field/lib/Drupal/field/Tests/FormTest.php
index 2f5dbee..77ac613 100644
--- a/core/modules/field/lib/Drupal/field/Tests/FormTest.php
+++ b/core/modules/field/lib/Drupal/field/Tests/FormTest.php
@@ -100,7 +100,7 @@ function testFieldFormSingle() {
     $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
     $this->drupalPost(NULL, $edit, t('Save'));
     $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+    entity_get_controller('test_entity')->resetCache(array($id));
     $entity = field_test_entity_test_load($id);
     $this->assertEqual($entity->{$this->field_name}[$langcode][0]['value'], $value, 'Field value was updated');
 
@@ -109,7 +109,7 @@ function testFieldFormSingle() {
     $edit = array("{$this->field_name}[$langcode][0][value]" => $value);
     $this->drupalPost('test-entity/manage/' . $id . '/edit', $edit, t('Save'));
     $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+    entity_get_controller('test_entity')->resetCache(array($id));
     $entity = field_test_entity_test_load($id);
     $this->assertIdentical($entity->{$this->field_name}, array(), 'Field was emptied');
   }
@@ -458,7 +458,7 @@ function testFieldFormAccess() {
     $this->drupalPost('test-entity/manage/' . $id . '/edit', $edit, t('Save'));
 
     // Check that the new revision has the expected values.
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+    entity_get_controller('test_entity')->resetCache(array($id));
     $entity = field_test_entity_test_load($id);
     $this->assertEqual($entity->{$field_name_no_access}[$langcode][0]['value'], 99, 'New revision has the expected value for the field with no edit access.');
     $this->assertEqual($entity->{$field_name}[$langcode][0]['value'], 2, 'New revision has the expected value for the field with edit access.');
diff --git a/core/modules/field/tests/modules/field_test/field_test.entity.inc b/core/modules/field/tests/modules/field_test/field_test.entity.inc
index 1f8bd4b..aeb1634 100644
--- a/core/modules/field/tests/modules/field_test/field_test.entity.inc
+++ b/core/modules/field/tests/modules/field_test/field_test.entity.inc
@@ -19,17 +19,8 @@ function field_test_entity_info_alter(&$entity_info) {
   // Disable the entity type translation handler.
   foreach ($entity_info as $entity_type => $info) {
     $entity_info[$entity_type]['translation'][$entity_type] = FALSE;
-  }
-}
-
-/**
- * Implements hook_entity_view_mode_info_alter().
- */
-function field_test_entity_view_mode_info_alter(&$view_modes) {
-  $entity_info = entity_get_info();
-  foreach ($entity_info as $entity_type => $info) {
-    if ($entity_info[$entity_type]['module'] == 'field_test') {
-      $view_modes[$entity_type] = array(
+    if ($info['module'] == 'field_test') {
+      $entity_info[$entity_type]['view_modes'] = array(
         'full' => array(
           'label' => t('Full object'),
           'custom_settings' => TRUE,
@@ -39,23 +30,12 @@ function field_test_entity_view_mode_info_alter(&$view_modes) {
           'custom_settings' => TRUE,
         ),
       );
-    }
-  }
-}
-
-/**
- * Implements hook_entity_bundle_info_alter().
- */
-function field_test_entity_bundle_info_alter(&$bundles) {
-  $entity_info = entity_get_info();
-  foreach ($bundles as $entity_type => $info) {
-    if ($entity_info[$entity_type]['module'] == 'field_test') {
-      $bundles[$entity_type] = state()->get('field_test_bundles') ?: array('test_bundle' => array('label' => 'Test Bundle'));
+      $entity_info[$entity_type]['bundles'] = state()->get('field_test_bundles') ?: array('test_bundle' => array('label' => 'Test Bundle'));
       if ($entity_type == 'test_entity_bundle') {
-        $bundles[$entity_type] += array('test_entity_2' => array('label' => 'Test entity 2'));
+        $entity_info[$entity_type]['bundles'] += array('test_entity_2' => array('label' => 'Test entity 2'));
       }
       if ($entity_type == 'test_entity_bundle_key') {
-        $bundles[$entity_type] += array('bundle1' => array('label' => 'Bundle1'), 'bundle2' => array('label' => 'Bundle2'));
+        $entity_info[$entity_type]['bundles'] += array('bundle1' => array('label' => 'Bundle1'), 'bundle2' => array('label' => 'Bundle2'));
       }
     }
   }
diff --git a/core/modules/field/tests/modules/field_test/field_test.module b/core/modules/field/tests/modules/field_test/field_test.module
index 03094dd..741dd60 100644
--- a/core/modules/field/tests/modules/field_test/field_test.module
+++ b/core/modules/field/tests/modules/field_test/field_test.module
@@ -45,8 +45,9 @@ function field_test_permission() {
  */
 function field_test_menu() {
   $items = array();
+  $bundles = field_info_bundles('test_entity');
 
-  foreach (entity_get_bundles('test_entity') as $bundle_name => $bundle_info) {
+  foreach ($bundles as $bundle_name => $bundle_info) {
     $items['test-entity/add/' . $bundle_name] = array(
       'title' => t('Add %bundle test_entity', array('%bundle' => $bundle_info['label'])),
       'page callback' => 'field_test_entity_add',
@@ -308,7 +309,7 @@ function field_test_field_extra_fields_alter(&$info) {
  * @todo Remove when http://drupal.org/node/1822458 is fixed.
  */
 function field_test_module_implements_alter(&$implementations, $hook) {
-  if ($hook == 'entity_bundle_info_alter' && isset($implementations['field_test']) && isset($implementations['rdf'])) {
+  if ($hook == 'entity_info_alter' && isset($implementations['field_test']) && isset($implementations['rdf'])) {
     foreach (array('field_test', 'rdf') as $module) {
       $group = $implementations[$module];
       unset($implementations[$module]);
diff --git a/core/modules/field/tests/modules/field_test_views/test_views/views.view.test_view_fieldapi.yml b/core/modules/field/tests/modules/field_test_views/test_views/views.view.test_view_fieldapi.yml
index 914a79c..2c961d7 100644
--- a/core/modules/field/tests/modules/field_test_views/test_views/views.view.test_view_fieldapi.yml
+++ b/core/modules/field/tests/modules/field_test_views/test_views/views.view.test_view_fieldapi.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -33,5 +34,5 @@ display:
     id: default
     position: '0'
 human_name: test_view_fieldapi
-id: test_view_fieldapi
+name: test_view_fieldapi
 tag: default
diff --git a/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Entity/Tables.php b/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Entity/Tables.php
index 68a5701..bf02e2b 100644
--- a/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Entity/Tables.php
+++ b/core/modules/field_sql_storage/lib/Drupal/field_sql_storage/Entity/Tables.php
@@ -174,7 +174,8 @@ function addField($field, $type, $langcode) {
           // If there are bundles, pick one. It does not matter which,
           // properties exist on all bundles.
           if (!empty($entity_info['entity keys']['bundle'])) {
-            $values[$entity_info['entity keys']['bundle']] = key(entity_get_bundles('node'));
+            $bundles = array_keys($entity_info['bundles']);
+            $values[$entity_info['entity keys']['bundle']] = reset($bundles);
           }
           $entity = entity_create($entity_type, $values);
           $propertyDefinitions = $entity->$specifier->getPropertyDefinitions();
diff --git a/core/modules/field_ui/field_ui.admin.inc b/core/modules/field_ui/field_ui.admin.inc
index fd225ca..5764343 100644
--- a/core/modules/field_ui/field_ui.admin.inc
+++ b/core/modules/field_ui/field_ui.admin.inc
@@ -17,7 +17,7 @@
 function field_ui_fields_list() {
   $instances = field_info_instances();
   $field_types = field_info_field_types();
-  $bundles = entity_get_bundles();
+  $bundles = field_info_bundles();
 
   $modules = system_rebuild_module_data();
 
@@ -582,6 +582,11 @@ function field_ui_field_settings_form($form, &$form_state, $instance) {
   if (is_array($additions)) {
     $form['field']['settings'] += $additions;
   }
+  if (!element_children($form['field']['settings'])) {
+    $form['field']['settings'] += array(
+      '#markup' => t('%field has no field settings.', array('%field' => $instance['label'])),
+    );
+  }
 
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save field settings'));
@@ -654,7 +659,7 @@ function field_ui_widget_type_form($form, &$form_state, FieldInstance $instance)
   $field_name = $instance['field_name'];
 
   $field = field_info_field($field_name);
-  $bundles = entity_get_bundles();
+  $bundles = field_info_bundles();
   $bundle_label = $bundles[$entity_type][$bundle]['label'];
 
   $form = array(
@@ -759,7 +764,7 @@ function field_ui_field_delete_form_submit($form, &$form_state) {
 
   $field = field_info_field($field_name);
   $instance = field_info_instance($entity_type, $field_name, $bundle);
-  $bundles = entity_get_bundles();
+  $bundles = field_info_bundles();
   $bundle_label = $bundles[$entity_type][$bundle]['label'];
 
   if (!empty($bundle) && $field && !$field['locked'] && $form_values['confirm']) {
@@ -795,7 +800,7 @@ function field_ui_field_edit_form($form, &$form_state, $instance) {
   $bundle = $instance['bundle'];
   $entity_type = $instance['entity_type'];
   $field = field_info_field($instance['field_name']);
-  $bundles = entity_get_bundles();
+  $bundles = field_info_bundles();
 
   drupal_set_title(t('%instance settings for %bundle', array(
     '%instance' => $instance['label'],
diff --git a/core/modules/field_ui/field_ui.install b/core/modules/field_ui/field_ui.install
deleted file mode 100644
index f0ad035..0000000
--- a/core/modules/field_ui/field_ui.install
+++ /dev/null
@@ -1,50 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update, and uninstall functions for the Field UI module.
- */
-
-/**
- * Upgrade Field UI permissions.
- */
-function field_ui_update_8001() {
-
-  $permissions = array(
-    'administer comments' => array(
-      'administer comment fields',
-      'administer comment display',
-    ),
-    'administer content types' => array(
-      'administer node fields',
-      'administer node display',
-    ),
-    'administer users' => array(
-      'administer user fields',
-      'administer user display',
-    ),
-    'administer taxonomy' => array(
-      'administer taxonomy_term fields',
-      'administer taxonomy_term display',
-    ),
-  );
-
-  // We can not call user_permission_get_modules() as that will start
-  // invoking hooks which we can't during update hooks. Directly query
-  // for the permissions and insert them into the database.
-  foreach ($permissions as $old_permission => $new_permissions) {
-    $results = db_query("SELECT rid FROM {role_permission} WHERE permission = :permission", array(':permission' => $old_permission));
-    foreach ($results as $record) {
-      $query = db_insert('role_permission')->fields(array('rid', 'permission', 'module'));
-      foreach ($new_permissions as $new_permission) {
-        $query->values(array($record->rid, $new_permission, 'field_ui'));
-      }
-      $query->execute();
-    }
-
-    // Remove old permission.
-    db_delete('role_permission')
-      ->condition('permission', $old_permission)
-      ->execute();
-  }
-}
diff --git a/core/modules/field_ui/field_ui.module b/core/modules/field_ui/field_ui.module
index b9d1a1c..dd2a1cc 100644
--- a/core/modules/field_ui/field_ui.module
+++ b/core/modules/field_ui/field_ui.module
@@ -71,7 +71,7 @@ function field_ui_menu() {
   // Create tabs for all possible bundles.
   foreach (entity_get_info() as $entity_type => $entity_info) {
     if ($entity_info['fieldable']) {
-      foreach (entity_get_bundles($entity_type) as $bundle_name => $bundle_info) {
+      foreach ($entity_info['bundles'] as $bundle_name => $bundle_info) {
         if (isset($bundle_info['admin'])) {
           // Extract path information from the bundle.
           $path = $bundle_info['admin']['path'];
@@ -94,15 +94,11 @@ function field_ui_menu() {
           // items below.
           $field_position = count(explode('/', $path)) + 1;
 
-          // User access check to be done against the permission to edit
-          // fields or the display per entity type.
-          $access_fields = array(
+          // Extract access information, providing defaults.
+          $access = array_intersect_key($bundle_info['admin'], drupal_map_assoc(array('access callback', 'access arguments')));
+          $access += array(
             'access callback' => 'user_access',
-            'access arguments' => array('administer ' . $entity_type . ' fields'),
-          );
-          $access_display = array(
-            'access callback' => 'user_access',
-            'access arguments' => array('administer ' . $entity_type . ' display'),
+            'access arguments' => array('administer site configuration'),
           );
 
           $items["$path/fields"] = array(
@@ -112,7 +108,7 @@ function field_ui_menu() {
             'type' => MENU_LOCAL_TASK,
             'weight' => 1,
             'file' => 'field_ui.admin.inc',
-          ) + $access_fields;
+          ) + $access;
           $items["$path/fields/%field_ui_instance"] = array(
             'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),
             'title callback' => 'field_ui_instance_title',
@@ -120,7 +116,7 @@ function field_ui_menu() {
             'page callback' => 'drupal_get_form',
             'page arguments' => array('field_ui_field_edit_form', $field_position),
             'file' => 'field_ui.admin.inc',
-          ) + $access_fields;
+          ) + $access;
           $items["$path/fields/%field_ui_instance/edit"] = array(
             'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),
             'title' => 'Edit',
@@ -128,7 +124,7 @@ function field_ui_menu() {
             'page arguments' => array('field_ui_field_edit_form', $field_position),
             'type' => MENU_DEFAULT_LOCAL_TASK,
             'file' => 'field_ui.admin.inc',
-          ) + $access_fields;
+          ) + $access;
           $items["$path/fields/%field_ui_instance/field-settings"] = array(
             'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),
             'title' => 'Field settings',
@@ -136,7 +132,7 @@ function field_ui_menu() {
             'page arguments' => array('field_ui_field_settings_form', $field_position),
             'type' => MENU_LOCAL_TASK,
             'file' => 'field_ui.admin.inc',
-          ) + $access_fields;
+          ) + $access;
           $items["$path/fields/%field_ui_instance/widget-type"] = array(
             'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),
             'title' => 'Widget type',
@@ -144,7 +140,7 @@ function field_ui_menu() {
             'page arguments' => array('field_ui_widget_type_form', $field_position),
             'type' => MENU_LOCAL_TASK,
             'file' => 'field_ui.admin.inc',
-          ) + $access_fields;
+          ) + $access;
           $items["$path/fields/%field_ui_instance/delete"] = array(
             'load arguments' => array($entity_type, $bundle_arg, $bundle_pos, '%map'),
             'title' => 'Delete',
@@ -153,7 +149,7 @@ function field_ui_menu() {
             'type' => MENU_VISIBLE_IN_BREADCRUMB,
             'weight' => 10,
             'file' => 'field_ui.admin.inc',
-          ) + $access_fields;
+          ) + $access;
 
           // 'Manage display' tab.
           $items["$path/display"] = array(
@@ -163,7 +159,7 @@ function field_ui_menu() {
             'type' => MENU_LOCAL_TASK,
             'weight' => 2,
             'file' => 'field_ui.admin.inc',
-          ) + $access_display;
+          ) + $access;
 
           // View modes secondary tabs.
           // The same base $path for the menu item (with a placeholder) can be
@@ -173,7 +169,7 @@ function field_ui_menu() {
           // view modes, and use an access callback to determine which ones are
           // actually visible for a given bundle.
           $weight = 0;
-          $view_modes = array('default' => array('label' => t('Default'))) + entity_get_view_modes($entity_type);
+          $view_modes = array('default' => array('label' => t('Default'))) + $entity_info['view_modes'];
           foreach ($view_modes as $view_mode => $view_mode_info) {
             $items["$path/display/$view_mode"] = array(
               'title' => $view_mode_info['label'],
@@ -183,7 +179,7 @@ function field_ui_menu() {
               // display' setting for the view mode, and the overall access
               // rules for the bundle admin pages.
               'access callback' => '_field_ui_view_mode_menu_access',
-              'access arguments' => array($entity_type, $bundle_arg, $view_mode, $access_display['access arguments'][0]),
+              'access arguments' => array_merge(array($entity_type, $bundle_arg, $view_mode, $access['access callback']), $access['access arguments']),
               'type' => ($view_mode == 'default' ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK),
               'weight' => ($view_mode == 'default' ? -10 : $weight++),
               'file' => 'field_ui.admin.inc',
@@ -197,29 +193,6 @@ function field_ui_menu() {
 }
 
 /**
- * Implements hook_permission().
- */
-function field_ui_permission() {
-  $permissions = array();
-
-  foreach (entity_get_info() as $entity_type => $entity_info) {
-    if ($entity_info['fieldable']) {
-      // Create a permission for each fieldable entity to manage
-      // the fields and the display.
-      $permissions['administer ' . $entity_type . ' fields'] = array(
-        'title' => t('%entity_label: Administer fields', array('%entity_label' => $entity_info['label'])),
-        'restrict access' => TRUE,
-      );
-      $permissions['administer ' . $entity_type . ' display'] = array(
-        'title' => t('%entity_label: Administer display', array('%entity_label' => $entity_info['label']))
-      );
-    }
-  }
-
-  return $permissions;
-}
-
-/**
  * Menu loader callback: Loads a field instance based on field and bundle name.
  *
  * @param $field_name
@@ -278,16 +251,32 @@ function field_ui_instance_title($instance) {
  *
  * @see field_ui_menu()
  */
-function _field_ui_view_mode_menu_access($entity_type, $bundle, $view_mode, $permission) {
+function _field_ui_view_mode_menu_access($entity_type, $bundle, $view_mode, $access_callback) {
   // First, determine visibility according to the 'use custom display'
   // setting for the view mode.
   $bundle = field_extract_bundle($entity_type, $bundle);
   $view_mode_settings = field_view_mode_settings($entity_type, $bundle);
   $visibility = ($view_mode == 'default') || !empty($view_mode_settings[$view_mode]['custom_settings']);
 
-  // Then, determine access according to the $permission parameter.
+  // Then, determine access according to the $access parameter. This duplicates
+  // part of _menu_check_access().
   if ($visibility) {
-    return user_access($permission);
+    // Grab the variable 'access arguments' part.
+    $args = array_slice(func_get_args(), 4);
+    $callback = empty($access_callback) ? 0 : trim($access_callback);
+    if (is_numeric($callback)) {
+      return (bool) $callback;
+    }
+    else {
+      // As call_user_func_array() is quite slow and user_access is a very
+      // common callback, it is worth making a special case for it.
+      if ($access_callback == 'user_access') {
+        return (count($args) == 1) ? user_access($args[0]) : user_access($args[0], $args[1]);
+      }
+      else {
+        return call_user_func_array($access_callback, $args);
+      }
+    }
   }
 }
 
@@ -328,7 +317,7 @@ function field_ui_field_attach_create_bundle($entity_type, $bundle) {
  * Determines the adminstration path for a bundle.
  */
 function field_ui_bundle_admin_path($entity_type, $bundle_name) {
-  $bundles = entity_get_bundles($entity_type);
+  $bundles = field_info_bundles($entity_type);
   $bundle_info = $bundles[$bundle_name];
   if (isset($bundle_info['admin'])) {
     return isset($bundle_info['admin']['real path']) ? $bundle_info['admin']['real path'] : $bundle_info['admin']['path'];
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
index fe725cc..0a86f78 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/DisplayOverview.php
@@ -92,7 +92,7 @@ public function form(array $form, array &$form_state) {
     $field_label_options = array(
       'above' => t('Above'),
       'inline' => t('Inline'),
-      'hidden' => '<' . t('Hidden') . '>',
+      'hidden' => t('<Hidden>'),
     );
     $extra_visibility_options = array(
       'visible' => t('Visible'),
@@ -149,7 +149,7 @@ public function form(array $form, array &$form_state) {
       );
 
       $formatter_options = field_ui_formatter_options($field['type']);
-      $formatter_options['hidden'] = '<' . t('Hidden') . '>';
+      $formatter_options['hidden'] = t('<Hidden>');
       $table[$name]['format'] = array(
         'type' => array(
           '#type' => 'select',
@@ -346,7 +346,8 @@ public function form(array $form, array &$form_state) {
 
     // Custom display settings.
     if ($this->view_mode == 'default') {
-      $view_modes = entity_get_view_modes($this->entity_type);
+      $entity_info = entity_get_info($this->entity_type);
+      $view_modes = $entity_info['view_modes'];
       // Only show the settings if there is more than one view mode.
       if (count($view_modes) > 1) {
         $form['modes'] = array(
@@ -477,7 +478,6 @@ public function submit(array $form, array &$form_state) {
     // Handle the 'view modes' checkboxes if present.
     if ($this->view_mode == 'default' && !empty($form_values['view_modes_custom'])) {
       $entity_info = entity_get_info($this->entity_type);
-      $view_modes = entity_get_view_modes($this->entity_type);
       $bundle_settings = field_bundle_settings($this->entity_type, $this->bundle);
       $view_mode_settings = field_view_mode_settings($this->entity_type, $this->bundle);
 
@@ -491,7 +491,7 @@ public function submit(array $form, array &$form_state) {
             $display->save();
           }
 
-          $view_mode_label = $view_modes[$view_mode]['label'];
+          $view_mode_label = $entity_info['view_modes'][$view_mode]['label'];
           $path = field_ui_bundle_admin_path($this->entity_type, $this->bundle) . "/display/$view_mode";
           drupal_set_message(t('The %view_mode mode now uses custom display settings. You might want to <a href="@url">configure them</a>.', array('%view_mode' => $view_mode_label, '@url' => url($path))));
         }
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php
index 016b9d0..b410e1b 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/AlterTest.php
@@ -37,7 +37,7 @@ function setUp() {
     $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
 
     // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer users', 'administer user fields'));
+    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer users'));
     $this->drupalLogin($admin_user);
   }
 
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/FieldUiTestBase.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/FieldUiTestBase.php
index 2d3fb98..aa923f1 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/FieldUiTestBase.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/FieldUiTestBase.php
@@ -25,7 +25,7 @@ function setUp() {
     parent::setUp();
 
     // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer node display', 'administer taxonomy', 'administer taxonomy_term fields', 'administer taxonomy_term display', 'administer users', 'administer user display'));
+    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer taxonomy', 'administer users', 'bypass node access'));
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
diff --git a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
index cbc132f..14677eb 100644
--- a/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
+++ b/core/modules/field_ui/lib/Drupal/field_ui/Tests/ManageFieldsTest.php
@@ -116,7 +116,7 @@ function createField() {
     // should also appear in the 'taxonomy term' entity.
     $vocabulary = taxonomy_vocabulary_load('tags');
     $this->drupalGet('admin/structure/taxonomy/' . $vocabulary->id() . '/fields');
-    $this->assertTrue($this->xpath('//select[@name="fields[_add_existing_field][field_name]"]//option[@value="' . $this->field_name . '"]'), 'Existing field was found in taxonomy term fields.');
+    $this->assertTrue($this->xpath('//select[@name="fields[_add_existing_field][field_name]"]//option[@value="' . $this->field_name . '"]'), 'Existing field was found in account settings.');
   }
 
   /**
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index 913f75a..5f56a9f 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -90,16 +90,6 @@ function file_element_info() {
 }
 
 /**
- * Implements hook_entity_view_mode_info().
- */
-function file_entity_view_mode_info() {
-  $view_modes['file']['full'] = array(
-    'label' => t('File default'),
-  );
-  return $view_modes;
-}
-
-/**
  * Loads file entities from the database.
  *
  * @param array $fids
@@ -409,7 +399,7 @@ function file_validate_size(File $file, $file_limit = 0, $user_limit = 0) {
   }
 
   // Save a query by only calling spaceUsed() when a limit is provided.
-  if ($user_limit && (drupal_container()->get('plugin.manager.entity')->getStorageController('file')->spaceUsed($user->uid) + $file->filesize) > $user_limit) {
+  if ($user_limit && (entity_get_controller('file')->spaceUsed($user->uid) + $file->filesize) > $user_limit) {
     $errors[] = t('The file is %filesize which would exceed your disk quota of %quota.', array('%filesize' => format_size($file->filesize), '%quota' => format_size($user_limit)));
   }
 
@@ -711,7 +701,7 @@ function file_file_download($uri, $field_type = 'file') {
  * Implements file_cron()
  */
 function file_cron() {
-  $result = drupal_container()->get('plugin.manager.entity')->getStorageController('file')->retrieveTemporaryFiles();
+  $result = entity_get_controller('file')->retrieveTemporaryFiles();
   foreach ($result as $row) {
     if ($file = file_load($row->fid)) {
       $references = file_usage()->listUsage($file);
@@ -786,7 +776,7 @@ function file_ajax_upload() {
 
   $output = theme('status_messages') . drupal_render($form);
   $js = drupal_add_js();
-  $settings = drupal_merge_js_settings($js['settings']['data']);
+  $settings = NestedArray::mergeDeepArray($js['settings']['data']);
 
   $response = new AjaxResponse();
   return $response->addCommand(new ReplaceCommand(NULL, $output, $settings));
diff --git a/core/modules/file/file.views.inc b/core/modules/file/file.views.inc
index 6b0fb59..7774c15 100644
--- a/core/modules/file/file.views.inc
+++ b/core/modules/file/file.views.inc
@@ -35,6 +35,7 @@ function file_views_data() {
     'help' => t('The ID of the file.'),
     'field' => array(
       'id' => 'file',
+      'click sortable' => TRUE,
     ),
     'argument' => array(
       'id' => 'file_fid',
@@ -55,6 +56,7 @@ function file_views_data() {
     'help' => t('The name of the file.'),
     'field' => array(
       'id' => 'file',
+      'click sortable' => TRUE,
      ),
     'sort' => array(
       'id' => 'standard',
@@ -73,6 +75,7 @@ function file_views_data() {
     'help' => t('The path of the file.'),
     'field' => array(
       'id' => 'file_uri',
+      'click sortable' => TRUE,
      ),
     'sort' => array(
       'id' => 'standard',
@@ -91,6 +94,7 @@ function file_views_data() {
     'help' => t('The mime type of the file.'),
     'field' => array(
       'id' => 'file_filemime',
+      'click sortable' => TRUE,
      ),
     'sort' => array(
       'id' => 'standard',
@@ -120,6 +124,7 @@ function file_views_data() {
     'help' => t('The size of the file.'),
     'field' => array(
       'id' => 'file_size',
+      'click sortable' => TRUE,
      ),
     'sort' => array(
       'id' => 'standard',
@@ -135,6 +140,7 @@ function file_views_data() {
     'help' => t('The status of the file.'),
     'field' => array(
       'id' => 'file_status',
+      'click sortable' => TRUE,
      ),
     'sort' => array(
       'id' => 'standard',
@@ -150,6 +156,7 @@ function file_views_data() {
     'help' => t('The date the file was uploaded.'),
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date'
@@ -383,6 +390,7 @@ function file_views_data() {
     'help' => t('The module managing this file relationship.'),
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE,
      ),
     'filter' => array(
       'id' => 'string',
@@ -399,6 +407,7 @@ function file_views_data() {
     'help' => t('The type of entity that is related to the file.'),
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE,
      ),
     'filter' => array(
       'id' => 'string',
@@ -415,6 +424,7 @@ function file_views_data() {
     'help' => t('The ID of the entity that is related to the file.'),
     'field' => array(
       'id' => 'numeric',
+      'click sortable' => TRUE,
     ),
     'argument' => array(
       'id' => 'numeric',
@@ -431,6 +441,7 @@ function file_views_data() {
     'help' => t('The number of times the file is used by this entity.'),
     'field' => array(
       'id' => 'numeric',
+      'click sortable' => TRUE,
      ),
     'filter' => array(
       'id' => 'numeric',
diff --git a/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php b/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php
index d7f2a6b..bc54514 100644
--- a/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php
+++ b/core/modules/file/lib/Drupal/file/Plugin/Core/Entity/File.php
@@ -26,6 +26,12 @@
  *     "id" = "fid",
  *     "label" = "filename",
  *     "uuid" = "uuid"
+ *   },
+ *   view_modes = {
+ *     "full" = {
+ *       "label" = "File default",
+ *       "custom_settings" = FALSE
+ *     }
  *   }
  * )
  */
diff --git a/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php b/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php
index 458eb4c..e291bec 100644
--- a/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php
+++ b/core/modules/file/lib/Drupal/file/Tests/FileFieldTestBase.php
@@ -19,7 +19,7 @@
   *
   * @var array
   */
-  public static $modules = array('file', 'file_module_test', 'field_ui');
+  public static $modules = array('file', 'file_module_test');
 
   protected $profile = 'standard';
 
@@ -27,7 +27,7 @@
 
   function setUp() {
     parent::setUp();
-    $this->admin_user = $this->drupalCreateUser(array('access content', 'access administration pages', 'administer site configuration', 'administer users', 'administer permissions', 'administer content types', 'administer node fields', 'administer node display', 'administer comment fields', 'administer nodes', 'bypass node access'));
+    $this->admin_user = $this->drupalCreateUser(array('access content', 'access administration pages', 'administer site configuration', 'administer users', 'administer permissions', 'administer content types', 'administer nodes', 'bypass node access'));
     $this->drupalLogin($this->admin_user);
   }
 
@@ -193,7 +193,7 @@ function assertFileExists($file, $message = NULL) {
    * Asserts that a file exists in the database.
    */
   function assertFileEntryExists($file, $message = NULL) {
-    $this->container->get('plugin.manager.entity')->getStorageController('file')->resetCache();
+    entity_get_controller('file')->resetCache();
     $db_file = file_load($file->fid);
     $message = isset($message) ? $message : t('File %file exists in database at the correct path.', array('%file' => $file->uri));
     $this->assertEqual($db_file->uri, $file->uri, $message);
@@ -211,7 +211,7 @@ function assertFileNotExists($file, $message = NULL) {
    * Asserts that a file does not exist in the database.
    */
   function assertFileEntryNotExists($file, $message) {
-    $this->container->get('plugin.manager.entity')->getStorageController('file')->resetCache();
+    entity_get_controller('file')->resetCache();
     $message = isset($message) ? $message : t('File %file exists in database at the correct path.', array('%file' => $file->uri));
     $this->assertFalse(file_load($file->fid), $message);
   }
diff --git a/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php b/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php
index 157de9e..67ec63b 100644
--- a/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php
+++ b/core/modules/file/lib/Drupal/file/Tests/SpaceUsedTest.php
@@ -43,7 +43,7 @@ function setUp() {
    * Test different users with the default status.
    */
   function testFileSpaceUsed() {
-    $file = $this->container->get('plugin.manager.entity')->getStorageController('file');
+    $file = entity_get_controller('file');
     // Test different users with default status.
     $this->assertEqual($file->spaceUsed(2), 70);
     $this->assertEqual($file->spaceUsed(3), 300);
diff --git a/core/modules/filter/config/filter.format.plain_text.yml b/core/modules/filter/config/filter.format.plain_text.yml
deleted file mode 100644
index a7f72cd..0000000
--- a/core/modules/filter/config/filter.format.plain_text.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-# Every site requires at least one text format as fallback format that
-# - is accessible to all users.
-# - is secure, using very basic formatting only.
-# - may be modified by installation profiles to have other properties.
-format: plain_text
-name: 'Plain text'
-status: '1'
-weight: '10'
-roles:
-  - anonymous
-  - authenticated
-cache: '1'
-filters:
-  # Escape all HTML.
-  filter_html_escape:
-    module: filter
-    status: '1'
-  # Convert URLs into links.
-  filter_url:
-    module: filter
-    status: '1'
-  # Convert linebreaks into paragraphs.
-  filter_autop:
-    module: filter
-    status: '1'
-langcode: und
diff --git a/core/modules/filter/filter.admin.inc b/core/modules/filter/filter.admin.inc
index 4cc4a1f..a4d9293 100644
--- a/core/modules/filter/filter.admin.inc
+++ b/core/modules/filter/filter.admin.inc
@@ -75,12 +75,13 @@ function filter_admin_overview($form) {
  * Form submission handler for filter_admin_overview().
  */
 function filter_admin_overview_submit($form, &$form_state) {
-  $filter_formats = filter_formats();
   foreach ($form_state['values']['formats'] as $id => $data) {
-    // Only update if this is a form element with weight.
     if (is_array($data) && isset($data['weight'])) {
-      $filter_formats[$id]->set('weight', $data['weight']);
-      $filter_formats[$id]->save();
+      // Only update if this is a form element with weight.
+      db_update('filter_format')
+        ->fields(array('weight' => $data['weight']))
+        ->condition('format', $id)
+        ->execute();
     }
   }
   filter_formats_reset();
@@ -112,8 +113,10 @@ function filter_admin_overview_submit($form, &$form_state) {
 function filter_admin_format_page($format = NULL) {
   if (!isset($format->name)) {
     drupal_set_title(t('Add text format'));
-
-    $format = entity_create('filter_format', array());
+    $format = (object) array(
+      'format' => NULL,
+      'name' => '',
+    );
   }
   return drupal_get_form('filter_admin_format_form', $format);
 }
@@ -169,7 +172,7 @@ function filter_admin_format_form($form, &$form_state, $format) {
   $form['roles'] = array(
     '#type' => 'checkboxes',
     '#title' => t('Roles'),
-    '#options' => array_map('check_plain', user_role_names()),
+    '#options' => array_map('check_plain', user_roles()),
     '#disabled' => $is_fallback,
     '#weight' => -10,
   );
@@ -213,10 +216,6 @@ function filter_admin_format_form($form, &$form_state, $format) {
     '#title' => t('Enabled filters'),
     '#prefix' => '<div id="filters-status-wrapper">',
     '#suffix' => '</div>',
-    // This item is used as a pure wrapping container with heading. Ignore its
-    // value, since 'filters' should only contain filter definitions.
-    // @see http://drupal.org/node/1829202
-    '#input' => FALSE,
   );
   foreach ($filter_info as $name => $filter) {
     $form['filters']['status'][$name] = array(
@@ -234,10 +233,6 @@ function filter_admin_format_form($form, &$form_state, $format) {
     '#type' => 'item',
     '#title' => t('Filter processing order'),
     '#theme' => 'filter_admin_format_filter_order',
-    // This item is used as a pure wrapping container with heading. Ignore its
-    // value, since 'filters' should only contain filter definitions.
-    // @see http://drupal.org/node/1829202
-    '#input' => FALSE,
   );
   foreach ($filter_info as $name => $filter) {
     $form['filters']['order'][$name]['filter'] = array(
@@ -265,7 +260,8 @@ function filter_admin_format_form($form, &$form_state, $format) {
       $function = $filter['settings callback'];
       // Pass along stored filter settings and default settings, but also the
       // format object and all filters to allow for complex implementations.
-      $settings_form = $function($form, $form_state, $filters[$name], $format, $filter['default settings'], $filters);
+      $defaults = (isset($filter['default settings']) ? $filter['default settings'] : array());
+      $settings_form = $function($form, $form_state, $filters[$name], $format, $defaults, $filters);
       if (!empty($settings_form)) {
         $form['filters']['settings'][$name] = array(
           '#type' => 'details',
@@ -329,12 +325,9 @@ function filter_admin_format_form_validate($form, &$form_state) {
   form_set_value($form['format'], $format_format, $form_state);
   form_set_value($form['name'], $format_name, $form_state);
 
-  $filter_formats = entity_load_multiple('filter_format');
-  foreach ($filter_formats as $format) {
-    if ($format->name == $format_name && $format->format != $format_format) {
-      form_set_error('name', t('Text format names must be unique. A format named %name already exists.', array('%name' => $format_name)));
-      break;
-    }
+  $result = db_query("SELECT format FROM {filter_format} WHERE name = :name AND format <> :format", array(':name' => $format_name, ':format' => $format_format))->fetchField();
+  if ($result) {
+    form_set_error('name', t('Text format names must be unique. A format named %name already exists.', array('%name' => $format_name)));
   }
 }
 
@@ -350,13 +343,13 @@ function filter_admin_format_form_submit($form, &$form_state) {
   // Add the submitted form values to the text format, and save it.
   $format = $form['#format'];
   foreach ($form_state['values'] as $key => $value) {
-    $format->set($key, $value);
+    $format->$key = $value;
   }
-  $status = $format->save();
+  $status = filter_format_save($format);
 
   // Save user permissions.
   if ($permission = filter_permission_name($format)) {
-    foreach ($form_state['values']['roles'] as $rid => $enabled) {
+    foreach ($format->roles as $rid => $enabled) {
       user_role_change_permissions($rid, array($permission => $enabled));
     }
   }
diff --git a/core/modules/filter/filter.api.php b/core/modules/filter/filter.api.php
index c041eb4..f11a528 100644
--- a/core/modules/filter/filter.api.php
+++ b/core/modules/filter/filter.api.php
@@ -277,10 +277,43 @@ function hook_filter_FILTER_tips($filter, $format, $long) {
  */
 
 /**
+ * Perform actions when a new text format has been created.
+ *
+ * @param $format
+ *   The format object of the format being updated.
+ *
+ * @see hook_filter_format_update()
+ * @see hook_filter_format_disable()
+ */
+function hook_filter_format_insert($format) {
+  mymodule_cache_rebuild();
+}
+
+/**
+ * Perform actions when a text format has been updated.
+ *
+ * This hook allows modules to act when a text format has been updated in any
+ * way. For example, when filters have been reconfigured, disabled, or
+ * re-arranged in the text format.
+ *
+ * @param $format
+ *   The format object of the format being updated.
+ *
+ * @see hook_filter_format_insert()
+ * @see hook_filter_format_disable()
+ */
+function hook_filter_format_update($format) {
+  mymodule_cache_rebuild();
+}
+
+/**
  * Perform actions when a text format has been disabled.
  *
  * @param $format
  *   The format object of the format being disabled.
+ *
+ * @see hook_filter_format_insert()
+ * @see hook_filter_format_update()
  */
 function hook_filter_format_disable($format) {
   mymodule_cache_rebuild();
diff --git a/core/modules/filter/filter.install b/core/modules/filter/filter.install
index 536d4f6..f3c29a5 100644
--- a/core/modules/filter/filter.install
+++ b/core/modules/filter/filter.install
@@ -5,12 +5,106 @@
  * Install, update, and uninstall functions for the Filter module.
  */
 
-use Drupal\Component\Uuid\Uuid;
-
 /**
  * Implements hook_schema().
  */
 function filter_schema() {
+  $schema['filter'] = array(
+    'description' => 'Table that maps filters (HTML corrector) to text formats (Filtered HTML).',
+    'fields' => array(
+      'format' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'description' => 'Foreign key: The {filter_format}.format to which this filter is assigned.',
+      ),
+      'module' => array(
+        'type' => 'varchar',
+        'length' => 64,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'The origin module of the filter.',
+      ),
+      'name' => array(
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'Name of the filter being referenced.',
+      ),
+      'weight' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Weight of filter within format.',
+      ),
+      'status' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Filter enabled status. (1 = enabled, 0 = disabled)',
+      ),
+      'settings' => array(
+        'type' => 'blob',
+        'not null' => FALSE,
+        'size' => 'big',
+        'serialize' => TRUE,
+        'description' => 'A serialized array of name value pairs that store the filter settings for the specific format.',
+      ),
+    ),
+    'primary key' => array('format', 'name'),
+    'indexes' => array(
+      'list' => array('weight', 'module', 'name'),
+    ),
+  );
+  $schema['filter_format'] = array(
+    'description' => 'Stores text formats: custom groupings of filters, such as Filtered HTML.',
+    'fields' => array(
+      'format' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'description' => 'Primary Key: Unique machine name of the format.',
+      ),
+      'name' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'Name of the text format (Filtered HTML).',
+        'translatable' => TRUE,
+      ),
+      'cache' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'size' => 'tiny',
+        'description' => 'Flag to indicate whether format is cacheable. (1 = cacheable, 0 = not cacheable)',
+      ),
+      'status' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 1,
+        'size' => 'tiny',
+        'description' => 'The status of the text format. (1 = enabled, 0 = disabled)',
+      ),
+      'weight' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Weight of text format to use when listing.',
+      ),
+    ),
+    'primary key' => array('format'),
+    'unique keys' => array(
+      'name' => array('name'),
+    ),
+    'indexes' => array(
+      'status_weight' => array('status', 'weight'),
+    ),
+  );
+
   $schema['cache_filter'] = drupal_get_schema_unprocessed('system', 'cache');
   $schema['cache_filter']['description'] = 'Cache table for the Filter module to store already filtered pieces of text, identified by text format and hash of the text.';
 
@@ -18,6 +112,40 @@ function filter_schema() {
 }
 
 /**
+ * Implements hook_install().
+ */
+function filter_install() {
+  // All sites require at least one text format (the fallback format) that all
+  // users have access to, so add it here. We initialize it as a simple, safe
+  // plain text format with very basic formatting, but it can be modified by
+  // installation profiles to have other properties.
+  $plain_text_format = array(
+    'format' => 'plain_text',
+    'name' => 'Plain text',
+    'weight' => 10,
+    'filters' => array(
+      // Escape all HTML.
+      'filter_html_escape' => array(
+        'weight' => 0,
+        'status' => 1,
+      ),
+      // URL filter.
+      'filter_url' => array(
+        'weight' => 1,
+        'status' => 1,
+      ),
+      // Line break filter.
+      'filter_autop' => array(
+        'weight' => 2,
+        'status' => 1,
+      ),
+    ),
+  );
+  $plain_text_format = (object) $plain_text_format;
+  filter_format_save($plain_text_format);
+}
+
+/**
  * @addtogroup updates-7.x-to-8.x
  * @{
  */
@@ -34,39 +162,6 @@ function filter_update_8000() {
 }
 
 /**
- * Migrate filter formats into configuration.
- *
- * @ingroup config_upgrade
- */
-function filter_update_8001() {
-  $uuid = new Uuid();
-  $result = db_query('SELECT format, name, cache, status, weight FROM {filter_format}', array(), array('fetch' => PDO::FETCH_ASSOC));
-  foreach ($result as $format) {
-    $id = $format['format'];
-
-    // Generate a UUID.
-    $format['uuid'] = $uuid->generate();
-
-    // Retrieve and prepare all filters.
-    $filters = db_query('SELECT name, module, status, weight, settings FROM {filter} WHERE format = :format ORDER BY weight, module, name', array(
-      ':format' => $id,
-    ), array('fetch' => PDO::FETCH_ASSOC))->fetchAllAssoc('name');
-    foreach ($filters as $name => &$filter) {
-      // The filter name is used as key only.
-      unset($filter['name']);
-      $filter['settings'] = unserialize($filter['settings']);
-    }
-    $format['filters'] = $filters;
-
-    // Save the config object.
-    $config = config('filter.format.' . $id);
-    $config->setData($format);
-    $config->save();
-    update_config_manifest_add('filter.format', array($id));
-  }
-}
-
-/**
  * @} End of "defgroup updates-7.x-to-8.x".
  * The next series of updates should start at 9000.
  */
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 3ff344c..182bbb1 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -7,7 +7,6 @@
 
 use Drupal\Core\Cache\CacheBackendInterface;
 use Drupal\Core\Template\Attribute;
-use Drupal\filter\Plugin\Core\Entity\FilterFormat;
 
 /**
  * Non-HTML markup language filters that generate HTML.
@@ -206,6 +205,116 @@ function filter_format_load($format_id) {
 }
 
 /**
+ * Saves a text format object to the database.
+ *
+ * @param $format
+ *   A format object having the properties:
+ *   - format: A machine-readable name representing the ID of the text format
+ *     to save. If this corresponds to an existing text format, that format
+ *     will be updated; otherwise, a new format will be created.
+ *   - name: The title of the text format.
+ *   - status: (optional) An integer indicating whether the text format is
+ *     enabled (1) or not (0). Defaults to 1.
+ *   - weight: (optional) The weight of the text format, which controls its
+ *     placement in text format lists. If omitted, the weight is set to 0.
+ *   - filters: (optional) An associative, multi-dimensional array of filters
+ *     assigned to the text format, keyed by the name of each filter and using
+ *     the properties:
+ *     - weight: (optional) The weight of the filter in the text format. If
+ *       omitted, either the currently stored weight is retained (if there is
+ *       one), or the filter is assigned a weight of 10, which will usually
+ *       put it at the bottom of the list.
+ *     - status: (optional) A Boolean indicating whether the filter is
+ *       enabled in the text format. If omitted, the filter will be disabled.
+ *     - settings: (optional) An array of configured settings for the filter.
+ *       See hook_filter_info() for details.
+ *
+ * @return
+ *   SAVED_NEW or SAVED_UPDATED.
+ */
+function filter_format_save($format) {
+  $format->name = trim($format->name);
+  $format->cache = _filter_format_is_cacheable($format);
+  if (!isset($format->status)) {
+    $format->status = 1;
+  }
+  if (!isset($format->weight)) {
+    $format->weight = 0;
+  }
+
+  // Insert or update the text format.
+  $return = db_merge('filter_format')
+    ->key(array('format' => $format->format))
+    ->fields(array(
+      'name' => $format->name,
+      'cache' => (int) $format->cache,
+      'status' => (int) $format->status,
+      'weight' => (int) $format->weight,
+    ))
+    ->execute();
+
+  // Programmatic saves may not contain any filters.
+  if (!isset($format->filters)) {
+    $format->filters = array();
+  }
+  $filter_info = filter_get_filters();
+  foreach ($filter_info as $name => $filter) {
+    // If the format does not specify an explicit weight for a filter, assign
+    // a default weight, either defined in hook_filter_info(), or the default of
+    // 0 by filter_get_filters().
+    if (!isset($format->filters[$name]['weight'])) {
+      $format->filters[$name]['weight'] = $filter['weight'];
+    }
+    $format->filters[$name]['status'] = isset($format->filters[$name]['status']) ? $format->filters[$name]['status'] : 0;
+    $format->filters[$name]['module'] = $filter['module'];
+
+    // If settings were passed, only ensure default settings.
+    if (isset($format->filters[$name]['settings'])) {
+      if (isset($filter['default settings'])) {
+        $format->filters[$name]['settings'] = array_merge($filter['default settings'], $format->filters[$name]['settings']);
+      }
+    }
+    // Otherwise, use default settings or fall back to an empty array.
+    else {
+      $format->filters[$name]['settings'] = isset($filter['default settings']) ? $filter['default settings'] : array();
+    }
+
+    $fields = array();
+    $fields['weight'] = $format->filters[$name]['weight'];
+    $fields['status'] = $format->filters[$name]['status'];
+    $fields['module'] = $format->filters[$name]['module'];
+    $fields['settings'] = serialize($format->filters[$name]['settings']);
+
+    db_merge('filter')
+      ->key(array(
+        'format' => $format->format,
+        'name' => $name,
+      ))
+      ->fields($fields)
+      ->execute();
+  }
+
+  if ($return == SAVED_NEW) {
+    module_invoke_all('filter_format_insert', $format);
+  }
+  else {
+    module_invoke_all('filter_format_update', $format);
+    // Explicitly indicate that the format was updated. We need to do this
+    // since if the filters were updated but the format object itself was not,
+    // the merge query above would not return an indication that anything had
+    // changed.
+    $return = SAVED_UPDATED;
+
+    // Clear the filter cache whenever a text format is updated.
+    cache('filter')->deleteTags(array('filter_format' => $format->format));
+  }
+
+  filter_formats_reset();
+
+  return $return;
+}
+
+/**
  * Disables a text format.
  *
  * There is no core facility to re-enable a disabled format. It is not deleted
@@ -217,8 +326,10 @@ function filter_format_load($format_id) {
  *   The text format object to be disabled.
  */
 function filter_format_disable($format) {
-  $format->status = 0;
-  $format->save();
+  db_update('filter_format')
+    ->fields(array('status' => 0))
+    ->condition('format', $format->format)
+    ->execute();
 
   // Allow modules to react on text format deletion.
   module_invoke_all('filter_format_disable', $format);
@@ -242,7 +353,7 @@ function filter_format_disable($format) {
  * @see filter_format_load()
  */
 function filter_format_exists($format_id) {
-  return entity_load('filter_format', $format_id);
+  return (bool) db_query_range('SELECT 1 FROM {filter_format} WHERE format = :format', 0, 1, array(':format' => $format_id))->fetchField();
 }
 
 /**
@@ -348,14 +459,13 @@ function filter_formats($account = NULL) {
       $formats['all'] = $cache->data;
     }
     else {
-      $filter_formats = entity_load_multiple('filter_format');
-      $formats['all'] = array();
-      foreach ($filter_formats as $format_name => $filter_format) {
-        if (!empty($filter_format->status)) {
-          $formats['all'][$format_name] = $filter_format;
-        }
-      }
-      uasort($formats['all'], 'Drupal\Core\Config\Entity\ConfigEntityBase::sort');
+      $formats['all'] = db_select('filter_format', 'ff')
+        ->addTag('translatable')
+        ->fields('ff')
+        ->condition('status', 1)
+        ->orderBy('weight')
+        ->execute()
+        ->fetchAllAssoc('format');
 
       cache()->set("filter_formats:{$language_interface->langcode}", $formats['all'], CacheBackendInterface::CACHE_PERMANENT, array('filter_formats' => TRUE));
     }
@@ -398,11 +508,11 @@ function filter_formats_reset() {
 function filter_get_roles_by_format($format) {
   // Handle the fallback format upfront (all roles have access to this format).
   if ($format->format == filter_fallback_format()) {
-    return user_role_names();
+    return user_roles();
   }
   // Do not list any roles if the permission does not exist.
   $permission = filter_permission_name($format);
-  return !empty($permission) ? user_role_names(FALSE, $permission) : array();
+  return !empty($permission) ? user_roles(FALSE, $permission) : array();
 }
 
 /**
@@ -566,7 +676,6 @@ function filter_get_filters() {
           $info[$name] += array(
             'description' => '',
             'weight' => 0,
-            'default settings' => array(),
           );
         }
         $filters = array_merge($filters, $info);
@@ -621,7 +730,7 @@ function filter_format_allowcache($format_id) {
  *   TRUE if all the filters enabled in the given text format allow caching,
  *   FALSE otherwise.
  *
- * @see Drupal\filter\Plugin\Core\Entity\FilterFormat::save()
+ * @see filter_format_save()
  */
 function _filter_format_is_cacheable($format) {
   if (empty($format->filters)) {
@@ -661,18 +770,9 @@ function filter_list_format($format_id) {
       $filters['all'] = $cache->data;
     }
     else {
-      $filter_formats = filter_formats();
-      foreach ($filter_formats as $filter_format) {
-        foreach ($filter_format->filters as $filter_name => $filter) {
-          $filter['name'] = $filter_name;
-          $filters['all'][$filter_format->format][$filter_name] = $filter;
-        }
-        uasort($filters['all'][$filter_format->format], 'Drupal\filter\Plugin\Core\Entity\FilterFormat::sortFilters');
-        // Convert filters into objects.
-        // @todo Retain filters as arrays or convert to plugins.
-        foreach ($filters['all'][$filter_format->format] as $filter_name => $filter) {
-          $filters['all'][$filter_format->format][$filter_name] = (object) $filter;
-        }
+      $result = db_query('SELECT * FROM {filter} ORDER BY weight, module, name');
+      foreach ($result as $record) {
+        $filters['all'][$record->format][$record->name] = $record;
       }
       cache()->set('filter_list_format', $filters['all']);
     }
@@ -684,10 +784,12 @@ function filter_list_format($format_id) {
     foreach ($filter_map as $name => $filter) {
       if (isset($filter_info[$name])) {
         $filter->title = $filter_info[$name]['title'];
-
-        $filter->settings = isset($filter->settings) ? $filter->settings : array();
+        // Unpack stored filter settings.
+        $filter->settings = (isset($filter->settings) ? unserialize($filter->settings) : array());
         // Merge in default settings.
-        $filter->settings += $filter_info[$name]['default settings'];
+        if (isset($filter_info[$name]['default settings'])) {
+          $filter->settings += $filter_info[$name]['default settings'];
+        }
 
         $format_filters[$name] = $filter;
       }
@@ -797,7 +899,7 @@ function check_markup($text, $format_id = NULL, $langcode = '', $cache = FALSE,
   // Cache the filtered text. This cache is infinitely valid. It becomes
   // obsolete when $text changes (which leads to a new $cache_id). It is
   // automatically flushed when the text format is updated.
-  // @see Drupal\filter\Plugin\Core\Entity\FilterFormat::save()
+  // @see filter_format_save()
   if ($cache) {
     cache('filter')->set($cache_id, $text, CacheBackendInterface::CACHE_PERMANENT, array('filter_format' => $format->format));
   }
diff --git a/core/modules/filter/lib/Drupal/filter/FilterFormatStorageController.php b/core/modules/filter/lib/Drupal/filter/FilterFormatStorageController.php
deleted file mode 100644
index 1e8bdb2..0000000
--- a/core/modules/filter/lib/Drupal/filter/FilterFormatStorageController.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\filter\FilterFormatStorageController.
- */
-
-namespace Drupal\filter;
-
-use Drupal\Core\Config\Entity\ConfigStorageController;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Defines the storage controller class for Filter Format entities.
- */
-class FilterFormatStorageController extends ConfigStorageController {
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigStorageController::preSave().
-   */
-  protected function preSave(EntityInterface $entity) {
-    parent::preSave($entity);
-
-    $entity->name = trim($entity->label());
-    $entity->cache = _filter_format_is_cacheable($entity);
-    $filter_info = filter_get_filters();
-    foreach ($filter_info as $name => $filter) {
-      // Merge the actual filter definition into the filter default definition.
-      $defaults = array(
-        'module' => $filter['module'],
-        // The filter ID has to be temporarily injected into the properties, in
-        // order to sort all filters below.
-        // @todo Rethink filter sorting to remove dependency on filter IDs.
-        'name' => $name,
-        // Unless explicitly enabled, all filters are disabled by default.
-        'status' => 0,
-        // If no explicit weight was defined for a filter, assign either the
-        // default weight defined in hook_filter_info() or the default of 0 by
-        // filter_get_filters().
-        'weight' => $filter['weight'],
-        'settings' => $filter['default settings'],
-      );
-      // All available filters are saved for each format, in order to retain all
-      // filter properties regardless of whether a filter is currently enabled
-      // or not, since some filters require extensive configuration.
-      // @todo Do not save disabled filters whose properties are identical to
-      //   all default properties.
-      if (isset($entity->filters[$name])) {
-        $entity->filters[$name] = array_merge($defaults, $entity->filters[$name]);
-      }
-      else {
-        $entity->filters[$name] = $defaults;
-      }
-      // The module definition from hook_filter_info() always takes precedence
-      // and needs to be updated in case it changes.
-      $entity->filters[$name]['module'] = $filter['module'];
-    }
-
-    // Sort all filters.
-    uasort($entity->filters, 'Drupal\filter\Plugin\Core\Entity\FilterFormat::sortFilters');
-    // Remove the 'name' property from all filters that was added above.
-    foreach ($entity->filters as &$filter) {
-      unset($filter['name']);
-    }
-  }
-
-  /**
-   * Overrides \Drupal\Core\Config\Entity\ConfigStorageController::postSave().
-   */
-  protected function postSave(EntityInterface $entity, $update) {
-    parent::postSave($entity, $update);
-
-    // Clear the static caches of filter_formats() and others.
-    filter_formats_reset();
-
-    if ($update) {
-      // Clear the filter cache whenever a text format is updated.
-      cache('filter')->deleteTags(array('filter_format' => $entity->id()));
-    }
-    else {
-      // Default configuration of modules and installation profiles is allowed
-      // to specify a list of user roles to grant access to for the new format;
-      // apply the defined user role permissions when a new format is inserted
-      // and has a non-empty $roles property.
-      // Note: user_role_change_permissions() triggers a call chain back into
-      // filter_permission() and lastly filter_formats(), so its cache must be
-      // reset upfront.
-      if (($roles = $entity->get('roles')) && $permission = filter_permission_name($entity)) {
-        foreach (user_roles() as $rid => $name) {
-          $enabled = in_array($rid, $roles, TRUE);
-          user_role_change_permissions($rid, array($permission => $enabled));
-        }
-      }
-    }
-  }
-
-}
diff --git a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
deleted file mode 100644
index 4bf976a..0000000
--- a/core/modules/filter/lib/Drupal/filter/Plugin/Core/Entity/FilterFormat.php
+++ /dev/null
@@ -1,146 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\filter\Plugin\Core\Entity\FilterFormat.
- */
-
-namespace Drupal\filter\Plugin\Core\Entity;
-
-use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-
-/**
- * Represents a text format.
- *
- * @Plugin(
- *   id = "filter_format",
- *   label = @Translation("Text format"),
- *   module = "filter",
- *   controller_class = "Drupal\filter\FilterFormatStorageController",
- *   config_prefix = "filter.format",
- *   entity_keys = {
- *     "id" = "format",
- *     "label" = "name",
- *     "uuid" = "uuid"
- *   }
- * )
- */
-class FilterFormat extends ConfigEntityBase {
-
-  /**
-   * Unique machine name of the format.
-   *
-   * @todo Rename to $id.
-   *
-   * @var string
-   */
-  public $format;
-
-  /**
-   * Unique label of the text format.
-   *
-   * Since text formats impact a site's security, two formats with the same
-   * label but different filter configuration would impose a security risk.
-   * Therefore, each text format label must be unique.
-   *
-   * @todo Rename to $label.
-   *
-   * @var string
-   */
-  public $name;
-
-  /**
-   * The UUID for this entity.
-   *
-   * @var string
-   */
-  public $uuid;
-
-  /**
-   * Whether the text format is enabled or disabled.
-   *
-   * @var bool
-   */
-  public $status = 1;
-
-  /**
-   * Weight of this format in the text format selector.
-   *
-   * The first/lowest text format that is accessible for a user is used as
-   * default format.
-   *
-   * @var int
-   */
-  public $weight = 0;
-
-  /**
-   * List of user role IDs to grant access to use this format on initial creation.
-   *
-   * This property is always empty and unused for existing text formats.
-   *
-   * Default configuration objects of modules and installation profiles are
-   * allowed to specify a list of user role IDs to grant access to.
-   *
-   * This property only has an effect when a new text format is created and the
-   * list is not empty. By default, no user role is allowed to use a new format.
-   *
-   * @var array
-   */
-  protected $roles;
-
-  /**
-   * Whether processed text of this format can be cached.
-   *
-   * @var bool
-   */
-  public $cache = 0;
-
-  /**
-   * Configured filters for this text format.
-   *
-   * An associative array of filters assigned to the text format, keyed by the
-   * ID of each filter (prefixed with module name) and using the properties:
-   * - module: The name of the module providing the filter.
-   * - status: (optional) A Boolean indicating whether the filter is
-   *   enabled in the text format. Defaults to disabled.
-   * - weight: (optional) The weight of the filter in the text format. If
-   *   omitted, the default value is determined in the following order:
-   *   - if any, the currently stored weight is retained.
-   *   - if any, the default weight from hook_filter_info() is taken over.
-   *   - otherwise, a default weight of 10, which usually sorts it last.
-   * - settings: (optional) An array of configured settings for the filter.
-   *   See hook_filter_info() for details.
-   *
-   * @var array
-   */
-  public $filters = array();
-
-  /**
-   * Overrides \Drupal\Core\Entity\Entity::id().
-   */
-  public function id() {
-    return $this->format;
-  }
-
-  /**
-   * Helper callback for uasort() to sort filters by status, weight, module, and name.
-   *
-   * @see Drupal\filter\FilterFormatStorageController::preSave()
-   * @see filter_list_format()
-   */
-  public static function sortFilters($a, $b) {
-    if ($a['status'] != $b['status']) {
-      return !empty($a['status']) ? -1 : 1;
-    }
-    if ($a['weight'] != $b['weight']) {
-      return ($a['weight'] < $b['weight']) ? -1 : 1;
-    }
-    if ($a['module'] != $b['module']) {
-      return strnatcasecmp($a['module'], $b['module']);
-    }
-    return strnatcasecmp($a['name'], $b['name']);
-  }
-
-}
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterAPITest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterAPITest.php
index 3918ea9..e355f2d 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterAPITest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterAPITest.php
@@ -26,7 +26,7 @@ function setUp() {
     parent::setUp();
 
     // Create Filtered HTML format.
-    $filtered_html_format = entity_create('filter_format', array(
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
       'filters' => array(
@@ -40,11 +40,12 @@ function setUp() {
           'status' => 1,
         ),
       )
-    ));
-    $filtered_html_format->save();
+    );
+    $filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($filtered_html_format);
 
     // Create Full HTML format.
-    $full_html_format = entity_create('filter_format', array(
+    $full_html_format = array(
       'format' => 'full_html',
       'name' => 'Full HTML',
       'weight' => 1,
@@ -54,8 +55,9 @@ function setUp() {
           'status' => 1,
         ),
       ),
-    ));
-    $full_html_format->save();
+    );
+    $full_html_format = (object) $full_html_format;
+    filter_format_save($full_html_format);
   }
 
   /**
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php
index e7b1330..c2b76d2 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterAdminTest.php
@@ -164,13 +164,14 @@ function testFilterAdmin() {
     ));
     $this->assertTrue(!empty($elements), 'Reorder confirmed in admin interface.');
 
-    $filter_format = entity_load('filter_format', $filtered);
-    foreach ($filter_format->filters as $filter_name => $filter) {
-      if ($filter_name == $second_filter || $filter_name == $first_filter) {
-        $filters[] = $filter_name;
+    $result = db_query('SELECT * FROM {filter} WHERE format = :format ORDER BY weight ASC', array(':format' => $filtered));
+    $filters = array();
+    foreach ($result as $filter) {
+      if ($filter->name == $second_filter || $filter->name == $first_filter) {
+        $filters[] = $filter;
       }
     }
-    $this->assertTrue(($filters[0] == $second_filter && $filters[1] == $first_filter), t('Order confirmed in database.'));
+    $this->assertTrue(($filters[0]->name == $second_filter && $filters[1]->name == $first_filter), 'Order confirmed in database.');
 
     // Add format.
     $edit = array();
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterCrudTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterCrudTest.php
index f516b0c..7b4c6f5 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterCrudTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterCrudTest.php
@@ -35,15 +35,15 @@ public static function getInfo() {
    */
   function testTextFormatCrud() {
     // Add a text format with minimum data only.
-    $format = entity_create('filter_format', array());
+    $format = new stdClass();
     $format->format = 'empty_format';
     $format->name = 'Empty format';
-    $format->save();
+    filter_format_save($format);
     $this->verifyTextFormat($format);
     $this->verifyFilters($format);
 
     // Add another text format specifying all possible properties.
-    $format = entity_create('filter_format', array());
+    $format = new stdClass();
     $format->format = 'custom_format';
     $format->name = 'Custom format';
     $format->filters = array(
@@ -54,7 +54,7 @@ function testTextFormatCrud() {
         ),
       ),
     );
-    $format->save();
+    filter_format_save($format);
     $this->verifyTextFormat($format);
     $this->verifyFilters($format);
 
@@ -62,19 +62,21 @@ function testTextFormatCrud() {
     $format->name = 'Altered format';
     $format->filters['filter_url']['status'] = 0;
     $format->filters['filter_autop']['status'] = 1;
-    $format->save();
+    filter_format_save($format);
     $this->verifyTextFormat($format);
     $this->verifyFilters($format);
 
     // Add a uncacheable filter and save again.
     $format->filters['filter_test_uncacheable']['status'] = 1;
-    $format->save();
+    filter_format_save($format);
     $this->verifyTextFormat($format);
     $this->verifyFilters($format);
 
     // Disable the text format.
     filter_format_disable($format);
 
+    $db_format = db_query("SELECT * FROM {filter_format} WHERE format = :format", array(':format' => $format->format))->fetchObject();
+    $this->assertFalse($db_format->status, 'Database: Disabled text format is marked as disabled.');
     $formats = filter_formats();
     $this->assertTrue(!isset($formats[$format->format]), 'filter_formats: Disabled text format no longer exists.');
   }
@@ -84,6 +86,16 @@ function testTextFormatCrud() {
    */
   function verifyTextFormat($format) {
     $t_args = array('%format' => $format->name);
+    // Verify text format database record.
+    $db_format = db_select('filter_format', 'ff')
+      ->fields('ff')
+      ->condition('format', $format->format)
+      ->execute()
+      ->fetchObject();
+    $this->assertEqual($db_format->format, $format->format, format_string('Database: Proper format id for text format %format.', $t_args));
+    $this->assertEqual($db_format->name, $format->name, format_string('Database: Proper title for text format %format.', $t_args));
+    $this->assertEqual($db_format->cache, $format->cache, format_string('Database: Proper cache indicator for text format %format.', $t_args));
+    $this->assertEqual($db_format->weight, $format->weight, format_string('Database: Proper weight for text format %format.', $t_args));
 
     // Verify filter_format_load().
     $filter_format = filter_format_load($format->format);
@@ -111,7 +123,27 @@ function verifyTextFormat($format) {
    * Verifies that filters are properly stored for a text format.
    */
   function verifyFilters($format) {
+    // Verify filter database records.
+    $filters = db_query("SELECT * FROM {filter} WHERE format = :format", array(':format' => $format->format))->fetchAllAssoc('name');
     $format_filters = $format->filters;
+    foreach ($filters as $name => $filter) {
+      $t_args = array('%format' => $format->name, '%filter' => $name);
+
+      // Verify that filter status is properly stored.
+      $this->assertEqual($filter->status, $format_filters[$name]['status'], format_string('Database: Proper status for %filter in text format %format.', $t_args));
+
+      // Verify that filter settings were properly stored.
+      $this->assertEqual(unserialize($filter->settings), isset($format_filters[$name]['settings']) ? $format_filters[$name]['settings'] : array(), format_string('Database: Proper filter settings for %filter in text format %format.', $t_args));
+
+      // Verify that each filter has a module name assigned.
+      $this->assertTrue(!empty($filter->module), format_string('Database: Proper module name for %filter in text format %format.', $t_args));
+
+      // Remove the filter from the copy of saved $format to check whether all
+      // filters have been processed later.
+      unset($format_filters[$name]);
+    }
+    // Verify that all filters have been processed.
+    $this->assertTrue(empty($format_filters), 'Database contains values for all filters in the saved format.');
 
     // Verify filter_list_format().
     $filters = filter_list_format($format->format);
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
deleted file mode 100644
index fd37fb8..0000000
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
+++ /dev/null
@@ -1,114 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\filter\Tests\FilterDefaultConfigTest.
- */
-
-namespace Drupal\filter\Tests;
-
-use Drupal\simpletest\DrupalUnitTestBase;
-
-/**
- * Tests text format default configuration.
- */
-class FilterDefaultConfigTest extends DrupalUnitTestBase {
-
-  public static $modules = array('system', 'user', 'filter');
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Default configuration',
-      'description' => 'Tests text format default configuration.',
-      'group' => 'Filter',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-    $this->enableModules(array('user'));
-    // filter_permission() calls into url() to output a link in the description.
-    $this->installSchema('system', 'url_alias');
-  }
-
-  /**
-   * Tests installation of default formats.
-   */
-  function testInstallation() {
-    // Install filter_test module, which ships with custom default format.
-    $this->enableModules(array('filter_test'));
-
-    // Verify that the format was installed correctly.
-    $format = filter_format_load('filter_test');
-    $this->assertTrue($format);
-    $this->assertEqual($format->id(), 'filter_test');
-    $this->assertEqual($format->label(), 'Test format');
-    $this->assertEqual($format->get('weight'), 2);
-
-    // Verify that format default property values have been added/injected.
-    $this->assertTrue($format->uuid());
-    $this->assertEqual($format->get('cache'), 1);
-
-    // Verify that the loaded format does not contain any roles.
-    $this->assertEqual($format->get('roles'), NULL);
-    // Verify that the defined roles in the default config have been processed.
-    $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array(
-      DRUPAL_ANONYMOUS_RID,
-      DRUPAL_AUTHENTICATED_RID,
-    ));
-
-    // Verify enabled filters.
-    $filters = $format->get('filters');
-    $this->assertEqual($filters['filter_html_escape']['status'], 1);
-    $this->assertEqual($filters['filter_html_escape']['weight'], -10);
-    $this->assertEqual($filters['filter_html_escape']['module'], 'filter');
-    $this->assertEqual($filters['filter_html_escape']['settings'], array());
-    $this->assertEqual($filters['filter_autop']['status'], 1);
-    $this->assertEqual($filters['filter_autop']['weight'], 0);
-    $this->assertEqual($filters['filter_autop']['module'], 'filter');
-    $this->assertEqual($filters['filter_autop']['settings'], array());
-    $this->assertEqual($filters['filter_url']['status'], 1);
-    $this->assertEqual($filters['filter_url']['weight'], 0);
-    $this->assertEqual($filters['filter_url']['module'], 'filter');
-    $this->assertEqual($filters['filter_url']['settings'], array(
-      'filter_url_length' => 72,
-    ));
-
-    // Verify disabled filters.
-    $this->assertEqual($filters['filter_html']['status'], 0);
-    $this->assertEqual($filters['filter_html']['weight'], -10);
-    $this->assertEqual($filters['filter_html']['module'], 'filter');
-    $this->assertEqual($filters['filter_htmlcorrector']['status'], 0);
-    $this->assertEqual($filters['filter_htmlcorrector']['weight'], 10);
-    $this->assertEqual($filters['filter_htmlcorrector']['module'], 'filter');
-  }
-
-  /**
-   * Tests that changes to FilterFormat::$roles do not have an effect.
-   */
-  function testUpdateRoles() {
-    // Install filter_test module, which ships with custom default format.
-    $this->enableModules(array('filter_test'));
-
-    // Verify role permissions declared in default config.
-    $format = filter_format_load('filter_test');
-    $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array(
-      DRUPAL_ANONYMOUS_RID,
-      DRUPAL_AUTHENTICATED_RID,
-    ));
-
-    // Attempt to change roles.
-    $format->set('roles', array(
-      DRUPAL_AUTHENTICATED_RID,
-    ));
-    $format->save();
-
-    // Verify that roles have not been updated.
-    $format = filter_format_load('filter_test');
-    $this->assertEqual(array_keys(filter_get_roles_by_format($format)), array(
-      DRUPAL_ANONYMOUS_RID,
-      DRUPAL_AUTHENTICATED_RID,
-    ));
-  }
-
-}
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultFormatTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultFormatTest.php
index 5df2a5e..103d777 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultFormatTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultFormatTest.php
@@ -45,25 +45,22 @@ function testDefaultTextFormats() {
 
     // Adjust the weights so that the first and second formats (in that order)
     // are the two lowest weighted formats available to any user.
+    $minimum_weight = db_query("SELECT MIN(weight) FROM {filter_format}")->fetchField();
     $edit = array();
-    $edit['formats[' . $first_format->format . '][weight]'] = -2;
-    $edit['formats[' . $second_format->format . '][weight]'] = -1;
+    $edit['formats[' . $first_format->format . '][weight]'] = $minimum_weight - 2;
+    $edit['formats[' . $second_format->format . '][weight]'] = $minimum_weight - 1;
     $this->drupalPost('admin/config/content/formats', $edit, t('Save changes'));
     $this->resetFilterCaches();
 
     // Check that each user's default format is the lowest weighted format that
     // the user has access to.
-    $actual = filter_default_format($first_user);
-    $expected = $first_format->format;
-    $this->assertEqual($actual, $expected, "First user's default format $actual is the expected lowest weighted format $expected that the user has access to.");
-    $actual = filter_default_format($second_user);
-    $expected = $second_format->format;
-    $this->assertEqual($actual, $expected, "Second user's default format $actual is the expected lowest weighted format $expected that the user has access to, and different to the first user's.");
+    $this->assertEqual(filter_default_format($first_user), $first_format->format, "The first user's default format is the lowest weighted format that the user has access to.");
+    $this->assertEqual(filter_default_format($second_user), $second_format->format, "The second user's default format is the lowest weighted format that the user has access to, and is different than the first user's.");
 
     // Reorder the two formats, and check that both users now have the same
     // default.
     $edit = array();
-    $edit['formats[' . $second_format->format . '][weight]'] = -3;
+    $edit['formats[' . $second_format->format . '][weight]'] = $minimum_weight - 3;
     $this->drupalPost('admin/config/content/formats', $edit, t('Save changes'));
     $this->resetFilterCaches();
     $this->assertEqual(filter_default_format($first_user), filter_default_format($second_user), 'After the formats are reordered, both users have the same default format.');
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterFormatAccessTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterFormatAccessTest.php
index 48faf24..a71a9e9 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterFormatAccessTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterFormatAccessTest.php
@@ -182,7 +182,7 @@ function testFormatRoles() {
     $this->assertFalse(in_array($this->disallowed_format->format, array_keys(filter_get_formats_by_role($rid))), 'A text format which a role does not have access to does not appear in the list of formats available to that role.');
 
     // Check that the fallback format is always allowed.
-    $this->assertEqual(filter_get_roles_by_format(filter_format_load(filter_fallback_format())), user_role_names(), 'All roles have access to the fallback format.');
+    $this->assertEqual(filter_get_roles_by_format(filter_format_load(filter_fallback_format())), user_roles(), 'All roles have access to the fallback format.');
     $this->assertTrue(in_array(filter_fallback_format(), array_keys(filter_get_formats_by_role($rid))), 'The fallback format appears in the list of allowed formats for any role.');
   }
 
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php
index 71e89fb..496a5f3 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterHooksTest.php
@@ -29,6 +29,10 @@ public static function getInfo() {
     );
   }
 
+  function setUp() {
+    parent::setUp();
+  }
+
   /**
    * Tests hooks on format management.
    *
@@ -51,8 +55,8 @@ function testFilterHooks() {
     $edit['name'] = $name;
     $edit['roles[' . DRUPAL_ANONYMOUS_RID . ']'] = 1;
     $this->drupalPost('admin/config/content/formats/add', $edit, t('Save configuration'));
-    $this->assertRaw(t('Added text format %format.', array('%format' => $name)));
-    $this->assertText('hook_filter_format_insert invoked.');
+    $this->assertRaw(t('Added text format %format.', array('%format' => $name)), 'New format created.');
+    $this->assertText('hook_filter_format_insert invoked.', 'hook_filter_format_insert was invoked.');
 
     $format_id = $edit['format'];
 
@@ -60,8 +64,8 @@ function testFilterHooks() {
     $edit = array();
     $edit['roles[' . DRUPAL_AUTHENTICATED_RID . ']'] = 1;
     $this->drupalPost('admin/config/content/formats/' . $format_id, $edit, t('Save configuration'));
-    $this->assertRaw(t('The text format %format has been updated.', array('%format' => $name)));
-    $this->assertText('hook_filter_format_update invoked.');
+    $this->assertRaw(t('The text format %format has been updated.', array('%format' => $name)), 'Format successfully updated.');
+    $this->assertText('hook_filter_format_update invoked.', 'hook_filter_format_update() was invoked.');
 
     // Use the format created.
     $language_not_specified = LANGUAGE_NOT_SPECIFIED;
@@ -72,11 +76,11 @@ function testFilterHooks() {
       "body[$language_not_specified][0][format]" => $format_id,
     );
     $this->drupalPost("node/add/{$type->type}", $edit, t('Save'));
-    $this->assertText(t('@type @title has been created.', array('@type' => $type_name, '@title' => $title)));
+    $this->assertText(t('@type @title has been created.', array('@type' => $type_name, '@title' => $title)), 'New node successfully created.');
 
     // Disable the text format.
     $this->drupalPost('admin/config/content/formats/' . $format_id . '/disable', array(), t('Disable'));
-    $this->assertRaw(t('Disabled text format %format.', array('%format' => $name)));
-    $this->assertText('hook_filter_format_disable invoked.');
+    $this->assertRaw(t('Disabled text format %format.', array('%format' => $name)), 'Format successfully disabled.');
+    $this->assertText('hook_filter_format_disable invoked.', 'hook_filter_format_disable() was invoked.');
   }
 }
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterHtmlImageSecureTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterHtmlImageSecureTest.php
index 8c95150..a7e38ac 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterHtmlImageSecureTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterHtmlImageSecureTest.php
@@ -33,7 +33,7 @@ function setUp() {
     parent::setUp();
 
     // Setup Filtered HTML text format.
-    $filtered_html_format = entity_create('filter_format', array(
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
       'filters' => array(
@@ -50,8 +50,9 @@ function setUp() {
           'status' => 1,
         ),
       ),
-    ));
-    $filtered_html_format->save();
+    );
+    $filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($filtered_html_format);
 
     // Setup users.
     $this->checkPermissions(array(), TRUE);
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php
index aa3f390..5928a4d 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterSecurityTest.php
@@ -43,7 +43,7 @@ function setUp() {
     $this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page'));
 
     // Create Filtered HTML format.
-    $filtered_html_format = entity_create('filter_format', array(
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
       'filters' => array(
@@ -52,8 +52,9 @@ function setUp() {
           'status' => 1,
         ),
       )
-    ));
-    $filtered_html_format->save();
+    );
+    $filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($filtered_html_format);
 
     $filtered_html_permission = filter_permission_name($filtered_html_format);
     user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array($filtered_html_permission));
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterSettingsTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterSettingsTest.php
index 1a0be97..6d2ab99 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterSettingsTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterSettingsTest.php
@@ -36,12 +36,12 @@ function testFilterDefaults() {
     $filters = array_fill_keys(array_keys($filter_info), array());
 
     // Create text format using filter default settings.
-    $filter_defaults_format = entity_create('filter_format', array(
+    $filter_defaults_format = (object) array(
       'format' => 'filter_defaults',
       'name' => 'Filter defaults',
       'filters' => $filters,
-    ));
-    $filter_defaults_format->save();
+    );
+    filter_format_save($filter_defaults_format);
 
     // Verify that default weights defined in hook_filter_info() were applied.
     $saved_settings = array();
@@ -56,7 +56,7 @@ function testFilterDefaults() {
     }
 
     // Re-save the text format.
-    $filter_defaults_format->save();
+    filter_format_save($filter_defaults_format);
     // Reload it from scratch.
     filter_formats_reset();
     $filter_defaults_format = filter_format_load($filter_defaults_format->format);
diff --git a/core/modules/filter/tests/filter_test/config/filter.format.filter_test.yml b/core/modules/filter/tests/filter_test/config/filter.format.filter_test.yml
deleted file mode 100644
index f57eb00..0000000
--- a/core/modules/filter/tests/filter_test/config/filter.format.filter_test.yml
+++ /dev/null
@@ -1,13 +0,0 @@
-format: filter_test
-name: 'Test format'
-weight: 2
-roles:
-  - anonymous
-  - authenticated
-filters:
-  filter_html_escape:
-    status: '1'
-  filter_url:
-    status: '1'
-  filter_autop:
-    status: '1'
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index ce8397d..e9cd043 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -217,13 +217,13 @@ function forum_menu_local_tasks_alter(&$data, $router_item, $root_path) {
 }
 
 /**
- * Implements hook_entity_bundle_info_alter().
+ * Implements hook_entity_info_alter().
  */
-function forum_entity_bundle_info_alter(&$bundles) {
+function forum_entity_info_alter(&$info) {
   // Take over URI construction for taxonomy terms that are forums.
   if ($vid = config('forum.settings')->get('vocabulary')) {
-    if (isset($bundles['taxonomy_term'][$vid])) {
-      $bundles['taxonomy_term'][$vid]['uri_callback'] = 'forum_uri';
+    if (isset($info['taxonomy_term']['bundles'][$vid])) {
+      $info['taxonomy_term']['bundles'][$vid]['uri_callback'] = 'forum_uri';
     }
   }
 }
diff --git a/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ActiveTopicsBlock.php b/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ActiveTopicsBlock.php
index f77aea8..afa7117 100644
--- a/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ActiveTopicsBlock.php
+++ b/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ActiveTopicsBlock.php
@@ -22,9 +22,9 @@
 class ActiveTopicsBlock extends ForumBlockBase {
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $query = db_select('forum_index', 'f')
       ->fields('f')
       ->addTag('node_access')
diff --git a/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ForumBlockBase.php b/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ForumBlockBase.php
index 1ff05f3..c888178 100644
--- a/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ForumBlockBase.php
+++ b/core/modules/forum/lib/Drupal/forum/Plugin/block/block/ForumBlockBase.php
@@ -15,9 +15,9 @@
 abstract class ForumBlockBase extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'cache' => DRUPAL_CACHE_CUSTOM,
       'properties' => array(
diff --git a/core/modules/forum/lib/Drupal/forum/Plugin/block/block/NewTopicsBlock.php b/core/modules/forum/lib/Drupal/forum/Plugin/block/block/NewTopicsBlock.php
index 696e077..083469c 100644
--- a/core/modules/forum/lib/Drupal/forum/Plugin/block/block/NewTopicsBlock.php
+++ b/core/modules/forum/lib/Drupal/forum/Plugin/block/block/NewTopicsBlock.php
@@ -22,9 +22,9 @@
 class NewTopicsBlock extends ForumBlockBase {
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $query = db_select('forum_index', 'f')
       ->fields('f')
       ->addTag('node_access')
diff --git a/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php b/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php
index f36c5a9..260b230 100644
--- a/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php
+++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumBlockTest.php
@@ -59,7 +59,7 @@ public function testNewForumTopicsBlock() {
 
     // Enable the new forum topics block.
     $block = $this->drupalPlaceBlock('forum_new_block');
-    $this->drupalGet('');
+    $this->assertText(t('The block configuration has been saved.'), '"New forum topics" block was enabled');
 
     $this->assertLink(t('More'), 0, 'New forum topics block has a "more"-link.');
     $this->assertLinkByHref('forum', 0, 'New forum topics block has a "more"-link.');
@@ -70,8 +70,9 @@ public function testNewForumTopicsBlock() {
     }
 
     // Configure the new forum topics block to only show 2 topics.
-    $block->set('settings', array('block_count' => 2));
-    $block->save();
+    $config = config($block['config_id']);
+    $config->set('block_count', 2);
+    $config->save();
 
     $this->drupalGet('');
     // We expect only the 2 most recent forum topics to appear in the "New forum
@@ -113,7 +114,6 @@ public function testActiveForumTopicsBlock() {
 
     // Enable the block.
     $block = $this->drupalPlaceBlock('forum_active_block');
-    $this->drupalGet('');
     $this->assertLink(t('More'), 0, 'Active forum topics block has a "more"-link.');
     $this->assertLinkByHref('forum', 0, 'Active forum topics block has a "more"-link.');
 
@@ -130,8 +130,9 @@ public function testActiveForumTopicsBlock() {
     }
 
     // Configure the active forum block to only show 2 topics.
-    $block->set('settings', array('block_count' => 2));
-    $block->save();
+    $config = config($block['config_id']);
+    $config->set('block_count', 2);
+    $config->save();
 
     $this->drupalGet('');
 
diff --git a/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php b/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php
index d4aba03..7b0bef7 100644
--- a/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php
+++ b/core/modules/forum/lib/Drupal/forum/Tests/ForumTest.php
@@ -108,7 +108,7 @@ function testEnableForumField() {
     $edit['modules[Core][forum][enable]'] = FALSE;
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
     $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    $this->rebuildContainer();
+    system_list_reset();
     $this->assertFalse(module_exists('forum'), 'Forum module is not enabled.');
 
     // Attempt to re-enable the Forum module and ensure it does not try to
@@ -117,7 +117,7 @@ function testEnableForumField() {
     $edit['modules[Core][forum][enable]'] = 'forum';
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
     $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    $this->rebuildContainer();
+    system_list_reset();
     $this->assertTrue(module_exists('forum'), 'Forum module is enabled.');
   }
 
@@ -340,7 +340,7 @@ function editForumTaxonomy() {
     $this->assertRaw(t('Updated vocabulary %name.', array('%name' => $title)), 'Vocabulary was edited');
 
     // Grab the newly edited vocabulary.
-    $this->container->get('plugin.manager.entity')->getStorageController('taxonomy_vocabulary')->resetCache();
+    entity_get_controller('taxonomy_vocabulary')->resetCache();
     $current_settings = taxonomy_vocabulary_load($vid);
 
     // Make sure we actually edited the vocabulary properly.
diff --git a/core/modules/help/lib/Drupal/help/Tests/HelpTest.php b/core/modules/help/lib/Drupal/help/Tests/HelpTest.php
index 54b955f..dfaa71a 100644
--- a/core/modules/help/lib/Drupal/help/Tests/HelpTest.php
+++ b/core/modules/help/lib/Drupal/help/Tests/HelpTest.php
@@ -19,7 +19,7 @@ class HelpTest extends WebTestBase {
    *
    * @var array.
    */
-  public static $modules = array('shortcut');
+  public static $modules = array('poll');
 
   // Tests help implementations of many arbitrary core modules.
   protected $profile = 'standard';
diff --git a/core/modules/image/image.admin.css b/core/modules/image/image.admin.css
index 8b37456..338a007 100644
--- a/core/modules/image/image.admin.css
+++ b/core/modules/image/image.admin.css
@@ -52,19 +52,6 @@
 }
 
 /**
- * Improve image style preview on narrow viewports.
- */
-@media screen and (max-width: 470px) {
-  .image-style-preview .preview-image-wrapper {
-    float: none;
-    margin-bottom: 1em;
-  }
-  .image-style-preview .preview-image-wrapper:last-child {
-    margin-bottom: 0;
-  }
-}
-
-/**
  * Image anchor element.
  */
 .image-anchor {
diff --git a/core/modules/image/image.admin.inc b/core/modules/image/image.admin.inc
index df68065..85ad151 100644
--- a/core/modules/image/image.admin.inc
+++ b/core/modules/image/image.admin.inc
@@ -87,12 +87,12 @@ function image_style_form($form, &$form_state, $style) {
       if (isset($effect['form callback'])) {
         $links['edit'] = array(
           'title' => t('edit'),
-          'href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key,
+          'href' => 'admin/config/media/image-styles/edit/' . $style->id() . '/effects/' . $key,
         );
       }
       $links['delete'] = array(
         'title' => t('delete'),
-        'href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key . '/delete',
+        'href' => 'admin/config/media/image-styles/edit/' . $style->id() . '/effects/' . $key . '/delete',
       );
       $form['effects'][$key]['operations'] = array(
         '#type' => 'operations',
@@ -101,13 +101,13 @@ function image_style_form($form, &$form_state, $style) {
       $form['effects'][$key]['configure'] = array(
         '#type' => 'link',
         '#title' => t('edit'),
-        '#href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key,
+        '#href' => 'admin/config/media/image-styles/edit/' . $style->id() . '/effects/' . $key,
         '#access' => isset($effect['form callback']),
       );
       $form['effects'][$key]['remove'] = array(
         '#type' => 'link',
         '#title' => t('delete'),
-        '#href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/effects/' . $key . '/delete',
+        '#href' => 'admin/config/media/image-styles/edit/' . $style->id() . '/effects/' . $key . '/delete',
       );
     }
   }
@@ -170,7 +170,7 @@ function image_style_form_add_submit($form, &$form_state) {
 
   // Load the configuration form for this option.
   if (isset($effect['form callback'])) {
-    $path = 'admin/config/media/image-styles/manage/' . $style->id() . '/add/' . $form_state['values']['new'];
+    $path = 'admin/config/media/image-styles/edit/' . $style->id() . '/add/' . $form_state['values']['new'];
     $form_state['redirect'] = array($path, array('query' => array('weight' => $form_state['values']['weight'])));
   }
   // If there's no form, immediately add the image effect.
@@ -213,7 +213,7 @@ function image_style_form_submit($form, &$form_state) {
   if ($status == SAVED_UPDATED) {
     drupal_set_message(t('Changes to the style have been saved.'));
   }
-  $form_state['redirect'] = 'admin/config/media/image-styles/manage/' . $style->id();
+  $form_state['redirect'] = 'admin/config/media/image-styles/edit/' . $style->id();
 }
 
 /**
@@ -256,7 +256,7 @@ function image_style_add_form_submit($form, &$form_state) {
   ));
   $style->save();
   drupal_set_message(t('Style %name was created.', array('%name' => $style->label())));
-  $form_state['redirect'] = 'admin/config/media/image-styles/manage/' . $style->id();
+  $form_state['redirect'] = 'admin/config/media/image-styles/edit/' . $style->id();
 }
 
 /**
@@ -324,7 +324,7 @@ function image_effect_form($form, &$form_state, $style, $effect) {
   // If there's no configuration for this image effect, return to
   // the image style page.
   if (!isset($effect['form callback'])) {
-    drupal_goto('admin/config/media/image-styles/manage/' . $style->id());
+    drupal_goto('admin/config/media/image-styles/edit/' . $style->id());
   }
   $form_state['image_style'] = $style;
   $form_state['image_effect'] = $effect;
@@ -365,7 +365,7 @@ function image_effect_form($form, &$form_state, $style, $effect) {
   $form['actions']['cancel'] = array(
     '#type' => 'link',
     '#title' => t('Cancel'),
-    '#href' => 'admin/config/media/image-styles/manage/' . $style->id(),
+    '#href' => 'admin/config/media/image-styles/edit/' . $style->id(),
   );
 
   return $form;
@@ -382,7 +382,7 @@ function image_effect_form_submit($form, &$form_state) {
   image_effect_save($style, $effect);
 
   drupal_set_message(t('The image effect was successfully applied.'));
-  $form_state['redirect'] = 'admin/config/media/image-styles/manage/' . $style->id();
+  $form_state['redirect'] = 'admin/config/media/image-styles/edit/' . $style->id();
 }
 
 /**
@@ -400,7 +400,7 @@ function image_effect_delete_form($form, &$form_state, $style, $effect) {
   $form_state['image_effect'] = $effect;
 
   $question = t('Are you sure you want to delete the @effect effect from the %style style?', array('%style' => $style->label(), '@effect' => $effect['label']));
-  return confirm_form($form, $question, 'admin/config/media/image-styles/manage/' . $style->id(), '', t('Delete'));
+  return confirm_form($form, $question, 'admin/config/media/image-styles/edit/' . $style->id(), '', t('Delete'));
 }
 
 /**
@@ -412,7 +412,7 @@ function image_effect_delete_form_submit($form, &$form_state) {
 
   image_effect_delete($style, $effect);
   drupal_set_message(t('The image effect %name has been deleted.', array('%name' => $effect['label'])));
-  $form_state['redirect'] = 'admin/config/media/image-styles/manage/' . $style->id();
+  $form_state['redirect'] = 'admin/config/media/image-styles/edit/' . $style->id();
 }
 
 /**
@@ -586,16 +586,16 @@ function theme_image_style_list($variables) {
 
   foreach ($styles as $style) {
     $row = array();
-    $row[] = l($style->label(), 'admin/config/media/image-styles/manage/' . $style->id());
+    $row[] = l($style->label(), 'admin/config/media/image-styles/edit/' . $style->id());
     $links = array();
     $links['edit'] = array(
       'title' => t('edit'),
-      'href' => 'admin/config/media/image-styles/manage/' . $style->id(),
+      'href' => 'admin/config/media/image-styles/edit/' . $style->id(),
       'class' => array('image-style-link'),
     );
     $links['delete'] = array(
       'title' => t('delete'),
-      'href' => 'admin/config/media/image-styles/manage/' . $style->id() . '/delete',
+      'href' => 'admin/config/media/image-styles/delete/' . $style->id(),
       'class' => array('image-style-link'),
     );
     $row[] = array(
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index 50f1081..b9ad53c 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -62,10 +62,10 @@ function image_help($path, $arg) {
       return $output;
     case 'admin/config/media/image-styles':
       return '<p>' . t('Image styles commonly provide thumbnail sizes by scaling and cropping images, but can also add various effects before an image is displayed. When an image is displayed with a style, a new file is created and the original image is left unchanged.') . '</p>';
-    case 'admin/config/media/image-styles/manage/%/add/%':
+    case 'admin/config/media/image-styles/edit/%/add/%':
       $effect = image_effect_definition_load($arg[7]);
       return isset($effect['help']) ? ('<p>' . $effect['help'] . '</p>') : NULL;
-    case 'admin/config/media/image-styles/manage/%/effects/%':
+    case 'admin/config/media/image-styles/edit/%/effects/%':
       $effect = ($arg[5] == 'add') ? image_effect_definition_load($arg[6]) : image_effect_load($arg[6], $arg[4]);
       return isset($effect['help']) ? ('<p>' . $effect['help'] . '</p>') : NULL;
   }
@@ -134,33 +134,24 @@ function image_menu() {
     'weight' => 2,
     'file' => 'image.admin.inc',
   );
-  $items['admin/config/media/image-styles/manage/%image_style'] = array(
+  $items['admin/config/media/image-styles/edit/%image_style'] = array(
     'title' => 'Edit style',
-    'title callback' => 'entity_page_label',
-    'title arguments' => array(5),
     'description' => 'Configure an image style.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('image_style_form', 5),
     'access arguments' => array('administer image styles'),
     'file' => 'image.admin.inc',
   );
-  $items['admin/config/media/image-styles/manage/%image_style/edit'] = array(
-    'title' => 'Edit',
-    'type' => MENU_DEFAULT_LOCAL_TASK,
-    'weight' => -10,
-  );
-  $items['admin/config/media/image-styles/manage/%image_style/delete'] = array(
-    'title' => 'Delete',
+  $items['admin/config/media/image-styles/delete/%image_style'] = array(
+    'title' => 'Delete style',
     'description' => 'Delete an image style.',
     'load arguments' => array(NULL, (string) IMAGE_STORAGE_NORMAL),
     'page callback' => 'drupal_get_form',
     'page arguments' => array('image_style_delete_form', 5),
     'access arguments' => array('administer image styles'),
-    'type' => MENU_LOCAL_TASK,
-    'weight' => 10,
     'file' => 'image.admin.inc',
   );
-  $items['admin/config/media/image-styles/manage/%image_style/effects/%image_effect'] = array(
+  $items['admin/config/media/image-styles/edit/%image_style/effects/%image_effect'] = array(
     'title' => 'Edit image effect',
     'description' => 'Edit an existing effect within a style.',
     'load arguments' => array(5, (string) IMAGE_STORAGE_EDITABLE),
@@ -169,7 +160,7 @@ function image_menu() {
     'access arguments' => array('administer image styles'),
     'file' => 'image.admin.inc',
   );
-  $items['admin/config/media/image-styles/manage/%image_style/effects/%image_effect/delete'] = array(
+  $items['admin/config/media/image-styles/edit/%image_style/effects/%image_effect/delete'] = array(
     'title' => 'Delete image effect',
     'description' => 'Delete an existing effect from a style.',
     'load arguments' => array(5, (string) IMAGE_STORAGE_EDITABLE),
@@ -178,7 +169,7 @@ function image_menu() {
     'access arguments' => array('administer image styles'),
     'file' => 'image.admin.inc',
   );
-  $items['admin/config/media/image-styles/manage/%image_style/add/%image_effect_definition'] = array(
+  $items['admin/config/media/image-styles/edit/%image_style/add/%image_effect_definition'] = array(
     'title' => 'Add image effect',
     'description' => 'Add a new effect to a style.',
     'load arguments' => array(5),
@@ -265,7 +256,7 @@ function image_form_system_file_system_settings_alter(&$form, &$form_state) {
 }
 
 /**
- * Form submission handler for system_file_system_settings().
+ * Submit handler for the file system settings form.
  *
  * Adds a menu rebuild after the public file path has been changed, so that the
  * menu router item depending on that file path will be regenerated.
@@ -352,8 +343,8 @@ function image_image_style_update(ImageStyle $style) {
     // Loop through all fields searching for image fields.
     foreach ($instances as $instance) {
       if ($instance['widget']['module'] == 'image') {
-        $view_modes = entity_get_view_modes($instance['entity_type']);
-        $view_modes = array('default') + array_keys($view_modes);
+        $entity_info = entity_get_info($instance['entity_type']);
+        $view_modes = array('default') + array_keys($entity_info['view_modes']);
         foreach ($view_modes as $view_mode) {
           $display = entity_get_display($instance['entity_type'], $instance['bundle'], $view_mode);
           $display_options = $display->getComponent($instance['field_name']);
@@ -512,7 +503,7 @@ function image_field_update_instance($instance, $prior_instance) {
 }
 
 /**
- * Clears cached versions of a specific file in all styles.
+ * Clear cached versions of a specific file in all styles.
  *
  * @param $path
  *   The Drupal file path to the original image.
@@ -555,7 +546,7 @@ function image_image_style_load($styles) {
 }
 
 /**
- * Gets an array of image styles suitable for using as select list options.
+ * Get an array of image styles suitable for using as select list options.
  *
  * @param $include_empty
  *   If TRUE a <none> option will be inserted in the options array.
@@ -579,7 +570,7 @@ function image_style_options($include_empty = TRUE) {
 }
 
 /**
- * Page callback: Generates a derivative, given a style and image path.
+ * Menu callback; Given a style and image path, generate a derivative.
  *
  * After generating an image, transfer it to the requesting agent.
  *
@@ -745,7 +736,7 @@ function image_style_transform_dimensions($style_name, array &$dimensions) {
 }
 
 /**
- * Flushes cached media for a style.
+ * Flush cached media for a style.
  *
  * @param $style
  *   An image style array.
@@ -771,7 +762,7 @@ function image_style_flush($style) {
 }
 
 /**
- * Returns the URL for an image derivative given a style and image path.
+ * Return the URL for an image derivative given a style and image path.
  *
  * @param $style_name
  *   The name of the style to be used with this image.
@@ -798,7 +789,7 @@ function image_style_url($style_name, $path) {
 }
 
 /**
- * Returns the URI of an image when using a style.
+ * Return the URI of an image when using a style.
  *
  * The path returned by this function may not exist. The default generation
  * method only creates images when they are requested by a user's browser.
@@ -824,10 +815,7 @@ function image_style_path($style_name, $uri) {
 }
 
 /**
- * Returns a set of image effects.
- *
- * These image effects are exposed by modules implementing
- * hook_image_effect_info().
+ * Pull in image effects exposed by modules implementing hook_image_effect_info().
  *
  * @return
  *   An array of image effects to be used when transforming images.
@@ -869,7 +857,7 @@ function image_effect_definitions() {
 }
 
 /**
- * Loads the definition for an image effect.
+ * Load the definition for an image effect.
  *
  * The effect definition is a set of core properties for an image effect, not
  * containing any user-settings. The definition defines various functions to
@@ -896,7 +884,7 @@ function image_effect_definition_load($effect) {
 }
 
 /**
- * Loads a single image effect.
+ * Load a single image effect.
  *
  * @param $ieid
  *   The image effect ID.
@@ -933,7 +921,7 @@ function image_effect_load($ieid, $style_name) {
 }
 
 /**
- * Saves an image effect.
+ * Save an image effect.
  *
  * @param ImageStyle $style
  *   The image style this effect belongs to.
@@ -962,7 +950,7 @@ function image_effect_save($style, &$effect) {
 }
 
 /**
- * Deletes an image effect.
+ * Delete an image effect.
  *
  * @param ImageStyle $style
  *   The image style this effect belongs to.
@@ -976,7 +964,7 @@ function image_effect_delete($style, $effect) {
 }
 
 /**
- * Applies an image effect to the image object.
+ * Given an image object and effect, perform the effect on the file.
  *
  * @param $image
  *   An image object returned by image_load().
@@ -1032,7 +1020,7 @@ function theme_image_style($variables) {
 }
 
 /**
- * Accepts a keyword (center, top, left, etc) and returns it as a pixel offset.
+ * Accept a keyword (center, top, left, etc) and return it as a pixel offset.
  *
  * @param $value
  * @param $current_pixels
diff --git a/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php b/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
index d820050..eda9f5c 100644
--- a/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
+++ b/core/modules/image/lib/Drupal/image/Plugin/Core/Entity/ImageStyle.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains \Drupal\image\Plugin\Core\Entity\ImageStyle.
+ * Definition of Drupal\image\Plugin\Core\Entity\ImageStyle.
  */
 
 namespace Drupal\image\Plugin\Core\Entity;
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php b/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php
index 84a5ed458..0d09461 100644
--- a/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageAdminStylesTest.php
@@ -68,7 +68,7 @@ function testStyle() {
     // Setup a style to be created and effects to add to it.
     $style_name = strtolower($this->randomName(10));
     $style_label = $this->randomString();
-    $style_path = 'admin/config/media/image-styles/manage/' . $style_name;
+    $style_path = 'admin/config/media/image-styles/edit/' . $style_name;
     $effect_edits = array(
       'image_resize' => array(
         'data[width]' => 100,
@@ -120,10 +120,6 @@ function testStyle() {
 
     // Load the saved image style.
     $style = entity_load('image_style', $style_name);
-    // Ensure that the image style URI matches our expected path.
-    $style_uri = $style->uri();
-    $style_uri_path = url($style_uri['path'], $style_uri['options']);
-    $this->assertTrue(strpos($style_uri_path, $style_path) !== FALSE, 'The image style URI is correct.');
 
     // Confirm that all effects on the image style have settings on the effect
     // edit form that match what was saved.
@@ -182,7 +178,7 @@ function testStyle() {
     $this->drupalPost($style_path, $edit, t('Update style'));
 
     // Note that after changing the style name, the style path is changed.
-    $style_path = 'admin/config/media/image-styles/manage/' . $style_name;
+    $style_path = 'admin/config/media/image-styles/edit/' . $style_name;
 
     // Check that the URL was updated.
     $this->drupalGet($style_path);
@@ -233,7 +229,7 @@ function testStyle() {
     // Style deletion form.
 
     // Delete the style.
-    $this->drupalPost($style_path . '/delete', array(), t('Delete'));
+    $this->drupalPost('admin/config/media/image-styles/delete/' . $style_name, array(), t('Delete'));
 
     // Confirm the style directory has been removed.
     $directory = file_default_scheme() . '://styles/' . $style_name;
@@ -252,7 +248,7 @@ function testStyleReplacement() {
     $style_label = $this->randomString();
     $style = entity_create('image_style', array('name' => $style_name, 'label' => $style_label));
     $style->save();
-    $style_path = 'admin/config/media/image-styles/manage/';
+    $style_path = 'admin/config/media/image-styles/edit/' . $style_name;
 
     // Create an image field that uses the new style.
     $field_name = strtolower($this->randomName(10));
@@ -280,7 +276,7 @@ function testStyleReplacement() {
       'name' => $new_style_name,
       'label' => $new_style_label,
     );
-    $this->drupalPost($style_path . $style_name, $edit, t('Update style'));
+    $this->drupalPost('admin/config/media/image-styles/edit/' . $style_name, $edit, t('Update style'));
     $this->assertText(t('Changes to the style have been saved.'), format_string('Style %name was renamed to %new_name.', array('%name' => $style_name, '%new_name' => $new_style_name)));
     $this->drupalGet('node/' . $nid);
     $this->assertRaw(image_style_url($new_style_name, file_load($node->{$field_name}[LANGUAGE_NOT_SPECIFIED][0]['fid'])->uri), 'Image displayed using style replacement style.');
@@ -289,7 +285,7 @@ function testStyleReplacement() {
     $edit = array(
       'replacement' => 'thumbnail',
     );
-    $this->drupalPost($style_path . $new_style_name . '/delete', $edit, t('Delete'));
+    $this->drupalPost('admin/config/media/image-styles/delete/' . $new_style_name, $edit, t('Delete'));
     $message = t('Style %name was deleted.', array('%name' => $new_style_label));
     $this->assertRaw($message);
 
diff --git a/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php b/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php
index f3f7f86..760e72d 100644
--- a/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php
+++ b/core/modules/image/lib/Drupal/image/Tests/ImageFieldTestBase.php
@@ -36,7 +36,7 @@
    *
    * @var array
    */
-  public static $modules = array('node', 'image', 'field_ui');
+  public static $modules = array('node', 'image');
 
   protected $admin_user;
 
@@ -49,7 +49,7 @@ function setUp() {
       $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
     }
 
-    $this->admin_user = $this->drupalCreateUser(array('access content', 'access administration pages', 'administer site configuration', 'administer content types', 'administer node fields', 'administer nodes', 'create article content', 'edit any article content', 'delete any article content', 'administer image styles'));
+    $this->admin_user = $this->drupalCreateUser(array('access content', 'access administration pages', 'administer site configuration', 'administer content types', 'administer nodes', 'create article content', 'edit any article content', 'delete any article content', 'administer image styles'));
     $this->drupalLogin($this->admin_user);
   }
 
diff --git a/core/modules/jsonld/lib/Drupal/jsonld/JsonldBundle.php b/core/modules/jsonld/lib/Drupal/jsonld/JsonldBundle.php
index 6aa69ec..00f1433 100644
--- a/core/modules/jsonld/lib/Drupal/jsonld/JsonldBundle.php
+++ b/core/modules/jsonld/lib/Drupal/jsonld/JsonldBundle.php
@@ -44,6 +44,11 @@ public function build(ContainerBuilder $container) {
         'jsonld' => 'Drupal\jsonld\JsonldRdfSchemaNormalizer',
       ),
     );
+    // Encoders can only specify which format they support in
+    // Encoder::supportsEncoding().
+    $encoders = array(
+      'jsonld' => 'Drupal\jsonld\JsonldEncoder',
+    );
 
     // Add Normalizers to service container.
     foreach ($normalizers as $supported_class => $formats) {
@@ -55,10 +60,11 @@ public function build(ContainerBuilder $container) {
       }
     }
 
-    // Add the encoder to the service container. Encoders can only specify which
-    // format they support in Encoder::supportsEncoding().
-    $container->register('serializer.encoder.jsonld', 'Drupal\jsonld\JsonldEncoder')
-      ->addTag('encoder', array('priority' => $priority));
+    // Add Encoders to service container.
+    foreach ($encoders as $format => $encoder_class) {
+      $container->register("serializer.encoder.{$format}", $encoder_class)
+        ->addTag('encoder', array('priority' => $priority));
+    }
 
     $container->register('jsonld.subscriber', 'Drupal\jsonld\EventSubscriber\JsonldSubscriber')
       ->addTag('event_subscriber');
diff --git a/core/modules/jsonld/lib/Drupal/jsonld/Tests/RdfSchemaSerializationTest.php b/core/modules/jsonld/lib/Drupal/jsonld/Tests/RdfSchemaSerializationTest.php
index eacf9df..c4422aa 100644
--- a/core/modules/jsonld/lib/Drupal/jsonld/Tests/RdfSchemaSerializationTest.php
+++ b/core/modules/jsonld/lib/Drupal/jsonld/Tests/RdfSchemaSerializationTest.php
@@ -15,8 +15,6 @@
 
 class RdfSchemaSerializationTest extends DrupalUnitTestBase {
 
-  public static $modules = array('system');
-
   public static function getInfo() {
     return array(
       'name' => 'Site schema JSON-LD serialization',
@@ -29,8 +27,9 @@ public static function getInfo() {
    * Tests the serialization of site schemas.
    */
   function testSchemaSerialization() {
-    // url() requires the {url_alias} table.
-    $this->installSchema('system', 'url_alias');
+    // In order to use url() the url_alias table must be installed, so system
+    // is enabled.
+    $this->enableModules(array('system'));
 
     $entity_type = $bundle = 'entity_test';
 
diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index b078d23..1e6cdc4 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -1002,7 +1002,7 @@ function language_content_settings_form(array $form, array $form_state, array $s
     $default[$entity_type] = FALSE;
 
     // Check whether we have any custom setting.
-    foreach (entity_get_bundles($entity_type) as $bundle => $bundle_info) {
+    foreach (entity_get_bundles($entity_type) as $bundle) {
       $conf = language_get_default_configuration($entity_type, $bundle);
       if (!empty($conf['language_show']) || $conf['langcode'] != 'site_default') {
         $default[$entity_type] = $entity_type;
@@ -1043,10 +1043,10 @@ function language_content_settings_form(array $form, array $form_state, array $s
       ),
     );
 
-    foreach (entity_get_bundles($entity_type) as $bundle => $bundle_info) {
+    foreach (entity_get_bundles($entity_type) as $bundle) {
       $form['settings'][$entity_type][$bundle]['settings'] = array(
         '#type' => 'item',
-        '#label' => $bundle_info['label'],
+        '#label' => isset($info['bundles'][$bundle]) ? $info['bundles'][$bundle]['label'] : $labels[$entity_type],
         'language' => array(
           '#type' => 'language_configuration',
           '#entity_information' => array(
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 3486ff4..931eab9 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -47,8 +47,7 @@ function language_help($path, $arg) {
 
       return $output;
 
-    case 'admin/structure/block/manage/%':
-    case 'admin/structure/block/add/%/%':
+    case 'admin/structure/block/manage/%/%':
       if ($arg[4] == 'language' && $arg[5] == 'language_interface') {
         return '<p>' . t('With multiple languages enabled, registered users can select their preferred language and authors can assign a specific language to content.') . '</p>';
       }
diff --git a/core/modules/language/lib/Drupal/language/Plugin/block/block/LanguageBlock.php b/core/modules/language/lib/Drupal/language/Plugin/block/block/LanguageBlock.php
index ec34971..74fb83a 100644
--- a/core/modules/language/lib/Drupal/language/Plugin/block/block/LanguageBlock.php
+++ b/core/modules/language/lib/Drupal/language/Plugin/block/block/LanguageBlock.php
@@ -31,16 +31,15 @@ function blockAccess() {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
-    $build = array();
+  public function blockBuild() {
     $path = drupal_is_front_page() ? '<front>' : current_path();
     list($plugin_id, $type) = explode(':', $this->getPluginId());
     $links = language_negotiation_get_switch_links($type, $path);
 
     if (isset($links->links)) {
-      $build = array(
+      return array(
         '#theme' => 'links__language_block',
         '#links' => $links->links,
         '#attributes' => array(
@@ -50,7 +49,6 @@ public function build() {
         ),
       );
     }
-    return $build;
   }
 
 }
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php
index 8aea763..436b371 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageNegotiationInfoTest.php
@@ -139,7 +139,7 @@ protected function languageNegotiationUpdate($op = 'enable') {
       $function = "module_{$op}";
       $function($modules);
       // Reset hook implementation cache.
-      $this->container->get('module_handler')->resetImplementations();
+      module_implements_reset();
     }
 
     drupal_static_reset('language_types_info');
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
index ac834d1..8effdfe 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
@@ -56,7 +56,7 @@ function testLanguageBlock() {
 
     // Assert that the language switching block is displayed on the frontpage.
     $this->drupalGet('');
-    $this->assertText($block->label(), 'Language switcher block found.');
+    $this->assertText($block['subject'], 'Language switcher block found.');
 
     // Assert that only the current language is marked as active.
     list($language_switcher) = $this->xpath('//div[@id=:id]/div[@class="content"]', array(':id' => 'block-test-language-block'));
diff --git a/core/modules/layout/lib/Drupal/layout/Plugin/Derivative/Layout.php b/core/modules/layout/lib/Drupal/layout/Plugin/Derivative/Layout.php
index c5d0dde..a6c4ea9 100644
--- a/core/modules/layout/lib/Drupal/layout/Plugin/Derivative/Layout.php
+++ b/core/modules/layout/lib/Drupal/layout/Plugin/Derivative/Layout.php
@@ -58,12 +58,11 @@ public function getDerivativeDefinitions(array $base_plugin_definition) {
     $available_layout_providers = array();
 
     // Add all modules as possible layout providers.
-    // @todo Inject the module handler.
-    foreach (drupal_container()->get('module_handler')->getModuleList() as $module => $filename) {
+    foreach (module_list() as $module) {
       $available_layout_providers[$module] = array(
         'type' => 'module',
         'provider' => $module,
-        'dir' => dirname($filename),
+        'dir' => drupal_get_path('module', $module),
       );
     }
 
diff --git a/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php b/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
index a608873..7b5413f 100644
--- a/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
+++ b/core/modules/link/lib/Drupal/link/Tests/LinkFieldTest.php
@@ -468,7 +468,7 @@ function testLinkSeparateFormatter() {
    */
   protected function renderTestEntity($id, $view_mode = 'full', $reset = TRUE) {
     if ($reset) {
-      $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+      entity_get_controller('test_entity')->resetCache(array($id));
     }
     $entity = field_test_entity_test_load($id);
     $display = entity_get_display($entity->entityType(), $entity->bundle(), $view_mode);
diff --git a/core/modules/link/lib/Drupal/link/Tests/LinkFieldUITest.php b/core/modules/link/lib/Drupal/link/Tests/LinkFieldUITest.php
index f8ff160..2a29792 100644
--- a/core/modules/link/lib/Drupal/link/Tests/LinkFieldUITest.php
+++ b/core/modules/link/lib/Drupal/link/Tests/LinkFieldUITest.php
@@ -32,7 +32,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $this->web_user = $this->drupalCreateUser(array('administer content types', 'administer node fields', 'administer node display'));
+    $this->web_user = $this->drupalCreateUser(array('administer content types'));
     $this->drupalLogin($this->web_user);
   }
 
diff --git a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php
index b934851..bd1f5a3 100644
--- a/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php
+++ b/core/modules/locale/lib/Drupal/locale/Tests/LocaleUpdateTest.php
@@ -315,7 +315,6 @@ function testUpdateProjects() {
     // modules not hidden. locale_test_system_info_alter() modifies the project
     // info of the locale_test and locale_test_translate modules.
     state()->set('locale.test_system_info_alter', TRUE);
-    $this->resetAll();
 
     // Check if interface translation data is collected from hook_info.
     $projects = locale_translation_project_list();
@@ -333,7 +332,6 @@ function testUpdateProjectsHidden() {
 
     // Make the test modules look like a normal custom module.
     state()->set('locale.test_system_info_alter', TRUE);
-    $this->resetAll();
 
     // Set test condition: include disabled modules when building a project list.
     $edit = array(
diff --git a/core/modules/menu/lib/Drupal/menu/Plugin/block/block/MenuBlock.php b/core/modules/menu/lib/Drupal/menu/Plugin/block/block/MenuBlock.php
index 4298e5e..7134dc5 100644
--- a/core/modules/menu/lib/Drupal/menu/Plugin/block/block/MenuBlock.php
+++ b/core/modules/menu/lib/Drupal/menu/Plugin/block/block/MenuBlock.php
@@ -24,9 +24,9 @@
 class MenuBlock extends SystemMenuBlock {
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     list($plugin, $menu) = explode(':', $this->getPluginId());
     return menu_tree($menu);
   }
diff --git a/core/modules/menu/menu.admin.inc b/core/modules/menu/menu.admin.inc
index de76a31..1962ce3 100644
--- a/core/modules/menu/menu.admin.inc
+++ b/core/modules/menu/menu.admin.inc
@@ -12,9 +12,7 @@
  * Menu callback which shows an overview page of all the custom menus and their descriptions.
  */
 function menu_overview_page() {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getListController('menu')
-    ->render();
+  return entity_list_controller('menu')->render();
 }
 
 /**
diff --git a/core/modules/menu/menu.api.php b/core/modules/menu/menu.api.php
index 7b949ad..95926a6 100644
--- a/core/modules/menu/menu.api.php
+++ b/core/modules/menu/menu.api.php
@@ -11,7 +11,7 @@
  */
 
 /**
- * Respond to a custom menu creation.
+ * Informs modules that a custom menu was created.
  *
  * This hook is used to notify modules that a custom menu has been created.
  * Contributed modules may use the information to perform actions based on the
@@ -31,7 +31,7 @@ function hook_menu_insert($menu) {
 }
 
 /**
- * Respond to a custom menu update.
+ * Informs modules that a custom menu was updated.
  *
  * This hook is used to notify modules that a custom menu has been updated.
  * Contributed modules may use the information to perform actions based on the
@@ -51,7 +51,7 @@ function hook_menu_update($menu) {
 }
 
 /**
- * Respond to a custom menu deletion.
+ * Informs modules that a custom menu was deleted.
  *
  * This hook is used to notify modules that a custom menu along with all links
  * contained in it (if any) has been deleted. Contributed modules may use the
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index 7e26d50..3d4a360 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -12,7 +12,6 @@
  */
 
 use Drupal\node\Plugin\Core\Entity\Node;
-use Drupal\block\Plugin\Core\Entity\Block;
 use Drupal\system\Plugin\Core\Entity\Menu;
 use Drupal\system\Plugin\block\block\SystemMenuBlock;
 use Symfony\Component\HttpFoundation\JsonResponse;
@@ -293,7 +292,6 @@ function menu_menu_predelete(Menu $menu) {
  */
 function menu_menu_delete(Menu $menu) {
   menu_cache_clear_all();
-
   // Invalidate the block cache to update menu-based derivatives.
   if (module_exists('block')) {
     drupal_container()->get('plugin.manager.block')->clearCachedDefinitions();
@@ -433,11 +431,11 @@ function menu_reset_item($link) {
 /**
  * Implements hook_block_view_alter().
  */
-function menu_block_view_alter(array &$build, Block $block) {
+function menu_block_view_alter(&$build, $block) {
   // Add contextual links for system menu blocks.
-  if ($block->getPlugin() instanceof SystemMenuBlock) {
-    foreach (element_children($build['content']) as $key) {
-      $build['#contextual_links']['menu'] = array('admin/structure/menu/manage', array($build['content'][$key]['#original_link']['menu_name']));
+  if ($block instanceof SystemMenuBlock) {
+    foreach (element_children($build) as $key) {
+      $build['#contextual_links']['menu'] = array('admin/structure/menu/manage', array($build[$key]['#original_link']['menu_name']));
     }
   }
 }
@@ -581,7 +579,7 @@ function menu_form_node_form_alter(&$form, $form_state) {
     '#access' => user_access('administer menu'),
     '#collapsible' => TRUE,
     '#collapsed' => !$link['link_title'],
-    '#group' => 'advanced',
+    '#group' => 'additional_settings',
     '#attached' => array(
       'library' => array(array('menu', 'drupal.menu')),
     ),
diff --git a/core/modules/node/content_types.inc b/core/modules/node/content_types.inc
index c958f27..538b19f 100644
--- a/core/modules/node/content_types.inc
+++ b/core/modules/node/content_types.inc
@@ -30,14 +30,12 @@ function node_overview_types() {
         'weight' => 0,
       );
 
-      if ($field_ui && user_access('administer node fields')) {
+      if ($field_ui) {
         $links['fields'] = array(
           'title' => t('manage fields'),
           'href' => 'admin/structure/types/manage/' . $type->type . '/fields',
           'weight' => 5,
         );
-      }
-      if ($field_ui && user_access('administer node display')) {
         $links['display'] = array(
           'title' => t('manage display'),
           'href' => 'admin/structure/types/manage/' . $type->type . '/display',
diff --git a/core/modules/node/lib/Drupal/node/NodeFormController.php b/core/modules/node/lib/Drupal/node/NodeFormController.php
index 47e1f30..08ecf08 100644
--- a/core/modules/node/lib/Drupal/node/NodeFormController.php
+++ b/core/modules/node/lib/Drupal/node/NodeFormController.php
@@ -56,20 +56,6 @@ protected function prepareEntity(EntityInterface $node) {
    * Overrides Drupal\Core\Entity\EntityFormController::form().
    */
   public function form(array $form, array &$form_state, EntityInterface $node) {
-
-    // Visual representation of the node content form depends on following
-    // parameters:
-    // - the current user has access to view the administration theme.
-    // - the current path is an admin path.
-    // - the node/add / edit pages are configured to be represented in the
-    //   administration theme.
-    $container_type = 'vertical_tabs';
-    $request = drupal_container()->get('request');
-    $path = $request->attributes->get('system_path');
-    if (user_access('view the administration theme') && path_is_admin($path)) {
-      $container_type = 'container';
-    }
-
     $user_config = config('user.settings');
     // Some special stuff when previewing a node.
     if (isset($form_state['node_preview'])) {
@@ -123,47 +109,20 @@ public function form(array $form, array &$form_state, EntityInterface $node) {
       '#access' => isset($language_configuration['language_show']) && $language_configuration['language_show'],
     );
 
-    $form['advanced'] = array(
-      '#type' => $container_type,
-      '#attributes' => array('class' => array('entity-meta')),
+    $form['additional_settings'] = array(
+      '#type' => 'vertical_tabs',
       '#weight' => 99,
     );
-    $form['meta'] = array (
-      '#type' => 'fieldset',
-      '#attributes' => array('class' => array('entity-meta-header')),
-      '#type' => 'container',
-      '#group' => 'advanced',
-      '#weight' => -100,
-      '#access' => $container_type == 'container',
-      // @todo Geez. Any .status is styled as OK icon? Really?
-      'published' => array(
-        '#type' => 'item',
-        '#wrapper_attributes' => array('class' => array('published')),
-        '#markup' => !empty($node->status) ? t('Published') : t('Not published'),
-        '#access' => !empty($node->nid),
-      ),
-      'changed' => array(
-        '#type' => 'item',
-        '#wrapper_attributes' => array('class' => array('changed', 'container-inline')),
-        '#title' => t('Last saved'),
-        '#markup' => !$node->isNew() ? format_date($node->changed, 'short') : t('Not saved yet'),
-      ),
-      'author' => array(
-        '#type' => 'item',
-        '#wrapper_attributes' => array('class' => array('author', 'container-inline')),
-        '#title' => t('Author'),
-        '#markup' => user_format_name(user_load($node->uid)),
-      ),
-    );
 
     // Add a log field if the "Create new revision" option is checked, or if the
     // current user has the ability to check that option.
     $form['revision_information'] = array(
-      '#type' => $container_type == 'container' ? 'container' : 'details',
-      '#group' => $container_type == 'container' ? 'meta' : 'advanced',
+      '#type' => 'details',
       '#title' => t('Revision information'),
+      '#collapsible' => TRUE,
       // Collapsed by default when "Create new revision" is unchecked.
       '#collapsed' => !$node->isNewRevision(),
+      '#group' => 'additional_settings',
       '#attributes' => array(
         'class' => array('node-form-revision-information'),
       ),
@@ -174,24 +133,30 @@ public function form(array $form, array &$form_state, EntityInterface $node) {
       '#access' => $node->isNewRevision() || user_access('administer nodes'),
     );
 
-    $form['revision_information']['revision']['revision'] = array(
+    $form['revision_information']['revision'] = array(
       '#type' => 'checkbox',
       '#title' => t('Create new revision'),
       '#default_value' => $node->isNewRevision(),
       '#access' => user_access('administer nodes'),
     );
 
-    $form['revision_information']['revision']['log'] = array(
+    // Check the revision log checkbox when the log textarea is filled in.
+    // This must not happen if "Create new revision" is enabled by default,
+    // since the state would auto-disable the checkbox otherwise.
+    if (!$node->isNewRevision()) {
+      $form['revision_information']['revision']['#states'] = array(
+        'checked' => array(
+          'textarea[name="log"]' => array('empty' => FALSE),
+        ),
+      );
+    }
+
+    $form['revision_information']['log'] = array(
       '#type' => 'textarea',
       '#title' => t('Revision log message'),
       '#rows' => 4,
       '#default_value' => !empty($node->log) ? $node->log : '',
       '#description' => t('Briefly describe the changes you have made.'),
-      '#states' => array(
-        'visible' => array(
-          ':input[name="revision"]' => array('checked' => TRUE),
-        ),
-      ),
     );
 
     // Node author information for administrators.
@@ -201,7 +166,7 @@ public function form(array $form, array &$form_state, EntityInterface $node) {
       '#title' => t('Authoring information'),
       '#collapsible' => TRUE,
       '#collapsed' => TRUE,
-      '#group' => 'advanced',
+      '#group' => 'additional_settings',
       '#attributes' => array(
         'class' => array('node-form-author'),
       ),
@@ -242,7 +207,7 @@ public function form(array $form, array &$form_state, EntityInterface $node) {
       '#title' => t('Publishing options'),
       '#collapsible' => TRUE,
       '#collapsed' => TRUE,
-      '#group' => 'advanced',
+      '#group' => 'additional_settings',
       '#attributes' => array(
         'class' => array('node-form-options'),
       ),
diff --git a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
index a78309b..216cfc9 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/Core/Entity/Node.php
@@ -39,6 +39,20 @@
  *   },
  *   bundle_keys = {
  *     "bundle" = "type"
+ *   },
+ *   view_modes = {
+ *     "full" = {
+ *       "label" = "Full content",
+ *       "custom_settings" = FALSE
+ *     },
+ *     "teaser" = {
+ *       "label" = "Teaser",
+ *       "custom_settings" = TRUE
+ *     },
+ *     "rss" = {
+ *       "label" = "RSS",
+ *       "custom_settings" = FALSE
+ *     }
  *   }
  * )
  */
@@ -220,5 +234,4 @@ public function createDuplicate() {
   public function getRevisionId() {
     return $this->vid;
   }
-
 }
diff --git a/core/modules/node/lib/Drupal/node/Plugin/block/block/RecentContentBlock.php b/core/modules/node/lib/Drupal/node/Plugin/block/block/RecentContentBlock.php
index 03c3c43..cb05c5c 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/block/block/RecentContentBlock.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/block/block/RecentContentBlock.php
@@ -23,9 +23,9 @@
 class RecentContentBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'block_count' => 10,
     );
@@ -59,9 +59,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     if ($nodes = node_get_recent($this->configuration['block_count'])) {
       return array(
         '#theme' => 'node_recent_block',
diff --git a/core/modules/node/lib/Drupal/node/Plugin/block/block/SyndicateBlock.php b/core/modules/node/lib/Drupal/node/Plugin/block/block/SyndicateBlock.php
index 9caabc3..5c83e27 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/block/block/SyndicateBlock.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/block/block/SyndicateBlock.php
@@ -23,9 +23,9 @@
 class SyndicateBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'block_count' => 10,
     );
@@ -39,9 +39,9 @@ public function blockAccess() {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(
       '#theme' => 'feed_icon',
       '#url' => 'rss.xml',
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/row/Rss.php b/core/modules/node/lib/Drupal/node/Plugin/views/row/Rss.php
index 20c8f12..31dab0b 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/row/Rss.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/row/Rss.php
@@ -64,10 +64,12 @@ public function buildOptionsForm(&$form, &$form_state) {
    * Return the main options, which are shown in the summary title.
    */
   public function buildOptionsForm_summary_options() {
-    $view_modes = entity_get_view_modes('node');
+    $entity_info = entity_get_info('node');
     $options = array();
-    foreach ($view_modes as $mode => $settings) {
-      $options[$mode] = $settings['label'];
+    if (!empty($entity_info['view_modes'])) {
+      foreach ($entity_info['view_modes'] as $mode => $settings) {
+        $options[$mode] = $settings['label'];
+      }
     }
     $options['title'] = t('Title only');
     $options['default'] = t('Use site default RSS settings');
diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/wizard/Node.php b/core/modules/node/lib/Drupal/node/Plugin/views/wizard/Node.php
index a7f4f88..fec2bfe 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/wizard/Node.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/wizard/Node.php
@@ -248,6 +248,7 @@ protected  function display_options_row(&$display_options, $row_plugin, $row_opt
    */
   protected function build_filters(&$form, &$form_state) {
     parent::build_filters($form, $form_state);
+    $entity_info = $this->entity_info;
 
     $selected_bundle = static::getSelected($form_state, array('show', 'type'), 'all', $form['displays']['show']['type']);
 
@@ -269,7 +270,7 @@ protected function build_filters(&$form, &$form_state) {
     // entities. If a particular entity type (i.e., bundle) has been
     // selected above, then we only search for taxonomy fields associated
     // with that bundle. Otherwise, we use all bundles.
-    $bundles = array_keys(entity_get_bundles($this->entity_type));
+    $bundles = array_keys($entity_info['bundles']);
     // Double check that this is a real bundle before using it (since above
     // we added a dummy option 'all' to the bundle list on the form).
     if (isset($selected_bundle) && in_array($selected_bundle, $bundles)) {
diff --git a/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php b/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php
index 2821f7e..873c7ea 100644
--- a/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/MultiStepNodeFormBasicOptionsTest.php
@@ -12,13 +12,14 @@
 /**
  * Tests basic options of multi-step node forms.
  */
-class MultiStepNodeFormBasicOptionsTest extends NodeTestBase {
+class MultiStepNodeFormBasicOptionsTest extends WebTestBase {
 
   /**
    * Modules to enable.
    *
    * @var array
    */
+  public static $modules = array('poll');
 
   public static function getInfo() {
     return array(
@@ -28,52 +29,26 @@ public static function getInfo() {
     );
   }
 
+  function setUp() {
+    parent::setUp();
+
+    $web_user = $this->drupalCreateUser(array('administer nodes', 'create poll content'));
+    $this->drupalLogin($web_user);
+  }
+
   /**
    * Tests changing the default values of basic options to ensure they persist.
    */
   function testMultiStepNodeFormBasicOptions() {
-    // Prepare a user to create the node.
-    $web_user = $this->drupalCreateUser(array('administer nodes', 'create page content'));
-    $this->drupalLogin($web_user);
-
-    // Create an unlimited cardinality field.
-    $this->field_name = drupal_strtolower($this->randomName());
-    $this->field = array(
-      'field_name' => drupal_strtolower($this->field_name),
-      'type' => 'text',
-      'cardinality' => -1,
-    );
-    field_create_field($this->field);
-
-    // Attach an instance of the field to the page content type.
-    $this->instance = array(
-      'field_name' => $this->field_name,
-      'entity_type' => 'node',
-      'bundle' => 'page',
-      'label' => $this->randomName() . '_label',
-      'settings' => array(
-        'text_processing' => TRUE,
-      ),
-      'widget' => array(
-        'type' => 'text_textfield',
-      ),
-      'display' => array(
-        'full' => array(
-          'type' => 'text_default',
-        ),
-      ),
-    );
-    field_create_instance($this->instance);
-    $langcode = LANGUAGE_NOT_SPECIFIED;
-
     $edit = array(
       'title' => 'a',
       'status' => FALSE,
       'promote' => FALSE,
       'sticky' => 1,
-      "$this->field_name[$langcode][0][value]" => $this->randomString(32),
+      'choice[new:0][chtext]' => 'a',
+      'choice[new:1][chtext]' => 'a',
     );
-    $this->drupalPost('node/add/page', $edit, t('Add another item'));
+    $this->drupalPost('node/add/poll', $edit, t('Add another choice'));
     $this->assertNoFieldChecked('edit-status', 'status stayed unchecked');
     $this->assertNoFieldChecked('edit-promote', 'promote stayed unchecked');
     $this->assertFieldChecked('edit-sticky', 'sticky stayed checked');
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php
index 433c6bb..1794e89 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeAccessFieldTest.php
@@ -34,7 +34,7 @@ public function setUp() {
 
     // Create some users.
     $this->admin_user = $this->drupalCreateUser(array('access content', 'bypass node access'));
-    $this->content_admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields'));
+    $this->content_admin_user = $this->drupalCreateUser(array('access content', 'administer content types'));
 
     // Add a custom field to the page content type.
     $this->field_name = drupal_strtolower($this->randomName() . '_field_name');
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
index 3beb969..b5d5205 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeBlockFunctionalTest.php
@@ -61,7 +61,7 @@ public function testRecentNodeBlock() {
     ));
 
     // Enable the recent content block with two items.
-    $block = $this->drupalPlaceBlock('node_recent_block', array('machine_name' => 'test_block'), array('block_count' => 2));
+    $block = $this->drupalPlaceBlock('node_recent_block', array('machine_name' => 'test_block', 'block_count' => 2));
 
     // Test that block is not visible without nodes.
     $this->drupalGet('');
@@ -91,7 +91,7 @@ public function testRecentNodeBlock() {
     // see the block.
     $this->drupalLogout();
     $this->drupalGet('');
-    $this->assertNoText($block->label(), 'Block was not found.');
+    $this->assertNoText($block['subject'], 'Block was not found.');
 
     // Test that only the 2 latest nodes are shown.
     $this->drupalLogin($this->webUser);
@@ -106,8 +106,9 @@ public function testRecentNodeBlock() {
     $this->drupalLogin($this->adminUser);
 
     // Set the number of recent nodes to show to 10.
-    $block->set('settings', array('block_count' => 10));
-    $block->save();
+    $config = config($block['config_id']);
+    $config->set('block_count', 10);
+    $config->save();
 
     // Post an additional node.
     $node4 = $this->drupalCreateNode($default_settings);
@@ -124,30 +125,24 @@ public function testRecentNodeBlock() {
 
     // Enable the "Powered by Drupal" block only on article nodes.
     $block = $this->drupalPlaceBlock('system_powered_by_block', array(
-      'visibility' => array(
-        'node_type' => array(
-          'types' => array(
-            'article' => 'article',
-          ),
-        ),
-      ),
-    ));
-    $visibility = $block->get('visibility');
-    $this->assertTrue(isset($visibility['node_type']['types']['article']), 'Visibility settings were saved to configuration');
+      'visibility[node_type][types][article]' => TRUE,
+             ));
+    $config = config($block['config_id']);
+    $node_type_visibility = $config->get('visibility.node_type.types.article');
+    $this->assertEqual($node_type_visibility, 'article', 'Visibility settings were saved to configuration');
 
     // Create a page node.
     $node5 = $this->drupalCreateNode(array('uid' => $this->adminUser->uid, 'type' => 'page'));
 
     // Verify visibility rules.
     $this->drupalGet('');
-    $label = $block->label();
-    $this->assertNoText($label, 'Block was not displayed on the front page.');
+    $this->assertNoText($block['subject'], 'Block was not displayed on the front page.');
     $this->drupalGet('node/add/article');
-    $this->assertText($label, 'Block was displayed on the node/add/article page.');
+    $this->assertText($block['subject'], 'Block was displayed on the node/add/article page.');
     $this->drupalGet('node/' . $node1->nid);
-    $this->assertText($label, 'Block was displayed on the node/N when node is of type article.');
+    $this->assertText($block['subject'], 'Block was displayed on the node/N when node is of type article.');
     $this->drupalGet('node/' . $node5->nid);
-    $this->assertNoText($label, 'Block was not displayed on nodes of type page.');
+    $this->assertNoText($block['subject'], 'Block was not displayed on nodes of type page.');
   }
 
 }
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeSyndicateBlockTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeSyndicateBlockTest.php
index 887b7ea..4e5a209 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeSyndicateBlockTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeSyndicateBlockTest.php
@@ -41,7 +41,6 @@ function setUp() {
   public function testSyndicateBlock() {
     // Place the "Syndicate" block and confirm that it is rendered.
     $this->drupalPlaceBlock('node_syndicate_block', array('machine_name' => 'test_syndicate_block'));
-    $this->drupalGet('');
     $this->assertFieldByXPath('//div[@id="block-test-syndicate-block"]/*', NULL, 'Syndicate block found.');
   }
 
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
index df99749..ccdbf9c 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTranslationUITest.php
@@ -80,7 +80,7 @@ function testTranslateLinkContentAdminPage() {
    * Tests field translation form.
    */
   function testFieldTranslationForm() {
-    $admin_user = $this->drupalCreateUser(array('translate any entity', 'access administration pages', 'bypass node access', 'administer node fields'));
+    $admin_user = $this->drupalCreateUser(array('translate any entity', 'access administration pages', 'bypass node access'));
     $this->drupalLogin($admin_user);
 
     $article = $this->drupalCreateNode(array('type' => 'article', 'langcode' => 'en'));
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTypeInitialLanguageTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTypeInitialLanguageTest.php
index ce6591f..c57cf53 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTypeInitialLanguageTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTypeInitialLanguageTest.php
@@ -30,7 +30,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $web_user = $this->drupalCreateUser(array('bypass node access', 'administer content types', 'administer node fields', 'administer node display', 'administer languages'));
+    $web_user = $this->drupalCreateUser(array('bypass node access', 'administer content types', 'administer languages'));
     $this->drupalLogin($web_user);
   }
 
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTypePersistenceTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTypePersistenceTest.php
index d8fa419..c51b5a0 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTypePersistenceTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTypePersistenceTest.php
@@ -11,8 +11,6 @@
  * Test node type customizations persistence.
  */
 class NodeTypePersistenceTest extends NodeTestBase {
-  // Enable the prerequisite modules for forum
-  public static $modules = array('history', 'taxonomy', 'options', 'comment');
   public static function getInfo() {
     return array(
       'name' => 'Node type persist',
@@ -27,59 +25,59 @@ public static function getInfo() {
   function testNodeTypeCustomizationPersistence() {
     $web_user = $this->drupalCreateUser(array('bypass node access', 'administer content types', 'administer modules'));
     $this->drupalLogin($web_user);
-    $forum_key = 'modules[Core][forum][enable]';
-    $forum_enable = array($forum_key => "1");
-    $forum_disable = array($forum_key => FALSE);
+    $poll_key = 'modules[Core][poll][enable]';
+    $poll_enable = array($poll_key => "1");
+    $poll_disable = array($poll_key => FALSE);
 
-    // Enable forum and verify that the node type is in the DB and is not
+    // Enable poll and verify that the node type is in the DB and is not
     // disabled.
-    $this->drupalPost('admin/modules', $forum_enable, t('Save configuration'));
-    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'forum'))->fetchField();
-    $this->assertNotIdentical($disabled, FALSE, 'Forum node type found in the database');
-    $this->assertEqual($disabled, 0, 'Forum node type is not disabled');
+    $this->drupalPost('admin/modules', $poll_enable, t('Save configuration'));
+    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'poll'))->fetchField();
+    $this->assertNotIdentical($disabled, FALSE, 'Poll node type found in the database');
+    $this->assertEqual($disabled, 0, 'Poll node type is not disabled');
 
-    // Check that forum node type (uncustomized) shows up.
+    // Check that poll node type (uncustomized) shows up.
     $this->drupalGet('node/add');
-    $this->assertText('forum', 'forum type is found on node/add');
+    $this->assertText('poll', 'poll type is found on node/add');
 
-    // Customize forum description.
+    // Customize poll description.
     $description = $this->randomName();
     $edit = array('description' => $description);
-    $this->drupalPost('admin/structure/types/manage/forum', $edit, t('Save content type'));
+    $this->drupalPost('admin/structure/types/manage/poll', $edit, t('Save content type'));
 
-    // Check that forum node type customization shows up.
+    // Check that poll node type customization shows up.
     $this->drupalGet('node/add');
     $this->assertText($description, 'Customized description found');
 
-    // Disable forum and check that the node type gets disabled.
-    $this->drupalPost('admin/modules', $forum_disable, t('Save configuration'));
-    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'forum'))->fetchField();
-    $this->assertEqual($disabled, 1, 'Forum node type is disabled');
+    // Disable poll and check that the node type gets disabled.
+    $this->drupalPost('admin/modules', $poll_disable, t('Save configuration'));
+    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'poll'))->fetchField();
+    $this->assertEqual($disabled, 1, 'Poll node type is disabled');
     $this->drupalGet('node/add');
-    $this->assertNoText('forum', 'forum type is not found on node/add');
+    $this->assertNoText('poll', 'poll type is not found on node/add');
 
-    // Reenable forum and check that the customization survived the module
+    // Reenable poll and check that the customization survived the module
     // disable.
-    $this->drupalPost('admin/modules', $forum_enable, t('Save configuration'));
-    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'forum'))->fetchField();
-    $this->assertNotIdentical($disabled, FALSE, 'Forum node type found in the database');
-    $this->assertEqual($disabled, 0, 'Forum node type is not disabled');
+    $this->drupalPost('admin/modules', $poll_enable, t('Save configuration'));
+    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'poll'))->fetchField();
+    $this->assertNotIdentical($disabled, FALSE, 'Poll node type found in the database');
+    $this->assertEqual($disabled, 0, 'Poll node type is not disabled');
     $this->drupalGet('node/add');
     $this->assertText($description, 'Customized description found');
 
-    // Disable and uninstall forum.
-    $this->drupalPost('admin/modules', $forum_disable, t('Save configuration'));
-    $edit = array('uninstall[forum]' => 'forum');
+    // Disable and uninstall poll.
+    $this->drupalPost('admin/modules', $poll_disable, t('Save configuration'));
+    $edit = array('uninstall[poll]' => 'poll');
     $this->drupalPost('admin/modules/uninstall', $edit, t('Uninstall'));
     $this->drupalPost(NULL, array(), t('Uninstall'));
-    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'forum'))->fetchField();
-    $this->assertTrue($disabled, 'Forum node type is in the database and is disabled');
+    $disabled = db_query('SELECT disabled FROM {node_type} WHERE type = :type', array(':type' => 'poll'))->fetchField();
+    $this->assertTrue($disabled, 'Poll node type is in the database and is disabled');
     $this->drupalGet('node/add');
-    $this->assertNoText('forum', 'forum type is no longer found on node/add');
+    $this->assertNoText('poll', 'poll type is no longer found on node/add');
 
-    // Reenable forum and check that the customization survived the module
+    // Reenable poll and check that the customization survived the module
     // uninstall.
-    $this->drupalPost('admin/modules', $forum_enable, t('Save configuration'));
+    $this->drupalPost('admin/modules', $poll_enable, t('Save configuration'));
     $this->drupalGet('node/add');
     $this->assertText($description, 'Customized description is found even after uninstall and reenable.');
   }
diff --git a/core/modules/node/lib/Drupal/node/Tests/NodeTypeTest.php b/core/modules/node/lib/Drupal/node/Tests/NodeTypeTest.php
index 64fa105..944af15 100644
--- a/core/modules/node/lib/Drupal/node/Tests/NodeTypeTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/NodeTypeTest.php
@@ -80,7 +80,7 @@ function testNodeTypeCreation() {
    * Tests editing a node type using the UI.
    */
   function testNodeTypeEditing() {
-    $web_user = $this->drupalCreateUser(array('bypass node access', 'administer content types', 'administer node fields'));
+    $web_user = $this->drupalCreateUser(array('bypass node access', 'administer content types'));
     $this->drupalLogin($web_user);
 
     $instance = field_info_instance('node', 'body', 'page');
@@ -134,28 +134,35 @@ function testNodeTypeEditing() {
    */
   function testNodeTypeStatus() {
     // Enable all core node modules, and all types should be active.
-    module_enable(array('book'), FALSE);
+    module_enable(array('book', 'poll'), FALSE);
     node_types_rebuild();
     $types = node_type_get_types();
-    foreach (array('book', 'article', 'page') as $type) {
+    foreach (array('book', 'poll', 'article', 'page') as $type) {
       $this->assertTrue(isset($types[$type]), format_string('%type is found in node types.', array('%type' => $type)));
       $this->assertTrue(isset($types[$type]->disabled) && empty($types[$type]->disabled), format_string('%type type is enabled.', array('%type' => $type)));
     }
 
+    // Disable poll module and the respective type should be marked as disabled.
+    module_disable(array('poll'), FALSE);
+    node_types_rebuild();
+    $types = node_type_get_types();
+    $this->assertTrue(!empty($types['poll']->disabled), "Poll module's node type disabled.");
+
     // Disable book module and the respective type should still be active, since
     // it is not provided by hook_node_info().
     module_disable(array('book'), FALSE);
     node_types_rebuild();
     $types = node_type_get_types();
     $this->assertTrue(isset($types['book']) && empty($types['book']->disabled), "Book module's node type still active.");
+    $this->assertTrue(!empty($types['poll']->disabled), "Poll module's node type still disabled.");
     $this->assertTrue(isset($types['article']) && empty($types['article']->disabled), 'Article node type still active.');
     $this->assertTrue(isset($types['page']) && empty($types['page']->disabled), 'Basic page node type still active.');
 
     // Re-enable the modules and verify that the types are active again.
-    module_enable(array('book'), FALSE);
+    module_enable(array('book', 'poll'), FALSE);
     node_types_rebuild();
     $types = node_type_get_types();
-    foreach (array('book', 'article', 'page') as $type) {
+    foreach (array('book', 'poll', 'article', 'page') as $type) {
       $this->assertTrue(isset($types[$type]), format_string('%type is found in node types.', array('%type' => $type)));
       $this->assertTrue(isset($types[$type]->disabled) && empty($types[$type]->disabled), format_string('%type type is enabled.', array('%type' => $type)));
     }
diff --git a/core/modules/node/lib/Drupal/node/Tests/SummaryLengthTest.php b/core/modules/node/lib/Drupal/node/Tests/SummaryLengthTest.php
index ee6ebe5..6b966e8 100644
--- a/core/modules/node/lib/Drupal/node/Tests/SummaryLengthTest.php
+++ b/core/modules/node/lib/Drupal/node/Tests/SummaryLengthTest.php
@@ -35,9 +35,8 @@ function testSummaryLength() {
     $web_user = $this->drupalCreateUser(array('access content', 'administer content types'));
     $this->loggedInUser = $web_user;
 
-    $controller = $this->container->get('plugin.manager.entity')->getRenderController('node');
     // Render the node as a teaser.
-    $content = $controller->view($node, 'teaser');
+    $content = entity_render_controller('node')->view($node, 'teaser');
     $this->assertTrue(strlen($content['body'][0]['#markup']) < 600, 'Teaser is less than 600 characters long.');
     $this->drupalSetContent(drupal_render($content));
     // The string 'What is a Drupalism?' is between the 200th and 600th
@@ -55,7 +54,7 @@ function testSummaryLength() {
 
     // Render the node as a teaser again and check that the summary is now only
     // 200 characters in length and so does not include 'What is a Drupalism?'.
-    $content = $controller->view($node, 'teaser');
+    $content = entity_render_controller('node')->view($node, 'teaser');
     $this->assertTrue(strlen($content['body'][0]['#markup']) < 200, 'Teaser is less than 200 characters long.');
     $this->drupalSetContent(drupal_render($content));
     $this->assertText($node->label());
diff --git a/core/modules/node/node.api.php b/core/modules/node/node.api.php
index 5e5b270..10d32d0 100644
--- a/core/modules/node/node.api.php
+++ b/core/modules/node/node.api.php
@@ -21,12 +21,12 @@
  * base node operation:
  * - Node-type-specific hooks: These hooks are only invoked on the primary
  *   module, using the "base" return component of hook_node_info() as the
- *   function prefix.  For example, forum.module defines the base for the Forum
- *   content type as "forum", so during creation of a forum node, hook_insert() is
- *   only invoked by calling forum_insert().
+ *   function prefix.  For example, poll.module defines the base for the Poll
+ *   content type as "poll", so during creation of a poll node, hook_insert() is
+ *   only invoked by calling poll_insert().
  * - All-module hooks: This set of hooks is invoked on all implementing modules,
  *   to allow other modules to modify what the primary node module is doing. For
- *   example, hook_node_insert() is invoked on all modules when creating a forum
+ *   example, hook_node_insert() is invoked on all modules when creating a poll
  *   node.
  * - Field hooks: Hooks related to the fields attached to the node. These are
  *   invoked from the field operations functions described below, and can be
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index b64a1dc..3f2ce00 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -175,61 +175,41 @@ function node_theme() {
 }
 
 /**
- * Implements hook_entity_info_alter().
+ * Implements hook_entity_info().
  */
-function node_entity_info_alter(&$info) {
+function node_entity_info(&$info) {
   // Add a translation handler for fields if the language module is enabled.
   if (module_exists('language')) {
     $info['node']['translation']['node'] = TRUE;
   }
-}
 
-/**
- * Implements hook_entity_view_mode_info().
- */
-function node_entity_view_mode_info() {
-  $view_modes['node']['full'] = array(
-    'label' => t('Full content'),
-  );
-  $view_modes['node']['teaser'] = array(
-    'label' => t('Teaser'),
-    'custom_settings' => TRUE,
-  );
-  $view_modes['node']['rss'] = array(
-    'label' => t('RSS'),
-  );
   // Search integration is provided by node.module, so search-related
   // view modes for nodes are defined here and not in search.module.
   if (module_exists('search')) {
-    $view_modes['node']['search_index'] = array(
+    $info['node']['view_modes']['search_index'] = array(
       'label' => t('Search index'),
+      'custom_settings' => FALSE,
     );
-    $view_modes['node']['search_result'] = array(
+    $info['node']['view_modes']['search_result'] = array(
       'label' => t('Search result'),
+      'custom_settings' => FALSE,
     );
   }
-  return $view_modes;
-}
 
-/**
- * Implements hook_entity_bundle_info().
- */
-function node_entity_bundle_info() {
-  $bundles = array();
   // Bundles must provide a human readable name so we can create help and error
   // messages, and the path to attach Field admin pages to.
   node_type_cache_reset();
   foreach (node_type_get_names() as $type => $name) {
-    $bundles['node'][$type] = array(
+    $info['node']['bundles'][$type] = array(
       'label' => $name,
       'admin' => array(
         'path' => 'admin/structure/types/manage/%node_type',
         'real path' => 'admin/structure/types/manage/' . $type,
         'bundle argument' => 4,
+        'access arguments' => array('administer content types'),
       ),
     );
   }
-  return $bundles;
 }
 
 /**
@@ -310,7 +290,7 @@ function node_title_list($result, $title = NULL) {
 }
 
 /**
- * Determines the type of marker to be displayed for a given node.
+ * Decides on the type of marker to be displayed for a given node.
  *
  * @param $nid
  *   Node ID whose history supplies the "last viewed" timestamp.
@@ -1108,7 +1088,7 @@ function node_is_page(Node $node) {
   return (!empty($page_node) ? $page_node->nid == $node->nid : FALSE);
 }
 
-/**
+ /**
  * Implements hook_preprocess_HOOK() for block.tpl.php.
  */
 function node_preprocess_block(&$variables) {
@@ -2006,13 +1986,14 @@ function theme_node_recent_content($variables) {
 }
 
 /**
- * Implements hook_form_FORM_ID_alter() for block_form().
+ * Implements hook_form_FORM_ID_alter() for block_admin_configure().
  *
  * Adds node-type specific visibility options to block configuration form.
+ *
+ * @see node_form_block_admin_configure_submit()
  */
-function node_form_block_form_alter(&$form, &$form_state) {
-  $block = $form_state['entity'];
-  $visibility = $block->get('visibility');
+function node_form_block_admin_configure_alter(&$form, &$form_state) {
+  $config = $form['#instance']->getConfig();
   $form['visibility']['node_type'] = array(
     '#type' => 'details',
     '#title' => t('Content types'),
@@ -2024,7 +2005,7 @@ function node_form_block_form_alter(&$form, &$form_state) {
   $form['visibility']['node_type']['types'] = array(
     '#type' => 'checkboxes',
     '#title' => t('Show block for specific content types'),
-    '#default_value' => !empty($visibility['node_type']['types']) ? $visibility['node_type']['types'] : array(),
+    '#default_value' => !empty($config['visibility']['node_type']['types']) ? $config['visibility']['node_type']['types'] : array(),
     '#options' => node_type_get_names(),
     '#description' => t('Show this block only on pages that display content of the given type(s). If you select no types, there will be no type-specific limitation.'),
   );
@@ -2037,8 +2018,9 @@ function node_form_block_form_alter(&$form, &$form_state) {
  * if the visibility conditions are not met.
  */
 function node_block_access($block) {
-  $visibility = $block->get('visibility');
-  if (!empty($visibility)) {
+  $configuration = $block->getConfig();
+  if (!empty($configuration['visibility'])) {
+    $visibility = $configuration['visibility'];
     $allowed_types = array();
     $node = menu_get_object();
     $node_types = node_type_get_types();
@@ -2160,9 +2142,9 @@ function node_feed($nids = FALSE, $channel = array()) {
   return new Response($output, 200, array('Content-Type' =>  'application/rss+xml; charset=utf-8'));
 }
 
-/**
- * Generates an array for rendering the given node.
- *
+ /**
+  * Generates an array for rendering the given node.
+  *
  * @param Drupal\node\Node $node
  *   A node entity.
  * @param $view_mode
@@ -2457,8 +2439,8 @@ function node_search_validate($form, &$form_state) {
 /**
  * Implements hook_form_FORM_ID_alter().
  *
- * Alters the System module's site information settings form to add a global
- * default setting for number of posts to show on node listing pages.
+ * Alters System module's site information settings form to add a global default
+ * setting for number of posts to show on node listing pages.
  *
  * @see node_page_default()
  * @see taxonomy_term_page()
@@ -3231,6 +3213,7 @@ function _node_access_rebuild_batch_finished($success, $results, $operations) {
  * @} End of "defgroup node_access".
  */
 
+
 /**
  * @defgroup node_content Hook implementations for user-created content types
  * @{
diff --git a/core/modules/node/node.views.inc b/core/modules/node/node.views.inc
index 2e8ab14..8f8d75f 100644
--- a/core/modules/node/node.views.inc
+++ b/core/modules/node/node.views.inc
@@ -42,6 +42,7 @@ function node_views_data() {
     // Information for displaying the nid
     'field' => array(
       'id' => 'node',
+      'click sortable' => TRUE,
     ),
     // Information for accepting a nid as an argument
     'argument' => array(
@@ -70,6 +71,7 @@ function node_views_data() {
       'field' => 'title', // the real field. This could be left out since it is the same.
       'group' => t('Content'), // The group it appears in on the UI. Could be left out.
       'id' => 'node',
+      'click sortable' => TRUE,
       'link_to_node default' => TRUE,
      ),
     'sort' => array(
@@ -90,6 +92,7 @@ function node_views_data() {
     'help' => t('The date the content was posted.'), // The help that appears on the UI,
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date'
@@ -105,6 +108,7 @@ function node_views_data() {
     'help' => t('The date the content was last updated.'), // The help that appears on the UI,
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date'
@@ -120,6 +124,7 @@ function node_views_data() {
     'help' => t('The content type (for example, "blog entry", "forum post", "story", etc).'), // The help that appears on the UI,
     'field' => array(
       'id' => 'node_type',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -138,6 +143,7 @@ function node_views_data() {
     'help' => t('Whether or not the content is published.'),
     'field' => array(
       'id' => 'boolean',
+      'click sortable' => TRUE,
       'output formats' => array(
         'published-notpublished' => array(t('Published'), t('Not published')),
       ),
@@ -170,6 +176,7 @@ function node_views_data() {
     'help' => t('Whether or not the content is promoted to the front page.'),
     'field' => array(
       'id' => 'boolean',
+      'click sortable' => TRUE,
       'output formats' => array(
         'promoted-notpromoted' => array(t('Promoted'), t('Not promoted')),
       ),
@@ -191,6 +198,7 @@ function node_views_data() {
      // Information for displaying a title as a field
     'field' => array(
       'id' => 'boolean',
+      'click sortable' => TRUE,
       'output formats' => array(
         'sticky' => array(t('Sticky'), t('Not sticky')),
       ),
@@ -213,6 +221,7 @@ function node_views_data() {
       'help' => t('The language the content is in.'),
       'field' => array(
         'id' => 'node_language',
+        'click sortable' => TRUE,
       ),
       'filter' => array(
         'id' => 'language',
@@ -457,10 +466,12 @@ function node_views_data() {
     // Information for displaying the nid.
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE,
     ),
     // Information for accepting a nid as an argument.
     'argument' => array(
       'id' => 'node_nid',
+      'click sortable' => TRUE,
       'numeric' => TRUE,
     ),
     // Information for accepting a nid as a filter.
@@ -487,10 +498,12 @@ function node_views_data() {
     // Information for displaying the vid
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE,
     ),
     // Information for accepting a vid as an argument
     'argument' => array(
       'id' => 'node_vid',
+      'click sortable' => TRUE,
       'numeric' => TRUE,
     ),
     // Information for accepting a vid as a filter
@@ -516,6 +529,7 @@ function node_views_data() {
     'help' => t('Whether or not the content is published.'),
     'field' => array(
       'id' => 'boolean',
+      'click sortable' => TRUE,
       'output formats' => array(
         'published-notpublished' => array(t('Published'), t('Not published')),
       ),
@@ -539,6 +553,7 @@ function node_views_data() {
     'field' => array(
       'field' => 'title', // the real field
       'id' => 'node_revision',
+      'click sortable' => TRUE,
      ),
     'sort' => array(
       'id' => 'standard',
@@ -571,6 +586,7 @@ function node_views_data() {
     'help' => t('The date the node was last updated.'), // The help that appears on the UI,
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date'
@@ -585,7 +601,6 @@ function node_views_data() {
       'title' => t('Link'),
       'help' => t('Provide a simple link to the revision.'),
       'id' => 'node_revision_link',
-      'click sortable' => FALSE,
     ),
   );
 
@@ -594,7 +609,6 @@ function node_views_data() {
       'title' => t('Revert link'),
       'help' => t('Provide a simple link to revert to the revision.'),
       'id' => 'node_revision_link_revert',
-      'click sortable' => FALSE,
     ),
   );
 
@@ -603,7 +617,6 @@ function node_views_data() {
       'title' => t('Delete link'),
       'help' => t('Provide a simple link to delete the content revision.'),
       'id' => 'node_revision_link_delete',
-      'click sortable' => FALSE,
     ),
   );
 
@@ -678,9 +691,11 @@ function node_views_analyze(ViewExecutable $view) {
         // check for no access control
         $access = $display->getOption('access');
         if (empty($access['type']) || $access['type'] == 'none') {
-          $result = db_select('role_permission', 'p')
-            ->fields('p', array('rid', 'permission'))
-            ->condition('p.rid', array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID), 'IN')
+          $select = db_select('role', 'r');
+          $select->innerJoin('role_permission', 'p', 'r.rid = p.rid');
+          $result = $select->fields('r', array('rid'))
+            ->fields('p', array('permission'))
+            ->condition('r.rid', array('anonymous', 'authenticated'), 'IN')
             ->condition('p.permission', 'access content')
             ->execute();
 
@@ -688,7 +703,7 @@ function node_views_analyze(ViewExecutable $view) {
             $role->safe = TRUE;
             $roles[$role->rid] = $role;
           }
-          if (!($roles[DRUPAL_ANONYMOUS_RID]->safe && $roles[DRUPAL_AUTHENTICATED_RID]->safe)) {
+          if (!($roles['anonymous']->safe && $roles['authenticated']->safe)) {
             $ret[] = Analyzer::formatMessage(t('Some roles lack permission to access content, but display %display has no access control.', array('%display' => $display->display['display_title'])), 'warning');
           }
           $filters = $display->getOption('filters');
diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_type.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_type.yml
index a031aab..c9172bc 100644
--- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_type.yml
+++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_field_type.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -15,5 +16,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_field_type
+name: test_field_type
 tag: ''
diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_filter_node_uid_revision.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_filter_node_uid_revision.yml
index 120999d..69000ec 100644
--- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_filter_node_uid_revision.yml
+++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_filter_node_uid_revision.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: 8.0-dev
 description: ''
@@ -45,5 +46,5 @@ display:
     id: default
     position: '0'
 human_name: test_filter_node_uid_revision
-id: test_filter_node_uid_revision
+name: test_filter_node_uid_revision
 tag: default
diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_nid.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_nid.yml
index ac9e115..cefedda 100644
--- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_nid.yml
+++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_nid.yml
@@ -1,6 +1,7 @@
-id: test_node_revision_nid
+name: test_node_revision_nid
 base_table: node_revision
 core: 8
+api_version: 3
 display:
   default:
     display_options:
diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_vid.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_vid.yml
index bdb33d6..b36f549 100644
--- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_vid.yml
+++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_node_revision_vid.yml
@@ -1,6 +1,7 @@
-id: test_node_revision_vid
+name: test_node_revision_vid
 base_table: node_revision
 core: 8
+api_version: 3
 display:
   default:
     display_options:
diff --git a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_status_extra.yml b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_status_extra.yml
index e4a140d..c0c582b 100644
--- a/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_status_extra.yml
+++ b/core/modules/node/tests/modules/node_test_views/test_views/views.view.test_status_extra.yml
@@ -1,9 +1,10 @@
 base_table: node
-id: test_status_extra
+name: test_status_extra
 description: ''
 tag: ''
 human_name: test_status_extra
 core: 8.x
+api_version: '3.0'
 display:
   default:
     display_plugin: default
diff --git a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
index 925828c..232acea 100644
--- a/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
+++ b/core/modules/number/lib/Drupal/number/Tests/NumberFieldTest.php
@@ -36,7 +36,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer content types', 'administer node fields','administer node display'));
+    $this->web_user = $this->drupalCreateUser(array('access field_test content', 'administer field_test content', 'administer content types'));
     $this->drupalLogin($this->web_user);
   }
 
diff --git a/core/modules/openid/openid.module b/core/modules/openid/openid.module
index ca3d968..426c8ae 100644
--- a/core/modules/openid/openid.module
+++ b/core/modules/openid/openid.module
@@ -166,15 +166,15 @@ function openid_user_logout($account) {
  */
 function openid_block_view_user_login_block_alter(&$build, $block) {
   // Only alter the block when it is non-empty, i.e. when no user is logged in.
-  if (!isset($build['content']['user_login_form'])) {
+  if (!isset($build['user_login_form'])) {
     return;
   }
 
-  $build['content']['openid_login_form'] = drupal_get_form('openid_login_form');
-  $build['content']['openid_login_form']['openid_identifier']['#size'] = $build['content']['user_login_form']['name']['#size'];
+  $build['openid_login_form'] = drupal_get_form('openid_login_form');
+  $build['openid_login_form']['openid_identifier']['#size'] = $build['user_login_form']['name']['#size'];
 
   // Put an OpenID link as a first element.
-  $build['content']['user_links']['#items'] = array(
+  $build['user_links']['#items'] = array(
     l(t('Log in using OpenID'), 'user/login/openid', array(
       'attributes' => array(
         'title' => t('Log in using OpenID.'),
@@ -183,10 +183,10 @@ function openid_block_view_user_login_block_alter(&$build, $block) {
         'tabindex' => 0,
       ),
     ))
-  ) + $build['content']['user_links']['#items'];
+  ) + $build['user_links']['#items'];
 
   // Move links under the openid form.
-  $build['content']['user_links']['#weight'] = 10;
+  $build['user_links']['#weight'] = 10;
 }
 
 /**
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php
index 3409185..8723bbf 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsFieldUITest.php
@@ -33,7 +33,7 @@ function setUp() {
     parent::setUp();
 
     // Create test user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer taxonomy'));
+    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer taxonomy'));
     $this->drupalLogin($admin_user);
 
     // Create content type, with underscores.
@@ -199,7 +199,7 @@ function testOptionsAllowedValuesText() {
   }
 
   /**
-   * Options (boolean) : test 'On/Off' values input.
+   * Options (boolen) : test 'On/Off' values input.
    */
   function testOptionsAllowedValuesBoolean() {
     $this->field_name = 'field_options_boolean';
@@ -226,19 +226,6 @@ function testOptionsAllowedValuesBoolean() {
   }
 
   /**
-   * Options (text) : test 'trimmed values' input.
-   */
-  function testOptionsTrimmedValuesText() {
-    $this->field_name = 'field_options_trimmed_text';
-    $this->createOptionsField('list_text');
-
-    // Explicit keys.
-    $string = "zero |Zero\none | One";
-    $array = array('zero' => 'Zero', 'one' => 'One');
-    $this->assertAllowedValuesInput($string, $array, 'Explicit keys are accepted and trimmed.');
-  }
-
-  /**
    * Helper function to create list field of a given type.
    *
    * @param string $type
diff --git a/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php b/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
index 023f012..6804b6a 100644
--- a/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
+++ b/core/modules/options/lib/Drupal/options/Tests/OptionsWidgetsTest.php
@@ -477,7 +477,7 @@ function testOnOffCheckbox() {
     $this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page'));
 
     // Create admin user.
-    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer node fields', 'administer taxonomy'));
+    $admin_user = $this->drupalCreateUser(array('access content', 'administer content types', 'administer taxonomy'));
     $this->drupalLogin($admin_user);
 
     // Create a test field instance.
@@ -500,12 +500,12 @@ function testOnOffCheckbox() {
     $this->drupalGet($fieldEditUrl);
 
     $this->assertText(
-      'Use field label instead of the "On value" as label',
+      'Use field label instead of the "On value" as label ',
       t('Display setting checkbox available.')
     );
 
     $this->assertFieldByXPath(
-      '*//label[@for="edit-' . $this->bool['field_name'] . '-und" and text()="MyOnValue"]',
+      '*//label[@for="edit-' . $this->bool['field_name'] . '-und" and text()="MyOnValue "]',
       TRUE,
       t('Default case shows "On value"')
     );
@@ -519,7 +519,7 @@ function testOnOffCheckbox() {
     // is stored and has the expected effect
     $this->drupalGet($fieldEditUrl);
     $this->assertText(
-      'Use field label instead of the "On value" as label',
+      'Use field label instead of the "On value" as label ',
       t('Display setting checkbox is available')
     );
     $this->assertFieldChecked(
@@ -527,7 +527,7 @@ function testOnOffCheckbox() {
       t('Display settings checkbox checked')
     );
     $this->assertFieldByXPath(
-      '*//label[@for="edit-' . $this->bool['field_name'] . '-und" and text()="' . $this->bool['field_name'] . '"]',
+      '*//label[@for="edit-' . $this->bool['field_name'] . '-und" and text()="' . $this->bool['field_name'] . ' "]',
       TRUE,
       t('Display label changes label of the checkbox')
     );
diff --git a/core/modules/options/options.module b/core/modules/options/options.module
index c63f364..b49d16b 100644
--- a/core/modules/options/options.module
+++ b/core/modules/options/options.module
@@ -304,9 +304,8 @@ function options_extract_allowed_values($string, $field_type, $generate_keys) {
     // Check for an explicit key.
     $matches = array();
     if (preg_match('/(.*)\|(.*)/', $text, $matches)) {
-      // Trim key and value to avoid unwanted spaces issues.
-      $key = trim($matches[1]);
-      $value = trim($matches[2]);
+      $key = $matches[1];
+      $value = $matches[2];
       $explicit_keys = TRUE;
     }
     // Otherwise see if we can use the value as the key. Detecting true integer
diff --git a/core/modules/overlay/overlay.module b/core/modules/overlay/overlay.module
index 632d270..54eaf18 100644
--- a/core/modules/overlay/overlay.module
+++ b/core/modules/overlay/overlay.module
@@ -477,7 +477,8 @@ function overlay_block_access($block) {
   // reason for duplicating effort here is performance; we do not even want
   // these blocks to be built if they are not going to be displayed.
   if ($regions_to_render = overlay_get_regions_to_render()) {
-    if (!in_array($block->get('region'), $regions_to_render)) {
+    $config = $block->getConfig();
+    if (!in_array($config['region'], $regions_to_render)) {
       return FALSE;
     }
   }
diff --git a/core/modules/path/path.module b/core/modules/path/path.module
index 7521dee..63e5c6c 100644
--- a/core/modules/path/path.module
+++ b/core/modules/path/path.module
@@ -124,7 +124,7 @@ function path_form_node_form_alter(&$form, $form_state) {
     '#title' => t('URL path settings'),
     '#collapsible' => TRUE,
     '#collapsed' => empty($path['alias']),
-    '#group' => 'advanced',
+    '#group' => 'additional_settings',
     '#attributes' => array(
       'class' => array('path-form'),
     ),
diff --git a/core/modules/php/config/filter.format.php_code.yml b/core/modules/php/config/filter.format.php_code.yml
deleted file mode 100644
index cee6e9b..0000000
--- a/core/modules/php/config/filter.format.php_code.yml
+++ /dev/null
@@ -1,10 +0,0 @@
-format: php_code
-name: 'PHP code'
-status: '1'
-weight: '11'
-cache: '0'
-filters:
-  php_code:
-    module: php
-    status: '1'
-langcode: und
diff --git a/core/modules/php/php.install b/core/modules/php/php.install
index a88fe6a..12944dd 100644
--- a/core/modules/php/php.install
+++ b/core/modules/php/php.install
@@ -6,6 +6,38 @@
  */
 
 /**
+ * Implements hook_enable().
+ */
+function php_enable() {
+  $format_exists = (bool) db_query_range('SELECT 1 FROM {filter_format} WHERE name = :name', 0, 1, array(':name' => 'PHP code'))->fetchField();
+  // Add a PHP code text format, if it does not exist. Do this only for the
+  // first install (or if the format has been manually deleted) as there is no
+  // reliable method to identify the format in an uninstall hook or in
+  // subsequent clean installs.
+  if (!$format_exists) {
+    $php_format = array(
+      'format' => 'php_code',
+      'name' => 'PHP code',
+      // 'Plain text' format is installed with a weight of 10 by default. Use a
+      // higher weight here to ensure that this format will not be the default
+      // format for anyone.
+      'weight' => 11,
+      'filters' => array(
+        // Enable the PHP evaluator filter.
+        'php_code' => array(
+          'weight' => 0,
+          'status' => 1,
+        ),
+      ),
+    );
+    $php_format = (object) $php_format;
+    filter_format_save($php_format);
+
+    drupal_set_message(t('A <a href="@php-code">PHP code</a> text format has been created.', array('@php-code' => url('admin/config/content/formats/' . $php_format->format))));
+  }
+}
+
+/**
  * Implements hook_disable().
  */
 function php_disable() {
diff --git a/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php b/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php
index c8cd4cb..9b0c3d5 100644
--- a/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php
+++ b/core/modules/picture/lib/Drupal/picture/Tests/PictureFieldDisplayTest.php
@@ -46,7 +46,6 @@ public function setUp() {
       'access administration pages',
       'administer site configuration',
       'administer content types',
-      'administer node display',
       'administer nodes',
       'create article content',
       'edit any article content',
diff --git a/core/modules/picture/picture_mapping.admin.inc b/core/modules/picture/picture_mapping.admin.inc
index a3d6ade..42e85b1 100644
--- a/core/modules/picture/picture_mapping.admin.inc
+++ b/core/modules/picture/picture_mapping.admin.inc
@@ -16,9 +16,8 @@
  * @see picture_menu()
  */
 function picture_mapping_page() {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getListController('picture_mapping')
-    ->render();
+  $controller = entity_list_controller('picture_mapping');
+  return $controller->render();
 }
 
 /**
diff --git a/core/modules/poll/lib/Drupal/poll/Plugin/block/block/PollRecentBlock.php b/core/modules/poll/lib/Drupal/poll/Plugin/block/block/PollRecentBlock.php
new file mode 100644
index 0000000..b597741
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Plugin/block/block/PollRecentBlock.php
@@ -0,0 +1,81 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\poll\Plugin\block\block\PollRecentBlock.
+ */
+
+namespace Drupal\poll\Plugin\block\block;
+
+use Drupal\block\BlockBase;
+use Drupal\Core\Annotation\Plugin;
+use Drupal\Core\Annotation\Translation;
+
+/**
+ * Provides a 'Most recent poll' block.
+ *
+ * @Plugin(
+ *   id = "poll_recent_block",
+ *   subject = @Translation("Most recent poll"),
+ *   module = "poll"
+ * )
+ */
+class PollRecentBlock extends BlockBase {
+
+  /**
+   * Stores the node ID of the latest poll.
+   *
+   * @var int
+   */
+  protected $record;
+
+  /**
+   * Overrides \Drupal\block\BlockBase::blockSettings().
+   */
+  public function blockSettings() {
+    return array(
+      'properties' => array(
+        'administrative' => TRUE,
+      ),
+    );
+  }
+
+  /**
+   * Overrides \Drupal\block\BlockBase::access().
+   */
+  public function blockAccess() {
+    if (user_access('access content')) {
+      // Retrieve the latest poll.
+      $select = db_select('node', 'n');
+      $select->join('poll', 'p', 'p.nid = n.nid');
+      $select->fields('n', array('nid'))
+        ->condition('n.status', 1)
+        ->condition('p.active', 1)
+        ->orderBy('n.created', 'DESC')
+        ->range(0, 1)
+        ->addTag('node_access');
+
+      $record = $select->execute()->fetchObject();
+      if ($record) {
+        $this->record = $record->nid;
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
+  /**
+   * Implements \Drupal\block\BlockBase::blockBuild().
+   */
+  public function blockBuild() {
+    $poll = node_load($this->record);
+    if ($poll->nid) {
+      $poll = poll_block_latest_poll_view($poll);
+      return array(
+        $poll->content
+      );
+    }
+    return array();
+  }
+
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollBlockTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollBlockTest.php
new file mode 100644
index 0000000..6a86d21
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollBlockTest.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollBlockTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+/**
+ * Tests the recent poll block.
+ */
+class PollBlockTest extends PollTestBase {
+
+  /**
+   * An administrative user for testing.
+   *
+   * @var Drupal\user\Plugin\Core\Entity\User
+   */
+  protected $adminUser;
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('block');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Block availability',
+      'description' => 'Check if the most recent poll block is available.',
+      'group' => 'Poll',
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+
+    // Create and login user
+    $this->adminUser = $this->drupalCreateUser(array('administer blocks'));
+    $this->drupalLogin($this->adminUser);
+  }
+
+  /**
+   * Tests creating, viewing, voting on recent poll block.
+   */
+  function testRecentBlock() {
+    // Enable the recent poll block.
+    $this->drupalPlaceBlock('poll_recent_block');
+
+    // Create a poll which should appear in recent polls block.
+    $title = $this->randomName();
+    $choices = $this->_generateChoices(7);
+    $poll_nid = $this->pollCreate($title, $choices, TRUE);
+
+    // Verify poll appears in a block.
+    // View user page so we're not matching the poll node on front page.
+    $this->drupalGet('user');
+    // If a 'block' view not generated, this title would not appear even though
+    // the choices might.
+    $this->assertText($title, 'Poll appears in block.');
+
+    // Logout and login back in as a user who can vote.
+    $this->drupalLogout();
+    $vote_user = $this->drupalCreateUser(array('cancel own vote', 'inspect all votes', 'vote on polls', 'access content'));
+    $this->drupalLogin($vote_user);
+
+    // Verify we can vote via the block.
+    $edit = array(
+      'choice' => '1',
+    );
+    $this->drupalPost('user/' . $vote_user->uid, $edit, t('Vote'));
+    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
+    $this->assertText('Total votes: 1', 'Vote count updated correctly.');
+    $this->assertText('Older polls', 'Link to older polls appears.');
+    $this->clickLink('Older polls');
+    $this->assertText('1 vote - open', 'Link to poll listing correct.');
+
+    // Close the poll and verify block doesn't appear.
+    $content_user = $this->drupalCreateUser(array('create poll content', 'edit any poll content', 'access content'));
+    $this->drupalLogout();
+    $this->drupalLogin($content_user);
+    $close_edit = array('active' => 0);
+    $this->pollUpdate($poll_nid, $title, $close_edit);
+    $this->drupalGet('user/' . $content_user->uid);
+    $this->assertNoText($title, 'Poll no longer appears in block.');
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollCreateTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollCreateTest.php
new file mode 100644
index 0000000..0618ce1
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollCreateTest.php
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollCreateTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+/**
+ * Tests creating a poll.
+ */
+class PollCreateTest extends PollTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Poll create',
+      'description' => 'Adds "more choices", previews and creates a poll.',
+      'group' => 'Poll'
+    );
+  }
+
+  /**
+   * Tests creating, listing, editing a new poll.
+   */
+  function testPollCreate() {
+    $title = $this->randomName();
+    $choices = $this->_generateChoices(7);
+    $poll_nid = $this->pollCreate($title, $choices, TRUE);
+
+    // Verify poll appears on 'poll' page.
+    $this->drupalGet('poll');
+    $this->assertText($title, 'Poll appears in poll list.');
+    $this->assertText('open', 'Poll is active.');
+
+    // Click on the poll title to go to node page.
+    $this->clickLink($title);
+    $this->assertText('Total votes: 0', 'Link to poll correct.');
+
+    // Now add a new option to make sure that when we update the node the
+    // option is displayed.
+    $node = node_load($poll_nid);
+
+    $new_option = $this->randomName();
+
+    $vote_count = '2000';
+    $node->choice[] = array(
+      'chid' => '',
+      'chtext' => $new_option,
+      'chvotes' => (int) $vote_count,
+      'weight' => 1000,
+    );
+
+    $node->save();
+
+    $this->drupalGet('poll');
+    $this->clickLink($title);
+    $this->assertText($new_option, 'New option found.');
+
+    $option = $this->xpath('//article[@id="node-1"]//div[@class="poll"]//dt[@class="choice-title"]');
+    $this->assertEqual(end($option), $new_option, 'Last item is equal to new option.');
+
+    $votes = $this->xpath('//article[@id="node-1"]//div[@class="poll"]//div[@class="percent"]');
+    $this->assertTrue(strpos(end($votes), $vote_count) > 0, "Votes saved.");
+  }
+
+  /**
+   * Tests creating, editing, and closing a poll.
+   */
+  function testPollClose() {
+    $content_user = $this->drupalCreateUser(array('create poll content', 'edit any poll content', 'access content'));
+    $vote_user = $this->drupalCreateUser(array('cancel own vote', 'inspect all votes', 'vote on polls', 'access content'));
+
+    // Create poll.
+    $title = $this->randomName();
+    $choices = $this->_generateChoices(7);
+    $poll_nid = $this->pollCreate($title, $choices, FALSE);
+
+    $this->drupalLogout();
+    $this->drupalLogin($content_user);
+
+    // Edit the poll node and close the poll.
+    $close_edit = array('active' => 0);
+    $this->pollUpdate($poll_nid, $title, $close_edit);
+
+    // Verify 'Vote' button no longer appears.
+    $this->drupalGet('node/' . $poll_nid);
+    $elements = $this->xpath('//input[@id="edit-vote"]');
+    $this->assertTrue(empty($elements), "Vote button doesn't appear.");
+
+    // Verify status on 'poll' page is 'closed'.
+    $this->drupalGet('poll');
+    $this->assertText($title, 'Poll appears in poll list.');
+    $this->assertText('closed', 'Poll is closed.');
+
+    // Edit the poll node and re-activate.
+    $open_edit = array('active' => 1);
+    $this->pollUpdate($poll_nid, $title, $open_edit);
+
+    // Vote on the poll.
+    $this->drupalLogout();
+    $this->drupalLogin($vote_user);
+    $vote_edit = array('choice' => '1');
+    $this->drupalPost('node/' . $poll_nid, $vote_edit, t('Vote'));
+    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(isset($elements[0]), "'Cancel your vote' button appears.");
+
+    // Edit the poll node and close the poll.
+    $this->drupalLogout();
+    $this->drupalLogin($content_user);
+    $close_edit = array('active' => 0);
+    $this->pollUpdate($poll_nid, $title, $close_edit);
+
+    // Verify 'Cancel your vote' button no longer appears.
+    $this->drupalGet('node/' . $poll_nid);
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(empty($elements), "'Cancel your vote' button no longer appears.");
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollDeleteChoiceTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollDeleteChoiceTest.php
new file mode 100644
index 0000000..ccbd044
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollDeleteChoiceTest.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollDeleteChoiceTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+/**
+ * Tests the removal of poll choices.
+ */
+class PollDeleteChoiceTest extends PollTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Poll choice deletion',
+      'description' => 'Test the poll choice deletion logic.',
+      'group' => 'Poll',
+    );
+  }
+
+  /**
+   * Tests removing a choice from a poll.
+   */
+  function testChoiceRemoval() {
+    // Set up a poll with three choices.
+    $title = $this->randomName();
+    $choices = array('First choice', 'Second choice', 'Third choice');
+    $poll_nid = $this->pollCreate($title, $choices, FALSE);
+    $this->assertTrue($poll_nid, 'Poll for choice deletion logic test created.');
+
+    // Edit the poll, and try to delete first poll choice.
+    $this->drupalGet("node/$poll_nid/edit");
+    $edit['choice[chid:1][chtext]'] = '';
+    $this->drupalPost(NULL, $edit, t('Save'));
+
+    // Click on the poll title to go to node page.
+    $this->drupalGet('poll');
+    $this->clickLink($title);
+
+    // Check the first poll choice is deleted, while the others remain.
+    $this->assertNoText('First choice', 'First choice removed.');
+    $this->assertText('Second choice', 'Second choice remains.');
+    $this->assertText('Third choice', 'Third choice remains.');
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollExpirationTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollExpirationTest.php
new file mode 100644
index 0000000..2cfe9e5
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollExpirationTest.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollExpirationTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+/**
+ * Tests the expiration of polls.
+ */
+class PollExpirationTest extends PollTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Poll expiration',
+      'description' => 'Test the poll auto-expiration logic.',
+      'group' => 'Poll',
+    );
+  }
+
+  /**
+   * Tests the expiration of a poll.
+   */
+  function testAutoExpire() {
+    // Set up a poll.
+    $title = $this->randomName();
+    $choices = $this->_generateChoices(2);
+    $poll_nid = $this->pollCreate($title, $choices, FALSE);
+    $this->assertTrue($poll_nid, 'Poll for auto-expire test created.');
+
+    // Visit the poll edit page and verify that by default, expiration
+    // is set to unlimited.
+    $this->drupalGet("node/$poll_nid/edit");
+    $this->assertField('runtime', 'Poll expiration setting found.');
+    $elements = $this->xpath('//select[@id="edit-runtime"]/option[@selected="selected"]');
+    $this->assertTrue(isset($elements[0]['value']) && $elements[0]['value'] == 0, 'Poll expiration set to unlimited.');
+
+    // Set the expiration to one week.
+    $edit = array();
+    $poll_expiration = 604800; // One week.
+    $edit['runtime'] = $poll_expiration;
+    $this->drupalPost(NULL, $edit, t('Save'));
+    $this->assertRaw(t('Poll %title has been updated.', array('%title' => $title)), 'Poll expiration settings saved.');
+
+    // Make sure that the changed expiration settings is kept.
+    $this->drupalGet("node/$poll_nid/edit");
+    $elements = $this->xpath('//select[@id="edit-runtime"]/option[@selected="selected"]');
+    $this->assertTrue(isset($elements[0]['value']) && $elements[0]['value'] == $poll_expiration, 'Poll expiration set to unlimited.');
+
+    // Force a cron run. Since the expiration date has not yet been reached,
+    // the poll should remain active.
+    drupal_cron_run();
+    $this->drupalGet("node/$poll_nid/edit");
+    $elements = $this->xpath('//input[@id="edit-active-1"]');
+    $this->assertTrue(isset($elements[0]) && !empty($elements[0]['checked']), 'Poll is still active.');
+
+    // Test expiration. Since REQUEST_TIME is a constant and we don't
+    // want to keep SimpleTest waiting until the moment of expiration arrives,
+    // we forcibly change the expiration date in the database.
+    $created = db_query('SELECT created FROM {node} WHERE nid = :nid', array(':nid' => $poll_nid))->fetchField();
+    db_update('node')
+      ->fields(array('created' => $created - ($poll_expiration * 1.01)))
+      ->condition('nid', $poll_nid)
+      ->execute();
+
+    // Run cron and verify that the poll is now marked as "closed".
+    drupal_cron_run();
+    $this->drupalGet("node/$poll_nid/edit");
+    $elements = $this->xpath('//input[@id="edit-active-0"]');
+    $this->assertTrue(isset($elements[0]) && !empty($elements[0]['checked']), 'Poll has expired.');
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollJsAddChoiceTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollJsAddChoiceTest.php
new file mode 100644
index 0000000..88acc3b
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollJsAddChoiceTest.php
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollJsAddChoiceTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Tests adding new choices to a poll.
+ */
+class PollJsAddChoiceTest extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('poll');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Poll add choice',
+      'description' => 'Submits a POST request for an additional poll choice.',
+      'group' => 'Poll'
+    );
+  }
+
+  /**
+   * Tests adding a new choice to a poll.
+   */
+  function testAddChoice() {
+    $web_user = $this->drupalCreateUser(array('create poll content', 'access content'));
+    $this->drupalLogin($web_user);
+    $this->drupalGet('node/add/poll');
+    $edit = array(
+      "title" => $this->randomName(),
+      'choice[new:0][chtext]' => $this->randomName(),
+      'choice[new:1][chtext]' => $this->randomName(),
+    );
+
+    // Press 'add choice' button through Ajax, and place the expected HTML result
+    // as the tested content.
+    $commands = $this->drupalPostAJAX(NULL, $edit, array('op' => t('Add another choice')));
+    $this->content = $commands[1]['data'];
+
+    $this->assertFieldByName('choice[chid:0][chtext]', $edit['choice[new:0][chtext]'], format_string('Field !i found', array('!i' => 0)));
+    $this->assertFieldByName('choice[chid:1][chtext]', $edit['choice[new:1][chtext]'], format_string('Field !i found', array('!i' => 1)));
+    $this->assertFieldByName('choice[new:0][chtext]', '', format_string('Field !i found', array('!i' => 2)));
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollTestBase.php b/core/modules/poll/lib/Drupal/poll/Tests/PollTestBase.php
new file mode 100644
index 0000000..94da1ef
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollTestBase.php
@@ -0,0 +1,202 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollTestBase.
+ */
+
+namespace Drupal\poll\Tests;
+
+use Drupal\simpletest\WebTestBase;
+
+/**
+ * Defines a base class for testing the Poll module.
+ */
+abstract class PollTestBase extends WebTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('node', 'poll');
+
+  /**
+   * Creates a poll.
+   *
+   * @param string $title
+   *   The title of the poll.
+   * @param array $choices
+   *   A list of choice labels.
+   * @param boolean $preview
+   *   (optional) Whether to test if the preview is working or not. Defaults to
+   *   TRUE.
+   *
+   * @return
+   *   The node id of the created poll, or FALSE on error.
+   */
+  function pollCreate($title, $choices, $preview = TRUE) {
+    $this->assertTrue(TRUE, 'Create a poll');
+
+    $admin_user = $this->drupalCreateUser(array('create poll content', 'administer nodes'));
+    $web_user = $this->drupalCreateUser(array('create poll content', 'access content', 'edit own poll content'));
+    $this->drupalLogin($admin_user);
+
+    // Get the form first to initialize the state of the internal browser.
+    $this->drupalGet('node/add/poll');
+
+    // Prepare a form with two choices.
+    list($edit, $index) = $this->_pollGenerateEdit($title, $choices);
+
+    // Verify that the vote count element only allows non-negative integers.
+    $edit['choice[new:1][chvotes]'] = -1;
+    $edit['choice[new:0][chvotes]'] = $this->randomString(7);
+    $this->drupalPost(NULL, $edit, t('Save'));
+    $this->assertText(t('Vote count for new choice must be higher or equal to 0.'));
+    $this->assertText(t('Vote count for new choice must be a number.'));
+
+    // Repeat steps for initializing the state of the internal browser.
+    $this->drupalLogin($web_user);
+    $this->drupalGet('node/add/poll');
+    list($edit, $index) = $this->_pollGenerateEdit($title, $choices);
+
+    // Re-submit the form until all choices are filled in.
+    if (count($choices) > 2) {
+      while ($index < count($choices)) {
+        $this->drupalPost(NULL, $edit, t('Add another choice'));
+        $this->assertPollChoiceOrder($choices, $index);
+        list($edit, $index) = $this->_pollGenerateEdit($title, $choices, $index);
+      }
+    }
+
+    if ($preview) {
+      $this->drupalPost(NULL, $edit, t('Preview'));
+      $this->assertPollChoiceOrder($choices, $index, TRUE);
+      list($edit, $index) = $this->_pollGenerateEdit($title, $choices, $index);
+    }
+
+    $this->drupalPost(NULL, $edit, t('Save'));
+    $node = $this->drupalGetNodeByTitle($title);
+    $this->assertText(t('@type @title has been created.', array('@type' => node_type_get_label('poll'), '@title' => $title)), 'Poll has been created.');
+    $this->assertTrue($node->nid, 'Poll has been found in the database.');
+
+    return isset($node->nid) ? $node->nid : FALSE;
+  }
+
+  /**
+   * Generates POST values for the poll node form, specifically poll choices.
+   *
+   * @param $title
+   *   The title for the poll node.
+   * @param $choices
+   *   An array containing poll choices, as generated by
+   *   PollTestBase::_generateChoices().
+   * @param $index
+   *   (optional) The amount/number of already submitted poll choices. Defaults
+   *   to 0.
+   *
+   * @return
+   *   An indexed array containing:
+   *   - The generated POST values, suitable for
+   *     Drupal\simpletest\WebTestBase::drupalPost().
+   *   - The number of poll choices contained in 'edit', for potential re-usage
+   *     in subsequent invocations of this function.
+   */
+  function _pollGenerateEdit($title, array $choices, $index = 0) {
+    $max_new_choices = ($index == 0 ? 2 : 1);
+    $already_submitted_choices = array_slice($choices, 0, $index);
+    $new_choices = array_values(array_slice($choices, $index, $max_new_choices));
+
+    $edit = array(
+      'title' => $title,
+    );
+    foreach ($already_submitted_choices as $k => $text) {
+      $edit['choice[chid:' . $k . '][chtext]'] = $text;
+    }
+    foreach ($new_choices as $k => $text) {
+      $edit['choice[new:' . $k . '][chtext]'] = $text;
+    }
+    return array($edit, count($already_submitted_choices) + count($new_choices));
+  }
+
+  /*
+   * Generates random choices for the poll.
+   */
+  function _generateChoices($count = 7) {
+    $choices = array();
+    for ($i = 1; $i <= $count; $i++) {
+      $choices[] = $this->randomName();
+    }
+    return $choices;
+  }
+
+  /**
+   * Asserts correct poll choice order in the node form after submission.
+   *
+   * Verifies both the order in the DOM and in the 'weight' form elements.
+   *
+   * @param $choices
+   *   An array containing poll choices, as generated by
+   *   PollTestBase::_generateChoices().
+   * @param $index
+   *   (optional) The amount/number of already submitted poll choices. Defaults
+   *   to 0.
+   * @param $preview
+   *   (optional) Whether to also check the poll preview.
+   *
+   * @see PollTestBase::_pollGenerateEdit()
+   */
+  function assertPollChoiceOrder(array $choices, $index = 0, $preview = FALSE) {
+    $expected = array();
+    $weight = 0;
+    foreach ($choices as $id => $label) {
+      if ($id < $index) {
+        // The expected weight of each choice is higher than the previous one.
+        $weight++;
+        // Directly assert the weight form element value for this choice.
+        $this->assertFieldByName('choice[chid:' . $id . '][weight]', $weight, format_string('Found choice @id with weight @weight.', array(
+          '@id' => $id,
+          '@weight' => $weight,
+        )));
+        // Append to our (to be reversed) stack of labels.
+        $expected[$weight] = $label;
+      }
+    }
+    ksort($expected);
+
+    // Verify DOM order of poll choices (i.e., #weight of form elements).
+    $elements = $this->xpath('//input[starts-with(@name, :prefix) and contains(@name, :suffix)]', array(
+      ':prefix' => 'choice[chid:',
+      ':suffix' => '][chtext]',
+    ));
+    $expected_order = $expected;
+    foreach ($elements as $element) {
+      $next_label = array_shift($expected_order);
+      $this->assertEqual((string) $element['value'], $next_label);
+    }
+
+    // If requested, also verify DOM order in preview.
+    if ($preview) {
+      $elements = $this->xpath('//div[contains(@class, :teaser)]/descendant::div[@class=:text]', array(
+        ':teaser' => 'node-teaser',
+        ':text' => 'text',
+      ));
+      $expected_order = $expected;
+      foreach ($elements as $element) {
+        $next_label = array_shift($expected_order);
+        $this->assertEqual((string) $element, $next_label, format_string('Found choice @label in preview.', array(
+          '@label' => $next_label,
+        )));
+      }
+    }
+  }
+
+  /**
+   * Tests updating a poll.
+   */
+  function pollUpdate($nid, $title, $edit) {
+    // Edit the poll node.
+    $this->drupalPost('node/' . $nid . '/edit', $edit, t('Save'));
+    $this->assertText(t('@type @title has been updated.', array('@type' => node_type_get_label('poll'), '@title' => $title)), 'Poll has been updated.');
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollTokenReplaceTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollTokenReplaceTest.php
new file mode 100644
index 0000000..13f2f79
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollTokenReplaceTest.php
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollTokenReplaceTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+/**
+ * Tests poll token replacements in strings.
+ */
+class PollTokenReplaceTest extends PollTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Poll token replacement',
+      'description' => 'Generates text using placeholders for dummy content to check poll token replacement.',
+      'group' => 'Poll',
+    );
+  }
+
+  /**
+   * Creates a poll, then tests the tokens generated from it.
+   */
+  function testPollTokenReplacement() {
+    $language_interface = language(LANGUAGE_TYPE_INTERFACE);
+
+    // Craete a poll with three choices.
+    $title = $this->randomName();
+    $choices = $this->_generateChoices(3);
+    $poll_nid = $this->pollCreate($title, $choices, FALSE);
+    $this->drupalLogout();
+
+    // Create four users and have each of them vote.
+    $vote_user1 = $this->drupalCreateUser(array('vote on polls', 'access content'));
+    $this->drupalLogin($vote_user1);
+    $edit = array(
+      'choice' => '1',
+    );
+    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
+    $this->drupalLogout();
+
+    $vote_user2 = $this->drupalCreateUser(array('vote on polls', 'access content'));
+    $this->drupalLogin($vote_user2);
+    $edit = array(
+      'choice' => '1',
+    );
+    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
+    $this->drupalLogout();
+
+    $vote_user3 = $this->drupalCreateUser(array('vote on polls', 'access content'));
+    $this->drupalLogin($vote_user3);
+    $edit = array(
+      'choice' => '2',
+    );
+    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
+    $this->drupalLogout();
+
+    $vote_user4 = $this->drupalCreateUser(array('vote on polls', 'access content'));
+    $this->drupalLogin($vote_user4);
+    $edit = array(
+      'choice' => '3',
+    );
+    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
+    $this->drupalLogout();
+
+    $poll = node_load($poll_nid, TRUE);
+
+    // Generate and test sanitized tokens.
+    $tests = array();
+    $tests['[node:poll-votes]'] = 4;
+    $tests['[node:poll-winner]'] = filter_xss($poll->choice[1]['chtext']);
+    $tests['[node:poll-winner-votes]'] = 2;
+    $tests['[node:poll-winner-percent]'] = 50;
+    $tests['[node:poll-duration]'] = format_interval($poll->runtime, 1, $language_interface->langcode);
+
+    // Test to make sure that we generated something for each token.
+    $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.');
+
+    foreach ($tests as $input => $expected) {
+      $output = token_replace($input, array('node' => $poll), array('langcode' => $language_interface->langcode));
+      $this->assertEqual($output, $expected, format_string('Sanitized poll token %token replaced.', array('%token' => $input)));
+    }
+
+    // Generate and test unsanitized tokens.
+    $tests['[node:poll-winner]'] = $poll->choice[1]['chtext'];
+
+    foreach ($tests as $input => $expected) {
+      $output = token_replace($input, array('node' => $poll), array('langcode' => $language_interface->langcode, 'sanitize' => FALSE));
+      $this->assertEqual($output, $expected, format_string('Unsanitized poll token %token replaced.', array('%token' => $input)));
+    }
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollTranslateTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollTranslateTest.php
new file mode 100644
index 0000000..8cc01e7
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollTranslateTest.php
@@ -0,0 +1,83 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollTranslateTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+/**
+ * Tests poll translation logic.
+ */
+class PollTranslateTest extends PollTestBase {
+
+  /**
+   * Modules to enable.
+   *
+   * @var array
+   */
+  public static $modules = array('translation');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Poll translation',
+      'description' => 'Test the poll translation logic.',
+      'group' => 'Poll',
+    );
+  }
+
+  /**
+   * Tests poll creation and translation.
+   *
+   * Checks that the choice names get copied from the original poll and that
+   * the vote count values are set to 0.
+   */
+  function testPollTranslate() {
+    $admin_user = $this->drupalCreateUser(array('administer content types', 'administer languages', 'edit any poll content', 'create poll content', 'administer nodes', 'translate all content'));
+
+    // Set up a poll with two choices.
+    $title = $this->randomName();
+    $choices = array($this->randomName(), $this->randomName());
+    $poll_nid = $this->pollCreate($title, $choices, FALSE);
+    $this->assertTrue($poll_nid, 'Poll for translation logic test created.');
+
+    $this->drupalLogout();
+    $this->drupalLogin($admin_user);
+
+    // Enable a second language.
+    $this->drupalGet('admin/config/regional/language');
+    $edit = array();
+    $edit['predefined_langcode'] = 'nl';
+    $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
+    $this->assertRaw(t('The language %language has been created and can now be used.', array('%language' => 'Dutch')), 'Language Dutch has been created.');
+
+    // Set "Poll" content type to use multilingual support with translation.
+    $this->drupalGet('admin/structure/types/manage/poll');
+    $edit = array('language_configuration[language_show]' => TRUE, 'node_type_language_translation_enabled' => TRUE);
+    $this->drupalPost('admin/structure/types/manage/poll', $edit, t('Save content type'));
+    $this->assertRaw(t('The content type %type has been updated.', array('%type' => 'Poll')), 'Poll content type has been updated.');
+
+    // Edit poll.
+    $this->drupalGet("node/$poll_nid/edit");
+    $edit = array();
+    // Set the poll's first choice count to 200.
+    $edit['choice[chid:1][chvotes]'] = 200;
+    // Set the language to Dutch.
+    $edit['langcode'] = 'nl';
+    $this->drupalPost(NULL, $edit, t('Save'));
+
+    // Translate the Dutch poll.
+    $this->drupalGet('node/add/poll', array('query' => array('translation' => $poll_nid, 'target' => 'en')));
+
+    $dutch_poll = node_load($poll_nid);
+
+    // Check that the vote count values didn't get copied from the Dutch poll
+    // and are set to 0.
+    $this->assertFieldByName('choice[chid:1][chvotes]', '0', ('Found choice with vote count 0'));
+    $this->assertFieldByName('choice[chid:2][chvotes]', '0', ('Found choice with vote count 0'));
+    // Check that the choice names got copied from the Dutch poll.
+    $this->assertFieldByName('choice[chid:1][chtext]', $dutch_poll->choice[1]['chtext'], format_string('Found choice with text @text', array('@text' => $dutch_poll->choice[1]['chtext'])));
+    $this->assertFieldByName('choice[chid:2][chtext]', $dutch_poll->choice[2]['chtext'], format_string('Found choice with text @text', array('@text' => $dutch_poll->choice[2]['chtext'])));
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollVoteCheckHostnameTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollVoteCheckHostnameTest.php
new file mode 100644
index 0000000..8efc02c
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollVoteCheckHostnameTest.php
@@ -0,0 +1,152 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollVoteCheckHostnameTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+class PollVoteCheckHostnameTest extends PollTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'User poll vote capability.',
+      'description' => 'Check that users and anonymous users from specified ip-address can only vote once.',
+      'group' => 'Poll'
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+
+    // Create and login user.
+    $this->admin_user = $this->drupalCreateUser(array('administer permissions', 'create poll content'));
+    $this->drupalLogin($this->admin_user);
+
+    // Allow anonymous users to vote on polls.
+    user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
+      'access content' => TRUE,
+      'vote on polls' => TRUE,
+      'cancel own vote' => TRUE,
+    ));
+
+    // Enable page cache to verify that the result page is not saved in the
+    // cache when anonymous voting is allowed.
+    $config = config('system.performance');
+    $config->set('cache.page.enabled', 1);
+    $config->save();
+
+    // Create poll.
+    $title = $this->randomName();
+    $choices = $this->_generateChoices(3);
+    $this->poll_nid = $this->pollCreate($title, $choices, FALSE);
+
+    $this->drupalLogout();
+
+    // Create web users.
+    $this->web_user1 = $this->drupalCreateUser(array('access content', 'vote on polls', 'cancel own vote'));
+    $this->web_user2 = $this->drupalCreateUser(array('access content', 'vote on polls'));
+  }
+
+  /**
+   * Checks that anonymous users with the same IP address can only vote once.
+   *
+   * Also checks that authenticated users can only vote once, even when the
+   * user's IP address has changed.
+   */
+  function testHostnamePollVote() {
+    // Login User1.
+    $this->drupalLogin($this->web_user1);
+
+    $edit = array(
+      'choice' => '1',
+    );
+
+    // User1 vote on Poll.
+    $this->drupalPost('node/' . $this->poll_nid, $edit, t('Vote'));
+    $this->assertText(t('Your vote was recorded.'), format_string('%user vote was recorded.', array('%user' => $this->web_user1->name)));
+    $this->assertText(t('Total votes: @votes', array('@votes' => 1)), 'Vote count updated correctly.');
+
+    // Check to make sure User1 cannot vote again.
+    $this->drupalGet('node/' . $this->poll_nid);
+    $elements = $this->xpath('//input[@value="Vote"]');
+    $this->assertTrue(empty($elements), format_string("%user is not able to vote again.", array('%user' => $this->web_user1->name)));
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
+
+    // Logout User1.
+    $this->drupalLogout();
+
+    // Fill the page cache by requesting the poll.
+    $this->drupalGet('node/' . $this->poll_nid);
+    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'MISS', 'Page was cacheable but was not in the cache.');
+    $this->drupalGet('node/' . $this->poll_nid);
+    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'HIT', 'Page was cached.');
+
+    // Anonymous user vote on Poll.
+    $this->drupalPost(NULL, $edit, t('Vote'));
+    $this->assertText(t('Your vote was recorded.'), 'Anonymous vote was recorded.');
+    $this->assertText(t('Total votes: @votes', array('@votes' => 2)), 'Vote count updated correctly.');
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
+
+    // Check to make sure Anonymous user cannot vote again.
+    $this->drupalGet('node/' . $this->poll_nid);
+    $this->assertFalse($this->drupalGetHeader('x-drupal-cache'), 'Page was not cacheable.');
+    $elements = $this->xpath('//input[@value="Vote"]');
+    $this->assertTrue(empty($elements), "Anonymous is not able to vote again.");
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
+
+    // Login User2.
+    $this->drupalLogin($this->web_user2);
+
+    // User2 vote on poll.
+    $this->drupalPost('node/' . $this->poll_nid, $edit, t('Vote'));
+    $this->assertText(t('Your vote was recorded.'), format_string('%user vote was recorded.', array('%user' => $this->web_user2->name)));
+    $this->assertText(t('Total votes: @votes', array('@votes' => 3)), 'Vote count updated correctly.');
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(empty($elements), "'Cancel your vote' button does not appear.");
+
+    // Logout User2.
+    $this->drupalLogout();
+
+    // Change host name for anonymous users.
+    db_update('poll_vote')
+      ->fields(array(
+        'hostname' => '123.456.789.1',
+      ))
+      ->condition('hostname', '', '<>')
+      ->execute();
+
+    // Check to make sure Anonymous user can vote again with a new session after
+    // a hostname change.
+    $this->drupalGet('node/' . $this->poll_nid);
+    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'MISS', 'Page was cacheable but was not in the cache.');
+    $this->drupalPost(NULL, $edit, t('Vote'));
+    $this->assertText(t('Your vote was recorded.'), format_string('%user vote was recorded.', array('%user' => $this->web_user2->name)));
+    $this->assertText(t('Total votes: @votes', array('@votes' => 4)), 'Vote count updated correctly.');
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
+
+    // Check to make sure Anonymous user cannot vote again with a new session,
+    // and that the vote from the previous session cannot be cancelledd.
+    $this->curlClose();
+    $this->drupalGet('node/' . $this->poll_nid);
+    $this->assertEqual($this->drupalGetHeader('x-drupal-cache'), 'MISS', 'Page was cacheable but was not in the cache.');
+    $elements = $this->xpath('//input[@value="Vote"]');
+    $this->assertTrue(empty($elements), 'Anonymous is not able to vote again.');
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(empty($elements), "'Cancel your vote' button does not appear.");
+
+    // Login User1.
+    $this->drupalLogin($this->web_user1);
+
+    // Check to make sure User1 still cannot vote even after hostname changed.
+    $this->drupalGet('node/' . $this->poll_nid);
+    $elements = $this->xpath('//input[@value="Vote"]');
+    $this->assertTrue(empty($elements), format_string("%user is not able to vote again.", array('%user' => $this->web_user1->name)));
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(!empty($elements), "'Cancel your vote' button appears.");
+  }
+}
diff --git a/core/modules/poll/lib/Drupal/poll/Tests/PollVoteTest.php b/core/modules/poll/lib/Drupal/poll/Tests/PollVoteTest.php
new file mode 100644
index 0000000..b8a2585
--- /dev/null
+++ b/core/modules/poll/lib/Drupal/poll/Tests/PollVoteTest.php
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\poll\Tests\PollVoteTest.
+ */
+
+namespace Drupal\poll\Tests;
+
+/**
+ * Tests voting on a poll.
+ */
+class PollVoteTest extends PollTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Poll vote',
+      'description' => 'Vote on a poll',
+      'group' => 'Poll'
+    );
+  }
+
+  function tearDown() {
+    parent::tearDown();
+  }
+
+  /**
+   * Tests voting on a poll.
+   */
+  function testPollVote() {
+    $title = $this->randomName();
+    $choices = $this->_generateChoices(7);
+    $poll_nid = $this->pollCreate($title, $choices, FALSE);
+    $this->drupalLogout();
+
+    $vote_user = $this->drupalCreateUser(array('cancel own vote', 'inspect all votes', 'vote on polls', 'access content'));
+    $restricted_vote_user = $this->drupalCreateUser(array('vote on polls', 'access content'));
+
+    $this->drupalLogin($vote_user);
+
+    // Record a vote for the first choice.
+    $edit = array(
+      'choice' => '1',
+    );
+    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
+    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
+    $this->assertText('Total votes: 1', 'Vote count updated correctly.');
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(isset($elements[0]), "'Cancel your vote' button appears.");
+
+    $this->drupalGet("node/$poll_nid/votes");
+    $this->assertText(t('This table lists all the recorded votes for this poll. If anonymous users are allowed to vote, they will be identified by the IP address of the computer they used when they voted.'), 'Vote table text.');
+    $this->assertText($choices[0], 'Vote recorded');
+
+    // Ensure poll listing page has correct number of votes.
+    $this->drupalGet('poll');
+    $this->assertText($title, 'Poll appears in poll list.');
+    $this->assertText('1 vote', 'Poll has 1 vote.');
+
+    // Cancel a vote.
+    $this->drupalPost('node/' . $poll_nid, array(), t('Cancel your vote'));
+    $this->assertText('Your vote was cancelled.', 'Your vote was cancelled.');
+    $this->assertNoText('Cancel your vote', "Cancel vote button doesn't appear.");
+
+    $this->drupalGet("node/$poll_nid/votes");
+    $this->assertNoText($choices[0], 'Vote cancelled');
+
+    // Ensure poll listing page has correct number of votes.
+    $this->drupalGet('poll');
+    $this->assertText($title, 'Poll appears in poll list.');
+    $this->assertText('0 votes', 'Poll has 0 votes.');
+
+    // Log in as a user who can only vote on polls.
+    $this->drupalLogout();
+    $this->drupalLogin($restricted_vote_user);
+
+    // Vote on a poll.
+    $edit = array(
+      'choice' => '1',
+    );
+    $this->drupalPost('node/' . $poll_nid, $edit, t('Vote'));
+    $this->assertText('Your vote was recorded.', 'Your vote was recorded.');
+    $this->assertText('Total votes: 1', 'Vote count updated correctly.');
+    $elements = $this->xpath('//input[@value="Cancel your vote"]');
+    $this->assertTrue(empty($elements), "'Cancel your vote' button does not appear.");
+  }
+}
diff --git a/core/modules/poll/poll.admin.css b/core/modules/poll/poll.admin.css
new file mode 100644
index 0000000..f118de3
--- /dev/null
+++ b/core/modules/poll/poll.admin.css
@@ -0,0 +1,17 @@
+
+/**
+ * @file
+ * Admin stylesheet for the Poll module.
+ */
+
+.node-form #edit-poll-more {
+  margin: 0;
+}
+.node-form #poll-choice-table .form-text {
+  display: inline;
+  width: auto;
+}
+.node-form #poll-choice-table td.choice-flag {
+  white-space: nowrap;
+  width: 4em;
+}
diff --git a/core/modules/poll/poll.base-rtl.css b/core/modules/poll/poll.base-rtl.css
new file mode 100644
index 0000000..7c737a9
--- /dev/null
+++ b/core/modules/poll/poll.base-rtl.css
@@ -0,0 +1,9 @@
+
+/**
+ * @file
+ * Right-to-left specfic base stylesheet for the Poll module.
+ */
+
+.poll .bar .foreground {
+  float: right;
+}
diff --git a/core/modules/poll/poll.base.css b/core/modules/poll/poll.base.css
new file mode 100644
index 0000000..1d24c67
--- /dev/null
+++ b/core/modules/poll/poll.base.css
@@ -0,0 +1,19 @@
+
+/**
+ * @file
+ * Base stylesheet for the Poll module.
+ */
+
+.poll {
+  overflow: hidden;
+}
+.poll .bar {
+  height: 1em;
+  margin: 1px 0;
+  background-color: #ddd;
+}
+.poll .bar .foreground {
+  background-color: #000;
+  height: 1em;
+  float: left; /* LTR */
+}
diff --git a/core/modules/poll/poll.info b/core/modules/poll/poll.info
new file mode 100644
index 0000000..f6b5386
--- /dev/null
+++ b/core/modules/poll/poll.info
@@ -0,0 +1,6 @@
+name = Poll
+description = Allows your site to capture votes on different topics in the form of multiple choice questions.
+package = Core
+version = VERSION
+core = 8.x
+dependencies[] = node
diff --git a/core/modules/poll/poll.install b/core/modules/poll/poll.install
new file mode 100644
index 0000000..75896bb
--- /dev/null
+++ b/core/modules/poll/poll.install
@@ -0,0 +1,149 @@
+<?php
+
+/**
+ * @file
+ * Install, update, and uninstall functions for the Poll module.
+ */
+
+/**
+ * Implements hook_schema().
+ */
+function poll_schema() {
+  $schema['poll'] = array(
+    'description' => 'Stores poll-specific information for poll nodes.',
+    'fields' => array(
+      'nid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => "The poll's {node}.nid.",
+      ),
+      'runtime' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The number of seconds past {node}.created during which the poll is open.',
+      ),
+      'active' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Boolean indicating whether or not the poll is open.',
+      ),
+    ),
+    'primary key' => array('nid'),
+    'foreign keys' => array(
+      'poll_node' => array(
+        'table' => 'node',
+        'columns' => array('nid' => 'nid'),
+      ),
+    ),
+  );
+
+  $schema['poll_choice'] = array(
+    'description' => 'Stores information about all choices for all {poll}s.',
+    'fields' => array(
+      'chid' => array(
+        'type' => 'serial',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'description' => 'Unique identifier for a poll choice.',
+      ),
+      'nid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The {node}.nid this choice belongs to.',
+      ),
+      'chtext' => array(
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'The text for this choice.',
+        'translatable' => TRUE,
+      ),
+      'chvotes' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The total number of votes this choice has received by all users.',
+      ),
+      'weight' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The sort order of this choice among all choices for the same node.',
+      ),
+    ),
+    'indexes' => array(
+      'nid' => array('nid'),
+    ),
+    'primary key' => array('chid'),
+    'foreign keys' => array(
+      'choice_node' => array(
+        'table' => 'node',
+        'columns' => array('nid' => 'nid'),
+      ),
+    ),
+  );
+
+  $schema['poll_vote'] = array(
+    'description' => 'Stores per-{users} votes for each {poll}.',
+    'fields' => array(
+      'chid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'description' => "The {users}'s vote for this poll.",
+      ),
+      'nid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'description' => 'The {poll} node this vote is for.',
+      ),
+      'uid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The {users}.uid this vote is from unless the voter was anonymous.',
+      ),
+      'hostname' => array(
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'The IP address this vote is from unless the voter was logged in.',
+      ),
+      'timestamp' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The timestamp of the vote creation.',
+      ),
+    ),
+    'primary key' => array('nid', 'uid', 'hostname'),
+    'foreign keys' => array(
+      'poll_node' => array(
+        'table' => 'node',
+        'columns' => array('nid' => 'nid'),
+      ),
+      'voter' => array(
+        'table' => 'users',
+        'columns' => array('uid' => 'uid'),
+      ),
+    ),
+    'indexes' => array(
+      'chid'     => array('chid'),
+      'hostname' => array('hostname'),
+      'uid' => array('uid'),
+    ),
+  );
+
+  return $schema;
+}
diff --git a/core/modules/poll/poll.module b/core/modules/poll/poll.module
new file mode 100644
index 0000000..85d29b4
--- /dev/null
+++ b/core/modules/poll/poll.module
@@ -0,0 +1,1013 @@
+<?php
+
+/**
+ * @file
+ * Collects votes on different topics in the form of multiple choice questions.
+ */
+
+use Drupal\Core\Entity\EntityInterface;
+use Drupal\node\Plugin\Core\Entity\Node;
+use Drupal\entity\Plugin\Core\Entity\EntityDisplay;
+
+/**
+ * Implements hook_help().
+ */
+function poll_help($path, $arg) {
+  switch ($path) {
+    case 'admin/help#poll':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('The Poll module can be used to create simple surveys or questionnaires that display cumulative results. A poll is a good way to receive feedback from site users and community members. For more information, see the online handbook entry for the <a href="@poll">Poll module</a>.', array('@poll' => 'http://drupal.org/documentation/modules/poll/')) . '</p>';
+      $output .= '<h3>' . t('Uses') . '</h3>';
+      $output .= '<dl>';
+      $output .= '<dt>' . t('Creating a poll') . '</dt>';
+      $output .= '<dd>' . t('Users can create a poll by clicking on Poll on the <a href="@add-content">Add new content</a> page, and entering the question being posed, the answer choices, and beginning vote counts for each choice. The status (closed or active) and duration (length of time the poll remains active for new votes) can also be specified.', array('@add-content' => url('node/add'))) . '</dd>';
+      $output .= '<dt>' . t('Viewing polls') . '</dt>';
+      $output .= '<dd>' . t('You can visit the <a href="@poll">Polls</a> page to view all current polls, or alternately enable the <em>Most recent poll</em> block on the <a href="@blocks">Blocks administration page</a>. To vote in or view the results of a specific poll, you can click on the poll itself.', array('@poll' => url('poll'), '@blocks' => url('admin/structure/block'))) . '</dd>';
+      $output .= '</dl>';
+      return $output;
+  }
+}
+
+/**
+ * Implements hook_theme().
+ */
+function poll_theme() {
+  $theme_hooks = array(
+    'poll_vote' => array(
+      'template' => 'poll-vote',
+      'render element' => 'form',
+    ),
+    'poll_choices' => array(
+      'render element' => 'form',
+    ),
+    'poll_results' => array(
+      'template' => 'poll-results',
+      'variables' => array('raw_title' => NULL, 'results' => NULL, 'votes' => NULL, 'raw_links' => NULL, 'block' => NULL, 'nid' => NULL, 'vote' => NULL),
+    ),
+  );
+
+  return $theme_hooks;
+}
+
+/**
+ * Implements hook_permission().
+ */
+function poll_permission() {
+  $perms = array(
+    'vote on polls' => array(
+      'title' => t('Vote on polls'),
+    ),
+    'cancel own vote' => array(
+      'title' => t('Cancel and change own votes'),
+    ),
+    'inspect all votes' => array(
+      'title' => t('View details for all votes'),
+    ),
+  );
+
+  return $perms;
+}
+
+/**
+ * Implements hook_menu().
+ */
+function poll_menu() {
+  $items['poll'] = array(
+    'title' => 'Polls',
+    'page callback' => 'poll_page',
+    'access arguments' => array('access content'),
+    'type' => MENU_SUGGESTED_ITEM,
+    'file' => 'poll.pages.inc',
+  );
+
+  $items['node/%node/votes'] = array(
+    'title' => 'Votes',
+    'page callback' => 'poll_votes',
+    'page arguments' => array(1),
+    'access callback' => '_poll_menu_access',
+    'access arguments' => array(1, 'inspect all votes', FALSE),
+    'weight' => 3,
+    'type' => MENU_LOCAL_TASK,
+    'file' => 'poll.pages.inc',
+  );
+
+  $items['node/%node/results'] = array(
+    'title' => 'Results',
+    'page callback' => 'poll_results',
+    'page arguments' => array(1),
+    'access callback' => '_poll_menu_access',
+    'access arguments' => array(1, 'access content', TRUE),
+    'weight' => 3,
+    'type' => MENU_LOCAL_TASK,
+    'file' => 'poll.pages.inc',
+  );
+
+  return $items;
+}
+
+/**
+ * Access callback: Determines if a node is acceptable for poll menu items.
+ *
+ * @param $node
+ *   The poll node object.
+ * @param $perm
+ *   A permission the user must have to view the page.
+ * @param $inspect_allowvotes
+ *   TRUE if the user can view votes, and FALSE if the user cannot view votes.
+ */
+function _poll_menu_access($node, $perm, $inspect_allowvotes) {
+  return user_access($perm) && ($node->type == 'poll') && ($node->allowvotes || !$inspect_allowvotes);
+}
+
+/**
+ * Implements hook_page_build().
+ */
+function poll_page_build(&$page) {
+  $path = drupal_get_path('module', 'poll');
+  $page['#attached']['css'][$path . '/poll.base.css'] = array('every_page' => TRUE);
+  $page['#attached']['css'][$path . '/poll.theme.css'] = array('every_page' => TRUE);
+}
+
+/**
+ * Implements hook_cron().
+ *
+ * Closes polls that have exceeded their allowed runtime.
+ */
+function poll_cron() {
+  $nids = db_query('SELECT p.nid FROM {poll} p INNER JOIN {node} n ON p.nid = n.nid WHERE (n.created + p.runtime) < :request_time AND p.active = :active AND p.runtime <> :runtime', array(':request_time' => REQUEST_TIME, ':active' => 1, ':runtime' => 0))->fetchCol();
+  if (!empty($nids)) {
+    db_update('poll')
+      ->fields(array('active' => 0))
+      ->condition('nid', $nids, 'IN')
+      ->execute();
+  }
+}
+
+/**
+ * Implements hook_node_info().
+ */
+function poll_node_info() {
+  return array(
+    'poll' => array(
+      'name' => t('Poll'),
+      'base' => 'poll',
+      'description' => t('A <em>poll</em> is a question with a set of possible responses. A <em>poll</em>, once created, automatically provides a simple running count of the number of votes received for each response.'),
+      'title_label' => t('Question'),
+      'has_body' => FALSE,
+    )
+  );
+}
+
+/**
+ * Implements hook_field_extra_fields().
+ */
+function poll_field_extra_fields() {
+  $extra['node']['poll'] = array(
+    'form' => array(
+      'choice_wrapper' => array(
+        'label' => t('Poll choices'),
+        'description' => t('Poll choices'),
+        'weight' => -4,
+      ),
+      'settings' => array(
+        'label' => t('Poll settings'),
+        'description' => t('Poll module settings'),
+        'weight' => -3,
+      ),
+    ),
+    'display' => array(
+      'poll_view_voting' => array(
+        'label' => t('Poll vote'),
+        'description' => t('Poll vote'),
+        'weight' => 0,
+      ),
+      'poll_view_results' => array(
+        'label' => t('Poll results'),
+        'description' => t('Poll results'),
+        'weight' => 0,
+      ),
+    )
+  );
+
+  return $extra;
+}
+
+/**
+ * Implements hook_form().
+ */
+function poll_form(Node $node, &$form_state) {
+  global $user;
+
+  $admin = user_access('bypass node access') || user_access('edit any poll content') || (user_access('edit own poll content') && $user->uid == $node->uid);
+
+  $type = node_type_load($node->type);
+
+  // The submit handlers to add more poll choices require that this form is
+  // cached, regardless of whether Ajax is used.
+  $form_state['cache'] = TRUE;
+
+  $form['title'] = array(
+    '#type' => 'textfield',
+    '#title' => check_plain($type->title_label),
+    '#required' => TRUE,
+    '#default_value' => $node->title,
+    '#weight' => -5,
+  );
+
+  if (isset($form_state['choice_count'])) {
+    $choice_count = $form_state['choice_count'];
+  }
+  else {
+    $choice_count = max(2, empty($node->choice) ? 2 : count($node->choice));
+  }
+
+  // Add a wrapper for the choices and more button.
+  $form['choice_wrapper'] = array(
+    '#tree' => FALSE,
+    '#weight' => -4,
+    '#prefix' => '<div class="clearfix" id="poll-choice-wrapper">',
+    '#suffix' => '</div>',
+  );
+
+  // Container for just the poll choices.
+  $form['choice_wrapper']['choice'] = array(
+    '#prefix' => '<div id="poll-choices">',
+    '#suffix' => '</div>',
+    '#theme' => 'poll_choices',
+  );
+
+  // Add the current choices to the form.
+  $delta = 0;
+  $weight = 0;
+  if (isset($node->choice)) {
+    $delta = count($node->choice);
+    foreach ($node->choice as $chid => $choice) {
+      $key = 'chid:' . $chid;
+      $form['choice_wrapper']['choice'][$key] = _poll_choice_form($key, $choice['chid'], $choice['chtext'], $choice['chvotes'], $choice['weight'], $choice_count);
+      $weight = max($choice['weight'], $weight);
+    }
+  }
+
+  // Add initial or additional choices.
+  $existing_delta = $delta;
+  for ($delta; $delta < $choice_count; $delta++) {
+    $key = 'new:' . ($delta - $existing_delta);
+    // Increase the weight of each new choice.
+    $weight++;
+    $form['choice_wrapper']['choice'][$key] = _poll_choice_form($key, NULL, '', 0, $weight, $choice_count);
+  }
+
+  // We name our button 'poll_more' to avoid conflicts with other modules using
+  // Ajax-enabled buttons with the id 'more'.
+  $form['choice_wrapper']['poll_more'] = array(
+    '#type' => 'submit',
+    '#value' => t('Add another choice'),
+    '#weight' => 1,
+    '#limit_validation_errors' => array(array('choice')),
+    '#submit' => array('poll_more_choices_submit'),
+    '#ajax' => array(
+      'callback' => 'poll_choice_js',
+      'wrapper' => 'poll-choices',
+      'effect' => 'fade',
+    ),
+  );
+
+  // Poll attributes
+  $duration = array(
+    // 1-6 days.
+    86400, 2 * 86400, 3 * 86400, 4 * 86400, 5 * 86400, 6 * 86400,
+    // 1-3 weeks (7 days).
+    604800, 2 * 604800, 3 * 604800,
+    // 1-3,6,9 months (30 days).
+    2592000, 2 * 2592000, 3 * 2592000, 6 * 2592000, 9 * 2592000,
+    // 1 year (365 days).
+    31536000,
+  );
+  $duration = array(0 => t('Unlimited')) + drupal_map_assoc($duration, 'format_interval');
+  $active = array(0 => t('Closed'), 1 => t('Active'));
+
+  $form['settings'] = array(
+    '#type' => 'details',
+    '#collapsible' => TRUE,
+    '#title' => t('Poll settings'),
+    '#weight' => -3,
+    '#access' => $admin,
+  );
+
+  $form['settings']['active'] = array(
+    '#type' => 'radios',
+    '#title' => t('Poll status'),
+    '#default_value' => isset($node->active) ? $node->active : 1,
+    '#options' => $active,
+    '#description' => t('When a poll is closed, visitors can no longer vote for it.'),
+    '#access' => $admin,
+  );
+  $form['settings']['runtime'] = array(
+    '#type' => 'select',
+    '#title' => t('Poll duration'),
+    '#default_value' => isset($node->runtime) ? $node->runtime : 0,
+    '#options' => $duration,
+    '#description' => t('After this period, the poll will be closed automatically.'),
+  );
+  $form['#attached']['css'] = array(
+    drupal_get_path('module', 'poll') . '/poll.admin.css',
+  );
+
+  $form['#entity_builders'][] = 'poll_node_form_submit';
+
+  return $form;
+}
+
+/**
+ * Form submission handler for adding more than two choices to a poll.
+ *
+ * This handler is run regardless of whether JavaScript is enabled. It makes
+ * changes to the form state. If the button is clicked with JavaScript
+ * disabled, then the page is reloaded with the complete rebuilt form. If the
+ * button was clicked with JavaScript enabled, then ajax_form_callback() calls
+ * poll_choice_js() to return just the changed part of the form.
+ */
+function poll_more_choices_submit($form, &$form_state) {
+  // Add one more choice to the form.
+  if ($form_state['values']['poll_more']) {
+    $form_state['choice_count'] = count($form_state['values']['choice']) + 1;
+  }
+  // Renumber the choices. This invalidates the corresponding key/value
+  // associations in $form_state['input'], so clear that out. This requires
+  // poll_form() to rebuild the choices with the values in $node->choice, which
+  // it does.
+  $node = $form_state['controller']->getEntity($form_state);
+  $node->choice = array_values($form_state['values']['choice']);
+  unset($form_state['input']['choice']);
+  $form_state['rebuild'] = TRUE;
+}
+
+/**
+ * Constructs one individual form choice as part of poll node form.
+ *
+ * @see poll_form()
+ */
+function _poll_choice_form($key, $chid = NULL, $value = '', $votes = 0, $weight = 0, $size = 10) {
+  $form = array(
+    '#tree' => TRUE,
+    '#weight' => $weight,
+  );
+
+  // We'll manually set the #parents property of these fields so that
+  // their values appear in the $form_state['values']['choice'] array.
+  $form['chid'] = array(
+    '#type' => 'value',
+    '#value' => $chid,
+    '#parents' => array('choice', $key, 'chid'),
+  );
+
+  $form['chtext'] = array(
+    '#type' => 'textfield',
+    '#title' => $value !== '' ? t('Choice label') : t('New choice label'),
+    '#title_display' => 'invisible',
+    '#default_value' => $value,
+    '#parents' => array('choice', $key, 'chtext'),
+  );
+
+  $form['chvotes'] = array(
+    '#type' => 'number',
+    '#title' => $value !== '' ? t('Vote count for choice @label', array('@label' => $value)) : t('Vote count for new choice'),
+    '#title_display' => 'invisible',
+    '#default_value' => $votes,
+    '#min' => 0,
+    '#parents' => array('choice', $key, 'chvotes'),
+    '#access' => user_access('administer nodes'),
+  );
+
+  $form['weight'] = array(
+    '#type' => 'weight',
+    '#title' => $value !== '' ? t('Weight for choice @label', array('@label' => $value)) : t('Weight for new choice'),
+    '#title_display' => 'invisible',
+    '#default_value' => $weight,
+    '#delta' => $size,
+    '#parents' => array('choice', $key, 'weight'),
+  );
+
+  return $form;
+}
+
+/**
+ * Ajax callback for adding new choices to the poll node form.
+ *
+ * This returns the new page content to replace the page content made obsolete
+ * by the form submission.
+ */
+function poll_choice_js($form, $form_state) {
+  return $form['choice_wrapper']['choice'];
+}
+
+/**
+ * Entity builder for node_form().
+ *
+ * Upon preview and final submission, we need to renumber poll choices and
+ * create a teaser output.
+ *
+ * @see poll_teaser()
+ */
+function poll_node_form_submit($entity_type, $entity, &$form, &$form_state) {
+  // Renumber choices.
+  $entity->choice = array_values($form_state['values']['choice']);
+  $form_state['values']['teaser'] = poll_teaser((object) $form_state['values']);
+}
+
+/**
+ * Implements hook_validate().
+ */
+function poll_validate($node, $form) {
+  if ($node->label()) {
+    // Check for at least two options and validate amount of votes.
+    $realchoices = 0;
+    foreach ($node->choice as $i => $choice) {
+      if ($choice['chtext'] != '') {
+        $realchoices++;
+      }
+    }
+
+    if ($realchoices < 2) {
+      form_set_error("choice][$realchoices][chtext", t('You must fill in at least two choices.'));
+    }
+  }
+}
+
+/**
+ * Implements hook_field_attach_prepare_translation_alter().
+ */
+function poll_field_attach_prepare_translation_alter(EntityInterface $entity, $context) {
+  if ($entity->entityType() == 'node' && $entity->type == 'poll') {
+    $entity->choice = $context['source_entity']->choice;
+    foreach ($entity->choice as $i => $choice) {
+      $entity->choice[$i]['chvotes'] = 0;
+    }
+  }
+}
+
+/**
+ * Implements hook_load().
+ */
+function poll_load($nodes) {
+  global $user;
+  foreach ($nodes as $node) {
+    $poll = db_query("SELECT runtime, active FROM {poll} WHERE nid = :nid", array(':nid' => $node->nid))->fetchObject();
+
+    if (empty($poll)) {
+      $poll = new stdClass();
+    }
+
+    // Load the appropriate choices into the $poll object.
+    $poll->choice = db_select('poll_choice', 'c')
+      ->addTag('translatable')
+      ->fields('c', array('chid', 'chtext', 'chvotes', 'weight'))
+      ->condition('c.nid', $node->nid)
+      ->orderBy('weight')
+      ->execute()->fetchAllAssoc('chid', PDO::FETCH_ASSOC);
+
+    // Determine whether or not this user is allowed to vote.
+    $poll->allowvotes = FALSE;
+    if (user_access('vote on polls') && $poll->active) {
+      if ($user->uid) {
+        // If authenticated, find existing vote based on uid.
+        $poll->vote = db_query('SELECT chid FROM {poll_vote} WHERE nid = :nid AND uid = :uid', array(':nid' => $node->nid, ':uid' => $user->uid))->fetchField();
+        if (empty($poll->vote)) {
+          $poll->vote = -1;
+          $poll->allowvotes = TRUE;
+        }
+      }
+      elseif (!empty($_SESSION['poll_vote'][$node->nid])) {
+        // Otherwise the user is anonymous. Look for an existing vote in the
+        // user's session.
+        $poll->vote = $_SESSION['poll_vote'][$node->nid];
+      }
+      else {
+        // Finally, query the database for an existing vote based on anonymous
+        // user's hostname.
+        $poll->allowvotes = !db_query("SELECT 1 FROM {poll_vote} WHERE nid = :nid AND hostname = :hostname AND uid = 0", array(':nid' => $node->nid, ':hostname' => ip_address()))->fetchField();
+      }
+    }
+    foreach ($poll as $key => $value) {
+      $nodes[$node->nid]->$key = $value;
+    }
+  }
+}
+
+/**
+ * Implements hook_insert().
+ */
+function poll_insert($node) {
+  if (!user_access('administer nodes')) {
+    // Make sure all votes are 0 initially
+    foreach ($node->choice as $i => $choice) {
+      $node->choice[$i]['chvotes'] = 0;
+    }
+    $node->active = 1;
+  }
+
+  db_insert('poll')
+    ->fields(array(
+      'nid' => $node->nid,
+      'runtime' => $node->runtime,
+      'active' => $node->active,
+    ))
+    ->execute();
+
+  foreach ($node->choice as $choice) {
+    if ($choice['chtext'] != '') {
+      db_insert('poll_choice')
+        ->fields(array(
+          'nid' => $node->nid,
+          'chtext' => $choice['chtext'],
+          'chvotes' => $choice['chvotes'],
+          'weight' => $choice['weight'],
+        ))
+        ->execute();
+    }
+  }
+}
+
+/**
+ * Implements hook_update().
+ */
+function poll_update($node) {
+  // Update poll settings.
+  db_update('poll')
+    ->fields(array(
+      'runtime' => $node->runtime,
+      'active' => $node->active,
+    ))
+    ->condition('nid', $node->nid)
+    ->execute();
+
+  // Poll choices with empty titles signifies removal. We remove all votes to
+  // the removed options, so people who voted on them can vote again.
+  foreach ($node->choice as $key => $choice) {
+    if (!empty($choice['chtext'])) {
+      db_merge('poll_choice')
+        ->key(array('chid' => $choice['chid']))
+        ->fields(array(
+          'chtext' => $choice['chtext'],
+          'chvotes' => (int) $choice['chvotes'],
+          'weight' => $choice['weight'],
+        ))
+        ->insertFields(array(
+          'nid' => $node->nid,
+          'chtext' => $choice['chtext'],
+          'chvotes' => (int) $choice['chvotes'],
+          'weight' => $choice['weight'],
+        ))
+        ->execute();
+    }
+    else {
+      db_delete('poll_vote')
+        ->condition('nid', $node->nid)
+        ->condition('chid', $key)
+        ->execute();
+      db_delete('poll_choice')
+        ->condition('nid', $node->nid)
+        ->condition('chid', $choice['chid'])
+        ->execute();
+    }
+  }
+}
+
+/**
+ * Implements hook_delete().
+ */
+function poll_delete($node) {
+  db_delete('poll')
+    ->condition('nid', $node->nid)
+    ->execute();
+  db_delete('poll_choice')
+    ->condition('nid', $node->nid)
+    ->execute();
+  db_delete('poll_vote')
+    ->condition('nid', $node->nid)
+    ->execute();
+}
+
+/**
+ * Returns the content for the 'latest poll' block.
+ *
+ * @param Drupal\node\Node $node
+ *   The node entity to load.
+ *
+ * @see poll_view_results()
+ */
+function poll_block_latest_poll_view(Node $node) {
+  global $user;
+  $output = '';
+
+  // This is necessary for shared objects because PHP doesn't copy objects, but
+  // passes them by reference.  So when the objects are cached it can result in
+  // the wrong output being displayed on subsequent calls.  The cloning and
+  // unsetting of $node->content prevents the block output from being the same
+  // as the node output.
+  $node = clone $node;
+  unset($node->content);
+
+  // No 'read more' link.
+  $node->readmore = FALSE;
+  $node->teaser = '';
+
+  $links = array();
+  $links[] = array('title' => t('Older polls'), 'href' => 'poll', 'attributes' => array('title' => t('View the list of polls on this site.')));
+  if ($node->allowvotes) {
+    $links[] = array('title' => t('Results'), 'href' => 'node/' . $node->nid . '/results', 'attributes' => array('title' => t('View the current poll results.')));
+  }
+
+  $node->links = $links;
+
+  if (!empty($node->allowvotes)) {
+    $node->content['poll_view_voting'] = drupal_get_form('poll_view_voting', $node, TRUE);
+    $node->content['links'] = array(
+      '#theme' => 'links',
+      '#links' => $node->links,
+      '#weight' => 5,
+    );
+  }
+  else {
+    $node->content['poll_view_results'] = array('#markup' => poll_view_results($node, TRUE, TRUE));
+  }
+
+  return $node;
+}
+
+
+/**
+ * Implements hook_view().
+ *
+ * @see poll_view_results()
+ */
+function poll_view($node, EntityDisplay $display, $view_mode) {
+  if (!empty($node->allowvotes) && empty($node->show_results)) {
+    if ($display->getComponent('poll_view_voting')) {
+      $node->content['poll_view_voting'] = drupal_get_form('poll_view_voting', $node);
+    }
+  }
+  elseif ($display->getComponent('poll_view_results')) {
+    $node->content['poll_view_results'] = array('#markup' => poll_view_results($node, $view_mode));
+  }
+  return $node;
+}
+
+/**
+ * Creates a simple teaser that lists all the choices.
+ *
+ * This is primarily used for RSS.
+ *
+ * @param $node
+ *   The poll node object.
+ *
+ * @return
+ *   Poll choices in a simple teaser format.
+ */
+function poll_teaser($node) {
+  $teaser = NULL;
+  if (is_array($node->choice)) {
+    foreach ($node->choice as $k => $choice) {
+      if ($choice['chtext'] != '') {
+        $teaser .= '* ' . check_plain($choice['chtext']) . "\n";
+      }
+    }
+  }
+  return $teaser;
+}
+
+/**
+ * Form constructor for the poll voting form.
+ *
+ * @param $node
+ *   The poll node object.
+ * @param $block
+ *   (optional) TRUE if a poll should be displayed in a block. Defaults to
+ *   FALSE.
+ * @see phptemplate_preprocess_poll_vote()
+ * @see poll_vote()
+ * @ingroup forms
+ */
+function poll_view_voting($form, &$form_state, $node, $block = FALSE) {
+  if ($node->choice) {
+    $list = array();
+    foreach ($node->choice as $i => $choice) {
+      $list[$i] = check_plain($choice['chtext']);
+    }
+    $form['choice'] = array(
+      '#type' => 'radios',
+      '#title' => t('Choices'),
+      '#title_display' => 'invisible',
+      '#default_value' => -1,
+      '#options' => $list,
+    );
+  }
+
+  $form['vote'] = array(
+    '#type' => 'submit',
+    '#value' => t('Vote'),
+    '#submit' => array('poll_vote'),
+  );
+
+  // Store the node so we can get to it in submit functions.
+  $form['#node'] = $node;
+  $form['#block'] = $block;
+
+  // Set form caching because we could have multiple of these forms on
+  // the same page, and we want to ensure the right one gets picked.
+  $form_state['cache'] = TRUE;
+
+  // Provide a more cleanly named voting form theme.
+  $form['#theme'] = 'poll_vote';
+  return $form;
+}
+
+/**
+ * Form validation handler for poll_view_voting().
+ *
+ * @see poll_vote()
+ */
+function poll_view_voting_validate($form, &$form_state) {
+  if ($form_state['values']['choice'] == -1) {
+    form_set_error( 'choice', t('Your vote could not be recorded because you did not select any of the choices.'));
+  }
+}
+
+/**
+ * Form submission handler for poll_view_voting().
+ *
+ * @see poll_view_voting_validate()
+ */
+function poll_vote($form, &$form_state) {
+  $node = $form['#node'];
+  $choice = $form_state['values']['choice'];
+
+  global $user;
+  db_insert('poll_vote')
+    ->fields(array(
+      'nid' => $node->nid,
+      'chid' => $choice,
+      'uid' => $user->uid,
+      'hostname' => ip_address(),
+      'timestamp' => REQUEST_TIME,
+    ))
+    ->execute();
+
+  // Add one to the votes.
+  db_update('poll_choice')
+    ->expression('chvotes', 'chvotes + 1')
+    ->condition('chid', $choice)
+    ->execute();
+
+  cache_invalidate_tags(array('content' => TRUE));
+
+  if (!$user->uid) {
+    // The vote is recorded so the user gets the result view instead of the
+    // voting form when viewing the poll. Saving a value in $_SESSION has the
+    // convenient side effect of preventing the user from hitting the page
+    // cache. When anonymous voting is allowed, the page cache should only
+    // contain the voting form, not the results.
+    $_SESSION['poll_vote'][$node->nid] = $choice;
+  }
+
+  drupal_set_message(t('Your vote was recorded.'));
+
+  // Return the user to whatever page they voted from.
+}
+
+/**
+ * Implements hook_preprocess_HOOK() for block.tpl.php.
+ */
+function poll_preprocess_block(&$variables) {
+  if ($variables['block']->module == 'poll') {
+    $variables['attributes']['role'] = 'complementary';
+  }
+}
+
+/**
+ * Implements template_preprocess_HOOK() for poll-vote.tpl.php.
+ */
+function template_preprocess_poll_vote(&$variables) {
+  $form = $variables['form'];
+  $variables['choice'] = drupal_render($form['choice']);
+  $variables['title'] = check_plain($form['#node']->title);
+  $variables['vote'] = drupal_render($form['vote']);
+  $variables['rest'] = drupal_render_children($form);
+  $variables['block'] = $form['#block'];
+  if ($variables['block']) {
+    $variables['theme_hook_suggestions'][] = 'poll_vote__block';
+  }
+}
+
+/**
+ * Generates a graphical representation of the results of a poll.
+ *
+ * @see poll_block_latest_poll_view()
+ * @see poll_view()
+ */
+function poll_view_results($node, $view_mode, $block = FALSE) {
+  // Make sure that choices are ordered by their weight.
+  uasort($node->choice, 'drupal_sort_weight');
+
+  // Count the votes and find the maximum.
+  $total_votes = 0;
+  $max_votes = 0;
+  foreach ($node->choice as $choice) {
+    if (isset($choice['chvotes'])) {
+      $total_votes += $choice['chvotes'];
+      $max_votes = max($max_votes, $choice['chvotes']);
+    }
+  }
+
+  $poll_results = array();
+  foreach ($node->choice as $i => $choice) {
+    $chvotes = isset($choice['chvotes']) ? $choice['chvotes'] : NULL;
+    $percentage = round($chvotes * 100 / max($total_votes, 1));
+    $display_votes = !$block ? ' (' . format_plural($chvotes, '1 vote', '@count votes') . ')' : '';
+
+    $poll_results[] = array(
+      '#theme' => 'meter',
+      '#prefix' => '<dt class="choice-title">' . check_plain($choice['chtext']) . "</dt>\n" . '<dd class="choice-result">',
+      '#suffix' => "</dd>\n",
+      '#display_value' =>  t('!percentage%', array('!percentage' => $percentage)) . $display_votes,
+      '#min' => 0,
+      '#max' => $total_votes,
+      '#value' => $chvotes,
+      '#percentage' => $percentage,
+      '#attributes' => array('class' => 'bar'),
+    );
+  }
+
+  return theme('poll_results', array('raw_title' => $node->label(), 'results' => drupal_render($poll_results), 'votes' => $total_votes, 'raw_links' => isset($node->links) ? $node->links : array(), 'block' => $block, 'nid' => $node->nid, 'vote' => isset($node->vote) ? $node->vote : NULL));
+}
+
+
+/**
+ * Returns HTML for an admin poll form for choices.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - form: A render element representing the form.
+ *
+ * @ingroup themeable
+ */
+function theme_poll_choices($variables) {
+  $form = $variables['form'];
+
+  drupal_add_tabledrag('poll-choice-table', 'order', 'sibling', 'poll-weight');
+
+  $is_admin= user_access('administer nodes');
+  $delta = 0;
+  $rows = array();
+  $headers = array('', t('Choice'));
+  if ($is_admin) {
+    $headers[] = t('Vote count');
+  }
+  $headers[] = t('Weight');
+
+  foreach (element_children($form) as $key) {
+    $delta++;
+    // Set special classes for drag and drop updating.
+    $form[$key]['weight']['#attributes']['class'] = array('poll-weight');
+
+    // Build the table row.
+    $row = array(
+      'data' => array(
+        array('class' => array('choice-flag')),
+        drupal_render($form[$key]['chtext']),
+      ),
+      'class' => array('draggable'),
+    );
+    if ($is_admin) {
+      $row['data'][] = drupal_render($form[$key]['chvotes']);
+    }
+    $row['data'][] = drupal_render($form[$key]['weight']);
+
+    // Add any additional classes set on the row.
+    if (!empty($form[$key]['#attributes']['class'])) {
+      $row['class'] = array_merge($row['class'], $form[$key]['#attributes']['class']);
+    }
+
+    $rows[] = $row;
+  }
+
+  $output = theme('table', array('header' => $headers, 'rows' => $rows, 'attributes' => array('id' => 'poll-choice-table')));
+  $output .= drupal_render_children($form);
+  return $output;
+}
+
+/**
+ * Implements template_preprocess_HOOK() for poll-results.tpl.php.
+ *
+ * @param $variables
+ *   An associative array containing:
+ *   - raw_title: A string for the title of the poll.
+ *   - results: The results of the poll.
+ *   - votes: The total results in the poll.
+ *   - raw_links: Array containing links in the poll.
+ *   - block: A boolean to define if the poll is a block.
+ *   - nid: The node ID of the poll.
+ *   - vote: The choice number of the current user's vote.
+ *   The raw_* inputs to this are naturally unsafe; often safe versions are
+ *   made to simply overwrite the raw version, but in this case it seems likely
+ *   that the title and the links may be overridden by the theme layer, so they
+ *   are left in with a different name for that purpose.
+ *
+ * @see poll-results.tpl.php
+ * @see poll-results--block.tpl.php
+ */
+function template_preprocess_poll_results(&$variables) {
+  $variables['links'] = theme('links__poll_results', array('links' => $variables['raw_links']));
+  if (isset($variables['vote']) && $variables['vote'] > -1 && user_access('cancel own vote')) {
+    $elements = drupal_get_form('poll_cancel_form', $variables['nid']);
+    $variables['cancel_form'] = drupal_render($elements);
+  }
+  $variables['title'] = check_plain($variables['raw_title']);
+}
+
+/**
+ * Form constructor for the poll cancel form.
+ *
+ * @param $nid
+ *   The poll node ID.
+ *
+ * @ingroup forms
+ * @see poll_cancel()
+ */
+function poll_cancel_form($form, &$form_state, $nid) {
+  $form_state['cache'] = TRUE;
+
+  // Store the nid so we can get to it in submit functions.
+  $form['#nid'] = $nid;
+
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Cancel your vote'),
+    '#submit' => array('poll_cancel')
+  );
+
+  return $form;
+}
+
+/**
+ * Form submission handler for poll_cancel_form().
+ */
+function poll_cancel($form, &$form_state) {
+  global $user;
+  $node = node_load($form['#nid']);
+
+  db_delete('poll_vote')
+    ->condition('nid', $node->nid)
+    ->condition($user->uid ? 'uid' : 'hostname', $user->uid ? $user->uid : ip_address())
+    ->execute();
+
+  // Subtract from the votes.
+  db_update('poll_choice')
+    ->expression('chvotes', 'chvotes - 1')
+    ->condition('chid', $node->vote)
+    ->execute();
+
+  unset($_SESSION['poll_vote'][$node->nid]);
+
+  drupal_set_message(t('Your vote was cancelled.'));
+}
+
+/**
+ * Implements hook_user_cancel().
+ */
+function poll_user_cancel($edit, $account, $method) {
+  switch ($method) {
+    case 'user_cancel_reassign':
+      db_update('poll_vote')
+        ->fields(array('uid' => 0))
+        ->condition('uid', $account->uid)
+        ->execute();
+      break;
+  }
+}
+
+/**
+ * Implements hook_user_predelete().
+ */
+function poll_user_predelete($account) {
+  db_delete('poll_vote')
+    ->condition('uid', $account->uid)
+    ->execute();
+}
+
+/**
+ * Implements hook_rdf_mapping().
+ */
+function poll_rdf_mapping() {
+  return array(
+    array(
+      'type' => 'node',
+      'bundle' => 'poll',
+      'mapping' => array(
+        'rdftype' => array('sioc:Post', 'sioct:Poll'),
+      ),
+    ),
+  );
+}
diff --git a/core/modules/poll/poll.pages.inc b/core/modules/poll/poll.pages.inc
new file mode 100644
index 0000000..b67d8f9
--- /dev/null
+++ b/core/modules/poll/poll.pages.inc
@@ -0,0 +1,125 @@
+<?php
+
+/**
+ * @file
+ * Page callbacks for the Poll module.
+ */
+
+/**
+ * Page callback: Displays a simple list of all available polls.
+ *
+ * @return
+ *   The HTML for the page that shows the available polls.
+ *
+ * @see poll_menu()
+ */
+function poll_page() {
+  $polls_per_page = 15;
+
+  $count_select = db_select('node', 'n');
+  $count_select->addExpression('COUNT(*)', 'expression');
+  $count_select->join('poll', 'p', 'p.nid = n.nid');
+  $count_select->condition('n.status', 1);
+
+  // List all polls.
+  $select = db_select('node', 'n');
+  $select->join('poll', 'p', 'p.nid = n.nid');
+  $select->join('poll_choice', 'c', 'c.nid = n.nid');
+  $select->addExpression('SUM(c.chvotes)', 'votes');
+  $select = $select->fields('n', array('nid', 'title', 'created'))
+    ->fields('p', array('active'))
+    ->condition('n.status', 1)
+    ->orderBy('n.created', 'DESC')
+    ->groupBy('n.nid')
+    ->groupBy('n.title')
+    ->groupBy('p.active')
+    ->groupBy('n.created')
+    ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+    ->limit($polls_per_page)
+    ->addTag('node_access');
+  $select->setCountQuery($count_select);
+  $queried_nodes = $select->execute()
+    ->fetchAllAssoc('nid');
+
+  $output = '<ul>';
+  // Do not use $node->label() here because $node comes from the database.
+  foreach ($queried_nodes as $node) {
+    $output .= '<li>' . l($node->title, "node/$node->nid") . ' - ' . format_plural($node->votes, '1 vote', '@count votes') . ' - ' . ($node->active ? t('open') : t('closed')) . '</li>';
+  }
+  $output .= '</ul>';
+  $output .= theme('pager');
+  return $output;
+}
+
+/**
+ * Page callback: Displays the 'votes' tab for polls.
+ *
+ * This page displays a table containing each vote that has been cast.
+ *
+ * @param $node
+ *   The poll node object.
+ *
+ * @return
+ *   Render array containing table with votes.
+ *
+ * @see poll_menu()
+ */
+function poll_votes($node) {
+  $votes_per_page = 20;
+  drupal_set_title($node->label());
+
+  $header[] = array('data' => t('Visitor'), 'field' => 'u.name');
+  $header[] = array('data' => t('Vote'), 'field' => 'pc.chtext');
+  $header[] = array('data' => t('Timestamp'), 'field' => 'pv.timestamp', 'sort' => 'desc');
+
+  $select = db_select('poll_vote', 'pv')
+    ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+    ->extend('Drupal\Core\Database\Query\TableSortExtender');
+  $select->join('poll_choice', 'pc', 'pv.chid = pc.chid');
+  $select->join('users', 'u', 'pv.uid = u.uid');
+  $queried_votes = $select
+    ->addTag('translatable')
+    ->fields('pv', array('chid', 'uid', 'hostname', 'timestamp', 'nid'))
+    ->fields('pc', array('chtext'))
+    ->fields('u', array('name'))
+    ->condition('pv.nid', $node->nid)
+    ->limit($votes_per_page)
+    ->orderByHeader($header)
+    ->execute();
+
+  $rows = array();
+  foreach ($queried_votes as $vote) {
+    $rows[] = array(
+      $vote->name ? theme('username', array('account' => $vote)) : check_plain($vote->hostname),
+      check_plain($vote->chtext),
+      format_date($vote->timestamp),
+    );
+  }
+  $build['poll_votes_table'] = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#prefix' => t('This table lists all the recorded votes for this poll. If anonymous users are allowed to vote, they will be identified by the IP address of the computer they used when they voted.'),
+  );
+  $build['poll_votes_pager'] = array('#theme' => 'pager');
+  return $build;
+}
+
+/**
+ * Page callback: Displays the 'results' tab for the current poll.
+ *
+ * This tab displays a summary of the votes that have been cast.
+ *
+ * @param $node
+ *   The poll node object.
+ *
+ * @return
+ *   An array suitable for use by drupal_render().
+ *
+ * @see poll_menu()
+ */
+function poll_results($node) {
+  drupal_set_title($node->label());
+  $node->show_results = TRUE;
+  return node_show($node);
+}
diff --git a/core/modules/poll/poll.theme-rtl.css b/core/modules/poll/poll.theme-rtl.css
new file mode 100644
index 0000000..2ba85c6
--- /dev/null
+++ b/core/modules/poll/poll.theme-rtl.css
@@ -0,0 +1,12 @@
+
+/**
+ * @file
+ * Right-to-left specfic theme stylesheet for the Poll module.
+ */
+
+.poll .percent {
+  text-align: left;
+}
+.poll .vote-form {
+  text-align: right;
+}
diff --git a/core/modules/poll/poll.theme.css b/core/modules/poll/poll.theme.css
new file mode 100644
index 0000000..3e91786
--- /dev/null
+++ b/core/modules/poll/poll.theme.css
@@ -0,0 +1,34 @@
+
+/**
+ * @file
+ * Theme stylesheet for the Poll module.
+ */
+
+.poll dl,
+.poll dd {
+  margin: 0;
+}
+.poll .links {
+  text-align: center;
+}
+.poll .percent {
+  text-align: right; /* LTR */
+}
+.poll .total {
+  text-align: center;
+}
+.poll .vote-form {
+  text-align: center;
+}
+.poll .vote-form {
+  text-align: left; /* LTR */
+}
+.poll .vote-form .poll-title {
+  font-weight: bold;
+}
+td.poll-chtext {
+  width: 80%;
+}
+td.poll-chvotes .form-text {
+  width: 85%;
+}
diff --git a/core/modules/poll/poll.tokens.inc b/core/modules/poll/poll.tokens.inc
new file mode 100644
index 0000000..e0f9b2b
--- /dev/null
+++ b/core/modules/poll/poll.tokens.inc
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * @file
+ * Builds placeholder replacement tokens for values specific to Poll nodes.
+ */
+
+/**
+ * Implements hook_token_info().
+ */
+function poll_token_info() {
+  $node['poll-votes'] = array(
+    'name' => t("Poll votes"),
+    'description' => t("The number of votes that have been cast on a poll."),
+  );
+  $node['poll-winner'] = array(
+    'name' => t("Poll winner"),
+    'description' => t("The winning poll answer."),
+  );
+  $node['poll-winner-votes'] = array(
+    'name' => t("Poll winner votes"),
+    'description' => t("The number of votes received by the winning poll answer."),
+  );
+  $node['poll-winner-percent'] = array(
+    'name' => t("Poll winner percent"),
+    'description' => t("The percentage of votes received by the winning poll answer."),
+  );
+  $node['poll-duration'] = array(
+    'name' => t("Poll duration"),
+    'description' => t("The length of time the poll is set to run."),
+  );
+
+  return array(
+    'tokens' => array('node' => $node),
+  );
+}
+
+/**
+ * Implements hook_tokens().
+ */
+function poll_tokens($type, $tokens, array $data = array(), array $options = array()) {
+  $sanitize = !empty($options['sanitize']);
+  if (isset($options['langcode'])) {
+    $url_options['language'] = language_load($options['langcode']);
+    $langcode = $options['langcode'];
+  }
+  else {
+    $langcode = NULL;
+  }
+
+  $replacements = array();
+
+  if ($type == 'node' && !empty($data['node']) && $data['node']->type == 'poll') {
+    $node = $data['node'];
+
+    $total_votes = 0;
+    $highest_votes = 0;
+    foreach ($node->choice as $choice) {
+      if ($choice['chvotes'] > $highest_votes) {
+        $winner = $choice;
+        $highest_votes = $choice['chvotes'];
+      }
+      $total_votes = $total_votes + $choice['chvotes'];
+    }
+    foreach ($tokens as $name => $original) {
+      switch ($name) {
+        case 'poll-votes':
+          $replacements[$original] = $total_votes;
+          break;
+
+        case 'poll-winner':
+          if (isset($winner)) {
+            $replacements[$original] = $sanitize ? filter_xss($winner['chtext']) : $winner['chtext'];
+          }
+          else {
+            $replacements[$original] = '';
+          }
+          break;
+
+        case 'poll-winner-votes':
+          if (isset($winner)) {
+            $replacements[$original] = $winner['chvotes'];
+          }
+          else {
+            $replacements[$original] = '';
+          }
+          break;
+
+        case 'poll-winner-percent':
+          if (isset($winner)) {
+            $percent = ($winner['chvotes'] / $total_votes) * 100;
+            $replacements[$original] = number_format($percent, 0);
+          }
+          else {
+            $replacements[$original] = '';
+          }
+          break;
+
+        case 'poll-duration':
+          $replacements[$original] = format_interval($node->runtime, 1, $langcode);
+          break;
+      }
+    }
+  }
+
+  return $replacements;
+}
diff --git a/core/modules/poll/templates/poll-results.tpl.php b/core/modules/poll/templates/poll-results.tpl.php
new file mode 100644
index 0000000..1e045fa
--- /dev/null
+++ b/core/modules/poll/templates/poll-results.tpl.php
@@ -0,0 +1,38 @@
+<?php
+
+/**
+ * @file
+ * Default theme implementation to display the poll results in a block.
+ *
+ * Variables available:
+ * - $title: The title of the poll.
+ * - $results: The results of the poll.
+ * - $votes: The total results in the poll.
+ * - $links: Links in the poll.
+ * - $nid: The nid of the poll
+ * - $cancel_form: A form to cancel the user's vote, if allowed.
+ * - $raw_links: The raw array of links.
+ * - $vote: The choice number of the current user's vote.
+ *
+ * @see template_preprocess_poll_results()
+ *
+ * @ingroup themeable
+ */
+?>
+<div class="poll">
+  <?php if ($block): ?>
+    <h3 class="poll-title"><?php print $title; ?></h3>
+  <?php endif; ?>
+  <dl>
+    <?php print $results; ?>
+  </dl>
+  <div class="total">
+    <?php print t('Total votes: @votes', array('@votes' => $votes)); ?>
+  </div>
+  <?php if (!empty($cancel_form)): ?>
+    <?php print $cancel_form; ?>
+  <?php endif; ?>
+</div>
+<?php if ($block): ?>
+  <div class="links"><?php print $links; ?></div>
+<?php endif; ?>
diff --git a/core/modules/poll/templates/poll-vote.tpl.php b/core/modules/poll/templates/poll-vote.tpl.php
new file mode 100644
index 0000000..f2aeb2c
--- /dev/null
+++ b/core/modules/poll/templates/poll-vote.tpl.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @file
+ * Default theme implementation to display voting form for a poll.
+ *
+ * - $choice: The radio buttons for the choices in the poll.
+ * - $title: The title of the poll.
+ * - $block: True if this is being displayed as a block.
+ * - $vote: The vote button
+ * - $rest: Anything else in the form that may have been added via
+ *   form_alter hooks.
+ *
+ * @see template_preprocess_poll_vote()
+ *
+ * @ingroup themeable
+ */
+?>
+<div class="poll">
+  <div class="vote-form">
+
+    <?php if ($block): ?>
+      <h3 class="poll-title"><?php print $title; ?></h3>
+    <?php endif; ?>
+    <?php print $choice; ?>
+
+    <?php print $vote; ?>
+  </div>
+  <?php // This is the 'rest' of the form, in case items have been added. ?>
+  <?php print $rest ?>
+</div>
diff --git a/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SchemaController.php b/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SchemaController.php
index acd3f8e..b60eb84 100644
--- a/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SchemaController.php
+++ b/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SchemaController.php
@@ -54,7 +54,7 @@ public function bundle($entity_type, $bundle, $schema_path) {
     if (!$entity_info = entity_get_info($entity_type)) {
       throw new NotFoundHttpException(t('Entity type @entity_type not found', array('@entity_type' => $entity_type)));
     }
-    if (!array_key_exists($bundle, entity_get_bundles($entity_type))) {
+    if (!array_key_exists($bundle, $entity_info['bundles'])) {
       throw new NotFoundHttpException(t('Bundle @bundle not found', array('@bundle' => $bundle)));
     }
 
diff --git a/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SiteSchemaManager.php b/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SiteSchemaManager.php
index e42b868..7ca9ca8 100644
--- a/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SiteSchemaManager.php
+++ b/core/modules/rdf/lib/Drupal/rdf/SiteSchema/SiteSchemaManager.php
@@ -38,16 +38,14 @@ public function writeCache() {
 
     // Type URIs correspond to bundles. Iterate through the bundles to get the
     // URI and data for them.
-    $entity_info = entity_get_info();
-    foreach (entity_get_bundles() as $entity_type => $bundles) {
+    foreach (entity_get_info() as $entity_type => $entity_info) {
       // Only content entities are supported currently.
       // @todo Consider supporting config entities.
-      $entity_type_info = $entity_info[$entity_type];
-      $reflection = new ReflectionClass($entity_type_info['class']);
+      $reflection = new ReflectionClass($entity_info['class']);
       if ($reflection->implementsInterface('\Drupal\Core\Config\Entity\ConfigEntityInterface')) {
         continue;
       }
-      foreach ($bundles as $bundle => $bundle_info) {
+      foreach ($entity_info['bundles'] as $bundle => $bundle_info) {
         // Get a type URI for the bundle in each of the defined schemas.
         foreach ($this->siteSchemas as $schema) {
           $bundle_uri = $schema->bundle($entity_type, $bundle)->getUri();
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/CommentAttributesTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/CommentAttributesTest.php
index bce0f35..814ab3c 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/CommentAttributesTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/CommentAttributesTest.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains Drupal\rdf\Tests\CommentAttributesTest.
+ * Definition of Drupal\rdf\Tests\CommentAttributesTest.
  */
 
 namespace Drupal\rdf\Tests;
@@ -15,15 +15,24 @@
 class CommentAttributesTest extends CommentTestBase {
 
   /**
+   * Use the standard profile.
+   *
+   * @var string
+   *
+   * @todo Remove this dependency if possible.
+   */
+  protected $profile = 'standard';
+
+  /**
    * Modules to enable.
    *
    * @var array
    */
-  public static $modules = array('comment', 'rdf');
+  public static $modules = array('comment', 'rdf', 'rdf_test');
 
   public static function getInfo() {
     return array(
-      'name' => 'RDFa markup for comments',
+      'name' => 'RDF comment mapping',
       'description' => 'Tests the RDFa markup of comments.',
       'group' => 'RDF',
     );
@@ -32,6 +41,9 @@ public static function getInfo() {
   public function setUp() {
     parent::setUp();
 
+    $this->admin_user = $this->drupalCreateUser(array('administer content types', 'administer comments', 'administer permissions', 'administer blocks'));
+    $this->web_user = $this->drupalCreateUser(array('access comments', 'post comments', 'create article content', 'access user profiles'));
+
     // Enables anonymous user comments.
     user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
       'access comments' => TRUE,
@@ -45,41 +57,34 @@ public function setUp() {
     $this->setCommentSubject(TRUE);
     $this->setCommentSettings('comment_default_mode', COMMENT_MODE_THREADED, 'Comment paging changed.');
 
-    // Prepares commonly used URIs.
-    $this->base_uri = url('<front>', array('absolute' => TRUE));
-    $this->node_uri = url('node/' . $this->node->nid, array('absolute' => TRUE));
+    // Creates the nodes on which the test comments will be posted.
+    $this->drupalLogin($this->web_user);
+    $this->node1 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
+    $this->node2 = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
+    $this->drupalLogout();
   }
 
   /**
    * Tests the presence of the RDFa markup for the number of comments.
    */
   public function testNumberOfCommentsRdfaMarkup() {
-    // Posts 2 comments on behalf of registered user.
-    $this->saveComment($this->node->nid, $this->web_user->uid);
-    $this->saveComment($this->node->nid, $this->web_user->uid);
-
-    // Tests number of comments in teaser view.
+    // Posts 2 comments as a registered user.
     $this->drupalLogin($this->web_user);
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node'), 'rdfa', $this->base_uri);
-
-    // Number of comments.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => 2,
-      'datatype' => 'http://www.w3.org/2001/XMLSchema#integer',
-    );
-    $this->assertTrue($graph->hasProperty($this->node_uri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output of teaser view (sioc:num_replies).');
-    // Makes sure we don't generate the wrong statement for number of comments.
-    $node_comments_uri = url('node/' . $this->node->nid, array('fragment' => 'comments', 'absolute' => TRUE));
-    $this->assertFalse($graph->hasProperty($node_comments_uri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output of teaser view mode (sioc:num_replies).');
+    $this->postComment($this->node1, $this->randomName(), $this->randomName());
+    $this->postComment($this->node1, $this->randomName(), $this->randomName());
 
-    // Tests number of comments in full node view, expected value is the same.
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node/' . $this->node->nid), 'rdfa', $this->base_uri);
-    $this->assertTrue($graph->hasProperty($this->node_uri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output of full node view mode (sioc:num_replies).');;
+    // Tests number of comments in teaser view.
+    $this->drupalGet('node');
+    $comment_count_teaser = $this->xpath('//div[contains(@typeof, "sioc:Item")]//li[contains(@class, "comment-comments")]/a[contains(@property, "sioc:num_replies") and contains(@content, "2") and @datatype="xsd:integer"]');
+    $this->assertTrue(!empty($comment_count_teaser), 'RDFa markup for the number of comments found on teaser view.');
+    $comment_count_link = $this->xpath('//div[@about=:url]//a[contains(@property, "sioc:num_replies") and @rel=""]', array(':url' => url("node/{$this->node1->nid}")));
+    $this->assertTrue(!empty($comment_count_link), 'Empty rel attribute found in comment count link.');
+
+    // Tests number of comments in full node view.
+    $this->drupalGet('node/' . $this->node1->nid);
+    $node_url = url('node/' . $this->node1->nid);
+    $comment_count_teaser = $this->xpath('/html/head/meta[@about=:node-url and @property="sioc:num_replies" and @content="2" and @datatype="xsd:integer"]', array(':node-url' => $node_url));
+    $this->assertTrue(!empty($comment_count_teaser), 'RDFa markup for the number of comments found on full node view.');
   }
 
   /**
@@ -89,80 +94,77 @@ public function testNumberOfCommentsRdfaMarkup() {
    * on comments from registered and anonymous users.
    */
   public function testCommentRdfaMarkup() {
-    // Posts comment #1 on behalf of registered user.
-    $comment1 = $this->saveComment($this->node->nid, $this->web_user->uid);
 
-    // Tests comment #1 with access to the user profile.
+    // Posts comment #1 as a registered user.
     $this->drupalLogin($this->web_user);
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node/' . $this->node->nid), 'rdfa', $this->base_uri);
-    $this->_testBasicCommentRdfaMarkup($graph, $comment1);
+    $comment1_subject = $this->randomName();
+    $comment1_body = $this->randomName();
+    $comment1 = $this->postComment($this->node1, $comment1_body, $comment1_subject);
+
+    // Tests comment #1 with access to the user profile.
+    $this->drupalGet('node/' . $this->node1->nid);
+    $this->_testBasicCommentRdfaMarkup($comment1);
 
     // Tests comment #1 with no access to the user profile (as anonymous user).
     $this->drupalLogout();
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node/' . $this->node->nid), 'rdfa', $this->base_uri);
-    $this->_testBasicCommentRdfaMarkup($graph, $comment1);
+    $this->drupalGet('node/' . $this->node1->nid);
+    $this->_testBasicCommentRdfaMarkup($comment1);
 
     // Posts comment #2 as anonymous user.
+    $comment2_subject = $this->randomName();
+    $comment2_body = $this->randomName();
     $anonymous_user = array();
     $anonymous_user['name'] = $this->randomName();
     $anonymous_user['mail'] = 'tester@simpletest.org';
     $anonymous_user['homepage'] = 'http://example.org/';
-    $comment2 = $this->saveComment($this->node->nid, NULL, $anonymous_user);
+    $comment2 = $this->postComment($this->node2, $comment2_body, $comment2_subject, $anonymous_user);
+    $this->drupalGet('node/' . $this->node2->nid);
 
     // Tests comment #2 as anonymous user.
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node/' . $this->node->nid), 'rdfa', $this->base_uri);
-    $this->_testBasicCommentRdfaMarkup($graph, $comment2, $anonymous_user);
+    $this->_testBasicCommentRdfaMarkup($comment2, $anonymous_user);
+    // Tests the RDFa markup for the homepage (specific to anonymous comments).
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[contains(@class, "username") and @typeof="sioc:UserAccount" and @property="foaf:name" and @datatype="" and @href="http://example.org/" and contains(@rel, "foaf:page")]');
+    $this->assertTrue(!empty($comment_homepage), 'RDFa markup for the homepage of anonymous user found.');
+    // There should be no about attribute on anonymous comments.
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[@about]');
+    $this->assertTrue(empty($comment_homepage), 'No about attribute is present on anonymous user comment.');
 
     // Tests comment #2 as logged in user.
     $this->drupalLogin($this->web_user);
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node/' . $this->node->nid), 'rdfa', $this->base_uri);
-    $this->_testBasicCommentRdfaMarkup($graph, $comment2, $anonymous_user);
+    $this->drupalGet('node/' . $this->node2->nid);
+    $this->_testBasicCommentRdfaMarkup($comment2, $anonymous_user);
+    // Tests the RDFa markup for the homepage (specific to anonymous comments).
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[contains(@class, "username") and @typeof="sioc:UserAccount" and @property="foaf:name" and @datatype="" and @href="http://example.org/" and contains(@rel, "foaf:page")]');
+    $this->assertTrue(!empty($comment_homepage), "RDFa markup for the homepage of anonymous user found.");
+    // There should be no about attribute on anonymous comments.
+    $comment_homepage = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/a[@about]');
+    $this->assertTrue(empty($comment_homepage), "No about attribute is present on anonymous user comment.");
   }
 
   /**
    * Tests RDF comment replies.
    */
   public function testCommentReplyOfRdfaMarkup() {
-    // Posts comment #1 on behalf of registered user.
+    // Posts comment #1 as a registered user.
     $this->drupalLogin($this->web_user);
-    $comment_1 = $this->saveComment($this->node->nid, $this->web_user->uid);
+    $comments[] = $this->postComment($this->node1, $this->randomName(), $this->randomName());
 
-    $comment_1_uri = url('comment/' . $comment_1->id(), array('fragment' => 'comment-' . $comment_1->id(), 'absolute' => TRUE));
+    // Tests the reply_of relationship of a first level comment.
+    $result = $this->xpath("(id('comments')//div[contains(@class,'comment ')])[position()=1]//span[@rel='sioc:reply_of' and @resource=:node]", array(':node' => url("node/{$this->node1->nid}")));
+    $this->assertEqual(1, count($result), 'RDFa markup referring to the node is present.');
+    $result = $this->xpath("(id('comments')//div[contains(@class,'comment ')])[position()=1]//span[@rel='sioc:reply_of' and @resource=:comment]", array(':comment' => url('comment/1#comment-1')));
+    $this->assertFalse($result, 'No RDFa markup referring to the comment itself is present.');
 
     // Posts a reply to the first comment.
-    $comment_2 = $this->saveComment($this->node->nid, $this->web_user->uid, NULL, $comment_1->id());
-    $comment_2_uri = url('comment/' . $comment_2->id(), array('fragment' => 'comment-' . $comment_2->id(), 'absolute' => TRUE));
-
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node/' . $this->node->nid), 'rdfa', $this->base_uri);
-
-    // Tests the reply_of relationship of a first level comment.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $this->node_uri,
-    );
-    $this->assertTrue($graph->hasProperty($comment_1_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its node found in RDF output (sioc:reply_of).');
+    $this->drupalGet('comment/reply/' . $this->node1->nid . '/' . $comments[0]->id());
+    $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // Tests the reply_of relationship of a second level comment.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $this->node_uri,
-    );
-    $this->assertTrue($graph->hasProperty($comment_2_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its node found in RDF output (sioc:reply_of).');
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $comment_1_uri,
-    );
-    $this->assertTrue($graph->hasProperty($comment_2_uri, 'http://rdfs.org/sioc/ns#reply_of', $expected_value), 'Comment relation to its parent comment found in RDF output (sioc:reply_of).');
+    $result = $this->xpath("(id('comments')//div[contains(@class,'comment ')])[position()=2]//span[@rel='sioc:reply_of' and @resource=:node]", array(':node' => url("node/{$this->node1->nid}")));
+    $this->assertEqual(1, count($result), 'RDFa markup referring to the node is present.');
+    $result = $this->xpath("(id('comments')//div[contains(@class,'comment ')])[position()=2]//span[@rel='sioc:reply_of' and @resource=:comment]", array(':comment' => url('comment/1', array('fragment' => 'comment-1'))));
+    $this->assertEqual(1, count($result), 'RDFa markup referring to the parent comment is present.');
+    $comments = $this->xpath("(id('comments')//div[contains(@class,'comment ')])[position()=2]");
   }
 
   /**
@@ -175,116 +177,18 @@ public function testCommentReplyOfRdfaMarkup() {
    * @param $account
    *   An array containing information about an anonymous user.
    */
-  function _testBasicCommentRdfaMarkup($graph, $comment, $account = array()) {
-    $comment_uri = url('comment/' . $comment->id(), array('fragment' => 'comment-' . $comment->id(), 'absolute' => TRUE));
-
-    // Comment type.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => 'http://rdfs.org/sioc/types#Comment',
-    );
-    $this->assertTrue($graph->hasProperty($comment_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Comment type found in RDF output (sioct:Comment).');
-    // Comment type.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => 'http://rdfs.org/sioc/ns#Post',
-    );
-    $this->assertTrue($graph->hasProperty($comment_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Comment type found in RDF output (sioc:Post).');
-
-    // Comment title.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $comment->subject->value,
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Comment title found in RDF output (dc:title).');
-
-    // Comment date.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => date('c', $comment->created->value),
-      'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime',
-    );
-    $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/dc/terms/date', $expected_value), 'Comment date found in RDF output (dc:date).');
-    // Comment date.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => date('c', $comment->created->value),
-      'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime',
-    );
-    $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/dc/terms/created', $expected_value), 'Comment date found in RDF output (dc:created).');
-
-    // Comment body.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $comment->comment_body->value . "\n",
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($comment_uri, 'http://purl.org/rss/1.0/modules/content/encoded', $expected_value), 'Comment body found in RDF output (content:encoded).');
-
-    // The comment author can be a registered user or an anonymous user.
-    if ($comment->uid->value > 0) {
-      $author_uri = url('user/' . $comment->uid->value, array('absolute' => TRUE));
-      // Comment relation to author.
-      $expected_value = array(
-        'type' => 'uri',
-        'value' => $author_uri,
-      );
-      $this->assertTrue($graph->hasProperty($comment_uri, 'http://rdfs.org/sioc/ns#has_creator', $expected_value), 'Comment relation to author found in RDF output (sioc:has_creator).');
-    }
-    else {
-      // The author is expected to be a blank node.
-      $author_uri = $graph->get($comment_uri, '<http://rdfs.org/sioc/ns#has_creator>');
-      $this->assertTrue($author_uri->isBnode(), 'Comment relation to author found in RDF output (sioc:has_creator).');
-    }
-
-    // Author name.
+  function _testBasicCommentRdfaMarkup($comment, $account = array()) {
+    $comment_container = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]');
+    $this->assertTrue(!empty($comment_container), 'Comment RDF type for comment found.');
+    $comment_title = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//h3[@property="dc:title"]');
+    $this->assertEqual((string) $comment_title[0]->a, $comment->subject->value, 'RDFa markup for the comment title found.');
+    $comment_date = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//*[contains(@property, "dc:date") and contains(@property, "dc:created")]');
+    $this->assertTrue(!empty($comment_date), 'RDFa markup for the date of the comment found.');
+    // The author tag can be either a or span
+    $comment_author = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//span[@rel="sioc:has_creator"]/*[contains(@class, "username") and @typeof="sioc:UserAccount" and @property="foaf:name" and @datatype=""]');
     $name = empty($account["name"]) ? $this->web_user->name : $account["name"] . " (not verified)";
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $name,
-    );
-    $this->assertTrue($graph->hasProperty($author_uri, 'http://xmlns.com/foaf/0.1/name', $expected_value), 'Comment author name found in RDF output (foaf:name).');
-
-    // Comment author homepage (only for anonymous authors).
-    if ($comment->uid->value == 0) {
-      $expected_value = array(
-        'type' => 'uri',
-        'value' => 'http://example.org/',
-      );
-      $this->assertTrue($graph->hasProperty($author_uri, 'http://xmlns.com/foaf/0.1/page', $expected_value), 'Comment author link found in RDF output (foaf:page).');
-    }
+    $this->assertEqual((string) $comment_author[0], $name, 'RDFa markup for the comment author found.');
+    $comment_body = $this->xpath('//div[contains(@class, "comment") and contains(@typeof, "sioct:Comment")]//div[@class="content"]//div[contains(@class, "comment-body")]//div[@property="content:encoded"]');
+    $this->assertEqual((string) $comment_body[0]->p, $comment->comment_body->value, 'RDFa markup for the comment body found.');
   }
-
-  /**
-   * Creates a comment entity.
-   *
-   * @param $nid
-   *   Node id which will hold the comment.
-   * @param $uid
-   *   User id of the author of the comment. Can be NULL if $contact provided.
-   * @param $contact
-   *   Set to NULL for no contact info, TRUE to ignore success checking, and
-   *   array of values to set contact info.
-   * @param $pid
-   *   Comment id of the parent comment in a thread.
-   */
-  function saveComment($nid, $uid, $contact = NULL, $pid = 0) {
-    $values = array(
-      'nid' => $nid,
-      'uid' => $uid,
-      'pid' => $pid,
-      'node_type' => 'comment_node_article',
-      'subject' => $this->randomName(),
-      'comment_body' => $this->randomName(),
-      'status' => 1,
-    );
-    if ($contact) {
-      $values += $contact;
-    }
-
-    $comment = entity_create('comment', $values);
-    $comment->save();
-    return $comment;
-   }
 }
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php
index 6f99dae..1c69a0e 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/RdfaMarkupTest.php
@@ -146,12 +146,25 @@ function testAttributesInMarkupFile() {
     $node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
     $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
 
-    // Prepares filenames for lookup in RDF graph.
-    $node = node_load($node->nid);
-    $node_uri = url('node/' . $node->nid, array('absolute' => TRUE));
-    $file_uri = file_create_url(file_load($node->file_test['und'][0]['fid'])->uri);
-    $image_uri = image_style_url('medium', file_load($node->field_image['und'][0]['fid'])->uri);
-    $base_uri = url('<front>', array('absolute' => TRUE));
+    // Get filenames and nid for comparison with HTML output.
+    $file_filename = $file->filename;
+    $image_filename = $image->filename;
+    $nid = $node->nid;
+    // Navigate to front page, where node is displayed in teaser form.
+    $this->drupalGet('node');
+
+    // We only check to make sure that the resource attribute contains '.txt'
+    // instead of the full file name because the filename is altered on upload.
+    $file_rel = $this->xpath('//div[contains(@about, :node-uri)]//div[contains(@rel, "rdfs:seeAlso") and contains(@resource, ".txt")]', array(
+      ':node-uri' => 'node/' . $nid,
+    ));
+    $this->assertTrue(!empty($file_rel), "Attribute 'rel' set on file field. Attribute 'resource' is also set.");
+    $image_rel = $this->xpath('//div[contains(@about, :node-uri)]//div[contains(@rel, "rdfs:seeAlso") and contains(@resource, :image)]//img[contains(@typeof, "foaf:Image")]', array(
+      ':node-uri' => 'node/' . $nid,
+      ':image' => $image_filename,
+    ));
+
+    $this->assertTrue(!empty($image_rel), "Attribute 'rel' set on image field. Attribute 'resource' is also set.");
 
     // Edits the node to add tags.
     $tag1 = $this->randomName(8);
@@ -159,91 +172,17 @@ function testAttributesInMarkupFile() {
     $edit = array();
     $edit['field_tags[' . LANGUAGE_NOT_SPECIFIED . ']'] = "$tag1, $tag2";
     $this->drupalPost('node/' . $node->nid . '/edit', $edit, t('Save'));
-    $term_1_id = key(taxonomy_term_load_multiple_by_name($tag1));
-    $taxonomy_term_1_uri = url('taxonomy/term/' . $term_1_id, array('absolute' => TRUE));
-    $term_2_id = key(taxonomy_term_load_multiple_by_name($tag2));
-    $taxonomy_term_2_uri = url('taxonomy/term/' . $term_2_id, array('absolute' => TRUE));
-
-    // Parses front page where the node is displayed in its teaser form.
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('node'), 'rdfa', $base_uri);
-    $rdf_output = $graph->toArray();
-
-    // Inspects RDF graph output.
-    // Node relations to attached file.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $file_uri,
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://www.w3.org/2000/01/rdf-schema#seeAlso', $expected_value), 'Node to file relation found in RDF output (rdfs:seeAlso).');
-
-    // Node relations to attached image.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $image_uri,
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://www.w3.org/2000/01/rdf-schema#seeAlso', $expected_value), 'Node to file relation found in RDF output (rdfs:seeAlso).');
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $image_uri,
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://ogp.me/ns#image', $expected_value), 'Node to file relation found in RDF output (og:image).');
-    // Image type.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => 'http://xmlns.com/foaf/0.1/Image',
-    );
-    $this->assertTrue($graph->hasProperty($image_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Image type found in RDF output (foaf:Image).');
-
-    // Node relations to taxonomy terms.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $taxonomy_term_1_uri,
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).');
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $taxonomy_term_2_uri,
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/subject', $expected_value), 'Node to term relation found in RDF output (dc:subject).');
-
-    // Taxonomy terms triples.
-    // Term 1.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => 'http://www.w3.org/2004/02/skos/core#Concept',
-    );
-    $this->assertTrue($graph->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $tag1,
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $tag1,
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($taxonomy_term_1_uri, 'http://www.w3.org/2004/02/skos/core#prefLabel', $expected_value), 'Taxonomy term name found in RDF output (skos:prefLabel).');
-    // Term 2.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => 'http://www.w3.org/2004/02/skos/core#Concept',
-    );
-    $this->assertTrue($graph->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', $expected_value), 'Taxonomy term type found in RDF output (skos:Concept).');
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $tag2,
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/2000/01/rdf-schema#label', $expected_value), 'Taxonomy term name found in RDF output (rdfs:label).');
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => $tag2,
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($taxonomy_term_2_uri, 'http://www.w3.org/2004/02/skos/core#prefLabel', $expected_value), 'Taxonomy term name found in RDF output (skos:prefLabel).');
+    // Ensures the RDFa markup for the relationship between the node and its
+    // tags is correct.
+    $term_rdfa_meta = $this->xpath('//div[@about=:node-url and contains(@typeof, "sioc:Item") and contains(@typeof, "foaf:Document")]//ul[@class="links"]/li[@rel="dc:subject"]/a[@typeof="skos:Concept" and @datatype="" and text()=:term-name]', array(
+      ':node-url' => url('node/' . $node->nid),
+      ':term-name' => $tag1,
+    ));
+    $this->assertTrue(!empty($term_rdfa_meta), 'Property dc:subject is present for the tag1 field item.');
+    $term_rdfa_meta = $this->xpath('//div[@about=:node-url and contains(@typeof, "sioc:Item") and contains(@typeof, "foaf:Document")]//ul[@class="links"]/li[@rel="dc:subject"]/a[@typeof="skos:Concept" and @datatype="" and text()=:term-name]', array(
+      ':node-url' => url('node/' . $node->nid),
+      ':term-name' => $tag2,
+    ));
+    $this->assertTrue(!empty($term_rdfa_meta), 'Property dc:subject is present for the tag2 field item.');
   }
 }
diff --git a/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php b/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php
index 45488bd..b7771c6 100644
--- a/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php
+++ b/core/modules/rdf/lib/Drupal/rdf/Tests/TrackerAttributesTest.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains Drupal\rdf\Tests\TrackerAttributesTest.
+ * Definition of Drupal\rdf\Tests\TrackerAttributesTest.
  */
 
 namespace Drupal\rdf\Tests;
@@ -20,11 +20,13 @@ class TrackerAttributesTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('rdf', 'tracker');
+  public static $modules = array('rdf', 'rdf_test', 'tracker');
+
+  protected $profile = 'standard';
 
   public static function getInfo() {
     return array(
-      'name' => 'RDFa markup for tracker page',
+      'name' => 'RDF tracker page mapping',
       'description' => 'Test the mapping for the tracker page and ensure the proper RDFa markup in included.',
       'group' => 'RDF',
     );
@@ -33,19 +35,13 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    // Creates article content type.
-    $this->drupalCreateContentType(array('type' => 'article', 'name' => t('Article')));
-
-    // Enables anonymous posting of content.
+    // Enable anonymous posting of content.
     user_role_change_permissions(DRUPAL_ANONYMOUS_RID, array(
       'create article content' => TRUE,
       'access comments' => TRUE,
       'post comments' => TRUE,
       'skip comment approval' => TRUE,
     ));
-
-    // Sets base URI of the site used by the RDFa parser.
-    $this->base_uri = url('<front>', array('absolute' => TRUE));
   }
 
   /**
@@ -55,15 +51,16 @@ function setUp() {
    * markup on the tracker page for those nodes and their comments.
    */
   function testAttributesInTracker() {
-    // Creates node as anonymous user.
+    // Create node as anonymous user.
     $node_anon = $this->drupalCreateNode(array('type' => 'article', 'uid' => 0));
-    // Creates node as admin user.
+    // Create node as admin user.
     $node_admin = $this->drupalCreateNode(array('type' => 'article', 'uid' => 1));
 
-    // Passes both the anonymously posted node and the administrator posted node
+    // Pass both the anonymously posted node and the administrator posted node
     // through to test for the RDF attributes.
     $this->_testBasicTrackerRdfaMarkup($node_anon);
     $this->_testBasicTrackerRdfaMarkup($node_admin);
+
   }
 
   /**
@@ -75,81 +72,68 @@ function testAttributesInTracker() {
    * The node just created.
    */
   function _testBasicTrackerRdfaMarkup(Node $node) {
-    $node_uri = url('node/' . $node->nid, array('absolute' => TRUE));
-    $user_uri = url('user/' . $node->uid, array('absolute' => TRUE));
+    $url = url('node/' . $node->nid);
 
     $user = ($node->uid == 0) ? 'Anonymous user' : 'Registered user';
 
-    // Parses tracker page where the nodes are displayed in a table.
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('tracker'), 'rdfa', $this->base_uri);
-
-    // Inspects RDF graph output.
-    // Node title.
-    $expected_value = array(
-      'type' => 'literal',
-      // The theme layer adds a space after the title a element, and the RDFa
-      // attribute is on the wrapping td. Adds a space to match this.
-      'value' => $node->title . ' ',
-      'lang' => 'en',
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://purl.org/dc/terms/title', $expected_value), 'Title found in RDF output (dc:title).');
-    // Number of comments.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => '0',
-      'datatype' => 'http://www.w3.org/2001/XMLSchema#integer',
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output (sioc:num_replies).');
-    // Node relation to author.
-    $expected_value = array(
-      'type' => 'uri',
-      'value' => $user_uri,
-    );
+    // Navigate to tracker page.
+    $this->drupalGet('tracker');
+
+    // Tests whether the about property is applied. This is implicit in the
+    // success of the following tests, but making it explicit will make
+    // debugging easier in case of failure.
+    $tracker_about = $this->xpath('//tr[@about=:url]', array(':url' => $url));
+    $this->assertTrue(!empty($tracker_about), format_string('About attribute found on table row for @user content.', array('@user'=> $user)));
+
+    // Tests whether the title has the correct property attribute.
+    $tracker_title = $this->xpath('//tr[@about=:url]/td[@property="dc:title" and @datatype=""]', array(':url' => $url));
+    $this->assertTrue(!empty($tracker_title), format_string('Title property attribute found on @user content.', array('@user'=> $user)));
+
+    // Tests whether the relationship between the content and user has been set.
+    $tracker_user = $this->xpath('//tr[@about=:url]//td[contains(@rel, "sioc:has_creator")]//*[contains(@typeof, "sioc:UserAccount") and contains(@property, "foaf:name")]', array(':url' => $url));
+    $this->assertTrue(!empty($tracker_user), format_string('Typeof and name property attributes found on @user.', array('@user'=> $user)));
+    // There should be an about attribute on logged in users and no about
+    // attribute for anonymous users.
+    $tracker_user = $this->xpath('//tr[@about=:url]//td[@rel="sioc:has_creator"]/*[@about]', array(':url' => $url));
     if ($node->uid == 0) {
-      $this->assertFalse($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#has_creator', $expected_value), 'No relation to author found in RDF output (sioc:has_creator).');
+      $this->assertTrue(empty($tracker_user), format_string('No about attribute is present on @user.', array('@user'=> $user)));
     }
     elseif ($node->uid > 0) {
-      $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#has_creator', $expected_value), 'Relation to author found in RDF output (sioc:has_creator).');
+      $this->assertTrue(!empty($tracker_user), format_string('About attribute is present on @user.', array('@user'=> $user)));
     }
-    // Last updated.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => date('c', $node->changed),
-      'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime',
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#last_activity_date', $expected_value), 'Last activity date found in RDF output (sioc:last_activity_date).');
 
+    // Tests whether the property has been set for number of comments.
+    $tracker_replies = $this->xpath('//tr[@about=:url]//td[contains(@property, "sioc:num_replies") and contains(@content, "0") and @datatype="xsd:integer"]', array(':url' => $url));
+    $this->assertTrue($tracker_replies, format_string('Num replies property and content attributes found on @user content.', array('@user'=> $user)));
+
+    // Tests that the appropriate RDFa markup to annotate the latest activity
+    // date has been added to the tracker output before comments have been
+    // posted, meaning the latest activity reflects changes to the node itself.
+    $isoDate = date('c', $node->changed);
+    $tracker_activity = $this->xpath('//tr[@about=:url]//td[contains(@property, "dc:modified") and contains(@property, "sioc:last_activity_date") and contains(@datatype, "xsd:dateTime") and @content=:date]', array(':url' => $url, ':date' => $isoDate));
+    $this->assertTrue(!empty($tracker_activity), format_string('Latest activity date and changed properties found when there are no comments on @user content. Latest activity date content is correct.', array('@user'=> $user)));
 
-    // Adds new comment to ensure the tracker is updated accordingly.
+    // Tests that the appropriate RDFa markup to annotate the latest activity
+    // date has been added to the tracker output after a comment is posted.
     $comment = array(
       'subject' => $this->randomName(),
       'comment_body[' . LANGUAGE_NOT_SPECIFIED . '][0][value]' => $this->randomName(),
     );
     $this->drupalPost('comment/reply/' . $node->nid, $comment, t('Save'));
+    $this->drupalGet('tracker');
 
-    // Parses tracker page where the nodes are displayed in a table.
-    $parser = new \EasyRdf_Parser_Rdfa();
-    $graph = new \EasyRdf_Graph();
-    $parser->parse($graph, $this->drupalGet('tracker'), 'rdfa', $this->base_uri);
+    // Tests whether the property has been set for number of comments.
+    $tracker_replies = $this->xpath('//tr[@about=:url]//td[contains(@property, "sioc:num_replies") and contains(@content, "1") and @datatype="xsd:integer"]', array(':url' => $url));
+    $this->assertTrue($tracker_replies, format_string('Num replies property and content attributes found on @user content.', array('@user'=> $user)));
 
-    // Number of comments.
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => '1',
-      'datatype' => 'http://www.w3.org/2001/XMLSchema#integer',
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#num_replies', $expected_value), 'Number of comments found in RDF output (sioc:num_replies).');
-    // Last updated due to new comment.
-    // last_activity_date needs to be queried from the database directly because
+    // Need to query database directly to obtain last_activity_date because
     // it cannot be accessed via node_load().
-    $expected_last_activity_date = db_query('SELECT t.changed FROM {tracker_node} t WHERE t.nid = (:nid)', array(':nid' => $node->nid))->fetchField();
-    $expected_value = array(
-      'type' => 'literal',
-      'value' => date('c', $expected_last_activity_date),
-      'datatype' => 'http://www.w3.org/2001/XMLSchema#dateTime',
-    );
-    $this->assertTrue($graph->hasProperty($node_uri, 'http://rdfs.org/sioc/ns#last_activity_date', $expected_value), 'Last activity date after new comment has been posted found in RDF output (sioc:last_activity_date).');
+    $result = db_query('SELECT t.changed FROM {tracker_node} t WHERE t.nid = (:nid)', array(':nid' => $node->nid));
+    foreach ($result as $node) {
+      $expected_last_activity_date = $node->changed;
+    }
+    $isoDate = date('c', $expected_last_activity_date);
+    $tracker_activity = $this->xpath('//tr[@about=:url]//td[@property="sioc:last_activity_date" and @datatype="xsd:dateTime" and @content=:date]', array(':url' => $url, ':date' => $isoDate));
+    $this->assertTrue(!empty($tracker_activity), format_string('Latest activity date found when there are comments on @user content. Latest activity date content is correct.', array('@user'=> $user)));
   }
 }
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 8f41a85..cff64e5 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -126,9 +126,9 @@ function rdf_get_namespaces() {
  */
 function rdf_mapping_load($type, $bundle = RDF_DEFAULT_BUNDLE) {
   // Retrieves the bundle-specific mapping from the entity info.
-  $bundles = entity_get_bundles($type);
-  if (!empty($bundles[$bundle]['rdf_mapping'])) {
-    return $bundles[$bundle]['rdf_mapping'];
+  $entity_info = entity_get_info($type);
+  if (!empty($entity_info['bundles'][$bundle]['rdf_mapping'])) {
+    return $entity_info['bundles'][$bundle]['rdf_mapping'];
   }
   // If there is no mapping defined for this bundle, we return the default
   // mapping that is defined for this entity type.
@@ -368,7 +368,7 @@ function rdf_modules_uninstalled($modules) {
 }
 
 /**
- * Implements hook_entity_bundle_info_alter().
+ * Implements hook_entity_info_alter().
  *
  * Adds the proper RDF mapping to each entity type/bundle pair.
  *
@@ -379,20 +379,22 @@ function rdf_modules_uninstalled($modules) {
  * would override the user defined mapping as well.
  *
  */
-function rdf_entity_bundle_info_alter(&$bundles) {
+function rdf_entity_info_alter(&$entity_info) {
   // Loop through each entity type and its bundles.
-  foreach ($bundles as $entity_type => $bundle_info) {
-    $bundle_names = array_keys($bundle_info);
-    $mappings = _rdf_mapping_load_multiple($entity_type, $bundle_names);
-
-    foreach ($bundle_names as $bundle) {
-      if (isset($mappings[$bundle])) {
-        $bundles[$entity_type][$bundle]['rdf_mapping'] = $mappings[$bundle];
-      }
-      else {
-        // If no mapping was found in the database, assign the default RDF
-        // mapping for this entity type.
-        $bundles[$entity_type][$bundle]['rdf_mapping'] = _rdf_get_default_mapping($entity_type);
+  foreach ($entity_info as $entity_type => $entity_type_info) {
+    if (!empty($entity_type_info['bundles'])) {
+      $bundles = array_keys($entity_type_info['bundles']);
+      $mappings = _rdf_mapping_load_multiple($entity_type, $bundles);
+
+      foreach ($bundles as $bundle) {
+        if (isset($mappings[$bundle])) {
+          $entity_info[$entity_type]['bundles'][$bundle]['rdf_mapping'] = $mappings[$bundle];
+        }
+        else {
+          // If no mapping was found in the database, assign the default RDF
+          // mapping for this entity type.
+          $entity_info[$entity_type]['bundles'][$bundle]['rdf_mapping'] = _rdf_get_default_mapping($entity_type);
+        }
       }
     }
   }
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/ResourceBase.php b/core/modules/rest/lib/Drupal/rest/Plugin/ResourceBase.php
index 41f19fd..f3292b7 100644
--- a/core/modules/rest/lib/Drupal/rest/Plugin/ResourceBase.php
+++ b/core/modules/rest/lib/Drupal/rest/Plugin/ResourceBase.php
@@ -14,14 +14,17 @@
 /**
  * Common base class for resource plugins.
  */
-abstract class ResourceBase extends PluginBase implements ResourceInterface {
+abstract class ResourceBase extends PluginBase {
 
   /**
-   * Implements ResourceInterface::permissions().
+   * Provides an array of permissions suitable for hook_permission().
    *
    * Every plugin operation method gets its own user permission. Example:
    * "restful delete entity:node" with the title "Access DELETE on Node
    * resource".
+   *
+   * @reutrn array
+   *   The permission array.
    */
   public function permissions() {
     $permissions = array();
@@ -40,7 +43,13 @@ public function permissions() {
   }
 
   /**
-   * Implements ResourceInterface::routes().
+   * Returns a collection of routes with URL path information for the resource.
+   *
+   * This method determines where a resource is reachable, what path
+   * replacements are used, the required HTTP method for the operation etc.
+   *
+   * @return \Symfony\Component\Routing\RouteCollection
+   *   A collection of routes that should be registered for this resource.
    */
   public function routes() {
     $collection = new RouteCollection();
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/ResourceInterface.php b/core/modules/rest/lib/Drupal/rest/Plugin/ResourceInterface.php
deleted file mode 100644
index 87da39d..0000000
--- a/core/modules/rest/lib/Drupal/rest/Plugin/ResourceInterface.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\rest\Plugin\ResourceInterface.
- */
-
-namespace Drupal\rest\Plugin;
-
-use Drupal\Component\Plugin\PluginInspectionInterface;
-
-/**
- * Specifies the publicly available methods of a resource plugin.
- */
-interface ResourceInterface extends PluginInspectionInterface {
-
-  /**
-   * Returns a collection of routes with URL path information for the resource.
-   *
-   * This method determines where a resource is reachable, what path
-   * replacements are used, the required HTTP method for the operation etc.
-   *
-   * @return \Symfony\Component\Routing\RouteCollection
-   *   A collection of routes that should be registered for this resource.
-   */
-  public function routes();
-
-  /**
-   * Provides an array of permissions suitable for hook_permission().
-   *
-   * A resource plugin can define a set of user permissions that are used on the
-   * routes for this resource or for other purposes.
-   *
-   * @return array
-   *   The permission array.
-   */
-  public function permissions();
-
-}
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/views/display/RestExport.php b/core/modules/rest/lib/Drupal/rest/Plugin/views/display/RestExport.php
deleted file mode 100644
index 3c6765f..0000000
--- a/core/modules/rest/lib/Drupal/rest/Plugin/views/display/RestExport.php
+++ /dev/null
@@ -1,231 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\rest\Plugin\views\display\RestExport.
- */
-
-namespace Drupal\rest\Plugin\views\display;
-
-use Symfony\Component\HttpFoundation\Response;
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-use Drupal\views\ViewExecutable;
-use Drupal\views\Plugin\views\display\PathPluginBase;
-
-/**
- * The plugin that handles Data response callbacks for REST resources.
- *
- * @ingroup views_display_plugins
- *
- * @Plugin(
- *   id = "rest_export",
- *   module = "rest",
- *   title = @Translation("REST export"),
- *   help = @Translation("Create a REST export resource."),
- *   uses_hook_menu = TRUE,
- *   admin = @Translation("REST export")
- * )
- */
-class RestExport extends PathPluginBase {
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$usesAJAX.
-   */
-  protected $usesAJAX = FALSE;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$usesPager.
-   */
-  protected $usesPager = FALSE;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$usesMore.
-   */
-  protected $usesMore = FALSE;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$usesAreas.
-   */
-  protected $usesAreas = FALSE;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::$usesAreas.
-   */
-  protected $usesOptions = FALSE;
-
-  /**
-   * Overrides the content type of the data response, if needed.
-   *
-   * @var string
-   */
-  protected $contentType;
-
-  /**
-   * The mime type for the response.
-   *
-   * @var string
-   */
-  protected $mimeType;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::initDisplay().
-   */
-  public function initDisplay(ViewExecutable $view, array &$display, array &$options = NULL) {
-    parent::initDisplay($view, $display, $options);
-
-    $container = drupal_container();
-    $negotiation = $container->get('content_negotiation');
-    $request = $container->get('request');
-
-    $this->setContentType($negotiation->getContentType($request));
-    $this->setMimeType($request->getMimeType($this->contentType));
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::getStyleType().
-   */
-  protected function getStyleType() {
-    return 'data';
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::usesExposed().
-   */
-  public function usesExposed() {
-    return FALSE;
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::displaysExposed().
-   */
-  public function displaysExposed() {
-    return FALSE;
-  }
-
-  /**
-   * Sets the request content type.
-   *
-   * @param string $mime_type
-   *   The response mime type. E.g. 'application/json'.
-   */
-  public function setMimeType($mime_type) {
-    $this->mimeType = $mime_type;
-  }
-
-  /**
-   * Gets the mime type.
-   *
-   * This will return any overriden mime type, otherwise returns the mime type
-   * from the request.
-   *
-   * @return string
-   *   The response mime type. E.g. 'application/json'.
-   */
-  public function getMimeType() {
-    return $this->mimeType;
-  }
-
-  /**
-   * Sets the content type.
-   *
-   * @param string $content_type
-   *   The content type machine name. E.g. 'json'.
-   */
-  public function setContentType($content_type) {
-    $this->contentType = $content_type;
-  }
-
-  /**
-   * Gets the content type.
-   *
-   * @return string
-   *   The content type machine name. E.g. 'json'.
-   */
-  public function getContentType() {
-    return $this->contentType;
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::defineOptions().
-   */
-  protected function defineOptions() {
-    $options = parent::defineOptions();
-
-    // Set the default style plugin to 'json'.
-    $options['style']['contains']['type']['default'] = 'serializer';
-    $options['row']['contains']['type']['default'] = 'data_entity';
-    $options['defaults']['default']['style'] = FALSE;
-    $options['defaults']['default']['row'] = FALSE;
-
-    // Remove css/exposed form settings, as they are not used for the data display.
-    unset($options['exposed_form']);
-    unset($options['exposed_block']);
-    unset($options['css_class']);
-
-    return $options;
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\PathPluginBase::optionsSummary().
-   */
-  public function optionsSummary(&$categories, &$options) {
-    parent::optionsSummary($categories, $options);
-
-    unset($categories['page'], $categories['exposed']);
-    // Hide some settings, as they aren't useful for pure data output.
-    unset($options['hide_admin_links'], $options['analyze-theme']);
-
-    $categories['path'] = array(
-      'title' => t('Path settings'),
-      'column' => 'second',
-      'build' => array(
-        '#weight' => -10,
-      ),
-    );
-
-    $options['path']['category'] = 'path';
-    $options['path']['title'] = t('Path');
-
-    // Remove css/exposed form settings, as they are not used for the data
-    // display.
-    unset($options['exposed_form']);
-    unset($options['exposed_block']);
-    unset($options['css_class']);
-  }
-
-
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\PathPluginBase::execute().
-   */
-  public function execute() {
-    parent::execute();
-
-    return new Response($this->view->render(), 200, array('Content-type' => $this->getMimeType()));
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::render().
-   */
-  public function render() {
-    $output = $this->view->style_plugin->render();
-
-    if (!empty($this->view->live_preview)) {
-      return '<pre>' . $output . '</pre>';
-    }
-
-    return $output;
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\display\DisplayPluginBase::preview().
-   *
-   * The DisplayPluginBase preview method assumes we will be returning a render
-   * array. The data plugin will already return the serialized string.
-   */
-  public function preview() {
-    return $this->view->render();
-  }
-
-}
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/views/row/DataEntityRow.php b/core/modules/rest/lib/Drupal/rest/Plugin/views/row/DataEntityRow.php
deleted file mode 100644
index 779614d..0000000
--- a/core/modules/rest/lib/Drupal/rest/Plugin/views/row/DataEntityRow.php
+++ /dev/null
@@ -1,42 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\rest\Plugin\views\row\DataEntityRow.
- */
-
-namespace Drupal\rest\Plugin\views\row;
-
-use Drupal\views\ViewExecutable;
-use Drupal\views\Plugin\views\row\RowPluginBase;
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-
-/**
- * Plugin which displays entities as raw data.
- *
- * @ingroup views_row_plugins
- *
- * @Plugin(
- *   id = "data_entity",
- *   module = "rest",
- *   title = @Translation("Entity"),
- *   help = @Translation("Use entities as row data."),
- *   type = "data"
- * )
- */
-class DataEntityRow extends RowPluginBase {
-
-  /**
-   * Overrides \Drupal\views\Plugin\Plugin::$usesOptions.
-   */
-  protected $usesOptions = FALSE;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\row\RowPluginBase::render().
-   */
-  public function render($row) {
-    return $row->_entity;
-  }
-
-}
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/views/row/DataFieldRow.php b/core/modules/rest/lib/Drupal/rest/Plugin/views/row/DataFieldRow.php
deleted file mode 100644
index 2fa2950..0000000
--- a/core/modules/rest/lib/Drupal/rest/Plugin/views/row/DataFieldRow.php
+++ /dev/null
@@ -1,142 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\rest\Plugin\views\row\DataFieldRow.
- */
-
-namespace Drupal\rest\Plugin\views\row;
-
-use Drupal\views\ViewExecutable;
-use Drupal\views\Plugin\views\display\DisplayPluginBase;
-use Drupal\views\Plugin\views\row\RowPluginBase;
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-
-/**
- * Plugin which displays fields as raw data.
- *
- * @ingroup views_row_plugins
- *
- * @Plugin(
- *   id = "data_field",
- *   module = "rest",
- *   title = @Translation("Fields"),
- *   help = @Translation("Use fields as row data."),
- *   type = "data"
- * )
- */
-class DataFieldRow extends RowPluginBase {
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\row\RowPluginBase::$usesFields.
-   */
-  protected $usesFields = TRUE;
-
-  /**
-   * Stores an array of prepared field aliases from options.
-   *
-   * @var array
-   */
-  protected $replacementAliases = array();
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\row\RowPluginBase::init().
-   */
-  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
-    parent::init($view, $display, $options);
-
-    if (!empty($this->options['aliases'])) {
-      // Prepare a trimmed version of replacement aliases.
-      $this->replacementAliases = array_filter(array_map('trim', (array) $this->options['aliases']));
-    }
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\row\RowPluginBase::buildOptionsForm().
-   */
-  protected function defineOptions() {
-    $options = parent::defineOptions();
-    $options['aliases'] = array('default' => array());
-
-    return $options;
-  }
-
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\row\RowPluginBase::buildOptionsForm().
-   */
-  public function buildOptionsForm(&$form, &$form_state) {
-    parent::buildOptionsForm($form, $form_state);
-
-    $form['aliases'] = array(
-      '#type' => 'fieldset',
-      '#title' => t('Field ID aliases'),
-      '#description' => t('Rename views default field IDs in the output data.'),
-      '#tree' => TRUE,
-    );
-
-    if ($fields = $this->view->display_handler->getOption('fields')) {
-      foreach ($fields as $id => $field) {
-        $form['aliases'][$id] = array(
-          '#type' => 'textfield',
-          '#title' => $id,
-          '#default_value' => isset($this->options['aliases'][$id]) ? $this->options['aliases'][$id] : '',
-        );
-      }
-    }
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\row\RowPluginBase::validateOptionsForm().
-   */
-  public function validateOptionsForm(&$form, &$form_state) {
-    $aliases = $form_state['values']['row_options']['aliases'];
-    // If array filter returns empty, no values have been entered. Unique keys
-    // should only be validated if we have some.
-    if (array_filter($aliases) && (array_unique($aliases) !== $aliases)) {
-      form_set_error('aliases', t('All field aliases must be unique'));
-    }
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\row\RowPluginBase::render().
-   */
-  public function render($row) {
-    $output = array();
-
-    foreach ($this->view->field as $id => $field) {
-      // If we don't have a field alias, Just try to get the rendered output
-      // from the field.
-      if ($field->field_alias == 'unknown') {
-        $value = $field->render($row);
-      }
-      // Get the value directly from the result row.
-      else {
-        $value = $row->{$field->field_alias};
-      }
-
-      $output[$this->getFieldKeyAlias($id)] = $value;
-    }
-
-    return $output;
-  }
-
-  /**
-   * Return an alias for a field ID, as set in the options form.
-   *
-   * @param string $id
-   *   The field id to lookup an alias for.
-   *
-   * @return string
-   *   The matches user entered alias, or the original ID if nothing is found.
-   */
-  public function getFieldKeyAlias($id) {
-    if (isset($this->replacementAliases[$id])) {
-      return $this->replacementAliases[$id];
-    }
-
-    return $id;
-  }
-
-}
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/views/style/Serializer.php b/core/modules/rest/lib/Drupal/rest/Plugin/views/style/Serializer.php
deleted file mode 100644
index 037534f..0000000
--- a/core/modules/rest/lib/Drupal/rest/Plugin/views/style/Serializer.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\rest\Plugin\views\style\Serializer.
- */
-
-namespace Drupal\rest\Plugin\views\style;
-
-use Drupal\views\ViewExecutable;
-use Drupal\views\Plugin\views\display\DisplayPluginBase;
-use Drupal\views\Plugin\views\style\StylePluginBase;
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-
-/**
- * The style plugin for serialized output formats.
- *
- * @ingroup views_style_plugins
- *
- * @Plugin(
- *   id = "serializer",
- *   module = "rest",
- *   title = @Translation("Serializer"),
- *   help = @Translation("Serializes views row data using the Serializer component."),
- *   type = "data"
- * )
- */
-class Serializer extends StylePluginBase {
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\style\StylePluginBase::$usesRowPlugin.
-   */
-  protected $usesRowPlugin = TRUE;
-
-  /**
-   * Overrides Drupal\views\Plugin\views\style\StylePluginBase::$usesFields.
-   */
-  protected $usesGrouping = FALSE;
-
-  /**
-   * The serializer which serializes the views result.
-   *
-   * @var \Symfony\Component\Serializer\Serializer
-   */
-  protected $serializer;
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\style\StylePluginBase::init().
-   */
-  public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
-    parent::init($view, $display, $options);
-
-    // Get the serializer service.
-    $this->serializer = drupal_container()->get('serializer');
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\style\StylePluginBase::render().
-   */
-  public function render() {
-    $rows = array();
-    // If the Data Entity row plugin is used, this will be an array of entities
-    // which will pass through Serializer to one of the registered Normalizers,
-    // which will transform it to arrays/scalars. If the Data field row plugin
-    // is used, $rows will not contain objects and will pass directly to the
-    // Encoder.
-    foreach ($this->view->result as $row) {
-      $rows[] = $this->row_plugin->render($row);
-    }
-
-    return $this->serializer->serialize($rows, $this->displayHandler->getContentType());
-  }
-
-}
diff --git a/core/modules/rest/lib/Drupal/rest/RequestHandler.php b/core/modules/rest/lib/Drupal/rest/RequestHandler.php
index a8bc239..b8d6d42 100644
--- a/core/modules/rest/lib/Drupal/rest/RequestHandler.php
+++ b/core/modules/rest/lib/Drupal/rest/RequestHandler.php
@@ -7,7 +7,6 @@
 
 namespace Drupal\rest;
 
-use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\DependencyInjection\ContainerAware;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpFoundation\Response;
@@ -30,7 +29,7 @@ class RequestHandler extends ContainerAware {
    *   The response object.
    */
   public function handle(Request $request, $id = NULL) {
-    $plugin = $request->attributes->get(RouteObjectInterface::ROUTE_OBJECT)->getDefault('_plugin');
+    $plugin = $request->attributes->get('_route')->getDefault('_plugin');
     $method = strtolower($request->getMethod());
     $resource = $this->container
       ->get('plugin.manager.rest')
diff --git a/core/modules/rest/lib/Drupal/rest/Tests/ReadTest.php b/core/modules/rest/lib/Drupal/rest/Tests/ReadTest.php
index 874ad13..6808020 100644
--- a/core/modules/rest/lib/Drupal/rest/Tests/ReadTest.php
+++ b/core/modules/rest/lib/Drupal/rest/Tests/ReadTest.php
@@ -59,13 +59,9 @@ public function testRead() {
       // checked in serialization tests.
       $this->assertEqual($data['uuid'][LANGUAGE_DEFAULT][0]['value'], $entity->uuid(), 'Entity UUID is correct');
 
-      // Try to read the entity with an unsupported mime format.
-      // Because the matcher checks mime type first, then method, this will hit
-      // zero viable routes on the method.  If the mime matcher wasn't working,
-      // we would still find an existing GET route with the wrong format. That
-      // means this is a valid functional test for mime-matching.
+      // Try to read the entity with an unsupported media format.
       $response = $this->httpRequest('entity/' . $entity_type . '/' . $entity->id(), 'GET', NULL, 'application/wrongformat');
-      $this->assertResponse(405);
+      $this->assertResponse(415);
 
       // Try to read an entity that does not exist.
       $response = $this->httpRequest('entity/' . $entity_type . '/9999', 'GET', NULL, 'application/vnd.drupal.ld+json');
diff --git a/core/modules/rest/lib/Drupal/rest/Tests/Views/StyleSerializerTest.php b/core/modules/rest/lib/Drupal/rest/Tests/Views/StyleSerializerTest.php
deleted file mode 100644
index 6f94923..0000000
--- a/core/modules/rest/lib/Drupal/rest/Tests/Views/StyleSerializerTest.php
+++ /dev/null
@@ -1,207 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\rest\Tests\Views\StyleSerializerTest.
- */
-
-namespace Drupal\rest\Tests\Views;
-
-use Drupal\views\Tests\Plugin\PluginTestBase;
-use Drupal\views\Tests\ViewTestData;
-
-/**
- * Tests the serializer style plugin.
- *
- * @see \Drupal\views\Plugin\display\Data
- * @see \Drupal\views\Plugin\style\Serialize
- */
-class StyleSerializerTest extends PluginTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('views_ui', 'entity_test', 'jsonld', 'rest_test_views');
-
-  /**
-   * Views used by this test.
-   *
-   * @var array
-   */
-  public static $testViews = array('test_serializer_display_field', 'test_serializer_display_entity');
-
-  /**
-   * A user with administrative privileges to look at test entity and configure views.
-   */
-  protected $adminUser;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Style: Serializer plugin',
-      'description' => 'Tests the serializer style plugin.',
-      'group' => 'Views Plugins',
-    );
-  }
-
-  protected function setUp() {
-    parent::setUp();
-
-    ViewTestData::importTestViews(get_class($this), array('rest_test_views'));
-
-    $this->adminUser = $this->drupalCreateUser(array('administer views', 'administer entity_test content', 'access user profiles', 'view test entity'));
-
-    // Save some entity_test entities.
-    for ($i = 1; $i <= 10; $i++) {
-      entity_create('entity_test', array('name' => 'test_' . $i, 'user_id' => $this->adminUser->id()))->save();
-    }
-
-    $this->enableViewsTestModule();
-  }
-
-  /**
-   * Checks the behavior of the Serializer callback paths and row plugins.
-   */
-  public function testSerializerResponses() {
-    // Test the serialize callback.
-    $view = views_get_view('test_serializer_display_field');
-    $view->initDisplay();
-    $this->executeView($view);
-
-    $actual_json = $this->drupalGet('test/serialize/field', array(), array('Accept: application/json'));
-    $this->assertResponse(200);
-
-    // Test the http Content-type.
-    $headers = $this->drupalGetHeaders();
-    $this->assertEqual($headers['content-type'], 'application/json', 'The header Content-type is correct.');
-
-    $expected = array();
-    foreach ($view->result as $row) {
-      $expected_row = array();
-      foreach ($view->field as $id => $field) {
-        if ($field->field_alias == 'unknown') {
-          $expected_row[$id] = $field->render($row);
-        }
-        else {
-          $expected_row[$id] = $row->{$field->field_alias};
-        }
-      }
-      $expected[] = $expected_row;
-    }
-
-    $this->assertIdentical($actual_json, json_encode($expected), 'The expected JSON output was found.');
-
-
-    // Test that the rendered output and the preview output are the same.
-    $view->destroy();
-    $view->setDisplay('rest_export_1');
-    // Mock the request content type by setting it on the display handler.
-    $view->display_handler->setContentType('json');
-    $this->assertIdentical($actual_json, $view->preview(), 'The expected JSON preview output was found.');
-
-    // Test a 403 callback.
-    $this->drupalGet('test/serialize/denied');
-    $this->assertResponse(403);
-
-    // Test the entity rows.
-
-    $view = views_get_view('test_serializer_display_entity');
-    $view->initDisplay();
-    $this->executeView($view);
-
-    // Get the serializer service.
-    $serializer = drupal_container()->get('serializer');
-
-    $entities = array();
-    foreach ($view->result as $row) {
-      $entities[] = $row->_entity;
-    }
-
-    $expected = $serializer->serialize($entities, 'json');
-
-    $actual_json = $this->drupalGet('test/serialize/entity', array(), array('Accept: application/json'));
-    $this->assertResponse(200);
-
-    $this->assertIdentical($actual_json, $expected, 'The expected JSON output was found.');
-
-    $expected = $serializer->serialize($entities, 'jsonld');
-    $actual_json = $this->drupalGet('test/serialize/entity', array(), array('Accept: application/ld+json'));
-    $this->assertIdentical($actual_json, $expected, 'The expected JSONLD output was found.');
-
-    $expected = $serializer->serialize($entities, 'drupal_jsonld');
-    $actual_json = $this->drupalGet('test/serialize/entity', array(), array('Accept: application/vnd.drupal.ld+json'));
-    $this->assertIdentical($actual_json, $expected, 'The expected JSONLD output was found.');
-  }
-
-  /**
-   * Test the field ID alias functionality of the DataFieldRow plugin.
-   */
-  public function testUIFieldAlias() {
-    $this->drupalLogin($this->adminUser);
-
-    // Test the UI settings for adding field ID aliases.
-    $this->drupalGet('admin/structure/views/view/test_serializer_display_field/edit/rest_export_1');
-    $row_options = 'admin/structure/views/nojs/display/test_serializer_display_field/rest_export_1/row_options';
-    $this->assertLinkByHref($row_options);
-
-    // Test an empty string for an alias, this should not be used. This also
-    // tests that the form can be submitted with no aliases.
-    $this->drupalPost($row_options, array('row_options[aliases][name]' => ''), t('Apply'));
-    $this->drupalPost(NULL, array(), t('Save'));
-
-    $view = views_get_view('test_serializer_display_field');
-    $view->setDisplay('rest_export_1');
-    $this->executeView($view);
-
-    $expected = array();
-    foreach ($view->result as $row) {
-      $expected_row = array();
-      foreach ($view->field as $id => $field) {
-        // Original field key is expected.
-        if ($field->field_alias == 'unknown') {
-          $expected_row[$id] = $field->render($row);
-        }
-        else {
-          $expected_row[$id] = $row->{$field->field_alias};
-        }
-      }
-      $expected[] = $expected_row;
-    }
-
-    // Use an AJAX call, as this will return decoded JSON data.
-    $this->assertIdentical($this->drupalGetAJAX('test/serialize/field'), $expected);
-
-    // Test a random aliases for fields, they should be replaced.
-    $random_name = $this->randomName();
-    // randomString() might produce a " " at the end but the DataFieldRow plugin
-    // trims the values.
-    $random_string = trim($this->randomString());
-    $edit = array('row_options[aliases][name]' => $random_name, 'row_options[aliases][nothing]' => $random_string);
-    $this->drupalPost($row_options, $edit, t('Apply'));
-    $this->drupalPost(NULL, array(), t('Save'));
-
-    $view = views_get_view('test_serializer_display_field');
-    $view->setDisplay('ws_endpoint_1');
-    $this->executeView($view);
-
-    $expected = array();
-    foreach ($view->result as $row) {
-      $expected_row = array();
-      foreach ($view->field as $id => $field) {
-        // This will be the custom field.
-        if ($field->field_alias == 'unknown') {
-          $expected_row[$random_string] = $field->render($row);
-        }
-        // This will be the name field.
-        else {
-          $expected_row[$random_name] = $row->{$field->field_alias};
-        }
-      }
-      $expected[] = $expected_row;
-    }
-
-    $this->assertIdentical($this->drupalGetAJAX('test/serialize/field'), $expected);
-  }
-
-}
diff --git a/core/modules/rest/tests/modules/rest_test_views/rest_test_views.info b/core/modules/rest/tests/modules/rest_test_views/rest_test_views.info
deleted file mode 100644
index b529491..0000000
--- a/core/modules/rest/tests/modules/rest_test_views/rest_test_views.info
+++ /dev/null
@@ -1,8 +0,0 @@
-name = REST test views
-description = Provides default views for views REST tests.
-package = Testing
-version = VERSION
-core = 8.x
-dependencies[] = rest
-dependencies[] = views
-hidden = TRUE
diff --git a/core/modules/rest/tests/modules/rest_test_views/rest_test_views.module b/core/modules/rest/tests/modules/rest_test_views/rest_test_views.module
deleted file mode 100644
index b3d9bbc..0000000
--- a/core/modules/rest/tests/modules/rest_test_views/rest_test_views.module
+++ /dev/null
@@ -1 +0,0 @@
-<?php
diff --git a/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_display_entity.yml b/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_display_entity.yml
deleted file mode 100644
index 9fd8876..0000000
--- a/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_display_entity.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-base_table: entity_test
-id: test_serializer_display_entity
-description: ''
-tag: ''
-human_name: 'Test serialize display entity rows'
-core: 8.x
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: ''
-    display_options:
-      access:
-        type: perm
-        options:
-          perm: 'access content'
-      cache:
-        type: none
-      query:
-        type: views_query
-      exposed_form:
-        type: basic
-      style:
-        type: serializer
-      row:
-        type: data_entity
-      sorts:
-        id:
-          id: standard
-          table: entity_test
-          field: id
-          order: DESC
-      title: 'Test serialize'
-      arguments: {  }
-  rest_export_1:
-    display_plugin: rest_export
-    id: rest_export_1
-    display_title: serializer
-    position: ''
-    display_options:
-      defaults:
-        access: false
-      path: test/serialize/entity
-base_field: id
-disabled: '0'
-module: rest
-langcode: und
diff --git a/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_display_field.yml b/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_display_field.yml
deleted file mode 100644
index 1afee8f..0000000
--- a/core/modules/rest/tests/modules/rest_test_views/test_views/views.view.test_serializer_display_field.yml
+++ /dev/null
@@ -1,93 +0,0 @@
-base_table: views_test_data
-id: test_serializer_display_field
-description: ''
-tag: ''
-human_name: 'Test serializer display field rows'
-core: 8.x
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: ''
-    display_options:
-      access:
-        type: perm
-        options:
-          perm: 'access content'
-      cache:
-        type: none
-      query:
-        type: views_query
-      exposed_form:
-        type: basic
-      style:
-        type: serializer
-      row:
-        type: data_field
-      fields:
-        name:
-          id: name
-          table: views_test_data
-          field: name
-          label: ''
-        nothing:
-          id: nothing
-          table: views
-          field: nothing
-          relationship: none
-          group_type: group
-          admin_label: ''
-          label: 'Custom text'
-          exclude: '0'
-          alter:
-            alter_text: '1'
-            text: TEST
-      sorts:
-        created:
-          id: created
-          table: views_test_data
-          field: created
-          order: DESC
-      title: 'Test serialize'
-      arguments: {  }
-  rest_export_1:
-    display_plugin: rest_export
-    id: rest_export_1
-    display_title: serializer
-    position: ''
-    display_options:
-      defaults:
-        access: false
-        style: false
-        row: false
-      path: test/serialize/field
-      access:
-        type: none
-      style:
-        type: serializer
-      row:
-        type: data_field
-  rest_export_2:
-    display_plugin: rest_export
-    id: rest_export_2
-    display_title: 'serialize - access denied'
-    position: ''
-    display_options:
-      defaults:
-        access: false
-        style: false
-        row: false
-      path: test/serialize/denied
-      access:
-        type: perm
-        options:
-          perm: 'administer views'
-      style:
-        type: serializer
-      row:
-        type: data_field
-base_field: id
-disabled: '0'
-module: rest
-langcode: und
diff --git a/core/modules/search/lib/Drupal/search/Plugin/block/block/SearchBlock.php b/core/modules/search/lib/Drupal/search/Plugin/block/block/SearchBlock.php
index 2bfccfd..d9bdb7c 100644
--- a/core/modules/search/lib/Drupal/search/Plugin/block/block/SearchBlock.php
+++ b/core/modules/search/lib/Drupal/search/Plugin/block/block/SearchBlock.php
@@ -30,9 +30,9 @@ public function blockAccess() {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(drupal_get_form('search_block_form'));
   }
 
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
index f3b4101..b358ded 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchBlockTest.php
@@ -40,9 +40,7 @@ function setUp() {
    */
   protected function testSearchFormBlock() {
     $block = $this->drupalPlaceBlock('search_form_block');
-
-    $this->drupalGet('');
-    $this->assertText($block->label(), 'Block title was found.');
+    $this->assertText($block['subject'], 'Block title was found.');
 
     // Test a normal search via the block form, from the front page.
     $terms = array('search_block_form' => 'test');
@@ -56,9 +54,9 @@ protected function testSearchFormBlock() {
     $this->assertResponse(200);
     $this->assertText('Your search yielded no results');
 
-    $visibility = $block->get('visibility');
-    $visibility['path']['pages'] = 'search';
-    $block->set('visibility', $visibility);
+    $config = config($block['config_id']);
+    $config->set('visibility.path.pages', 'search');
+    $config->save();
 
     $this->drupalPost('node', $terms, t('Search'));
     $this->assertText('Your search yielded no results');
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php
index 3e80c72..ab525dd 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchConfigSettingsFormTest.php
@@ -84,49 +84,6 @@ function testSearchSettingsPage() {
   }
 
   /**
-   * Verify module-supplied settings form.
-   */
-  function testSearchModuleSettingsPage() {
-
-    // Test that the settings form displays the correct count of items left to index.
-    $this->drupalGet('admin/config/search/settings');
-
-    // Ensure that the settings fieldset for the test module is not present on
-    // the page
-    $this->assertNoText(t('Extra type settings'));
-    $this->assertNoText(t('Boost method'));
-
-    // Ensure that the test module is listed as an option
-    $this->assertTrue($this->xpath('//input[@id="edit-active-modules-search-extra-type"]'), 'Checkbox for activating search for an extra module is visible');
-    $this->assertTrue($this->xpath('//input[@id="edit-default-module-search-extra-type"]'), 'Radio button for setting extra module as default search module is visible');
-
-    // Enable search for the test module
-    $edit['active_modules[search_extra_type]'] = 'search_extra_type';
-    $edit['default_module'] = 'search_extra_type';
-    $this->drupalPost('admin/config/search/settings', $edit, t('Save configuration'));
-
-    // Ensure that the settings fieldset is visible after enabling search for
-    // the test module
-    $this->assertText(t('Extra type settings'));
-    $this->assertText(t('Boost method'));
-
-    // Ensure that the default setting was picked up from the default config
-    $this->assertTrue($this->xpath('//select[@id="edit-extra-type-settings-boost"]//option[@value="bi" and @selected="selected"]'), 'Module specific settings are picked up from the default config');
-
-    // Change extra type setting and also modify a common search setting.
-    $edit = array(
-      'extra_type_settings[boost]' => 'ii',
-      'minimum_word_size' => 5,
-    );
-    $this->drupalPost('admin/config/search/settings', $edit, t('Save configuration'));
-
-    // Ensure that the modifications took effect.
-    $this->assertText(t('The configuration options have been saved.'));
-    $this->assertTrue($this->xpath('//select[@id="edit-extra-type-settings-boost"]//option[@value="ii" and @selected="selected"]'), 'Module specific settings can be changed');
-    $this->assertTrue($this->xpath('//input[@id="edit-minimum-word-size" and @value="5"]'), 'Common search settings can be modified if a module-specific form is active');
-  }
-
-  /**
    * Verify that you can disable individual search modules.
    */
   function testSearchModuleDisabling() {
diff --git a/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php b/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php
index 4987b56..a57e483 100644
--- a/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php
+++ b/core/modules/search/lib/Drupal/search/Tests/SearchRankingTest.php
@@ -106,11 +106,12 @@ function testRankings() {
    * Test rankings of HTML tags.
    */
   function testHTMLRankings() {
-    $full_html_format = entity_create('filter_format', array(
+    $full_html_format = array(
       'format' => 'full_html',
       'name' => 'Full HTML',
-    ));
-    $full_html_format->save();
+    );
+    $full_html_format = (object) $full_html_format;
+    filter_format_save($full_html_format);
 
     // Login with sufficient privileges.
     $this->drupalLogin($this->drupalCreateUser(array('create page content')));
diff --git a/core/modules/search/search.admin.inc b/core/modules/search/search.admin.inc
index 6997946..ef70eb7 100644
--- a/core/modules/search/search.admin.inc
+++ b/core/modules/search/search.admin.inc
@@ -5,8 +5,6 @@
  * Admin page callbacks for the search module.
  */
 
-use Drupal\Component\Utility\NestedArray;
-
 /**
  * Menu callback: confirm wiping of the index.
  */
@@ -131,7 +129,7 @@ function search_admin_settings($form, &$form_state) {
   foreach ($config->get('active_modules') as $module) {
     $added_form = module_invoke($module, 'search_admin');
     if (is_array($added_form)) {
-      $form = NestedArray::mergeDeep($form, $added_form);
+      $form = array_merge($form, $added_form);
     }
   }
 
diff --git a/core/modules/search/search.api.php b/core/modules/search/search.api.php
index 1e431a5..6429f7a 100644
--- a/core/modules/search/search.api.php
+++ b/core/modules/search/search.api.php
@@ -137,25 +137,20 @@ function hook_search_admin() {
     '#title' => t('Content ranking'),
   );
   $form['content_ranking']['#theme'] = 'node_search_admin';
-  $form['content_ranking']['#tree'] = TRUE;
   $form['content_ranking']['info'] = array(
     '#value' => '<em>' . t('The following numbers control which properties the content search should favor when ordering the results. Higher numbers mean more influence, zero means the property is ignored. Changing these numbers does not require the search index to be rebuilt. Changes take effect immediately.') . '</em>'
   );
 
   // Note: reversed to reflect that higher number = higher ranking.
   $options = drupal_map_assoc(range(0, 10));
-  $ranks = config('node.settings')->get('search_rank');
   foreach (module_invoke_all('ranking') as $var => $values) {
-    $form['content_ranking']['factors'][$var] = array(
+    $form['content_ranking']['factors']['node_rank_' . $var] = array(
       '#title' => $values['title'],
       '#type' => 'select',
       '#options' => $options,
-      '#default_value' => isset($ranks[$var]) ? $ranks[$var] : 0,
+      '#default_value' => variable_get('node_rank_' . $var, 0),
     );
   }
-
-  $form['#submit'][] = 'node_search_admin_submit';
-
   return $form;
 }
 
diff --git a/core/modules/search/tests/modules/search_extra_type/config/search_extra_type.settings.yml b/core/modules/search/tests/modules/search_extra_type/config/search_extra_type.settings.yml
deleted file mode 100644
index db64246..0000000
--- a/core/modules/search/tests/modules/search_extra_type/config/search_extra_type.settings.yml
+++ /dev/null
@@ -1 +0,0 @@
-boost: bi
diff --git a/core/modules/search/tests/modules/search_extra_type/search_extra_type.module b/core/modules/search/tests/modules/search_extra_type/search_extra_type.module
index a983b21..80c050c 100644
--- a/core/modules/search/tests/modules/search_extra_type/search_extra_type.module
+++ b/core/modules/search/tests/modules/search_extra_type/search_extra_type.module
@@ -67,38 +67,3 @@ function search_extra_type_search_page($results) {
 
   return $output;
 }
-
-/**
- * Implements hook_search_admin().
- */
-function search_extra_type_search_admin() {
-  // Output form for defining rank factor weights.
-  $form['extra_type_settings'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Extra type settings'),
-    '#tree' => TRUE,
-  );
-
-  $form['extra_type_settings']['boost'] = array(
-    '#type' => 'select',
-    '#title' => t('Boost method'),
-    '#options' => array(
-      'bi' => t('Bistromathic'),
-      'ii' => t('Infinite Improbability'),
-    ),
-    '#default_value' => config('search_extra_type.settings')->get('boost'),
-  );
-
-  $form['#submit'][] = 'search_extra_type_admin_submit';
-
-  return $form;
-}
-
-/**
- * Form API callback: Save admin settings
- */
-function search_extra_type_admin_submit($form, &$form_state) {
-  config('search_extra_type.settings')
-    ->set('boost', $form_state['values']['extra_type_settings']['boost'])
-    ->save();
-}
diff --git a/core/modules/shortcut/config/shortcut.set.default.yml b/core/modules/shortcut/config/shortcut.set.default.yml
deleted file mode 100644
index 3e50e3b..0000000
--- a/core/modules/shortcut/config/shortcut.set.default.yml
+++ /dev/null
@@ -1,2 +0,0 @@
-id: default
-label: Default
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
deleted file mode 100644
index fe06a13..0000000
--- a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/Core/Entity/Shortcut.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\shortcut\Plugin\Core\Entity\Shortcut.
- */
-
-namespace Drupal\shortcut\Plugin\Core\Entity;
-
-use Drupal\Core\Config\Entity\ConfigEntityBase;
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-
-/**
- * Defines the Shortcut configuration entity.
- *
- * @Plugin(
- *   id = "shortcut",
- *   label = @Translation("Shortcut set"),
- *   module = "shortcut",
- *   controller_class = "Drupal\shortcut\ShortcutStorageController",
- *   list_controller_class = "Drupal\shortcut\ShortcutListController",
- *   form_controller_class = {
- *     "default" = "Drupal\shortcut\ShortcutFormController"
- *   },
- *   config_prefix = "shortcut.set",
- *   entity_keys = {
- *     "id" = "id",
- *     "label" = "label",
- *     "uuid" = "uuid"
- *   }
- * )
- */
-class Shortcut extends ConfigEntityBase {
-
-  /**
-   * The machine name for the configuration entity.
-   *
-   * @var string
-   */
-  public $id;
-
-  /**
-   * The UUID for the configuration entity.
-   *
-   * @var string
-   */
-  public $uuid;
-
-  /**
-   * The human-readable name of the configuration entity.
-   *
-   * @var string
-   */
-  public $label;
-
-  /**
-   * Overrides \Drupal\Core\Entity\Entity::uri().
-   */
-  public function uri() {
-    return array(
-      'path' => 'admin/config/user-interface/shortcut/manage/' . $this->id(),
-      'options' => array(
-        'entity_type' => $this->entityType,
-        'entity' => $this,
-      ),
-    );
-  }
-
-}
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/block/block/ShortcutsBlock.php b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/block/block/ShortcutsBlock.php
index 590ff10..d236a19 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Plugin/block/block/ShortcutsBlock.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Plugin/block/block/ShortcutsBlock.php
@@ -23,9 +23,9 @@
 class ShortcutsBlock extends BlockBase {
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(
       shortcut_renderable_links(shortcut_current_displayed_set()),
     );
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutFormController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutFormController.php
deleted file mode 100644
index 059de38..0000000
--- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutFormController.php
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\shortcut\ShortcutFormController.
- */
-
-namespace Drupal\shortcut;
-
-use Drupal\Core\Entity\EntityInterface;
-use Drupal\Core\Entity\EntityFormController;
-
-/**
- * Form controller for the shortcut set entity edit forms.
- */
-class ShortcutFormController extends EntityFormController {
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::form().
-   */
-  public function form(array $form, array &$form_state, EntityInterface $entity) {
-    $form = parent::form($form, $form_state, $entity);
-
-    $form['label'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Set name'),
-      '#description' => t('The new set is created by copying items from your default shortcut set.'),
-      '#required' => TRUE,
-      '#default_value' => $entity->label(),
-    );
-    $form['id'] = array(
-      '#type' => 'machine_name',
-      '#machine_name' => array(
-        'exists' => 'shortcut_set_load',
-        'source' => array('label'),
-        'replace_pattern' => '[^a-z0-9-]+',
-        'replace' => '-',
-      ),
-      '#default_value' => $entity->id(),
-      '#disabled' => !$entity->isNew(),
-      // This id could be used for menu name.
-      '#maxlength' => 23,
-    );
-
-    $form['actions']['submit']['#value'] = t('Create new set');
-
-    return $form;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::actions().
-   */
-  protected function actions(array $form, array &$form_state) {
-    // Disable delete of default shortcut set.
-    $actions = parent::actions($form, $form_state);
-    $actions['delete']['#access'] = shortcut_set_delete_access($this->getEntity($form_state));
-    return $actions;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::validate().
-   */
-  public function validate(array $form, array &$form_state) {
-    parent::validate($form, $form_state);
-    $entity = $this->getEntity($form_state);
-    // Check to prevent a duplicate title.
-    if ($form_state['values']['label'] != $entity->label() && shortcut_set_title_exists($form_state['values']['label'])) {
-      form_set_error('label', t('The shortcut set %name already exists. Choose another name.', array('%name' => $form_state['values']['label'])));
-    }
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::save().
-   */
-  public function save(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
-    $is_new = !$entity->getOriginalID();
-    $entity->save();
-
-    if ($is_new) {
-      drupal_set_message(t('The %set_name shortcut set has been created. You can edit it from this page.', array('%set_name' => $entity->label())));
-    }
-    else {
-      drupal_set_message(t('Updated set name to %set-name.', array('%set-name' => $entity->label())));
-    }
-    $form_state['redirect'] = 'admin/config/user-interface/shortcut/manage/' . $entity->id();
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityFormController::delete().
-   */
-  public function delete(array $form, array &$form_state) {
-    $entity = $this->getEntity($form_state);
-    $form_state['redirect'] = 'admin/config/user-interface/shortcut/manage/' . $entity->id() . '/delete';
-  }
-
-}
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutListController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutListController.php
deleted file mode 100644
index 401d280..0000000
--- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutListController.php
+++ /dev/null
@@ -1,61 +0,0 @@
-<?php
-
-/**
- * Contains \Drupal\shortcut\ShortcutListController.
- */
-
-namespace Drupal\shortcut;
-
-use Drupal\Core\Config\Entity\ConfigEntityListController;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Provides a listing of contact categories.
- */
-class ShortcutListController extends ConfigEntityListController {
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityListController::buildHeader().
-   */
-  public function buildHeader() {
-    $row['label'] = t('Name');
-    $row['operations'] = t('Operations');
-    return $row;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityListController::getOperations().
-   */
-  public function getOperations(EntityInterface $entity) {
-    $uri = $entity->uri();
-    $operations['list'] = array(
-      'title' => t('list links'),
-      'href' => $uri['path'],
-    );
-    $operations['edit'] = array(
-      'title' => t('edit set'),
-      'href' => $uri['path'] . '/edit',
-      'options' => $uri['options'],
-      'weight' => 10,
-    );
-    if (shortcut_set_delete_access($entity)) {
-      $operations['delete'] = array(
-        'title' => t('delete set'),
-        'href' => $uri['path'] . '/delete',
-        'options' => $uri['options'],
-        'weight' => 100,
-      );
-    }
-    return $operations;
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\EntityListController::buildRow().
-   */
-  public function buildRow(EntityInterface $entity) {
-    $row['name'] = check_plain($entity->label());
-    $row['operations']['data'] = $this->buildOperations($entity);
-    return $row;
-  }
-
-}
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutStorageController.php b/core/modules/shortcut/lib/Drupal/shortcut/ShortcutStorageController.php
deleted file mode 100644
index 5a1146c..0000000
--- a/core/modules/shortcut/lib/Drupal/shortcut/ShortcutStorageController.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\shortcut\ShortcutStorageController.
- */
-
-namespace Drupal\shortcut;
-
-use Drupal\Core\Config\Entity\ConfigStorageController;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Defines a storage controller for shortcut entities.
- */
-class ShortcutStorageController extends ConfigStorageController {
-
-  /**
-   * Overrides \Drupal\config\ConfigStorageController::save().
-   */
-  public function save(EntityInterface $entity) {
-    // Generate menu-compatible set name.
-    if (!$entity->getOriginalID()) {
-      // Save a new shortcut set with links copied from the user's default set.
-      $default_set = shortcut_default_set();
-      // Generate a name to have no collisions with menu.
-      // Size of menu_name is 32 so id could be 23 = 32 - strlen('shortcut-').
-      $id = substr($entity->id(), 0, 23);
-      $entity->set('id', $id);
-      $entity->set('links', menu_links_clone($default_set->links, $id));
-    }
-    return parent::save($entity);
-  }
-
-  /**
-   * Overrides \Drupal\config\ConfigStorageController::postSave().
-   */
-  function postSave(EntityInterface $entity, $update) {
-    // Process links in shortcut set.
-    // If links were provided for the set, save them.
-    if (isset($entity->links)) {
-      foreach ($entity->links as &$link) {
-        // Do not specifically associate these links with the shortcut module,
-        // since other modules may make them editable via the menu system.
-        // However, we do need to specify the correct menu name.
-        $link['menu_name'] = 'shortcut-' . $entity->id();
-        $link['plid'] = 0;
-        menu_link_save($link);
-      }
-    }
-
-    parent::postSave($entity, $update);
-  }
-
-  /**
-   * Overrides \Drupal\Core\Entity\ConfigStorageController::preDelete().
-   */
-  protected function preDelete($entities) {
-    foreach ($entities as $entity) {
-      // First, delete any user assignments for this set, so that each of these
-      // users will go back to using whatever default set applies.
-      db_delete('shortcut_set_users')
-        ->condition('set_name', $entity->id())
-        ->execute();
-
-      // Next, delete the menu links for this set.
-      menu_delete_links('shortcut-' . $entity->id());
-    }
-
-    parent::preDelete($entities);
-  }
-
-}
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutLinksTest.php b/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutLinksTest.php
index f36c3c8..cd45303 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutLinksTest.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutLinksTest.php
@@ -44,14 +44,14 @@ function testShortcutLinkAdd() {
 
     // Check that each new shortcut links where it should.
     foreach ($test_cases as $test) {
-      $title = $this->randomName();
+      $title = $this->randomName(10);
       $form_data = array(
         'shortcut_link[link_title]' => $title,
         'shortcut_link[link_path]'  => $test['path'],
       );
-      $this->drupalPost('admin/config/user-interface/shortcut/manage/' . $set->id() . '/add-link', $form_data, t('Save'));
+      $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/add-link', $form_data, t('Save'));
       $this->assertResponse(200);
-      $saved_set = shortcut_set_load($set->id());
+      $saved_set = shortcut_set_load($set->set_name);
       $paths = $this->getShortcutInformation($saved_set, 'link_path');
       $test_path = empty($test['path']) ? '<front>' : $test['path'];
       $this->assertTrue(in_array(drupal_container()->get('path.alias_manager')->getSystemPath($test_path), $paths), 'Shortcut created: '. $test['path']);
@@ -67,7 +67,7 @@ function testShortcutQuickLink() {
     config('system.theme')->set('admin', 'seven')->save();
     variable_set('node_admin_theme', TRUE);
     $this->drupalGet($this->set->links[0]['link_path']);
-    $this->assertRaw(t('Remove from %title shortcuts', array('%title' => $this->set->label())), '"Add to shortcuts" link properly switched to "Remove from shortcuts".');
+    $this->assertRaw(t('Remove from %title shortcuts', array('%title' => $this->set->title)), '"Add to shortcuts" link properly switched to "Remove from shortcuts".');
   }
 
   /**
@@ -77,10 +77,10 @@ function testShortcutLinkRename() {
     $set = $this->set;
 
     // Attempt to rename shortcut link.
-    $new_link_name = $this->randomName();
+    $new_link_name = $this->randomName(10);
 
     $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'], array('shortcut_link[link_title]' => $new_link_name, 'shortcut_link[link_path]' => $set->links[0]['link_path']), t('Save'));
-    $saved_set = shortcut_set_load($set->id());
+    $saved_set = shortcut_set_load($set->set_name);
     $titles = $this->getShortcutInformation($saved_set, 'link_title');
     $this->assertTrue(in_array($new_link_name, $titles), 'Shortcut renamed: ' . $new_link_name);
     $this->assertLink($new_link_name, 0, 'Renamed shortcut link appears on the page.');
@@ -96,7 +96,7 @@ function testShortcutLinkChangePath() {
     $new_link_path = 'admin/config';
 
     $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'], array('shortcut_link[link_title]' => $set->links[0]['link_title'], 'shortcut_link[link_path]' => $new_link_path), t('Save'));
-    $saved_set = shortcut_set_load($set->id());
+    $saved_set = shortcut_set_load($set->set_name);
     $paths = $this->getShortcutInformation($saved_set, 'link_path');
     $this->assertTrue(in_array($new_link_path, $paths), 'Shortcut path changed: ' . $new_link_path);
     $this->assertLinkByHref($new_link_path, 0, 'Shortcut with new path appears on the page.');
@@ -109,7 +109,7 @@ function testShortcutLinkDelete() {
     $set = $this->set;
 
     $this->drupalPost('admin/config/user-interface/shortcut/link/' . $set->links[0]['mlid'] . '/delete', array(), 'Delete');
-    $saved_set = shortcut_set_load($set->id());
+    $saved_set = shortcut_set_load($set->set_name);
     $mlids = $this->getShortcutInformation($saved_set, 'mlid');
     $this->assertFalse(in_array($set->links[0]['mlid'], $mlids), 'Successfully deleted a shortcut.');
   }
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutSetsTest.php b/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutSetsTest.php
index c5df40f..9efc6ce 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutSetsTest.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutSetsTest.php
@@ -26,36 +26,36 @@ public static function getInfo() {
    * Tests creating a shortcut set.
    */
   function testShortcutSetAdd() {
-    $new_set = $this->generateShortcutSet($this->randomName());
-    $sets = entity_load_multiple('shortcut');
-    $this->assertTrue(isset($sets[$new_set->id()]), 'Successfully created a shortcut set.');
+    $new_set = $this->generateShortcutSet($this->randomName(10));
+    $sets = shortcut_sets();
+    $this->assertTrue(isset($sets[$new_set->set_name]), 'Successfully created a shortcut set.');
     $this->drupalGet('user/' . $this->admin_user->uid . '/shortcuts');
-    $this->assertText($new_set->label(), 'Generated shortcut set was listed as a choice on the user account page.');
+    $this->assertText($new_set->title, 'Generated shortcut set was listed as a choice on the user account page.');
   }
 
   /**
    * Tests switching a user's own shortcut set.
    */
   function testShortcutSetSwitchOwn() {
-    $new_set = $this->generateShortcutSet($this->randomName());
+    $new_set = $this->generateShortcutSet($this->randomName(10));
 
     // Attempt to switch the default shortcut set to the newly created shortcut
     // set.
-    $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', array('set' => $new_set->id()), t('Change set'));
+    $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', array('set' => $new_set->set_name), t('Change set'));
     $this->assertResponse(200);
     $current_set = shortcut_current_displayed_set($this->admin_user);
-    $this->assertTrue($new_set->id() == $current_set->id(), 'Successfully switched own shortcut set.');
+    $this->assertTrue($new_set->set_name == $current_set->set_name, 'Successfully switched own shortcut set.');
   }
 
   /**
    * Tests switching another user's shortcut set.
    */
   function testShortcutSetAssign() {
-    $new_set = $this->generateShortcutSet($this->randomName());
+    $new_set = $this->generateShortcutSet($this->randomName(10));
 
     shortcut_set_assign_user($new_set, $this->shortcut_user);
     $current_set = shortcut_current_displayed_set($this->shortcut_user);
-    $this->assertTrue($new_set->id() == $current_set->id(), "Successfully switched another user's shortcut set.");
+    $this->assertTrue($new_set->set_name == $current_set->set_name, "Successfully switched another user's shortcut set.");
   }
 
   /**
@@ -64,13 +64,12 @@ function testShortcutSetAssign() {
   function testShortcutSetSwitchCreate() {
     $edit = array(
       'set' => 'new',
-      'id' => strtolower($this->randomName()),
-      'label' => $this->randomString(),
+      'new' => $this->randomName(10),
     );
     $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', $edit, t('Change set'));
     $current_set = shortcut_current_displayed_set($this->admin_user);
-    $this->assertNotEqual($current_set->id(), $this->set->id(), 'A shortcut set can be switched to at the same time as it is created.');
-    $this->assertEqual($current_set->label(), $edit['label'], 'The new set is correctly assigned to the user.');
+    $this->assertNotEqual($current_set->set_name, $this->set->set_name, 'A shortcut set can be switched to at the same time as it is created.');
+    $this->assertEqual($current_set->title, $edit['new'], 'The new set is correctly assigned to the user.');
   }
 
   /**
@@ -79,24 +78,24 @@ function testShortcutSetSwitchCreate() {
   function testShortcutSetSwitchNoSetName() {
     $edit = array('set' => 'new');
     $this->drupalPost('user/' . $this->admin_user->uid . '/shortcuts', $edit, t('Change set'));
-    $this->assertText(t('The new set label is required.'));
+    $this->assertText(t('The new set name is required.'));
     $current_set = shortcut_current_displayed_set($this->admin_user);
-    $this->assertEqual($current_set->id(), $this->set->id(), 'Attempting to switch to a new shortcut set without providing a set name does not succeed.');
+    $this->assertEqual($current_set->set_name, $this->set->set_name, 'Attempting to switch to a new shortcut set without providing a set name does not succeed.');
   }
 
   /**
-   * Tests that save() correctly updates existing links.
+   * Tests that shortcut_set_save() correctly updates existing links.
    */
   function testShortcutSetSave() {
     $set = $this->set;
     $old_mlids = $this->getShortcutInformation($set, 'mlid');
 
-    $set->links[] = $this->generateShortcutLink('admin', $this->randomName());
-    $set->save();
-    $saved_set = shortcut_set_load($set->id());
+    $set->links[] = $this->generateShortcutLink('admin', $this->randomName(10));
+    shortcut_set_save($set);
+    $saved_set = shortcut_set_load($set->set_name);
 
     $new_mlids = $this->getShortcutInformation($saved_set, 'mlid');
-    $this->assertTrue(count(array_intersect($old_mlids, $new_mlids)) == count($old_mlids), 'Shortcut::save() did not inadvertently change existing mlids.');
+    $this->assertTrue(count(array_intersect($old_mlids, $new_mlids)) == count($old_mlids), 'shortcut_set_save() did not inadvertently change existing mlids.');
   }
 
   /**
@@ -105,53 +104,53 @@ function testShortcutSetSave() {
   function testShortcutSetRename() {
     $set = $this->set;
 
-    $new_label = $this->randomName();
-    $this->drupalPost('admin/config/user-interface/shortcut/manage/' . $set->id() . '/edit', array('label' => $new_label), t('Save'));
-    $set = shortcut_set_load($set->id());
-    $this->assertTrue($set->label() == $new_label, 'Shortcut set has been successfully renamed.');
+    $new_title = $this->randomName(10);
+    $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/edit', array('title' => $new_title), t('Save'));
+    $set = shortcut_set_load($set->set_name);
+    $this->assertTrue($set->title == $new_title, 'Shortcut set has been successfully renamed.');
   }
 
   /**
    * Tests renaming a shortcut set to the same name as another set.
    */
   function testShortcutSetRenameAlreadyExists() {
-    $set = $this->generateShortcutSet($this->randomName());
-    $existing_label = $this->set->label();
-    $this->drupalPost('admin/config/user-interface/shortcut/manage/' . $set->id() . '/edit', array('label' => $existing_label), t('Save'));
-    $this->assertRaw(t('The shortcut set %name already exists. Choose another name.', array('%name' => $existing_label)));
-    $set = shortcut_set_load($set->id());
-    $this->assertNotEqual($set->label(), $existing_label, format_string('The shortcut set %title cannot be renamed to %new-title because a shortcut set with that title already exists.', array('%title' => $set->label(), '%new-title' => $existing_label)));
+    $set = $this->generateShortcutSet($this->randomName(10));
+    $existing_title = $this->set->title;
+    $this->drupalPost('admin/config/user-interface/shortcut/' . $set->set_name . '/edit', array('title' => $existing_title), t('Save'));
+    $this->assertRaw(t('The shortcut set %name already exists. Choose another name.', array('%name' => $existing_title)));
+    $set = shortcut_set_load($set->set_name);
+    $this->assertNotEqual($set->title, $existing_title, format_string('The shortcut set %title cannot be renamed to %new-title because a shortcut set with that title already exists.', array('%title' => $set->title, '%new-title' => $existing_title)));
   }
 
   /**
    * Tests unassigning a shortcut set.
    */
   function testShortcutSetUnassign() {
-    $new_set = $this->generateShortcutSet($this->randomName());
+    $new_set = $this->generateShortcutSet($this->randomName(10));
 
     shortcut_set_assign_user($new_set, $this->shortcut_user);
     shortcut_set_unassign_user($this->shortcut_user);
     $current_set = shortcut_current_displayed_set($this->shortcut_user);
     $default_set = shortcut_default_set($this->shortcut_user);
-    $this->assertTrue($current_set->id() == $default_set->id(), "Successfully unassigned another user's shortcut set.");
+    $this->assertTrue($current_set->set_name == $default_set->set_name, "Successfully unassigned another user's shortcut set.");
   }
 
   /**
    * Tests deleting a shortcut set.
    */
   function testShortcutSetDelete() {
-    $new_set = $this->generateShortcutSet($this->randomName());
+    $new_set = $this->generateShortcutSet($this->randomName(10));
 
-    $this->drupalPost('admin/config/user-interface/shortcut/manage/' . $new_set->id() . '/delete', array(), t('Delete'));
-    $sets = entity_load_multiple('shortcut');
-    $this->assertFalse(isset($sets[$new_set->id()]), 'Successfully deleted a shortcut set.');
+    $this->drupalPost('admin/config/user-interface/shortcut/' . $new_set->set_name . '/delete', array(), t('Delete'));
+    $sets = shortcut_sets();
+    $this->assertFalse(isset($sets[$new_set->set_name]), 'Successfully deleted a shortcut set.');
   }
 
   /**
    * Tests deleting the default shortcut set.
    */
   function testShortcutSetDeleteDefault() {
-    $this->drupalGet('admin/config/user-interface/shortcut/manage/default/delete');
+    $this->drupalGet('admin/config/user-interface/shortcut/' . SHORTCUT_DEFAULT_SET_NAME . '/delete');
     $this->assertResponse(403);
   }
 
@@ -159,11 +158,11 @@ function testShortcutSetDeleteDefault() {
    * Tests creating a new shortcut set with a defined set name.
    */
   function testShortcutSetCreateWithSetName() {
-    $random_name = $this->randomName();
-    $new_set = $this->generateShortcutSet($random_name, $random_name, TRUE);
-    $sets = entity_load_multiple('shortcut');
+    $random_name = $this->randomName(10);
+    $new_set = $this->generateShortcutSet($random_name, TRUE, $random_name);
+    $sets = shortcut_sets();
     $this->assertTrue(isset($sets[$random_name]), 'Successfully created a shortcut set with a defined set name.');
     $this->drupalGet('user/' . $this->admin_user->uid . '/shortcuts');
-    $this->assertText($new_set->label(), 'Generated shortcut set was listed as a choice on the user account page.');
+    $this->assertText($new_set->title, 'Generated shortcut set was listed as a choice on the user account page.');
   }
 }
diff --git a/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutTestBase.php b/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutTestBase.php
index 29cf2c1..8c94435 100644
--- a/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutTestBase.php
+++ b/core/modules/shortcut/lib/Drupal/shortcut/Tests/ShortcutTestBase.php
@@ -8,6 +8,7 @@
 namespace Drupal\shortcut\Tests;
 
 use Drupal\simpletest\WebTestBase;
+use stdClass;
 
 /**
  * Defines base class for shortcut test cases.
@@ -50,7 +51,7 @@ function setUp() {
       $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
 
       // Populate the default shortcut set.
-      $shortcut_set = shortcut_set_load('default');
+      $shortcut_set = shortcut_set_load(SHORTCUT_DEFAULT_SET_NAME);
       $shortcut_set->links[] = array(
         'link_path' => 'node/add',
         'link_title' => st('Add content'),
@@ -61,7 +62,7 @@ function setUp() {
         'link_title' => st('Find content'),
         'weight' => -19,
       );
-      $shortcut_set->save();
+      shortcut_set_save($shortcut_set);
     }
 
     // Create users.
@@ -73,23 +74,29 @@ function setUp() {
 
     // Log in as admin and grab the default shortcut set.
     $this->drupalLogin($this->admin_user);
-    $this->set = shortcut_set_load('default');
+    $this->set = shortcut_set_load(SHORTCUT_DEFAULT_SET_NAME);
     shortcut_set_assign_user($this->set, $this->admin_user);
   }
 
   /**
    * Creates a generic shortcut set.
    */
-  function generateShortcutSet($label = '', $id = NULL, $default_links = TRUE) {
-    $set = entity_create('shortcut', array(
-      'id' => isset($id) ? $id : strtolower($this->randomName()),
-      'label' => empty($label) ? $this->randomString() : $label,
-      'links' => (!$default_links) ? array() : array(
-        $this->generateShortcutLink('node/add'),
-        $this->generateShortcutLink('admin/content'),
-      ),
-    ));
-    $set->save();
+  function generateShortcutSet($title = '', $default_links = TRUE, $set_name = '') {
+    $set = new stdClass();
+    $set->title = empty($title) ? $this->randomName(10) : $title;
+
+    // Set name is generated automatically if not set.
+    if (!empty($set_name)) {
+      $set->set_name = $set_name;
+    }
+
+    if ($default_links) {
+      $set->links = array();
+      $set->links[] = $this->generateShortcutLink('node/add');
+      $set->links[] = $this->generateShortcutLink('admin/content');
+    }
+    shortcut_set_save($set);
+
     return $set;
   }
 
@@ -99,7 +106,7 @@ function generateShortcutSet($label = '', $id = NULL, $default_links = TRUE) {
   function generateShortcutLink($path, $title = '') {
     $link = array(
       'link_path' => $path,
-      'link_title' => !empty($title) ? $title : $this->randomName(),
+      'link_title' => !empty($title) ? $title : $this->randomName(10),
     );
 
     return $link;
diff --git a/core/modules/shortcut/shortcut.admin.inc b/core/modules/shortcut/shortcut.admin.inc
index d0cf7c1..18ec1c3 100644
--- a/core/modules/shortcut/shortcut.admin.inc
+++ b/core/modules/shortcut/shortcut.admin.inc
@@ -32,12 +32,12 @@ function shortcut_set_switch($form, &$form_state, $account = NULL) {
   }
 
   // Prepare the list of shortcut sets.
-  $sets = entity_load_multiple('shortcut');
+  $sets = shortcut_sets();
   $current_set = shortcut_current_displayed_set($account);
 
   $options = array();
   foreach ($sets as $name => $set) {
-    $options[$name] = check_plain($set->label());
+    $options[$name] = check_plain($set->title);
   }
 
   // Only administrators can add shortcut sets.
@@ -56,37 +56,20 @@ function shortcut_set_switch($form, &$form_state, $account = NULL) {
       '#type' => 'radios',
       '#title' => $user->uid == $account->uid ? t('Choose a set of shortcuts to use') : t('Choose a set of shortcuts for this user'),
       '#options' => $options,
-      '#default_value' => $current_set->id(),
+      '#default_value' => $current_set->set_name,
     );
 
-    $form['label'] = array(
+    $form['new'] = array(
       '#type' => 'textfield',
-      '#title' => t('Label'),
+      '#title' => t('Name'),
       '#title_display' => 'invisible',
       '#description' => t('The new set is created by copying items from your default shortcut set.'),
       '#access' => $add_access,
     );
-    $form['id'] = array(
-      '#type' => 'machine_name',
-      '#machine_name' => array(
-        'exists' => 'shortcut_set_load',
-        'source' => array('label'),
-        'replace_pattern' => '[^a-z0-9-]+',
-        'replace' => '-',
-      ),
-      // This id could be used for menu name.
-      '#maxlength' => 23,
-      '#states' => array(
-        'required' => array(
-          ':input[name="set"]' => array('value' => 'new'),
-        ),
-      ),
-      '#required' => FALSE,
-    );
 
     if ($user->uid != $account->uid) {
       $default_set = shortcut_default_set($account);
-      $form['new']['#description'] = t('The new set is created by copying items from the %default set.', array('%default' => $default_set->label()));
+      $form['new']['#description'] = t('The new set is created by copying items from the %default set.', array('%default' => $default_set->title));
     }
 
     $form['#attached'] = array(
@@ -102,7 +85,7 @@ function shortcut_set_switch($form, &$form_state, $account = NULL) {
   else {
     // There is only 1 option, so output a message in the $form array.
     $form['info'] = array(
-      '#markup' => '<p>' . t('You are currently using the %set-name shortcut set.', array('%set-name' => $current_set->label())) . '</p>',
+      '#markup' => '<p>' . t('You are currently using the %set-name shortcut set.', array('%set-name' => $current_set->title)) . '</p>',
     );
   }
 
@@ -115,12 +98,12 @@ function shortcut_set_switch($form, &$form_state, $account = NULL) {
 function shortcut_set_switch_validate($form, &$form_state) {
   if ($form_state['values']['set'] == 'new') {
     // Check to prevent creating a shortcut set with an empty title.
-    if (trim($form_state['values']['label']) == '') {
-      form_set_error('new', t('The new set label is required.'));
+    if (trim($form_state['values']['new']) == '') {
+      form_set_error('new', t('The new set name is required.'));
     }
     // Check to prevent a duplicate title.
-    if (shortcut_set_title_exists($form_state['values']['label'])) {
-      form_set_error('label', t('The shortcut set %name already exists. Choose another name.', array('%name' => $form_state['values']['label'])));
+    if (shortcut_set_title_exists($form_state['values']['new'])) {
+      form_set_error('new', t('The shortcut set %name already exists. Choose another name.', array('%name' => $form_state['values']['new'])));
     }
   }
 }
@@ -135,15 +118,14 @@ function shortcut_set_switch_submit($form, &$form_state) {
   if ($form_state['values']['set'] == 'new') {
     // Save a new shortcut set with links copied from the user's default set.
     $default_set = shortcut_default_set($account);
-    $set = entity_create('shortcut', array(
-      'id' => $form_state['values']['id'],
-      'label' => $form_state['values']['label'],
+    $set = (object) array(
+      'title' => $form_state['values']['new'],
       'links' => menu_links_clone($default_set->links),
-    ));
-    $set->save();
+    );
+    shortcut_set_save($set);
     $replacements = array(
       '%user' => $account->name,
-      '%set_name' => $set->label(),
+      '%set_name' => $set->title,
       '@switch-url' => url(current_path()),
     );
     if ($account->uid == $user->uid) {
@@ -154,14 +136,14 @@ function shortcut_set_switch_submit($form, &$form_state) {
     else {
       drupal_set_message(t('%user is now using a new shortcut set called %set_name. You can edit it from this page.', $replacements));
     }
-    $form_state['redirect'] = 'admin/config/user-interface/shortcut/manage/' . $set->id();
+    $form_state['redirect'] = 'admin/config/user-interface/shortcut/' . $set->set_name;
   }
   else {
     // Switch to a different shortcut set.
     $set = shortcut_set_load($form_state['values']['set']);
     $replacements = array(
       '%user' => $account->name,
-      '%set_name' => $set->label(),
+      '%set_name' => $set->title,
     );
     drupal_set_message($account->uid == $user->uid ? t('You are now using the %set_name shortcut set.', $replacements) : t('%user is now using the %set_name shortcut set.', $replacements));
   }
@@ -174,15 +156,96 @@ function shortcut_set_switch_submit($form, &$form_state) {
  * Menu page callback: builds the page for administering shortcut sets.
  */
 function shortcut_set_admin() {
-  return entity_list_controller('shortcut')->render();
+  $shortcut_sets = shortcut_sets();
+  $header = array(t('Name'), t('Operations'));
+
+  $rows = array();
+  foreach ($shortcut_sets as $set) {
+    $row = array(
+      check_plain($set->title),
+    );
+    $links['list'] = array(
+      'title' => t('list links'),
+      'href' => "admin/config/user-interface/shortcut/$set->set_name",
+    );
+    $links['edit'] = array(
+      'title' => t('list links'),
+      'href' => "admin/config/user-interface/shortcut/$set->set_name/edit",
+    );
+    if (shortcut_set_delete_access($set)) {
+      $links['delete'] = array(
+        'title' => t('delete set'),
+        'href' => "admin/config/user-interface/shortcut/$set->set_name/delete",
+      );
+    }
+    $row[] = array(
+      'data' => array(
+        '#type' => 'operations',
+        '#links' => $links,
+      ),
+    );
+
+    $rows[] = $row;
+  }
+
+  return theme('table', array('header' => $header, 'rows' => $rows));
+}
+
+/**
+ * Form callback: builds the form for adding a shortcut set.
+ *
+ * @param $form
+ *   An associative array containing the structure of the form.
+ * @param $form_state
+ *   An associative array containing the current state of the form.
+ *
+ * @return
+ *   An array representing the form definition.
+ *
+ * @ingroup forms
+ * @see shortcut_set_add_form_validate()
+ * @see shortcut_set_add_form_submit()
+ */
+function shortcut_set_add_form($form, &$form_state) {
+  $form['new'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Set name'),
+    '#description' => t('The new set is created by copying items from your default shortcut set.'),
+    '#required' => TRUE,
+  );
+
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Create new set'),
+  );
+
+  return $form;
 }
 
 /**
- * Page callback: provides the shortcut set creation form.
+ * Validation handler for shortcut_set_add_form().
  */
-function shortcut_set_add() {
-  $entity = entity_create('shortcut', array());
-  return entity_get_form($entity);
+function shortcut_set_add_form_validate($form, &$form_state) {
+  // Check to prevent a duplicate title.
+  if (shortcut_set_title_exists($form_state['values']['new'])) {
+    form_set_error('new', t('The shortcut set %name already exists. Choose another name.', array('%name' => $form_state['values']['new'])));
+  }
+}
+
+/**
+ * Submit handler for shortcut_set_add_form().
+ */
+function shortcut_set_add_form_submit($form, &$form_state) {
+  // Save a new shortcut set with links copied from the user's default set.
+  $default_set = shortcut_default_set();
+  $set = (object) array(
+    'title' => $form_state['values']['new'],
+    'links' => menu_links_clone($default_set->links),
+  );
+  shortcut_set_save($set);
+  drupal_set_message(t('The %set_name shortcut set has been created. You can edit it from this page.', array('%set_name' => $set->title)));
+  $form_state['redirect'] = 'admin/config/user-interface/shortcut/' . $set->set_name;
 }
 
 /**
@@ -192,7 +255,7 @@ function shortcut_set_add() {
  *   An associative array containing the structure of the form.
  * @param $form_state
  *   An associative array containing the current state of the form.
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param $shortcut_set
  *   An object representing the shortcut set which is being edited.
  *
  * @return
@@ -202,7 +265,7 @@ function shortcut_set_add() {
  * @see shortcut_set_customize_submit()
  */
 function shortcut_set_customize($form, &$form_state, $shortcut_set) {
-  $form['#shortcut_set_name'] = $shortcut_set->id();
+  $form['#shortcut_set_name'] = $shortcut_set->set_name;
   $form['shortcuts'] = array(
     '#tree' => TRUE,
     '#weight' => -20,
@@ -302,7 +365,7 @@ function theme_shortcut_set_customize($variables) {
  *   An associative array containing the structure of the form.
  * @param $form_state
  *   An associative array containing the current state of the form.
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param $shortcut_set
  *   An object representing the shortcut set to which the link will be added.
  *
  * @return
@@ -423,8 +486,7 @@ function shortcut_link_edit_submit($form, &$form_state) {
   $shortcut_link = array_merge($form_state['values']['original_shortcut_link'], $form_state['values']['shortcut_link']);
 
   menu_link_save($shortcut_link);
-  $set_name = str_replace('shortcut-', '' , $shortcut_link['menu_name']);
-  $form_state['redirect'] = 'admin/config/user-interface/shortcut/manage/' . $set_name;
+  $form_state['redirect'] = 'admin/config/user-interface/shortcut/' . $shortcut_link['menu_name'];
   drupal_set_message(t('The shortcut %link has been updated.', array('%link' => $shortcut_link['link_title'])));
 }
 
@@ -435,10 +497,10 @@ function shortcut_link_add_submit($form, &$form_state) {
   // Add the shortcut link to the set.
   $shortcut_set = $form_state['values']['shortcut_set'];
   $shortcut_link = $form_state['values']['shortcut_link'];
-  $shortcut_link['menu_name'] = $shortcut_set->id();
+  $shortcut_link['menu_name'] = $shortcut_set->set_name;
   shortcut_admin_add_link($shortcut_link, $shortcut_set);
-  $shortcut_set->save();
-  $form_state['redirect'] = 'admin/config/user-interface/shortcut/manage/' . $shortcut_set->id();
+  shortcut_set_save($shortcut_set);
+  $form_state['redirect'] = 'admin/config/user-interface/shortcut/' . $shortcut_link['menu_name'];
   drupal_set_message(t('Added a shortcut for %title.', array('%title' => $shortcut_link['link_title'])));
 }
 
@@ -447,7 +509,7 @@ function shortcut_link_add_submit($form, &$form_state) {
  *
  * @param $link
  *   An array representing a shortcut link.
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param $shortcut_set
  *   An object representing the shortcut set which the link will be added to.
  *   The links in the shortcut set will be re-weighted so that the new link is
  *   at the end, and some existing links may be disabled (if the $limit
@@ -466,13 +528,76 @@ function shortcut_admin_add_link($shortcut_link, &$shortcut_set) {
 }
 
 /**
+ * Form callback: builds the form for editing the shortcut set name.
+ *
+ * @param $form
+ *   An associative array containing the structure of the form.
+ * @param $form_state
+ *   An associative array containing the current state of the form.
+ * @param object $shortcut_set
+ *   An object representing the shortcut set, as returned from
+ *   shortcut_set_load().
+ *
+ * @return
+ *   An array representing the form definition.
+ *
+ * @ingroup forms
+ * @see shortcut_set_edit_form_validate()
+ * @see shortcut_set_edit_form_submit()
+ */
+function shortcut_set_edit_form($form, &$form_state, $shortcut_set) {
+  $form['shortcut_set'] = array(
+    '#type' => 'value',
+    '#value' => $shortcut_set,
+  );
+  $form['title'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Set name'),
+    '#default_value' => $shortcut_set->title,
+    '#maxlength' => 255,
+    '#required' => TRUE,
+    '#weight' => -5,
+  );
+  $form['actions'] = array('#type' => 'actions');
+  $form['actions']['submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Save'),
+    '#weight' => 5,
+  );
+
+  return $form;
+}
+
+/**
+ * Validation handler for shortcut_set_edit_form().
+ */
+function shortcut_set_edit_form_validate($form, &$form_state) {
+  // Check to prevent a duplicate title, if the title was edited from its
+  // original value.
+  if ($form_state['values']['title'] != $form_state['values']['shortcut_set']->title && shortcut_set_title_exists($form_state['values']['title'])) {
+    form_set_error('title', t('The shortcut set %name already exists. Choose another name.', array('%name' => $form_state['values']['title'])));
+  }
+}
+
+/**
+ * Submit handler for shortcut_set_edit_form().
+ */
+function shortcut_set_edit_form_submit($form, &$form_state) {
+  $shortcut_set = $form_state['values']['shortcut_set'];
+  $shortcut_set->title = $form_state['values']['title'];
+  shortcut_set_save($shortcut_set);
+  drupal_set_message(t('Updated set name to %set-name.', array('%set-name' => $shortcut_set->title)));
+  $form_state['redirect'] = "admin/config/user-interface/shortcut/$shortcut_set->set_name";
+}
+
+/**
  * Form callback: builds the confirmation form for deleting a shortcut set.
  *
  * @param $form
  *   An associative array containing the structure of the form.
  * @param $form_state
  *   An associative array containing the current state of the form.
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param object $shortcut_set
  *   An object representing the shortcut set, as returned from
  *   shortcut_set_load().
  *
@@ -485,12 +610,12 @@ function shortcut_admin_add_link($shortcut_link, &$shortcut_set) {
 function shortcut_set_delete_form($form, &$form_state, $shortcut_set) {
   $form['shortcut_set'] = array(
     '#type' => 'value',
-    '#value' => $shortcut_set->id(),
+    '#value' => $shortcut_set->set_name,
   );
 
   // Find out how many users are directly assigned to this shortcut set, and
   // make a message.
-  $number = db_query('SELECT COUNT(*) FROM {shortcut_set_users} WHERE set_name = :name', array(':name' => $shortcut_set->id()))->fetchField();
+  $number = db_query('SELECT COUNT(*) FROM {shortcut_set_users} WHERE set_name = :name', array(':name' => $shortcut_set->set_name))->fetchField();
   $info = '';
   if ($number) {
     $info .= '<p>' . format_plural($number,
@@ -510,8 +635,8 @@ function shortcut_set_delete_form($form, &$form_state, $shortcut_set) {
 
   return confirm_form(
     $form,
-    t('Are you sure you want to delete the shortcut set %title?', array('%title' => $shortcut_set->label())),
-    'admin/config/user-interface/shortcut/manage/' . $shortcut_set->id(),
+    t('Are you sure you want to delete the shortcut set %title?', array('%title' => $shortcut_set->title)),
+    'admin/config/user-interface/shortcut/' . $shortcut_set->set_name,
     t('This action cannot be undone.'),
     t('Delete'),
     t('Cancel')
@@ -523,10 +648,9 @@ function shortcut_set_delete_form($form, &$form_state, $shortcut_set) {
  */
 function shortcut_set_delete_form_submit($form, &$form_state) {
   $shortcut_set = shortcut_set_load($form_state['values']['shortcut_set']);
-  $label = $shortcut_set->label();
-  $shortcut_set->delete();
+  shortcut_set_delete($shortcut_set);
   $form_state['redirect'] = 'admin/config/user-interface/shortcut';
-  drupal_set_message(t('The shortcut set %title has been deleted.', array('%title' => $label)));
+  drupal_set_message(t('The shortcut set %title has been deleted.', array('%title' => $shortcut_set->title)));
 }
 
 /**
@@ -554,7 +678,7 @@ function shortcut_link_delete($form, &$form_state, $shortcut_link) {
   return confirm_form(
     $form,
     t('Are you sure you want to delete the shortcut %title?', array('%title' => $shortcut_link['link_title'])),
-    'admin/config/user-interface/shortcut/manage/' . $shortcut_link['menu_name'],
+    'admin/config/user-interface/shortcut/' . $shortcut_link['menu_name'],
     t('This action cannot be undone.'),
     t('Delete'),
     t('Cancel')
@@ -567,8 +691,7 @@ function shortcut_link_delete($form, &$form_state, $shortcut_link) {
 function shortcut_link_delete_submit($form, &$form_state) {
   $shortcut_link = $form_state['values']['shortcut_link'];
   menu_link_delete($shortcut_link['mlid']);
-  $set_name = str_replace('shortcut-', '' , $shortcut_link['menu_name']);
-  $form_state['redirect'] = 'admin/config/user-interface/shortcut/manage/' . $set_name;
+  $form_state['redirect'] = 'admin/config/user-interface/shortcut/' . $shortcut_link['menu_name'];
   drupal_set_message(t('The shortcut %title has been deleted.', array('%title' => $shortcut_link['link_title'])));
 }
 
@@ -577,7 +700,7 @@ function shortcut_link_delete_submit($form, &$form_state) {
  *
  * After completion, redirects the user back to where they came from.
  *
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param $shortcut_set
  *   Returned from shortcut_set_load().
  */
 function shortcut_link_add_inline($shortcut_set) {
@@ -589,7 +712,7 @@ function shortcut_link_add_inline($shortcut_set) {
       'link_path' => $_GET['link'],
     );
     shortcut_admin_add_link($link, $shortcut_set);
-    if ($shortcut_set->save() == SAVED_UPDATED) {
+    if (shortcut_set_save($shortcut_set)) {
       drupal_set_message(t('Added a shortcut for %title.', array('%title' => $link['link_title'])));
     }
     else {
diff --git a/core/modules/shortcut/shortcut.install b/core/modules/shortcut/shortcut.install
index 737194b..c4023d7 100644
--- a/core/modules/shortcut/shortcut.install
+++ b/core/modules/shortcut/shortcut.install
@@ -6,20 +6,59 @@
  */
 
 /**
+ * Implements hook_install().
+ */
+function shortcut_install() {
+  $t = get_t();
+  // Create an initial default shortcut set.
+  $shortcut_set = new stdClass();
+  $shortcut_set->title = $t('Default');
+  $shortcut_set->links = array();
+  shortcut_set_save($shortcut_set);
+}
+
+/**
  * Implements hook_uninstall().
  */
 function shortcut_uninstall() {
+  drupal_load('module', 'shortcut');
   // Delete the menu links associated with each shortcut set.
-  // @todo find a way to clean-up associated menu links.
-  /*foreach (entity_load_multiple('shortcut') as $shortcut_set) {
-    menu_delete_links('shortcut-' . $shortcut_set->id());
-  }*/
+  foreach (shortcut_sets() as $shortcut_set) {
+    menu_delete_links($shortcut_set->set_name);
+  }
 }
 
 /**
  * Implements hook_schema().
  */
 function shortcut_schema() {
+  $schema['shortcut_set'] = array(
+    'description' => 'Stores information about sets of shortcuts links.',
+    'fields' => array(
+      'set_name' => array(
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => "Primary Key: The {menu_links}.menu_name under which the set's links are stored.",
+      ),
+      'title' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'The title of the set.',
+      ),
+    ),
+    'primary key' => array('set_name'),
+    'foreign keys' => array(
+      'menu_name' => array(
+        'table' => 'menu_links',
+        'columns' => array('set_name' => 'menu_name'),
+      ),
+    ),
+  );
+
   $schema['shortcut_set_users'] = array(
     'description' => 'Maps users to shortcut sets.',
     'fields' => array(
@@ -56,45 +95,3 @@ function shortcut_schema() {
 
   return $schema;
 }
-
-/**
- * @defgroup updates-7.x-to-8.x Updates from 7.x to 8.x
- * @{
- * Update functions from 7.x to 8.x.
- */
-
-/**
- * Migrate shortcuts into configuration.
- */
-function shortcut_update_8000() {
-  $result = db_query('SELECT * from {shortcut_set}');
-  foreach ($result as $set) {
-    // Save a config object.
-    if ($set->set_name == 'shortcut-set-1') {
-      // Change default shortcut id.
-      $set->set_name = 'default';
-      // Update menu links.
-      $links = menu_load_links('shortcut-set-1');
-      foreach ($links as $link) {
-        $link['menu_name'] = 'shortcut-default';
-        menu_link_save($link);
-      }
-    }
-    config('shortcut.set.' . $set->set_name)
-      ->set('id', $set->set_name)
-      ->set('label', $set->title)
-      ->save();
-  }
-}
-
-/**
- * Drop the {shortcut_set} table.
- */
-function shortcut_update_8001() {
-  db_drop_table('shortcut_set');
-}
-
-/**
- * @} End of "defgroup updates-7.x-to-8.x".
- * The next series of updates should start at 9000.
- */
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index b9c737d..ea58cc4 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -5,7 +5,13 @@
  * Allows users to manage customizable lists of shortcut links.
  */
 
-use Drupal\shortcut\Plugin\Core\Entity\Shortcut;
+/**
+ * The name of the default shortcut set.
+ *
+ * This set will be displayed to any user that does not have another set
+ * assigned, unless overridden by a hook_shortcut_default_set() implementation.
+ */
+const SHORTCUT_DEFAULT_SET_NAME = 'shortcut-set-1';
 
 /**
  * Implements hook_help().
@@ -70,58 +76,59 @@ function shortcut_menu() {
   );
   $items['admin/config/user-interface/shortcut/add-set'] = array(
     'title' => 'Add shortcut set',
-    'page callback' => 'shortcut_set_add',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('shortcut_set_add_form'),
     'access arguments' => array('administer shortcuts'),
     'type' => MENU_LOCAL_ACTION,
     'file' => 'shortcut.admin.inc',
   );
-  $items['admin/config/user-interface/shortcut/manage/%shortcut_set'] = array(
+  $items['admin/config/user-interface/shortcut/%shortcut_set'] = array(
     'title' => 'Edit shortcuts',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_customize', 5),
-    'title callback' => 'entity_page_label',
-    'title arguments' => array(5),
+    'page arguments' => array('shortcut_set_customize', 4),
+    'title callback' => 'shortcut_set_title',
+    'title arguments' => array(4),
     'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(5),
+    'access arguments' => array(4),
     'file' => 'shortcut.admin.inc',
   );
-  $items['admin/config/user-interface/shortcut/manage/%shortcut_set/links'] = array(
+  $items['admin/config/user-interface/shortcut/%shortcut_set/links'] = array(
     'title' => 'List links',
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
-  $items['admin/config/user-interface/shortcut/manage/%shortcut_set/edit'] = array(
+  $items['admin/config/user-interface/shortcut/%shortcut_set/edit'] = array(
     'title' => 'Edit set name',
-    'page callback' => 'entity_get_form',
-    'page arguments' => array(5),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('shortcut_set_edit_form', 4),
     'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(5),
+    'access arguments' => array(4),
     'type' => MENU_LOCAL_TASK,
     'file' => 'shortcut.admin.inc',
     'weight' => 10,
   );
-  $items['admin/config/user-interface/shortcut/manage/%shortcut_set/delete'] = array(
+  $items['admin/config/user-interface/shortcut/%shortcut_set/delete'] = array(
     'title' => 'Delete shortcut set',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_set_delete_form', 5),
+    'page arguments' => array('shortcut_set_delete_form', 4),
     'access callback' => 'shortcut_set_delete_access',
-    'access arguments' => array(5),
+    'access arguments' => array(4),
     'file' => 'shortcut.admin.inc',
   );
-  $items['admin/config/user-interface/shortcut/manage/%shortcut_set/add-link'] = array(
+  $items['admin/config/user-interface/shortcut/%shortcut_set/add-link'] = array(
     'title' => 'Add shortcut',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('shortcut_link_add', 5),
+    'page arguments' => array('shortcut_link_add', 4),
     'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(5),
+    'access arguments' => array(4),
     'type' => MENU_LOCAL_ACTION,
     'file' => 'shortcut.admin.inc',
   );
-  $items['admin/config/user-interface/shortcut/manage/%shortcut_set/add-link-inline'] = array(
+  $items['admin/config/user-interface/shortcut/%shortcut_set/add-link-inline'] = array(
     'title' => 'Add shortcut',
     'page callback' => 'shortcut_link_add_inline',
-    'page arguments' => array(5),
+    'page arguments' => array(4),
     'access callback' => 'shortcut_set_edit_access',
-    'access arguments' => array(5),
+    'access arguments' => array(4),
     'type' => MENU_CALLBACK,
     'file' => 'shortcut.admin.inc',
   );
@@ -179,7 +186,7 @@ function shortcut_theme() {
 /**
  * Access callback for editing a shortcut set.
  *
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param object $shortcut_set
  *   (optional) The shortcut set to be edited. If not set, the current user's
  *   shortcut set will be used.
  *
@@ -202,7 +209,7 @@ function shortcut_set_edit_access($shortcut_set = NULL) {
 /**
  * Access callback for deleting a shortcut set.
  *
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param $shortcut_set
  *   The shortcut set to be deleted.
  *
  * @return
@@ -216,7 +223,7 @@ function shortcut_set_delete_access($shortcut_set) {
   }
 
   // Never let the default shortcut set be deleted.
-  if ($shortcut_set->id() == 'default') {
+  if ($shortcut_set->set_name == SHORTCUT_DEFAULT_SET_NAME) {
     return FALSE;
   }
 
@@ -263,89 +270,125 @@ function shortcut_set_switch_access($account = NULL) {
 function shortcut_link_access($menu_link) {
   // The link must belong to a shortcut set that the current user has access
   // to edit.
-  $set_name = str_replace('shortcut-', '', $menu_link['menu_name']);
-  if ($shortcut_set = shortcut_set_load($set_name)) {
+  if ($shortcut_set = shortcut_set_load($menu_link['menu_name'])) {
     return shortcut_set_edit_access($shortcut_set);
   }
   return FALSE;
 }
 
 /**
- * Implements hook_config_import_create().
+ * Loads the data for a shortcut set.
+ *
+ * @param $set_name
+ *   The name of the shortcut set to load.
+ *
+ * @return object
+ *   If the shortcut set exists, an object containing the following properties:
+ *   - 'set_name': The internal name of the shortcut set.
+ *   - 'title': The title of the shortcut set.
+ *   - 'links': An array of links associated with this shortcut set.
+ *   If the shortcut set does not exist, the function returns FALSE.
  */
-function shortcut_config_import_create($name, $new_config, $old_config) {
-  if (strpos($name, 'shortcut.set.') !== 0) {
+function shortcut_set_load($set_name) {
+  $set = db_select('shortcut_set', 'ss')
+  ->fields('ss')
+  ->condition('set_name', $set_name)
+  ->execute()
+  ->fetchObject();
+  if (!$set) {
     return FALSE;
   }
-
-  $entity = entity_create('shortcut', $new_config->get());
-  $entity->save();
-  return TRUE;
+  $set->links = menu_load_links($set_name);
+  return $set;
 }
 
 /**
- * Implements hook_config_import_change().
+ * Saves a shortcut set.
+ *
+ * @param $shortcut_set
+ *   An object containing the following properties:
+ *   - 'title': The title of the shortcut set.
+ *   - 'set_name': (optional) The internal name of the shortcut set. If
+ *     omitted, a new shortcut set will be created, and the 'set_name' property
+ *     will be added to the passed-in object.
+ *   - 'links': (optional) An array of menu links to save for the shortcut set.
+ *     Each link is an array containing at least the following keys (which will
+ *     be expanded to fill in other default values after the shortcut set is
+ *     saved):
+ *     - 'link_path': The Drupal path or external path that the link points to.
+ *     - 'link_title': The title of the link.
+ *     Any other keys accepted by menu_link_save() may also be provided.
+ *
+ * @return
+ *   A constant which is either SAVED_NEW or SAVED_UPDATED depending on whether
+ *   a new set was created or an existing one was updated.
+ *
+ * @see menu_link_save()
  */
-function shortcut_config_import_change($name, $new_config, $old_config) {
-  if (strpos($name, 'shortcut.set.') !== 0) {
-    return FALSE;
+function shortcut_set_save(&$shortcut_set) {
+  // First save the shortcut set itself.
+  if (isset($shortcut_set->set_name)) {
+    $return = db_merge('shortcut_set')
+      ->key(array('set_name' => $shortcut_set->set_name))
+      ->fields(array('title' => $shortcut_set->title))
+      ->execute();
   }
-
-  list(, , $id) = explode('.', $name);
-  $entity = entity_load('shortcut', $id);
-
-  $entity->original = clone $entity;
-  foreach ($old_config->get() as $property => $value) {
-    $entity->original->$property = $value;
+  else {
+    $shortcut_set->set_name = shortcut_set_get_unique_name();
+    $return = drupal_write_record('shortcut_set', $shortcut_set);
   }
-
-  foreach ($new_config->get() as $property => $value) {
-    $entity->$property = $value;
+  // If links were provided for the set, save them.
+  if (isset($shortcut_set->links)) {
+    foreach ($shortcut_set->links as &$link) {
+      // Do not specifically associate these links with the shortcut module,
+      // since other modules may make them editable via the menu system.
+      // However, we do need to specify the correct menu name.
+      $link['menu_name'] = $shortcut_set->set_name;
+      $link['plid'] = 0;
+      menu_link_save($link);
+    }
+    // Make sure that we have a return value, since if the links were updated
+    // but the shortcut set was not, the call to drupal_write_record() above
+    // would not return an indication that anything had changed.
+    if (empty($return)) {
+      $return = SAVED_UPDATED;
+    }
   }
-
-  $entity->save();
-  return TRUE;
+  return $return;
 }
 
 /**
- * Implements hook_config_import_delete().
+ * Deletes a shortcut set.
+ *
+ * Note that the default set cannot be deleted.
+ *
+ * @param $shortcut_set
+ *   An object representing the shortcut set to delete.
+ *
+ * @return
+ *   TRUE if the set was deleted, FALSE otherwise.
  */
-function shortcut_config_import_delete($name, $new_config, $old_config) {
-  if (strpos($name, 'shortcut.set.') !== 0) {
+function shortcut_set_delete($shortcut_set) {
+  // Don't allow deletion of the system default shortcut set.
+  if ($shortcut_set->set_name == SHORTCUT_DEFAULT_SET_NAME) {
     return FALSE;
   }
 
-  list(, , $id) = explode('.', $name);
-  entity_delete_multiple('shortcut', array($id));
-  return TRUE;
-}
+  // First, delete any user assignments for this set, so that each of these
+  // users will go back to using whatever default set applies.
+  db_delete('shortcut_set_users')
+    ->condition('set_name', $shortcut_set->set_name)
+    ->execute();
 
-/**
- * Loads the data for a shortcut set.
- *
- * @param $id
- *   The machine-name of the shortcut set to load.
- *
- * @return object
- *   If the shortcut set exists, an object containing the following properties:
- *   - 'id': The internal name of the shortcut set.
- *   - 'label': The title of the shortcut set.
- *   - 'links': An array of links associated with this shortcut set.
- *   If the shortcut set does not exist, the function returns FALSE.
- */
-function shortcut_set_load($id) {
-  return entity_load('shortcut', $id);
-}
+  // Next, delete the menu links for this set.
+  menu_delete_links($shortcut_set->set_name);
 
-/**
- * Implements hook_shortcut_load().
- *
- * Loads menu links attached to each of shortcuts.
- */
-function shortcut_shortcut_load($entities) {
-  foreach ($entities as $id => $entity) {
-    $entity->set('links', menu_load_links('shortcut-' . $id));
-  }
+  // Finally, delete the set itself.
+  $deleted = db_delete('shortcut_set')
+    ->condition('set_name', $shortcut_set->set_name)
+    ->execute();
+
+  return (bool) $deleted;
 }
 
 /**
@@ -370,7 +413,7 @@ function shortcut_set_reset_link_weights(&$shortcut_set) {
 /**
  * Assigns a user to a particular shortcut set.
  *
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param $shortcut_set
  *   An object representing the shortcut set.
  * @param $account
  *   A user account that will be assigned to use the set.
@@ -378,7 +421,7 @@ function shortcut_set_reset_link_weights(&$shortcut_set) {
 function shortcut_set_assign_user($shortcut_set, $account) {
   db_merge('shortcut_set_users')
     ->key(array('uid' => $account->uid))
-    ->fields(array('set_name' => $shortcut_set->id()))
+    ->fields(array('set_name' => $shortcut_set->set_name))
     ->execute();
   drupal_static_reset('shortcut_current_displayed_set');
 }
@@ -427,9 +470,10 @@ function shortcut_current_displayed_set($account = NULL) {
   }
   // If none was found, try to find a shortcut set that is explicitly assigned
   // to this user.
-  $query = db_select('shortcut_set_users', 'ssu');
-  $query->fields('ssu', array('set_name'));
-  $query->condition('ssu.uid', $account->uid);
+  $query = db_select('shortcut_set', 's');
+  $query->addField('s', 'set_name');
+  $query->join('shortcut_set_users', 'u', 's.set_name = u.set_name');
+  $query->condition('u.uid', $account->uid);
   $shortcut_set_name = $query->execute()->fetchField();
   if ($shortcut_set_name) {
     $shortcut_set = shortcut_set_load($shortcut_set_name);
@@ -465,7 +509,7 @@ function shortcut_default_set($account = NULL) {
   // precedence. If no module returns a valid set, fall back on the site-wide
   // default, which is the lowest-numbered shortcut set.
   $suggestions = array_reverse(module_invoke_all('shortcut_default_set', $account));
-  $suggestions[] = 'default';
+  $suggestions[] = SHORTCUT_DEFAULT_SET_NAME;
   foreach ($suggestions as $name) {
     if ($shortcut_set = shortcut_set_load($name)) {
       break;
@@ -476,6 +520,54 @@ function shortcut_default_set($account = NULL) {
 }
 
 /**
+ * Returns a unique, machine-readable shortcut set name.
+ */
+function shortcut_set_get_unique_name() {
+  // Shortcut sets are numbered sequentially, so we keep trying until we find
+  // one that is available. For better performance, we start with a number
+  // equal to one more than the current number of shortcut sets, so that if
+  // no shortcut sets have been deleted from the database, this will
+  // automatically give us the correct one.
+  $number = db_query("SELECT COUNT(*) FROM {shortcut_set}")->fetchField() + 1;
+  do {
+    $name = shortcut_set_name($number);
+    $number++;
+  } while ($shortcut_set = shortcut_set_load($name));
+  return $name;
+}
+
+/**
+ * Returns the name of a shortcut set, based on a provided number.
+ *
+ * All shortcut sets have names like "shortcut-set-N" so that they can be
+ * matched with a properly-namespaced entry in the {menu_links} table.
+ *
+ * @param $number
+ *   A number representing the shortcut set whose name should be retrieved.
+ *
+ * @return
+ *   A string representing the expected shortcut name.
+ */
+function shortcut_set_name($number) {
+  return "shortcut-set-$number";
+}
+
+/**
+ * Returns an array of all shortcut sets, keyed by the set name.
+ *
+ * @return
+ *   An array of shortcut sets. Note that only the basic shortcut set
+ *   properties (name and title) are returned by this function, not the list
+ *   of menu links that belong to the set.
+ */
+function shortcut_sets() {
+  return db_select('shortcut_set', 'ss')
+  ->fields('ss')
+  ->execute()
+  ->fetchAllAssoc('set_name');
+}
+
+/**
  * Check to see if a shortcut set with the given title already exists.
  *
  * @param $title
@@ -485,13 +577,7 @@ function shortcut_default_set($account = NULL) {
  *   TRUE if a shortcut set with that title exists; FALSE otherwise.
  */
 function shortcut_set_title_exists($title) {
-  $sets = entity_load_multiple('shortcut');
-  foreach ($sets as $id => $set) {
-    if ($set->label == $title) {
-      return TRUE;
-    }
-  }
-  return FALSE;
+  return (bool) db_query_range('SELECT 1 FROM {shortcut_set} WHERE title = :title', 0, 1, array(':title' => $title))->fetchField();
 }
 
 /**
@@ -499,7 +585,6 @@ function shortcut_set_title_exists($title) {
  *
  * @param $path
  *   The path to the link.
- *
  * @return
  *   TRUE if the shortcut link is valid, FALSE otherwise. Valid links are ones
  *   that correspond to actual paths on the site.
@@ -519,7 +604,7 @@ function shortcut_valid_link($path) {
 /**
  * Returns an array of shortcut links, suitable for rendering.
  *
- * @param $shortcut_set Drupal\shortcut\Plugin\Core\Entity\Shortcut
+ * @param $shortcut_set
  *   (optional) An object representing the set whose links will be displayed.
  *   If not provided, the user's current set will be displayed.
  * @return
@@ -531,7 +616,7 @@ function shortcut_renderable_links($shortcut_set = NULL) {
   if (!isset($shortcut_set)) {
     $shortcut_set = shortcut_current_displayed_set();
   }
-  return menu_tree('shortcut-' . $shortcut_set->id());
+  return menu_tree($shortcut_set->set_name);
 }
 
 /**
@@ -576,12 +661,12 @@ function shortcut_preprocess_page(&$variables) {
 
     if ($link_mode == "add") {
       $query['token'] = drupal_get_token('shortcut-add-link');
-      $link_text = shortcut_set_switch_access() ? t('Add to %shortcut_set shortcuts', array('%shortcut_set' => $shortcut_set->label())) : t('Add to shortcuts');
-      $link_path = 'admin/config/user-interface/shortcut/manage/' . $shortcut_set->id() . '/add-link-inline';
+      $link_text = shortcut_set_switch_access() ? t('Add to %shortcut_set shortcuts', array('%shortcut_set' => $shortcut_set->title)) : t('Add to shortcuts');
+      $link_path = 'admin/config/user-interface/shortcut/' . $shortcut_set->set_name . '/add-link-inline';
     }
     else {
       $query['mlid'] = $mlid;
-      $link_text = shortcut_set_switch_access() ? t('Remove from %shortcut_set shortcuts', array('%shortcut_set' => $shortcut_set->label())) : t('Remove from shortcuts');
+      $link_text = shortcut_set_switch_access() ? t('Remove from %shortcut_set shortcuts', array('%shortcut_set' => $shortcut_set->title)) : t('Remove from shortcuts');
       $link_path = 'admin/config/user-interface/shortcut/link/' . $mlid . '/delete';
     }
 
@@ -621,7 +706,7 @@ function shortcut_toolbar() {
     $configure_link = array(
       '#type' => 'link',
       '#title' => t('Edit shortcuts'),
-      '#href' => 'admin/config/user-interface/shortcut/' . $shortcut_set->id(),
+      '#href' => 'admin/config/user-interface/shortcut/' . $shortcut_set->set_name,
       '#options' => array('attributes' => array('class' => array('edit-shortcuts'))),
     );
   }
@@ -649,6 +734,19 @@ function shortcut_toolbar() {
 }
 
 /**
+ * Returns the title of a shortcut set.
+ *
+ * Title callback for the editing pages for shortcut sets.
+ *
+ * @param $shortcut_set
+ *   An object representing the shortcut set, as returned by
+ *   shortcut_set_load().
+ */
+function shortcut_set_title($shortcut_set) {
+  return $shortcut_set->title;
+}
+
+/**
  * Implements hook_library_info().
  */
 function shortcut_library_info() {
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
index b17e371..b09df75 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/DrupalUnitTestBase.php
@@ -50,6 +50,18 @@
    */
   public static $modules = array();
 
+  /**
+   * Fixed module list being used by this test.
+   *
+   * @var array
+   *   An associative array containing the required data for the $fixed_list
+   *   argument of module_list().
+   *
+   * @see UnitTestBase::setUp()
+   * @see UnitTestBase::enableModules()
+   */
+  private $moduleList = array();
+
   private $moduleFiles;
   private $themeFiles;
   private $themeData;
@@ -92,6 +104,8 @@ protected function setUp() {
     $this->kernel = new DrupalKernel('testing', TRUE, drupal_classloader(), FALSE);
     $this->kernel->boot();
 
+    // Ensure that the module list is initially empty.
+    $this->moduleList = array();
     // Collect and set a fixed module list.
     $class = get_class($this);
     $modules = array();
@@ -118,15 +132,11 @@ public function containerBuild($container) {
     global $conf;
     // Keep the container object around for tests.
     $this->container = $container;
-
     $container->register('lock', 'Drupal\Core\Lock\NullLockBackend');
-
     $conf['cache_classes'] = array('cache' => 'Drupal\Core\Cache\MemoryBackend');
-
     $container
       ->register('config.storage', 'Drupal\Core\Config\FileStorage')
       ->addArgument($this->configDirectories[CONFIG_ACTIVE_DIRECTORY]);
-
     $conf['keyvalue_default'] = 'keyvalue.memory';
     $container->set('keyvalue.memory', $this->keyValueFactory);
     if (!$container->has('keyvalue')) {
@@ -162,7 +172,7 @@ protected function installSchema($module, $table) {
     // file depends on many other factors. To prevent differences in test
     // behavior and non-reproducible test failures, we only allow the schema of
     // explicitly loaded/enabled modules to be installed.
-    if (!$this->container->get('module_handler')->moduleExists($module)) {
+    if (!module_exists($module)) {
       throw new \RuntimeException(format_string("'@module' module is not enabled.", array(
         '@module' => $module,
       )));
@@ -197,30 +207,27 @@ protected function installSchema($module, $table) {
    *   Defaults to TRUE. If FALSE, the new modules are only added to the fixed
    *   module list and loaded.
    *
-   * @todo Remove $install argument and replace all callers that do not pass
-   *   FALSE with module_enable().
+   * @todo Remove this method as soon as there is an Extensions service
+   *   implementation that is able to manage a fixed module list.
    */
   protected function enableModules(array $modules, $install = TRUE) {
-    if ($install) {
-      module_enable($modules, FALSE);
-    }
-    // Explicitly set the list of modules in the extension handler.
-    else {
-      $module_handler = $this->container->get('module_handler');
-      $module_filenames = $module_handler->getModuleList();
-      foreach ($modules as $module) {
-        $module_filenames[$module] = drupal_get_filename('module', $module);
+    // Set the modules in the fixed module_list().
+    $new_enabled = array();
+    foreach ($modules as $module) {
+      $this->moduleList[$module]['filename'] = drupal_get_filename('module', $module);
+      $new_enabled[$module] = dirname($this->moduleList[$module]['filename']);
+      module_list(NULL, $this->moduleList);
+
+      // Call module_enable() to enable (install) the new module.
+      if ($install) {
+        module_enable(array($module), FALSE);
       }
-      $module_handler->setModuleList($module_filenames);
-      $module_handler->resetImplementations();
-      $this->kernel->updateModules($module_filenames, $module_filenames);
     }
-    // Regardless of loaded or installed, ensure isLoaded() is TRUE in order to
-    // make theme() work.
-    // Note that the kernel has rebuilt the container; this $module_handler is
-    // no longer the $module_handler instance from above.
-    $module_handler = $this->container->get('module_handler');
-    $module_handler->reload();
+    // Otherwise, only ensure that the new modules are loaded.
+    if (!$install) {
+      module_load_all(FALSE, TRUE);
+      module_implements_reset();
+    }
   }
 
 }
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php
index 79e6d9c..e8068fa 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/TestBase.php
@@ -921,24 +921,26 @@ protected function prepareConfigDirectories() {
   /**
    * Rebuild drupal_container().
    *
-   * Use this to build a new kernel and service container. For example, when the
-   * list of enabled modules is changed via the internal browser, in which case
-   * the test process still contains an old kernel and service container with an
-   * old module list.
-   *
    * @todo Fix http://drupal.org/node/1708692 so that module enable/disable
    *   changes are immediately reflected in drupal_container(). Until then,
    *   tests can invoke this workaround when requiring services from newly
    *   enabled modules to be immediately available in the same request.
-   *
-   * @see TestBase::prepareEnvironment()
-   * @see TestBase::tearDown()
    */
   protected function rebuildContainer() {
+    // Create a new DrupalKernel for testing purposes, now that all required
+    // modules have been enabled. This also stores a new dependency injection
+    // container in drupal_container(). Drupal\simpletest\TestBase::tearDown()
+    // restores the original container.
+    // @see Drupal\Core\DrupalKernel::initializeContainer()
     $this->kernel = new DrupalKernel('testing', FALSE, drupal_classloader(), FALSE);
+    // Booting the kernel is necessary to initialize the new DIC. While
+    // normally the kernel gets booted on demand in
+    // Symfony\Component\HttpKernel\handle(), this kernel needs manual booting
+    // as it is not used to handle a request.
     $this->kernel->boot();
-    // DrupalKernel replaces the container in drupal_container() with a
-    // different object, so we need to replace the instance on this test class.
+    // The DrupalKernel does not update the container in drupal_container(), but
+    // replaces it with a new object. We therefore need to replace the minimal
+    // boostrap container that has been set up by TestBase::prepareEnvironment().
     $this->container = drupal_container();
   }
 
@@ -1031,6 +1033,10 @@ protected function tearDown() {
       drupal_valid_test_ua($this->originalPrefix);
     }
 
+    // Reset module list and module load status.
+    module_list_reset();
+    module_load_all(FALSE, TRUE);
+
     // Restore original shutdown callbacks.
     $callbacks = &drupal_register_shutdown_function();
     $callbacks = $this->originalShutdownCallbacks;
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
index 242338e..5813ffd 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
@@ -39,7 +39,7 @@ function testSetUp() {
     // Verify that specified $modules have been loaded.
     $this->assertTrue(function_exists('entity_test_permission'), "$module.module was loaded.");
     // Verify that there is a fixed module list.
-    $this->assertIdentical(array_keys(drupal_container()->get('module_handler')->getModuleList()), array($module));
+    $this->assertIdentical(module_list(), array($module => $module));
     $this->assertIdentical(module_implements('permission'), array($module));
 
     // Verify that no modules have been installed.
@@ -54,9 +54,9 @@ function testEnableModulesLoad() {
 
     // Verify that the module does not exist yet.
     $this->assertFalse(module_exists($module), "$module module not found.");
-    $list = array_keys(drupal_container()->get('module_handler')->getModuleList());
-    $this->assertFalse(in_array($module, $list), "$module module not found in the extension handler's module list.");
-    $list = module_implements('permission');
+    $list = module_list();
+    $this->assertFalse(in_array($module, $list), "$module module in module_list() not found.");
+    $list = module_list('permission');
     $this->assertFalse(in_array($module, $list), "{$module}_permission() in module_implements() not found.");
 
     // Enable the module.
@@ -64,9 +64,9 @@ function testEnableModulesLoad() {
 
     // Verify that the module exists.
     $this->assertTrue(module_exists($module), "$module module found.");
-    $list = array_keys(drupal_container()->get('module_handler')->getModuleList());
-    $this->assertTrue(in_array($module, $list), "$module module found in the extension handler's module list.");
-    $list = module_implements('permission');
+    $list = module_list();
+    $this->assertTrue(in_array($module, $list), "$module module in module_list() found.");
+    $list = module_list('permission');
     $this->assertTrue(in_array($module, $list), "{$module}_permission() in module_implements() found.");
   }
 
@@ -74,8 +74,8 @@ function testEnableModulesLoad() {
    * Tests expected installation behavior of enableModules().
    */
   function testEnableModulesInstall() {
-    $module = 'node';
-    $table = 'node';
+    $module = 'filter';
+    $table = 'filter';
 
     // @todo Remove after configuration system conversion.
     $this->enableModules(array('system'), FALSE);
@@ -83,9 +83,9 @@ function testEnableModulesInstall() {
 
     // Verify that the module does not exist yet.
     $this->assertFalse(module_exists($module), "$module module not found.");
-    $list = array_keys(drupal_container()->get('module_handler')->getModuleList());
-    $this->assertFalse(in_array($module, $list), "$module module not found in the extension handler's module list.");
-    $list = module_implements('permission');
+    $list = module_list();
+    $this->assertFalse(in_array($module, $list), "$module module in module_list() not found.");
+    $list = module_list('permission');
     $this->assertFalse(in_array($module, $list), "{$module}_permission() in module_implements() not found.");
 
     $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
@@ -97,9 +97,9 @@ function testEnableModulesInstall() {
 
     // Verify that the enabled module exists.
     $this->assertTrue(module_exists($module), "$module module found.");
-    $list = array_keys(drupal_container()->get('module_handler')->getModuleList());
-    $this->assertTrue(in_array($module, $list), "$module module found in the extension handler's module list.");
-    $list = module_implements('permission');
+    $list = module_list();
+    $this->assertTrue(in_array($module, $list), "$module module in module_list() found.");
+    $list = module_list('permission');
     $this->assertTrue(in_array($module, $list), "{$module}_permission() in module_implements() found.");
 
     $this->assertTrue(db_table_exists($table), "'$table' database table found.");
@@ -180,68 +180,4 @@ function testInstallSchema() {
     $this->assertTrue($schema, "'$table' table schema found.");
   }
 
-  /**
-   * Tests that the fixed module list is retained after enabling and installing modules.
-   */
-  function testEnableModulesFixedList() {
-    // entity_test is loaded via $modules; its entity type should exist.
-    $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE);
-    $this->assertTrue(TRUE == entity_get_info('entity_test'));
-
-    // Load some additional modules; entity_test should still exist.
-    $this->enableModules(array('entity', 'field', 'field_sql_storage', 'text', 'entity_test'), FALSE);
-    $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE);
-    $this->assertTrue(TRUE == entity_get_info('entity_test'));
-
-    // Install some other modules; entity_test should still exist.
-    module_enable(array('field', 'field_sql_storage', 'field_test'), FALSE);
-    $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE);
-    $this->assertTrue(TRUE == entity_get_info('entity_test'));
-
-    // Disable one of those modules; entity_test should still exist.
-    module_disable(array('field_test'));
-    $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE);
-    $this->assertTrue(TRUE == entity_get_info('entity_test'));
-
-    // Set the weight of a module; entity_test should still exist.
-    module_set_weight('entity', -1);
-    $this->assertEqual($this->container->get('module_handler')->moduleExists('entity_test'), TRUE);
-    $this->assertTrue(TRUE == entity_get_info('entity_test'));
-
-    // Reactivate the disabled module without enabling it.
-    $this->enableModules(array('field_test'), FALSE);
-
-    // Create a field and an instance.
-    $display = entity_create('entity_display', array(
-      'targetEntityType' => 'entity_test',
-      'bundle' => 'entity_test',
-      'viewMode' => 'default',
-    ));
-    $field = array(
-      'field_name' => 'test_field',
-      'type' => 'test_field'
-    );
-    field_create_field($field);
-    $instance = array(
-      'field_name' => $field['field_name'],
-      'entity_type' => 'entity_test',
-      'bundle' => 'entity_test',
-    );
-    field_create_instance($instance);
-  }
-
-  /**
-   * Tests that theme() works right after loading a module.
-   */
-  function testEnableModulesTheme() {
-    $element = array(
-      '#type' => 'container',
-      '#markup' => 'Foo',
-      '#attributes' => array(),
-    );
-    $this->enableModules(array('system'), FALSE);
-    // theme() throws an exception if modules are not loaded yet.
-    drupal_render($element);
-  }
-
 }
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/UserHelpersTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/UserHelpersTest.php
deleted file mode 100644
index 269e009..0000000
--- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/UserHelpersTest.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\simpletest\Tests\UserLoginTest.
- */
-
-namespace Drupal\simpletest\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests User related helper methods of WebTestBase.
- */
-class UserHelpersTest extends WebTestBase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User helper methods',
-      'description' => 'Tests User related helper methods of WebTestBase.',
-      'group' => 'SimpleTest',
-    );
-  }
-
-  /**
-   * Tests WebTestBase::drupalUserIsLoggedIn().
-   */
-  function testDrupalUserIsLoggedIn() {
-    $first_user = $this->drupalCreateUser();
-    $second_user = $this->drupalCreateUser();
-
-    // After logging in, the first user should be logged in, the second not.
-    $this->drupalLogin($first_user);
-    $this->assertTrue($this->drupalUserIsLoggedIn($first_user));
-    $this->assertFalse($this->drupalUserIsLoggedIn($second_user));
-
-    // Verify that logged in state is retained across pages.
-    $this->drupalGet('');
-    $this->assertTrue($this->drupalUserIsLoggedIn($first_user));
-    $this->assertFalse($this->drupalUserIsLoggedIn($second_user));
-
-    // After logging out, both users should be logged out.
-    $this->drupalLogout();
-    $this->assertFalse($this->drupalUserIsLoggedIn($first_user));
-    $this->assertFalse($this->drupalUserIsLoggedIn($second_user));
-
-    // After logging back in, the second user should still be logged out.
-    $this->drupalLogin($first_user);
-    $this->assertTrue($this->drupalUserIsLoggedIn($first_user));
-    $this->assertFalse($this->drupalUserIsLoggedIn($second_user));
-
-    // After logging in the second user, the first one should be logged out.
-    $this->drupalLogin($second_user);
-    $this->assertTrue($this->drupalUserIsLoggedIn($second_user));
-    $this->assertFalse($this->drupalUserIsLoggedIn($first_user));
-
-    // After logging out, both should be logged out.
-    $this->drupalLogout();
-    $this->assertFalse($this->drupalUserIsLoggedIn($first_user));
-    $this->assertFalse($this->drupalUserIsLoggedIn($second_user));
-  }
-
-}
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php
index d7bd225..648aa42 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/UnitTestBase.php
@@ -56,6 +56,9 @@ protected function setUp() {
     $conf = array();
     drupal_static_reset();
 
+    // Enforce an empty module list.
+    module_list(NULL, array());
+
     $conf['file_public_path'] = $this->public_files_directory;
 
     // Change the database prefix.
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
index 1bf8949..85aba85 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
@@ -176,7 +176,7 @@ function __construct($test_id = NULL) {
    */
   function drupalGetNodeByTitle($title, $reset = FALSE) {
     if ($reset) {
-      drupal_container()->get('plugin.manager.entity')->getStorageController('node')->resetCache();
+      entity_get_controller('node')->resetCache();
     }
     $nodes = entity_load_multiple_by_properties('node', array('title' => $title));
     // Load the first node returned from the database.
@@ -347,43 +347,69 @@ protected function drupalCreateContentType($settings = array()) {
    *
    * @param string $plugin_id
    *   The plugin ID of the block type for this block instance.
-   * @param array $values
-   *   (optional) An associative array of values for the block entity.
-   *   Override the defaults by specifying the key and value in the array, for
+   * @param array $settings
+   *   (optional) An associative array of settings for the block instance.
+   *   Override the defaults by specifying the key and value  in the array, for
    *   example:
    *   @code
    *     $this->drupalPlaceBlock('system_powered_by_block', array(
-   *       'label' => t('Hello, world!'),
+   *       'title' => t('Hello, world!'),
    *     ));
    *   @endcode
    *   The following defaults are provided:
-   *   - label: Random string.
+   *   - title: Random string.
    *   - machine_name: Random string.
    *   - region: 'sidebar_first'.
-   *   - theme: The default theme.
-   * @param array $settings
-   *   (optional) An associative array of plugin-specific settings.
+   * @param string $theme
+   *   (optional) The theme for which to add a block instance. Defaults to the
+   *   default theme.
    *
-   * @return \Drupal\block\Plugin\Core\Entity\Block
-   *   The block entity.
+   * @return array|false
+   *   The block instance configuration from BlockBase::getConfig(), or FALSE
+   *   on failure.
    *
    * @todo
+   *   Create the block programmatically once block instances are configuration
+   *   entities.
+   * @todo
    *   Add support for creating custom block instances.
    */
-  protected function drupalPlaceBlock($plugin_id, array $values = array(), array $settings = array()) {
-    $values += array(
-      'plugin' => $plugin_id,
-      'label' => $this->randomName(8),
-      'region' => 'sidebar_first',
-      'theme' => variable_get('theme_default', 'stark'),
+  protected function drupalPlaceBlock($plugin_id, array $settings = array(), $theme = NULL) {
+    // Confirm that the active user has permission to add the block instance.
+    // @todo Remove this check once it is possible to do this programmatically.
+    if (!empty($this->loggedInUser) && !user_access('administer blocks', $this->loggedInUser)) {
+      $this->fail('The logged in user does not have permission to administer blocks.');
+      return FALSE;
+    }
+
+    // If no theme was specified, use the default theme.
+    $theme = $theme ?: variable_get('theme_default', 'stark');
+
+    // Populate some default block settings.
+    $settings += array(
+      'title' => $this->randomName(8),
       'machine_name' => strtolower($this->randomName(8)),
-      'settings' => $settings,
+      'region' => 'sidebar_first',
     );
-    // Build the ID out of the theme and machine_name.
-    $values['id'] = $values['theme'] . '.' . $values['machine_name'];
-    $block = entity_create('block', $values);
-    $block->save();
-    return $block;
+
+    // Submit the block instance configuration.
+    $this->drupalPost('admin/structure/block/manage/' . $plugin_id . '/' . $theme, $settings, t('Save block'));
+    $this->assertText(
+      t('The block configuration has been saved.'),
+      format_string(
+        '%plugin block instance added for %theme',
+        array(
+          '%plugin' => $plugin_id,
+          '%theme' => $theme,
+        )
+      )
+    );
+
+    // Return the created block instance.
+    $instance_id = "plugin.core.block.$theme." . $settings['machine_name'];
+    $manager = $this->container->get('plugin.manager.block');
+    $block = $manager->getInstance(array('config' => $instance_id));
+    return $block->getConfig();
   }
 
   /**
@@ -509,14 +535,11 @@ protected function drupalCreateUser(array $permissions = array()) {
    *   (optional) The role ID (machine name). Defaults to a random name.
    * @param string $name
    *   (optional) The label for the role. Defaults to a random string.
-   * @param integer $weight
-   *   (optional) The weight for the role. Defaults NULL so that entity_create()
-   *   sets the weight to maximum + 1.
    *
    * @return string
    *   Role ID of newly created role, or FALSE if role creation failed.
    */
-  protected function drupalCreateRole(array $permissions, $rid = NULL, $name = NULL, $weight = NULL) {
+  protected function drupalCreateRole(array $permissions, $rid = NULL, $name = NULL) {
     // Generate a random, lowercase machine name if none was passed.
     if (!isset($rid)) {
       $rid = strtolower($this->randomName(8));
@@ -532,26 +555,22 @@ protected function drupalCreateRole(array $permissions, $rid = NULL, $name = NUL
     }
 
     // Create new role.
-    $role = entity_create('user_role', array(
-      'id' => $rid,
-      'label' => $name,
-    ));
-    if (!is_null($weight)) {
-      $role->set('weight', $weight);
-    }
-    $result = $role->save();
+    $role = new stdClass();
+    $role->rid = $rid;
+    $role->name = $name;
+    $result = user_role_save($role);
 
     $this->assertIdentical($result, SAVED_NEW, t('Created role ID @rid with name @name.', array(
-      '@name' => var_export($role->label(), TRUE),
-      '@rid' => var_export($role->id(), TRUE),
+      '@name' => var_export($role->name, TRUE),
+      '@rid' => var_export($role->rid, TRUE),
     )), t('Role'));
 
     if ($result === SAVED_NEW) {
       // Grant the specified permissions to the role, if any.
       if (!empty($permissions)) {
-        user_role_grant_permissions($role->id(), $permissions);
+        user_role_grant_permissions($role->rid, $permissions);
 
-        $assigned_permissions = db_query('SELECT permission FROM {role_permission} WHERE rid = :rid', array(':rid' => $role->id()))->fetchCol();
+        $assigned_permissions = db_query('SELECT permission FROM {role_permission} WHERE rid = :rid', array(':rid' => $role->rid))->fetchCol();
         $missing_permissions = array_diff($permissions, $assigned_permissions);
         if (!$missing_permissions) {
           $this->pass(t('Created permissions: @perms', array('@perms' => implode(', ', $permissions))), t('Role'));
@@ -560,7 +579,7 @@ protected function drupalCreateRole(array $permissions, $rid = NULL, $name = NUL
           $this->fail(t('Failed to create permissions: @perms', array('@perms' => implode(', ', $missing_permissions))), t('Role'));
         }
       }
-      return $role->id();
+      return $role->rid;
     }
     else {
       return FALSE;
@@ -632,31 +651,16 @@ protected function drupalLogin($user) {
     );
     $this->drupalPost('user', $edit, t('Log in'));
 
-    // @see WebTestBase::drupalUserIsLoggedIn()
-    if (isset($this->session_id)) {
-      $user->session_id = $this->session_id;
-    }
-    $pass = $this->assert($this->drupalUserIsLoggedIn($user), format_string('User %name successfully logged in.', array('%name' => $user->name)), 'User login');
+    // If a "log out" link appears on the page, it is almost certainly because
+    // the login was successful.
+    $pass = $this->assertLink(t('Log out'), 0, t('User %name successfully logged in.', array('%name' => $user->name)), t('User login'));
+
     if ($pass) {
       $this->loggedInUser = $user;
     }
   }
 
   /**
-   * Returns whether a given user account is logged in.
-   *
-   * @param \Drupal\user\User $account
-   *   The user account object to check.
-   */
-  protected function drupalUserIsLoggedIn($account) {
-    if (!isset($account->session_id)) {
-      return FALSE;
-    }
-    // @see _drupal_session_read()
-    return (bool) db_query("SELECT sid FROM {users} u INNER JOIN {sessions} s ON u.uid = s.uid WHERE s.sid = :sid", array(':sid' => $account->session_id))->fetchField();
-  }
-
-  /**
    * Generate a token for the currently logged in user.
    */
   protected function drupalGetToken($value = '') {
@@ -677,8 +681,6 @@ protected function drupalLogout() {
     $pass = $pass && $this->assertField('pass', t('Password field found.'), t('Logout'));
 
     if ($pass) {
-      // @see WebTestBase::drupalUserIsLoggedIn()
-      unset($this->loggedInUser->session_id);
       $this->loggedInUser = FALSE;
     }
   }
@@ -1428,7 +1430,7 @@ protected function drupalPostAJAX($path, $edit, $triggering_element, $ajax_path
       foreach ($return as $command) {
         switch ($command['command']) {
           case 'settings':
-            $drupal_settings = drupal_merge_js_settings(array($drupal_settings, $command['settings']));
+            $drupal_settings = NestedArray::mergeDeep($drupal_settings, $command['settings']);
             break;
 
           case 'insert':
diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module
index d7adb65..3996210 100644
--- a/core/modules/simpletest/simpletest.module
+++ b/core/modules/simpletest/simpletest.module
@@ -323,12 +323,10 @@ function simpletest_test_get_all() {
     else {
       // Select all PSR-0 classes in the Tests namespace of all modules.
       $classes = array();
-      $module_data = system_rebuild_module_data();
-      $all_data = $module_data + system_rebuild_theme_data();
-      $all_data += drupal_system_listing('/\.profile$/', 'profiles', 'name');
+      $all_data = array('system' => (object)array('uri' => 'core/modules/system/system.module'));
       foreach ($all_data as $name => $data) {
         // Build directory in which the test files would reside.
-        $tests_dir = DRUPAL_ROOT . '/' . dirname($data->uri) . '/lib/Drupal/' . $name . '/Tests';
+        $tests_dir = DRUPAL_ROOT . '/' . dirname($data->uri) . '/lib/Drupal/' . $name . '/Tests/Upgrade';
         // Scan it for test files if it exists.
         if (is_dir($tests_dir)) {
           $files = file_scan_directory($tests_dir, '/.*\.php/');
diff --git a/core/modules/simpletest/simpletest.pages.inc b/core/modules/simpletest/simpletest.pages.inc
index f1d55d8..d5e8c5f 100644
--- a/core/modules/simpletest/simpletest.pages.inc
+++ b/core/modules/simpletest/simpletest.pages.inc
@@ -41,7 +41,9 @@ function simpletest_test_form($form) {
     '#value' => t('Run tests'),
   );
   $form['clean'] = array(
-    '#type' => 'fieldset',
+    '#type' => 'details',
+    '#collapsible' => FALSE,
+    '#collapsed' => FALSE,
     '#title' => t('Clean test environment'),
     '#description' => t('Remove tables with the prefix "simpletest" and temporary directories that are left over from tests that crashed. This is intended for developers when creating tests.'),
   );
@@ -219,7 +221,7 @@ function simpletest_result_form($form, &$form_state, $test_id) {
 
   // Summary result widget.
   $form['result'] = array(
-    '#type' => 'fieldset',
+    '#type' => 'details',
     '#title' => t('Results'),
   );
   $form['result']['summary'] = $summary = array(
@@ -287,7 +289,7 @@ function simpletest_result_form($form, &$form_state, $test_id) {
   // Actions.
   $form['#action'] = url('admin/config/development/testing/results/re-run');
   $form['action'] = array(
-    '#type' => 'fieldset',
+    '#type' => 'details',
     '#title' => t('Actions'),
     '#attributes' => array('class' => array('container-inline')),
     '#weight' => -11,
diff --git a/core/modules/statistics/lib/Drupal/statistics/Plugin/block/block/StatisticsPopularBlock.php b/core/modules/statistics/lib/Drupal/statistics/Plugin/block/block/StatisticsPopularBlock.php
index a10f45c..8c9fdf6 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Plugin/block/block/StatisticsPopularBlock.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Plugin/block/block/StatisticsPopularBlock.php
@@ -44,9 +44,9 @@ class StatisticsPopularBlock extends BlockBase {
   protected $last_list;
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'top_day_num' => 0,
       'top_all_num' => 0,
@@ -116,9 +116,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $content = array();
 
     if ($this->day_list) {
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
index dfae39f..528611e 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsAdminTest.php
@@ -22,7 +22,7 @@ class StatisticsAdminTest extends WebTestBase {
   public static $modules = array('node', 'statistics');
 
   /**
-   * A user that has permission to administer statistics.
+   * A user that has permission to administer and access statistics.
    *
    * @var object|FALSE
    *
@@ -31,7 +31,7 @@ class StatisticsAdminTest extends WebTestBase {
   protected $privileged_user;
 
   /**
-   * A page node for which to check content statistics.
+   * A page node for which to check access statistics.
    *
    * @var object
    */
@@ -52,7 +52,7 @@ function setUp() {
     if ($this->profile != 'standard') {
       $this->drupalCreateContentType(array('type' => 'page', 'name' => 'Basic page'));
     }
-    $this->privileged_user = $this->drupalCreateUser(array('administer statistics', 'view post access counter', 'create page content'));
+    $this->privileged_user = $this->drupalCreateUser(array('access statistics', 'administer statistics', 'view post access counter', 'create page content'));
     $this->drupalLogin($this->privileged_user);
     $this->test_node = $this->drupalCreateNode(array('type' => 'page', 'uid' => $this->privileged_user->uid));
   }
@@ -62,12 +62,18 @@ function setUp() {
    */
   function testStatisticsSettings() {
     $config = config('statistics.settings');
+    $this->assertFalse($config->get('access_log.enabled'), 'Access log is disabled by default.');
     $this->assertFalse($config->get('count_content_views'), 'Count content view log is disabled by default.');
 
-    // Enable counter on content view.
+    $this->drupalGet('admin/reports/pages');
+    $this->assertRaw(t('No statistics available.'), 'Verifying text shown when no statistics is available.');
+
+    // Enable access log and counter on content view.
+    $edit['statistics_enable_access_log'] = 1;
     $edit['statistics_count_content_views'] = 1;
     $this->drupalPost('admin/config/system/statistics', $edit, t('Save configuration'));
     $config = config('statistics.settings');
+    $this->assertTrue($config->get('access_log.enabled'), 'Access log is enabled.');
     $this->assertTrue($config->get('count_content_views'), 'Count content view log is enabled.');
 
     // Hit the node.
@@ -80,6 +86,9 @@ function testStatisticsSettings() {
     $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
     drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
 
+    $this->drupalGet('admin/reports/pages');
+    $this->assertText('node/1', 'Test node found.');
+
     // Hit the node again (the counter is incremented after the hit, so
     // "1 view" will actually be shown when the node is hit the second time).
     $this->drupalGet('node/' . $this->test_node->nid);
@@ -124,11 +133,44 @@ function testDeleteNode() {
   }
 
   /**
+   * Tests that accesslog reflects when a user is deleted.
+   */
+  function testDeleteUser() {
+    config('statistics.settings')->set('access_log.enabled', 1)->save();
+
+    config('user.settings')->set('cancel_method', 'user_cancel_delete')->save();
+    $this->drupalLogout($this->privileged_user);
+    $account = $this->drupalCreateUser(array('access content', 'cancel account'));
+    $this->drupalLogin($account);
+    $this->drupalGet('node/' . $this->test_node->nid);
+
+    $account = user_load($account->uid, TRUE);
+
+    $this->drupalGet('user/' . $account->uid . '/edit');
+    $this->drupalPost(NULL, NULL, t('Cancel account'));
+
+    $timestamp = time();
+    $this->drupalPost(NULL, NULL, t('Cancel account'));
+    // Confirm account cancellation request.
+    $mails = $this->drupalGetMails();
+    $mail = end($mails);
+    preg_match('@http.+?(user/\d+/cancel/confirm/\d+/[^\s]+)@', $mail['body'], $matches);
+    $path = $matches[1];
+    $this->drupalGet($path);
+    $this->assertFalse(user_load($account->uid, TRUE), 'User is not found in the database.');
+
+    $this->drupalGet('admin/reports/visitors');
+    $this->assertNoText($account->name, 'Did not find user in visitor statistics.');
+  }
+
+  /**
    * Tests that cron clears day counts and expired access logs.
    */
   function testExpiredLogs() {
     config('statistics.settings')
+      ->set('access_log.enabled', 1)
       ->set('count_content_views', 1)
+      ->set('access_log.max_lifetime', 1)
       ->save();
     state()->set('statistics.day_timestamp', 8640000);
 
@@ -144,6 +186,9 @@ function testExpiredLogs() {
     drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
     $this->assertText('1 view', 'Node is viewed once.');
 
+    $this->drupalGet('admin/reports/pages');
+    $this->assertText('node/' . $this->test_node->nid, 'Hit URL found.');
+
     // statistics_cron() will subtract
     // statistics.settings:accesslog.max_lifetime config from REQUEST_TIME in
     // the delete query, so wait two secs here to make sure the access log will
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsBlockVisitorsTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsBlockVisitorsTest.php
new file mode 100644
index 0000000..82990e3
--- /dev/null
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsBlockVisitorsTest.php
@@ -0,0 +1,58 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\statistics\Tests\StatisticsBlockVisitorsTest.
+ */
+
+namespace Drupal\statistics\Tests;
+
+/**
+ * Tests that the visitor blocking functionality works.
+ */
+class StatisticsBlockVisitorsTest extends StatisticsTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Top visitor banning',
+      'description' => 'Tests banning of IP addresses via the top visitors report.',
+      'group' => 'Statistics'
+    );
+  }
+
+  /**
+   * Blocks an IP address via the top visitors report and then unblocks it.
+   */
+  function testIPAddressBlocking() {
+    // IP address for testing.
+    $test_ip_address = '192.168.1.1';
+
+    // Verify the IP address from accesslog appears on the top visitors page
+    // and that a 'ban IP address' link is displayed.
+    $this->drupalLogin($this->blocking_user);
+    $this->drupalGet('admin/reports/visitors');
+    $this->assertText($test_ip_address, 'IP address found.');
+    $this->assertText(t('ban IP address'), 'Ban IP link displayed');
+
+    // Block the IP address.
+    $this->clickLink('ban IP address');
+    $this->assertText(t('IP address bans'), 'IP banning page displayed.');
+    $edit = array();
+    $edit['ip'] = $test_ip_address;
+    $this->drupalPost('admin/config/people/ban', $edit, t('Add'));
+    $ip = db_query("SELECT iid from {ban_ip} WHERE ip = :ip", array(':ip' => $edit['ip']))->fetchField();
+    $this->assertNotEqual($ip, FALSE, 'IP address found in database');
+    $this->assertRaw(t('The IP address %ip has been banned.', array('%ip' => $edit['ip'])), 'IP address was banned.');
+
+    // Verify that the block/unblock link on the top visitors page has been
+    // altered.
+    $this->drupalGet('admin/reports/visitors');
+    $this->assertText(t('unban IP address'), 'Unban IP address link displayed');
+
+    // Unblock the IP address.
+    $this->clickLink('unban IP address');
+    $this->assertRaw(t('Are you sure you want to unblock %ip?', array('%ip' => $test_ip_address)), 'IP address deletion confirmation found.');
+    $edit = array();
+    $this->drupalPost('admin/config/people/ban/delete/1', NULL, t('Delete'));
+    $this->assertRaw(t('The IP address %ip was deleted.', array('%ip' => $test_ip_address)), 'IP address deleted.');
+  }
+}
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php
index 4cb7053..7a6a79a 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsLoggingTest.php
@@ -53,10 +53,12 @@ function setUp() {
 
     // Enable access logging.
     config('statistics.settings')
+      ->set('access_log.enabled', 1)
       ->set('count_content_views', 1)
       ->save();
 
     // Clear the logs.
+    db_truncate('accesslog');
     db_truncate('node_counter');
   }
 
@@ -80,6 +82,9 @@ function testLogging() {
     $stats_path = $base_url . '/' . drupal_get_path('module', 'statistics'). '/statistics.php';
     drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
     $this->assertIdentical($this->drupalGetHeader('X-Drupal-Cache'), 'MISS', 'Testing an uncached page.');
+    $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
+    $this->assertTrue(is_array($log) && count($log) == 1, 'Page request was logged.');
+    $this->assertEqual(array_intersect_key($log[0], $expected), $expected);
     $node_counter = statistics_get($this->node->nid);
     $this->assertIdentical($node_counter['totalcount'], '1');
 
@@ -88,6 +93,9 @@ function testLogging() {
     // Manually calling statistics.php, simulating ajax behavior.
     drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
     $this->assertIdentical($this->drupalGetHeader('X-Drupal-Cache'), 'HIT', 'Testing a cached page.');
+    $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
+    $this->assertTrue(is_array($log) && count($log) == 2, 'Page request was logged.');
+    $this->assertEqual(array_intersect_key($log[1], $expected), $expected);
     $node_counter = statistics_get($this->node->nid);
     $this->assertIdentical($node_counter['totalcount'], '2');
 
@@ -96,8 +104,37 @@ function testLogging() {
     $this->drupalGet($path);
     // Manually calling statistics.php, simulating ajax behavior.
     drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
+    $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
+    // Check the 6th item since login and account pages are also logged
+    $this->assertTrue(is_array($log) && count($log) == 6, 'Page request was logged.');
+    $this->assertEqual(array_intersect_key($log[5], $expected), $expected);
     $node_counter = statistics_get($this->node->nid);
     $this->assertIdentical($node_counter['totalcount'], '3');
 
+    // Visit edit page to generate a title greater than 255.
+    $path = 'node/' . $this->node->nid . '/edit';
+    $expected = array(
+      'title' => truncate_utf8(t('Edit Basic page') . ' ' . $this->node->label(), 255),
+      'path' => $path,
+    );
+    $this->drupalGet($path);
+    $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
+    $this->assertTrue(is_array($log) && count($log) == 7, 'Page request was logged.');
+    $this->assertEqual(array_intersect_key($log[6], $expected), $expected);
+
+    // Create a path longer than 255 characters. Drupal's .htaccess file
+    // instructs Apache to test paths against the file system before routing to
+    // index.php. Many file systems restrict file names to 255 characters
+    // (http://en.wikipedia.org/wiki/Comparison_of_file_systems#Limits), and
+    // Apache returns a 403 when testing longer file names, but the total path
+    // length is not restricted.
+    $long_path = $this->randomName(127) . '/' . $this->randomName(128);
+
+    // Test that the long path is properly truncated when logged.
+    $this->drupalGet($long_path);
+    $log = db_query('SELECT * FROM {accesslog}')->fetchAll(PDO::FETCH_ASSOC);
+    $this->assertTrue(is_array($log) && count($log) == 8, 'Page request was logged for a path over 255 characters.');
+    $this->assertEqual($log[7]['path'], truncate_utf8($long_path, 255));
+
   }
 }
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
index 50cc99b..1843c8b 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsReportsTest.php
@@ -15,17 +15,65 @@ class StatisticsReportsTest extends StatisticsTestBase {
   public static function getInfo() {
     return array(
       'name' => 'Statistics reports tests',
-      'description' => 'Tests display of statistics report blocks.',
+      'description' => 'Tests display of statistics report pages and access logging.',
       'group' => 'Statistics'
     );
   }
 
   /**
+   * Verifies that 'Recent hits' renders properly and displays the added hit.
+   */
+  function testRecentHits() {
+    $this->drupalGet('admin/reports/hits');
+    $this->assertText('test', 'Hit title found.');
+    $this->assertText('node/1', 'Hit URL found.');
+    $this->assertText('Anonymous', 'Hit user found.');
+  }
+
+  /**
+   * Verifies that 'Top pages' renders properly and displays the added hit.
+   */
+  function testTopPages() {
+    $this->drupalGet('admin/reports/pages');
+    $this->assertText('test', 'Hit title found.');
+    $this->assertText('node/1', 'Hit URL found.');
+  }
+
+  /**
+   * Verifies that 'Top referrers' renders properly and displays the added hit.
+   */
+  function testTopReferrers() {
+    $this->drupalGet('admin/reports/referrers');
+    $this->assertText('http://example.com', 'Hit referrer found.');
+  }
+
+  /**
+   * Verifies that 'Details' page renders properly and displays the added hit.
+   */
+  function testDetails() {
+    $this->drupalGet('admin/reports/access/1');
+    $this->assertText('test', 'Hit title found.');
+    $this->assertText('node/1', 'Hit URL found.');
+    $this->assertText('Anonymous', 'Hit user found.');
+  }
+
+  /**
+   * Verifies that access logging is working and is reported correctly.
+   */
+  function testAccessLogging() {
+    $this->drupalGet('admin/reports/referrers');
+    $this->drupalGet('admin/reports/hits');
+    $this->assertText('Top referrers in the past 3 days', 'Hit title found.');
+    $this->assertText('admin/reports/referrers', 'Hit URL found.');
+  }
+
+  /**
    * Tests the "popular content" block.
    */
   function testPopularContentBlock() {
     // Clear the block cache to load the Statistics module's block definitions.
-    $this->container->get('plugin.manager.block')->clearCachedDefinitions();
+    $manager = $this->container->get('plugin.manager.block');
+    $manager->clearCachedDefinitions();
 
     // Visit a node to have something show up in the block.
     $node = $this->drupalCreateNode(array('type' => 'page', 'uid' => $this->blocking_user->uid));
@@ -39,10 +87,11 @@ function testPopularContentBlock() {
     drupal_http_request($stats_path, array('method' => 'POST', 'data' => $post, 'headers' => $headers, 'timeout' => 10000));
 
     // Configure and save the block.
-    $this->drupalPlaceBlock('statistics_popular_block', array('label' => 'Popular content'), array(
-      'top_day_num' => 3,
-      'top_all_num' => 3,
-      'top_last_num' => 3,
+    $this->drupalPlaceBlock('statistics_popular_block', array(
+      'title' => 'Popular content',
+      'statistics_block_top_day_num' => 3,
+      'statistics_block_top_all_num' => 3,
+      'statistics_block_top_last_num' => 3,
     ));
 
     // Get some page and check if the block is displayed.
diff --git a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php
index f4d75f4..2ed8b6f 100644
--- a/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php
+++ b/core/modules/statistics/lib/Drupal/statistics/Tests/StatisticsTestBase.php
@@ -33,6 +33,7 @@ function setUp() {
     $this->blocking_user = $this->drupalCreateUser(array(
       'access administration pages',
       'access site reports',
+      'access statistics',
       'ban IP addresses',
       'administer blocks',
       'administer statistics',
@@ -40,9 +41,23 @@ function setUp() {
     ));
     $this->drupalLogin($this->blocking_user);
 
-    // Enable logging.
+    // Enable access logging.
     config('statistics.settings')
+      ->set('access_log.enabled', 1)
       ->set('count_content_views', 1)
       ->save();
+    // Insert dummy access by anonymous user into access log.
+    db_insert('accesslog')
+      ->fields(array(
+        'title' => 'test',
+        'path' => 'node/1',
+        'url' => 'http://example.com',
+        'hostname' => '192.168.1.1',
+        'uid' => 0,
+        'sid' => 10,
+        'timer' => 10,
+        'timestamp' => REQUEST_TIME,
+      ))
+      ->execute();
   }
 }
diff --git a/core/modules/statistics/statistics.admin.inc b/core/modules/statistics/statistics.admin.inc
index d454321c..d1563cb 100644
--- a/core/modules/statistics/statistics.admin.inc
+++ b/core/modules/statistics/statistics.admin.inc
@@ -8,6 +8,320 @@
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
 /**
+ * Page callback: Displays the "recent hits" page.
+ *
+ * This displays the pages with recent hits in a given time interval that
+ * haven't been flushed yet. The flush interval is set on the statistics
+ * settings form, but is dependent on cron running.
+ *
+ * @return array
+ *   A render array containing information about the most recent hits.
+ */
+function statistics_recent_hits() {
+  $header = array(
+    array('data' => t('Timestamp'), 'field' => 'a.timestamp', 'sort' => 'desc'),
+    array('data' => t('Page'), 'field' => 'a.path'),
+    array('data' => t('User'), 'field' => 'u.name'),
+    t('Operations'),
+  );
+
+  $query = db_select('accesslog', 'a', array('target' => 'slave'))
+    ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+    ->extend('Drupal\Core\Database\Query\TableSortExtender');
+  $query->join('users', 'u', 'a.uid = u.uid');
+  $query
+    ->fields('a', array('aid', 'timestamp', 'path', 'title', 'uid'))
+    ->fields('u', array('name'))
+    ->limit(30)
+    ->orderByHeader($header);
+
+  $result = $query->execute();
+  $rows = array();
+  foreach ($result as $log) {
+    $row = array();
+    $row[] = array('data' => format_date($log->timestamp, 'short'), 'class' => array('nowrap'));
+    $row[] = _statistics_format_item($log->title, $log->path);
+    $row[] = theme('username', array('account' => $log));
+    $links = array();
+    $links['details'] = array(
+      'title' => t('details'),
+      'href' => "admin/reports/access/$log->aid",
+    );
+    $row[] = array(
+      'data' => array(
+        '#type' => 'operations',
+        '#links' => $links,
+      ),
+    );
+    $rows[] = $row;
+  }
+
+  $build['statistics_table'] = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#empty' => t('No statistics available.'),
+  );
+  $build['statistics_pager'] = array('#theme' => 'pager');
+  return $build;
+}
+
+/**
+ * Page callback: Displays statistics for the "top pages" (most accesses).
+ *
+ * This displays the pages with the most hits (the "top pages") within a given
+ * time period that haven't been flushed yet. The flush interval is set on the
+ * statistics settings form, but is dependent on cron running.
+ *
+ * @return array
+ *   A render array containing information about the the top pages.
+ */
+function statistics_top_pages() {
+  $header = array(
+    array('data' => t('Hits'), 'field' => 'hits', 'sort' => 'desc'),
+    array('data' => t('Page'), 'field' => 'path'),
+    array('data' => t('Average page generation time'), 'field' => 'average_time'),
+    array('data' => t('Total page generation time'), 'field' => 'total_time')
+  );
+
+  $query = db_select('accesslog', 'a', array('target' => 'slave'))
+    ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+    ->extend('Drupal\Core\Database\Query\TableSortExtender');
+  $query->addExpression('COUNT(path)', 'hits');
+  // MAX(title) avoids having empty node titles which otherwise causes
+  // duplicates in the top pages list.
+  $query->addExpression('MAX(title)', 'title');
+  $query->addExpression('AVG(timer)', 'average_time');
+  $query->addExpression('SUM(timer)', 'total_time');
+
+  $query
+    ->fields('a', array('path'))
+    ->groupBy('path')
+    ->limit(30)
+    ->orderByHeader($header);
+
+  $count_query = db_select('accesslog', 'a', array('target' => 'slave'));
+  $count_query->addExpression('COUNT(DISTINCT path)');
+  $query->setCountQuery($count_query);
+
+  $result = $query->execute();
+  $rows = array();
+  foreach ($result as $page) {
+    $rows[] = array($page->hits, _statistics_format_item($page->title, $page->path), t('%time ms', array('%time' => round($page->average_time))), format_interval(round($page->total_time / 1000)));
+  }
+
+  drupal_set_title(t('Top pages in the past %interval', array('%interval' => format_interval(config('statistics.settings')->get('access_log.max_lifetime')))), PASS_THROUGH);
+  $build['statistics_top_pages_table'] = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#empty' => t('No statistics available.'),
+  );
+  $build['statistics_top_pages_pager'] = array('#theme' => 'pager');
+  return $build;
+}
+
+/**
+ * Page callback: Displays the "top visitors" page.
+ *
+ * This displays the pages with the top number of visitors in a given time
+ * interval that haven't been flushed yet. The flush interval is set on the
+ * statistics settings form, but is dependent on cron running.
+ *
+ * @return array
+ *   A render array containing the top visitors information.
+ */
+function statistics_top_visitors() {
+  $ban_exists = module_exists('ban');
+
+  $header = array(
+    array('data' => t('Hits'), 'field' => 'hits', 'sort' => 'desc'),
+    array('data' => t('Visitor'), 'field' => 'u.name'),
+    array('data' => t('Total page generation time'), 'field' => 'total'),
+    $ban_exists && user_access('Ban IP addresses') ? t('Operations') : '',
+  );
+  $query = db_select('accesslog', 'a', array('target' => 'slave'))
+    ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+    ->extend('Drupal\Core\Database\Query\TableSortExtender');
+  if ($ban_exists) {
+    $query->leftJoin('ban_ip', 'b', 'a.hostname = b.ip');
+  }
+  $query->leftJoin('users', 'u', 'a.uid = u.uid');
+
+  $query->addExpression('COUNT(a.uid)', 'hits');
+  $query->addExpression('SUM(a.timer)', 'total');
+  $query
+    ->fields('a', array('uid', 'hostname'))
+    ->fields('u', array('name'))
+    ->groupBy('a.hostname')
+    ->groupBy('a.uid')
+    ->groupBy('u.name')
+    ->limit(30);
+  if ($ban_exists) {
+    $query
+      ->fields('b', array('iid'))
+      ->groupBy('b.iid');
+  }
+  $query->orderByHeader($header);
+
+  $uniques_query = db_select('accesslog')->distinct();
+  $uniques_query->fields('accesslog', array('uid', 'hostname'));
+  $count_query = db_select($uniques_query);
+  $count_query->addExpression('COUNT(*)');
+  $query->setCountQuery($count_query);
+
+  $result = $query->execute();
+  $rows = array();
+  $destination = drupal_get_destination();
+  foreach ($result as $account) {
+    $links = array();
+    if ($ban_exists && user_access('ban IP addresses') && !$account->uid) {
+      if ($account->iid) {
+        $links['unban'] = array(
+          'title' => t('unban IP address'),
+          'href' => "admin/config/people/ban/delete/$account->iid",
+          'query' => $destination,
+        );
+      }
+      else {
+        $links['ban'] = array(
+          'title' => t('ban IP address'),
+          'href' => "admin/config/people/ban/$account->hostname",
+          'query' => $destination,
+        );
+      }
+    }
+    $row = array();
+    $row[] = $account->hits;
+    $row[] = ($account->uid ? theme('username', array('account' => $account)) : $account->hostname);
+    $row[] = format_interval(round($account->total / 1000));
+    $row[] = array(
+      'data' => array(
+        '#type' => 'operations',
+        '#links' => $links,
+      ),
+    );
+    $rows[] = $row;
+  }
+
+  drupal_set_title(t('Top visitors in the past %interval', array('%interval' => format_interval(config('statistics.settings')->get('access_log.max_lifetime')))), PASS_THROUGH);
+  $build['statistics_top_visitors_table'] = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#empty' => t('No statistics available.'),
+  );
+  $build['statistics_top_visitors_pager'] = array('#theme' => 'pager');
+  return $build;
+}
+
+/**
+ * Page callback: Displays the "top referrers" in the access logs.
+ *
+ * This displays the pages with the top referrers in a given time interval that
+ * haven't been flushed yet. The flush interval is set on the statistics
+ * settings form, but is dependent on cron running.
+ *
+ * @return array
+ *   A render array containing the top referrers information.
+ */
+function statistics_top_referrers() {
+  drupal_set_title(t('Top referrers in the past %interval', array('%interval' => format_interval(config('statistics.settings')->get('access_log.max_lifetime')))), PASS_THROUGH);
+
+  $header = array(
+    array('data' => t('Hits'), 'field' => 'hits', 'sort' => 'desc'),
+    array('data' => t('Url'), 'field' => 'url'),
+    array('data' => t('Last visit'), 'field' => 'last'),
+  );
+  $query = db_select('accesslog', 'a')
+    ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+    ->extend('Drupal\Core\Database\Query\TableSortExtender');
+
+  $query->addExpression('COUNT(url)', 'hits');
+  $query->addExpression('MAX(timestamp)', 'last');
+  $query
+    ->fields('a', array('url'))
+    ->condition('url', '%' . $_SERVER['HTTP_HOST'] . '%', 'NOT LIKE')
+    ->condition('url', '', '<>')
+    ->groupBy('url')
+    ->limit(30)
+    ->orderByHeader($header);
+
+  $count_query = db_select('accesslog', 'a', array('target' => 'slave'));
+  $count_query->addExpression('COUNT(DISTINCT url)');
+  $count_query
+    ->condition('url', '%' . $_SERVER['HTTP_HOST'] . '%', 'NOT LIKE')
+    ->condition('url', '', '<>');
+  $query->setCountQuery($count_query);
+
+  $result = $query->execute();
+  $rows = array();
+  foreach ($result as $referrer) {
+    $rows[] = array($referrer->hits, _statistics_link($referrer->url), t('@time ago', array('@time' => format_interval(REQUEST_TIME - $referrer->last))));
+  }
+
+  $build['statistics_top_referrers_table'] = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#empty' => t('No statistics available.'),
+  );
+  $build['statistics_top_referrers_pager'] = array('#theme' => 'pager');
+  return $build;
+}
+
+/**
+ * Page callback: Gathers page access statistics suitable for rendering.
+ *
+ * @param int $aid
+ *   The unique accesslog ID.
+ *
+ * @return array
+ *   A render array containing page access statistics. If information for the
+ *   page was not found, a NotFoundHttpException is thrown.
+ */
+function statistics_access_log($aid) {
+  $access = db_query('SELECT a.*, u.name FROM {accesslog} a LEFT JOIN {users} u ON a.uid = u.uid WHERE aid = :aid', array(':aid' => $aid))->fetch();
+  if ($access) {
+    $rows[] = array(
+      array('data' => t('URL'), 'header' => TRUE),
+      l(url($access->path, array('absolute' => TRUE)), $access->path)
+    );
+    // It is safe to avoid filtering $access->title through check_plain because
+    // it comes from drupal_get_title().
+    $rows[] = array(
+      array('data' => t('Title'), 'header' => TRUE),
+      $access->title
+    );
+    $rows[] = array(
+      array('data' => t('Referrer'), 'header' => TRUE),
+      ($access->url ? l($access->url, $access->url) : '')
+    );
+    $rows[] = array(
+      array('data' => t('Date'), 'header' => TRUE),
+      format_date($access->timestamp, 'long')
+    );
+    $rows[] = array(
+      array('data' => t('User'), 'header' => TRUE),
+      theme('username', array('account' => $access))
+    );
+    $rows[] = array(
+      array('data' => t('Hostname'), 'header' => TRUE),
+      check_plain($access->hostname)
+    );
+
+    $build['statistics_table'] = array(
+      '#theme' => 'table',
+      '#rows' => $rows,
+    );
+    return $build;
+  }
+  else {
+    throw new NotFoundHttpException();
+  }
+}
+
+/**
  * Form constructor for the statistics administration form.
  *
  * @ingroup forms
@@ -15,6 +329,24 @@
  */
 function statistics_settings_form($form, &$form_state) {
   $config = config('statistics.settings');
+  // Access log settings.
+  $form['access'] = array(
+    '#type' => 'details',
+    '#title' => t('Access log settings'),
+  );
+  $form['access']['statistics_enable_access_log'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Enable access log'),
+    '#default_value' => $config->get('access_log.enabled'),
+    '#description' => t('Log each page access. Required for referrer statistics.'),
+  );
+  $form['access']['statistics_flush_accesslog_timer'] = array(
+    '#type' => 'select',
+    '#title' => t('Discard access logs older than'),
+    '#default_value' => $config->get('access_log.max_lifetime'),
+    '#options' => array(0 => t('Never')) + drupal_map_assoc(array(3600, 10800, 21600, 32400, 43200, 86400, 172800, 259200, 604800, 1209600, 2419200, 4838400, 9676800), 'format_interval'),
+    '#description' => t('Older access log entries (including referrer statistics) will be automatically discarded. (Requires a correctly configured <a href="@cron">cron maintenance task</a>.)', array('@cron' => url('admin/reports/status'))),
+  );
 
   // Content counter settings.
   $form['content'] = array(
@@ -36,6 +368,8 @@ function statistics_settings_form($form, &$form_state) {
  */
 function statistics_settings_form_submit($form, &$form_state) {
   config('statistics.settings')
+    ->set('access_log.enabled', $form_state['values']['statistics_enable_access_log'])
+    ->set('access_log.max_lifetime', $form_state['values']['statistics_flush_accesslog_timer'])
     ->set('count_content_views', $form_state['values']['statistics_count_content_views'])
     ->save();
   // The popular statistics block is dependent on these settings, so clear the
diff --git a/core/modules/statistics/statistics.info b/core/modules/statistics/statistics.info
index 6c1b76d..4b18b8a 100644
--- a/core/modules/statistics/statistics.info
+++ b/core/modules/statistics/statistics.info
@@ -1,5 +1,5 @@
 name = Statistics
-description = Logs content statistics for your site.
+description = Logs access statistics for your site.
 package = Core
 version = VERSION
 core = 8.x
diff --git a/core/modules/statistics/statistics.install b/core/modules/statistics/statistics.install
index 6732eb0..5f2b7dd 100644
--- a/core/modules/statistics/statistics.install
+++ b/core/modules/statistics/statistics.install
@@ -18,6 +18,79 @@ function statistics_uninstall() {
  * Implements hook_schema().
  */
 function statistics_schema() {
+  $schema['accesslog'] = array(
+    'description' => 'Stores site access information for statistics.',
+    'fields' => array(
+      'aid' => array(
+        'type' => 'serial',
+        'not null' => TRUE,
+        'description' => 'Primary Key: Unique accesslog ID.',
+      ),
+      'sid' => array(
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'Browser session ID of user that visited page.',
+      ),
+      'title' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => FALSE,
+        'description' => 'Title of page visited.',
+      ),
+      'path' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => FALSE,
+        'description' => 'Internal path to page visited (relative to Drupal root.)',
+      ),
+      'url' => array(
+        'type' => 'text',
+        'not null' => FALSE,
+        'description' => 'Referrer URI.',
+      ),
+      'hostname' => array(
+        'type' => 'varchar',
+        'length' => 128,
+        'not null' => FALSE,
+        'description' => 'Hostname of user that visited the page.',
+      ),
+      'uid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => FALSE,
+        'default' => 0,
+        'description' => 'User {users}.uid that visited the page.',
+      ),
+      'timer' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Time in milliseconds that the page took to load.',
+      ),
+      'timestamp' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'Timestamp of when the page was visited.',
+      ),
+    ),
+    'indexes' => array(
+      'accesslog_timestamp' => array('timestamp'),
+      'uid' => array('uid'),
+    ),
+    'primary key' => array('aid'),
+    'foreign keys' => array(
+      'visitor' => array(
+        'table' => 'users',
+        'columns' => array('uid' => 'uid'),
+      ),
+    ),
+  );
+
   $schema['node_counter'] = array(
     'description' => 'Access statistics for {node}s.',
     'fields' => array(
@@ -66,6 +139,8 @@ function statistics_schema() {
 function statistics_update_8000() {
   update_variables_to_config('statistics.settings', array(
     'statistics_count_content_views' => 'count_content_views',
+    'statistics_enable_access_log' => 'access_log.enabled',
+    'statistics_flush_accesslog_timer' => 'access_log.max_lifetime',
     'statistics_block_top_day_num' => 'block.popular.top_day_limit',
     'statistics_block_top_all_num' => 'block.popular.top_all_limit',
     'statistics_block_top_last_num' => 'block.popular.top_recent_limit',
diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module
index f6a9d48..801742c 100644
--- a/core/modules/statistics/statistics.module
+++ b/core/modules/statistics/statistics.module
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Logs and displays content statistics for a site.
+ * Logs and displays access statistics for a site.
  */
 
 use Drupal\node\Plugin\Core\Entity\Node;
@@ -16,9 +16,17 @@ function statistics_help($path, $arg) {
     case 'admin/help#statistics':
       $output = '';
       $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The Statistics module shows you how often content is viewed. This is useful in determining which pages of your site are most popular. For more information, see the online handbook entry for the <a href="@statistics">Statistics module</a>.', array('@statistics' => url('http://drupal.org/documentation/modules/statistics/'))) . '</p>';
+      $output .= '<p>' . t('The Statistics module shows you how often a given page is viewed, who viewed it, the previous page the user visited (referrer URL), and when it was viewed. These statistics are useful in determining how users are visiting and navigating your site. For more information, see the online handbook entry for the <a href="@statistics">Statistics module</a>.', array('@statistics' => url('http://drupal.org/documentation/modules/statistics/'))) . '</p>';
       $output .= '<h3>' . t('Uses') . '</h3>';
       $output .= '<dl>';
+      $output .= '<dt>' . t('Managing logs') . '</dt>';
+      $output .= '<dd>' . t('To enable collection of statistics, the <em>Enable access log</em> checkbox on the <a href="@statistics-settings">Statistics settings page</a> must be checked. The <em>Discard access logs older than</em> setting on the settings page specifies the length of time entries are kept in the log before they are deleted. This setting requires a correctly configured <a href="@cron">cron maintenance task</a> to run.', array('@statistics-settings' => url('admin/config/system/statistics'), '@cron' => 'http://drupal.org/cron')) . '</dd>';
+      $output .= '<dt>' . t('Viewing site usage') . '</dt>';
+      $output .= '<dd>' . t('The Statistics module can help you break down details about your users and how they are using the site. The module offers four reports:');
+      $output .= '<ul><li>' . t('<a href="@recent-hits">Recent hits</a> displays information about the latest activity on your site, including the URL and title of the page that was accessed, the user name (if available) and the IP address of the viewer.', array('@recent-hits' => url('admin/reports/hits'))) . '</li>';
+      $output .= '<li>' . t('<a href="@top-referrers">Top referrers</a> displays where visitors came from (referrer URL).', array('@top-referrers' => url('admin/reports/referrers'))) . '</li>';
+      $output .= '<li>' . t('<a href="@top-pages">Top pages</a> displays a list of pages ordered by how often they were viewed.', array('@top-pages' => url('admin/reports/pages'))) . '</li>';
+      $output .= '<li>' . t('<a href="@top-visitors">Top visitors</a> shows you the most active visitors for your site and allows you to ban abusive visitors.', array('@top-visitors' => url('admin/reports/visitors'))) . '</li></ul>';
       $output .= '<dt>' . t('Displaying popular content') . '</dt>';
       $output .= '<dd>' . t('The module includes a <em>Popular content</em> block that displays the most viewed pages today and for all time, and the last content viewed. To use the block, enable <em>Count content views</em> on the <a href="@statistics-settings">statistics settings page</a>, and then you can enable and configure the block on the <a href="@blocks">blocks administration page</a>.', array('@statistics-settings' => url('admin/config/system/statistics'), '@blocks' => url('admin/structure/block'))) . '</dd>';
       $output .= '<dt>' . t('Page view counter') . '</dt>';
@@ -27,6 +35,50 @@ function statistics_help($path, $arg) {
       return $output;
     case 'admin/config/system/statistics':
       return '<p>' . t('Settings for the statistical information that Drupal will keep about the site. See <a href="@statistics">site statistics</a> for the actual information.', array('@statistics' => url('admin/reports/hits'))) . '</p>';
+    case 'admin/reports/hits':
+      return '<p>' . t("This page displays the site's most recent hits.") . '</p>';
+    case 'admin/reports/referrers':
+      return '<p>' . t('This page displays all external referrers, or external references to your website.') . '</p>';
+    case 'admin/reports/visitors':
+      return '<p>' . t("When you ban a visitor, you prevent the visitor's IP address from accessing your site. Unlike blocking a user, banning a visitor works even for anonymous users. This is most commonly used to block resource-intensive bots or web crawlers.") . '</p>';
+  }
+}
+
+/**
+ * Implements hook_exit().
+ *
+ * Gathers statistics for page accesses.
+ */
+function statistics_exit() {
+  global $user;
+
+  // When serving cached pages with the 'page_cache_without_database'
+  // configuration, system variables need to be loaded. This is a major
+  // performance decrease for non-database page caches, but with Statistics
+  // module, it is likely to also have 'statistics.settings:access_log.enabled'
+  // enabled, in which case we need to bootstrap to the session phase anyway.
+  drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES);
+
+  if (config('statistics.settings')->get('access_log.enabled')) {
+    drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);
+
+    // For anonymous users unicode.inc will not have been loaded.
+    include_once DRUPAL_ROOT . '/core/includes/unicode.inc';
+    // Log this page access.
+    db_insert('accesslog')
+      ->fields(array(
+        'title' => truncate_utf8(strip_tags(drupal_get_title()), 255),
+        // @todo The public function current_path() is not available on a cache
+        //   hit.
+        'path' => truncate_utf8(_current_path(), 255),
+        'url' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '',
+        'hostname' => ip_address(),
+        'uid' => $user->uid,
+        'sid' => session_id(),
+        'timer' => (int) timer_read('page'),
+        'timestamp' => REQUEST_TIME,
+      ))
+      ->execute();
   }
 }
 
@@ -38,6 +90,9 @@ function statistics_permission() {
     'administer statistics' => array(
       'title' => t('Administer statistics'),
     ),
+    'access statistics' => array(
+      'title' => t('View content access statistics'),
+    ),
     'view post access counter' => array(
       'title' => t('View content hits'),
     ),
@@ -76,19 +131,99 @@ function statistics_node_view(Node $node, EntityDisplay $display, $view_mode) {
  * Implements hook_menu().
  */
 function statistics_menu() {
+  $items['admin/reports/hits'] = array(
+    'title' => 'Recent hits',
+    'description' => 'View pages that have recently been visited.',
+    'page callback' => 'statistics_recent_hits',
+    'access arguments' => array('access statistics'),
+    'file' => 'statistics.admin.inc',
+  );
+  $items['admin/reports/pages'] = array(
+    'title' => 'Top pages',
+    'description' => 'View pages that have been hit frequently.',
+    'page callback' => 'statistics_top_pages',
+    'access arguments' => array('access statistics'),
+    'weight' => 1,
+    'file' => 'statistics.admin.inc',
+  );
+  $items['admin/reports/visitors'] = array(
+    'title' => 'Top visitors',
+    'description' => 'View visitors that hit many pages.',
+    'page callback' => 'statistics_top_visitors',
+    'access arguments' => array('access statistics'),
+    'weight' => 2,
+    'file' => 'statistics.admin.inc',
+  );
+  $items['admin/reports/referrers'] = array(
+    'title' => 'Top referrers',
+    'description' => 'View top referrers.',
+    'page callback' => 'statistics_top_referrers',
+    'access arguments' => array('access statistics'),
+    'file' => 'statistics.admin.inc',
+  );
+  $items['admin/reports/access/%'] = array(
+    'title' => 'Details',
+    'description' => 'View access log.',
+    'page callback' => 'statistics_access_log',
+    'page arguments' => array(3),
+    'access arguments' => array('access statistics'),
+    'file' => 'statistics.admin.inc',
+  );
   $items['admin/config/system/statistics'] = array(
     'title' => 'Statistics',
-    'description' => 'Control details about what and how your site logs content statistics.',
+    'description' => 'Control details about what and how your site logs access statistics.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('statistics_settings_form'),
     'access arguments' => array('administer statistics'),
     'file' => 'statistics.admin.inc',
     'weight' => -15,
   );
+  $items['user/%user/track/navigation'] = array(
+    'title' => 'Page visits',
+    'page callback' => 'statistics_user_tracker',
+    'access callback' => 'user_access',
+    'access arguments' => array('access statistics'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 2,
+    'file' => 'statistics.pages.inc',
+  );
+  $items['node/%node/track'] = array(
+    'title' => 'Track',
+    'page callback' => 'statistics_node_tracker',
+    'access callback' => 'user_access',
+    'access arguments' => array('access statistics'),
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 2,
+    'file' => 'statistics.pages.inc',
+  );
+
   return $items;
 }
 
 /**
+ * Implements hook_user_cancel().
+ */
+function statistics_user_cancel($edit, $account, $method) {
+  switch ($method) {
+    case 'user_cancel_reassign':
+      db_update('accesslog')
+        ->fields(array('uid' => 0))
+        ->condition('uid', $account->uid)
+        ->execute();
+      break;
+  }
+}
+
+/**
+ * Implements hook_user_predelete().
+ */
+function statistics_user_predelete($account) {
+  db_delete('accesslog')
+    ->condition('uid', $account->uid)
+    ->execute();
+}
+
+/**
  * Implements hook_cron().
  */
 function statistics_cron() {
@@ -101,6 +236,14 @@ function statistics_cron() {
       ->execute();
     state()->set('statistics.day_timestamp', REQUEST_TIME);
   }
+
+  // Delete access logs (if applicable).
+  $max_lifetime = config('statistics.settings')->get('access_log.max_lifetime');
+  if ($max_lifetime > 0) {
+    db_delete('accesslog')
+      ->condition('timestamp', REQUEST_TIME - $max_lifetime, '<')
+      ->execute();
+  }
 }
 
 /**
diff --git a/core/modules/statistics/statistics.pages.inc b/core/modules/statistics/statistics.pages.inc
new file mode 100644
index 0000000..6cf110c
--- /dev/null
+++ b/core/modules/statistics/statistics.pages.inc
@@ -0,0 +1,138 @@
+<?php
+
+/**
+ * @file
+ * User page callbacks for the Statistics module.
+ */
+
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+
+/**
+ * Page callback: Displays statistics for a node.
+ *
+ * @return array
+ *   A render array containing node statistics. If information for the node was
+ *   not found, this will throw a NotFoundHttpException.
+ *
+ * @see statistics_menu()
+ */
+function statistics_node_tracker() {
+  if ($node = node_load(arg(1))) {
+    $header = array(
+      array('data' => t('Time'), 'field' => 'a.timestamp', 'sort' => 'desc'),
+      array('data' => t('Referrer'), 'field' => 'a.url'),
+      array('data' => t('User'), 'field' => 'u.name'),
+      t('Operations'),
+    );
+
+    $query = db_select('accesslog', 'a', array('target' => 'slave'))
+      ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+      ->extend('Drupal\Core\Database\Query\TableSortExtender');
+    $query->join('users', 'u', 'a.uid = u.uid');
+
+    $query
+      ->fields('a', array('aid', 'timestamp', 'url', 'uid'))
+      ->fields('u', array('name'))
+      ->condition(db_or()
+        ->condition('a.path', 'node/' . $node->nid)
+        ->condition('a.path', 'node/' . $node->nid . '/%', 'LIKE'))
+      ->limit(30)
+      ->orderByHeader($header);
+
+    $result = $query->execute();
+    $rows = array();
+    foreach ($result as $log) {
+      $row = array();
+      $row[] = array('data' => format_date($log->timestamp, 'short'), 'class' => array('nowrap'));
+      $row[] = _statistics_link($log->url);
+      $row[] = theme('username', array('account' => $log));
+      $links = array();
+      $links['details'] = array(
+        'title' => t('details'),
+        'href' => "admin/reports/access/$log->aid",
+      );
+      $row[] = array(
+        'data' => array(
+          '#type' => 'operations',
+          '#links' => $links,
+        ),
+      );
+      $rows[] = $row;
+    }
+
+    // Do not use $node->label() here, because $node comes from the database.
+    drupal_set_title($node->title);
+    $build['statistics_table'] = array(
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+      '#empty' => t('No statistics available.'),
+    );
+    $build['statistics_pager'] = array('#theme' => 'pager');
+    return $build;
+  }
+  else {
+    throw new NotFoundHttpException();
+  }
+}
+
+/**
+ * Page callback: Displays statistics for a user.
+ *
+ * @return array
+ *   A render array containing user statistics. If information for the user was
+ *   not found, this will throw a NotFoundHttpException.
+ *
+ * @see statistics_menu()
+ */
+function statistics_user_tracker() {
+  if ($account = user_load(arg(1))) {
+
+    $header = array(
+      array('data' => t('Timestamp'), 'field' => 'timestamp', 'sort' => 'desc'),
+      array('data' => t('Page'), 'field' => 'path'),
+      t('Operations'),
+    );
+    $query = db_select('accesslog', 'a', array('target' => 'slave'))
+      ->extend('Drupal\Core\Database\Query\PagerSelectExtender')
+      ->extend('Drupal\Core\Database\Query\TableSortExtender');
+    $query
+      ->fields('a', array('aid', 'timestamp', 'path', 'title'))
+      ->condition('uid', $account->uid)
+      ->limit(30)
+      ->orderByHeader($header);
+
+    $result = $query->execute();
+    $rows = array();
+    foreach ($result as $log) {
+      $row = array();
+      $row[] = array('data' => format_date($log->timestamp, 'short'), 'class' => array('nowrap'));
+      $row[] = _statistics_format_item($log->title, $log->path);
+      $links = array();
+      $links['details'] = array(
+        'title' => t('details'),
+        'href' => "admin/reports/access/$log->aid",
+      );
+      $row[] = array(
+        'data' => array(
+          '#type' => 'operations',
+          '#links' => $links,
+        ),
+      );
+      $rows[] = $row;
+    }
+
+    drupal_set_title(user_format_name($account));
+    $build['statistics_table'] = array(
+      '#theme' => 'table',
+      '#header' => $header,
+      '#rows' => $rows,
+      '#empty' => t('No statistics available.'),
+    );
+    $build['statistics_pager'] = array('#theme' => 'pager');
+    return $build;
+  }
+  else {
+    throw new NotFoundHttpException();
+  }
+}
diff --git a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemHelpBlock.php b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemHelpBlock.php
index 9a4d706..6026f83 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemHelpBlock.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemHelpBlock.php
@@ -38,9 +38,9 @@ public function blockAccess() {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(
       '#children' => $this->help,
     );
diff --git a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMainBlock.php b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMainBlock.php
index 2f10f57..8b40092 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMainBlock.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMainBlock.php
@@ -23,9 +23,9 @@
 class SystemMainBlock extends BlockBase {
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(
       drupal_set_page_content()
     );
diff --git a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMenuBlock.php b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMenuBlock.php
index d653fd8..0307257 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMenuBlock.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemMenuBlock.php
@@ -33,9 +33,9 @@ public function blockAccess() {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     list($plugin, $derivative) = explode(':', $this->getPluginId());
     // Derivatives are prefixed with 'menu-'.
     $menu = substr($derivative, 5);
diff --git a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemPoweredByBlock.php b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemPoweredByBlock.php
index 4749768..b363725 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemPoweredByBlock.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/block/block/SystemPoweredByBlock.php
@@ -23,9 +23,9 @@
 class SystemPoweredByBlock extends BlockBase {
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     return array(
       '#children' => theme('system_powered_by'),
     );
diff --git a/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkFormBase.php b/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkFormBase.php
deleted file mode 100644
index 53d54df..0000000
--- a/core/modules/system/lib/Drupal/system/Plugin/views/field/BulkFormBase.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\system\Plugin\views\field\BulkFormBase.
- */
-
-namespace Drupal\system\Plugin\views\field;
-
-use Drupal\Core\Annotation\Plugin;
-use Drupal\views\Plugin\views\field\FieldPluginBase;
-use Drupal\views\Plugin\views\style\Table;
-
-/**
- * Defines a generic bulk operation form element.
- */
-abstract class BulkFormBase extends FieldPluginBase {
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::render().
-   */
-  public function render($values) {
-    return '<!--form-item-' . $this->options['id'] . '--' . $this->view->row_index . '-->';
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::pre_render().
-   */
-  public function pre_render(&$values) {
-    parent::pre_render($values);
-
-    // If the view is using a table style, provide a placeholder for a
-    // "select all" checkbox.
-    if (!empty($this->view->style_plugin) && $this->view->style_plugin instanceof Table) {
-      // Add the tableselect css classes.
-      $this->options['element_label_class'] .= 'select-all';
-      // Hide the actual label of the field on the table header.
-      $this->options['label'] = '';
-    }
-  }
-
-  /**
-   * Form constructor for the bulk form.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param array $form_state
-   *   An associative array containing the current state of the form.
-   */
-  public function views_form(&$form, &$form_state) {
-    // Add the tableselect javascript.
-    $form['#attached']['library'][] = array('system', 'drupal.tableselect');
-
-    // Render checkboxes for all rows.
-    $form[$this->options['id']]['#tree'] = TRUE;
-    foreach ($this->view->result as $row_index => $row) {
-      $form[$this->options['id']][$row_index] = array(
-        '#type' => 'checkbox',
-        // We are not able to determine a main "title" for each row, so we can
-        // only output a generic label.
-        '#title' => t('Update this item'),
-        '#title_display' => 'invisible',
-        '#default_value' => !empty($form_state['values'][$this->options['id']][$row_index]) ? 1 : NULL,
-      );
-    }
-
-    // Replace the form submit button label.
-    $form['actions']['submit']['#value'] = t('Apply');
-
-    // Ensure a consistent container for filters/operations in the view header.
-    $form['header'] = array(
-      '#type' => 'container',
-      '#weight' => -100,
-    );
-
-    // Build the bulk operations action widget for the header.
-    // Allow themes to apply .container-inline on this separate container.
-    $form['header'][$this->options['id']] = array(
-      '#type' => 'container',
-    );
-    $form['header'][$this->options['id']]['action'] = array(
-      '#type' => 'select',
-      '#title' => t('With selection'),
-      '#options' => $this->getBulkOptions(),
-    );
-
-    // Duplicate the form actions into the action container in the header.
-    $form['header'][$this->options['id']]['actions'] = $form['actions'];
-  }
-
-  /**
-   * Returns the available operations for this form.
-   *
-   * @return array
-   *   An associative array of operations, suitable for a select element.
-   */
-  abstract protected function getBulkOptions();
-
-  /**
-   * Submit handler for the bulk form.
-   *
-   * @param array $form
-   *   An associative array containing the structure of the form.
-   * @param array $form_state
-   *   An associative array containing the current state of the form.
-   */
-  abstract public function views_form_submit(&$form, &$form_state);
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\Plugin\field\FieldPluginBase::query().
-   */
-  public function query() {
-  }
-
-}
diff --git a/core/modules/system/lib/Drupal/system/Plugin/views/row/EntityRow.php b/core/modules/system/lib/Drupal/system/Plugin/views/row/EntityRow.php
index 0a5ef91..bb13b25 100644
--- a/core/modules/system/lib/Drupal/system/Plugin/views/row/EntityRow.php
+++ b/core/modules/system/lib/Drupal/system/Plugin/views/row/EntityRow.php
@@ -94,9 +94,10 @@ public function buildOptionsForm(&$form, &$form_state) {
    */
   protected function buildViewModeOptions() {
     $options = array();
-    $view_modes = entity_get_view_modes($this->entityType);
-    foreach ($view_modes as $mode => $settings) {
-      $options[$mode] = $settings['label'];
+    if (!empty($this->entityInfo['view_modes'])) {
+      foreach ($this->entityInfo['view_modes'] as $mode => $settings) {
+        $options[$mode] = $settings['label'];
+      }
     }
 
     return $options;
diff --git a/core/modules/system/lib/Drupal/system/Tests/Cache/DatabaseBackendUnitTest.php b/core/modules/system/lib/Drupal/system/Tests/Cache/DatabaseBackendUnitTest.php
index 525de36..f301257 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Cache/DatabaseBackendUnitTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Cache/DatabaseBackendUnitTest.php
@@ -36,11 +36,6 @@ protected function createCacheBackend($bin) {
    * Installs system schema.
    */
   public function setUpCacheBackend() {
-    // Calling drupal_install_schema() entails a call to module_invoke, for which
-    // we need a ModuleHandler. Register one to the container.
-    // @todo Use DrupalUnitTestBase.
-    $this->container->register('module_handler', 'Drupal\Core\Extension\ModuleHandler');
-
     drupal_install_schema('system');
   }
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Common/GotoTest.php b/core/modules/system/lib/Drupal/system/Tests/Common/GotoTest.php
index c9e3cfc..edf59a8 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Common/GotoTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Common/GotoTest.php
@@ -56,14 +56,14 @@ function testDrupalGoto() {
 
     // Test that drupal_goto() respects ?destination=xxx with an absolute URL
     // that points to this Drupal installation.
-    $destination = url('common-test/drupal_goto/alternative', array('absolute' => TRUE));
+    $destination = url('common-test/drupal_goto/alt', array('absolute' => TRUE));
     $this->drupalGet('common-test/drupal_goto/redirect', array('query' => array('destination' => $destination)));
-    $this->assertText('drupal_goto_alternative', 'Drupal goto redirect with absolute URL destination that points to this Drupal installation succeeded.');
-    $this->assertEqual($this->getUrl(), url('common-test/drupal_goto/alternative', array('absolute' => TRUE)), 'Drupal goto redirected to given query string destination with absolute URL that points to this Drupal installation.');
+    $this->assertText('drupal_goto_alt', 'Drupal goto redirect with absolute URL destination that points to this Drupal installation succeeded.');
+    $this->assertEqual($this->getUrl(), url('common-test/drupal_goto/alt', array('absolute' => TRUE)), 'Drupal goto redirected to given query string destination with absolute URL that points to this Drupal installation.');
 
     // Test that drupal_goto() fails to respect ?destination=xxx with an absolute URL
     // that does not point to this Drupal installation.
-    $destination = 'http://example.com';
+    $destination = 'http://pagedoesnotexist';
     $this->drupalGet('common-test/drupal_goto/redirect', array('query' => array('destination' => $destination)));
     $this->assertText('drupal_goto', 'Drupal goto fails to redirect with absolute URL destination that does not point to this Drupal installation.');
     $this->assertNotEqual($this->getUrl(), $destination, 'Drupal goto failed to redirect to given query string destination with absolute URL that does not point to this Drupal installation.');
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityAccessTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityAccessTest.php
index d3c124f..02c35cc 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityAccessTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityAccessTest.php
@@ -84,7 +84,7 @@ function testEntityAccess() {
   function testEntityAccessDefaultController() {
     // Check that the default access controller is used for entities that don't
     // have a specific access controller defined.
-    $controller = $this->container->get('plugin.manager.entity')->getAccessController('entity_test_default_access');
+    $controller = entity_access_controller('entity_test_default_access');
     $this->assertTrue($controller instanceof EntityAccessController, 'The default entity controller is used for the entity_test_default_access entity type.');
 
     $entity = entity_create('entity_test_default_access', array());
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
index 7668112..f79512c 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityCrudHookTest.php
@@ -29,14 +29,14 @@ class EntityCrudHookTest extends WebTestBase {
    *
    * @var array
    */
-  public static $modules = array('entity_crud_hook_test', 'taxonomy', 'block_test', 'block', 'comment', 'file', 'entity_test');
+  public static $modules = array('entity_crud_hook_test', 'taxonomy', 'comment', 'file', 'entity_test');
 
   protected $ids = array();
 
   public static function getInfo() {
     return array(
       'name' => 'Entity CRUD hooks',
-      'description' => 'Tests the invocation of hooks when creating, inserting, loading, updating or deleting an entity.',
+      'description' => 'Tests the invocation of hooks when inserting, loading, updating or deleting an entity.',
       'group' => 'Entity API',
     );
   }
@@ -67,60 +67,6 @@ protected function assertHookMessageOrder($messages) {
   }
 
   /**
-   * Tests hook invocations for CRUD operations on blocks.
-   */
-  public function testBlockHooks() {
-    $entity = entity_create('block', array(
-      'id' => 'stark.test_html_id',
-      'plugin' => 'test_html_id',
-    ));
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_block_create called',
-      'entity_crud_hook_test_entity_create called for type block',
-    ));
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $entity->save();
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_block_presave called',
-      'entity_crud_hook_test_entity_presave called for type block',
-      'entity_crud_hook_test_block_insert called',
-      'entity_crud_hook_test_entity_insert called for type block',
-    ));
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $entity = entity_load('block', $entity->id());
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_entity_load called for type block',
-      'entity_crud_hook_test_block_load called',
-    ));
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $entity->label = 'New label';
-    $entity->save();
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_block_presave called',
-      'entity_crud_hook_test_entity_presave called for type block',
-      'entity_crud_hook_test_block_update called',
-      'entity_crud_hook_test_entity_update called for type block',
-    ));
-
-    $_SESSION['entity_crud_hook_test'] = array();
-    $entity->delete();
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_block_predelete called',
-      'entity_crud_hook_test_entity_predelete called for type block',
-      'entity_crud_hook_test_block_delete called',
-      'entity_crud_hook_test_entity_delete called for type block',
-    ));
-  }
-
-  /**
    * Tests hook invocations for CRUD operations on comments.
    */
   public function testCommentHooks() {
@@ -138,7 +84,6 @@ public function testCommentHooks() {
     ));
     $node->save();
     $nid = $node->nid;
-    $_SESSION['entity_crud_hook_test'] = array();
 
     $comment = entity_create('comment', array(
       'node_type' => 'node_type_' . $node->bundle(),
@@ -153,11 +98,6 @@ public function testCommentHooks() {
       'langcode' => LANGUAGE_NOT_SPECIFIED,
     ));
 
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_comment_create called',
-      'entity_crud_hook_test_entity_create called for type comment',
-    ));
-
     $_SESSION['entity_crud_hook_test'] = array();
     comment_save($comment);
 
@@ -214,12 +154,6 @@ public function testFileHooks() {
       'status' => 1,
       'timestamp' => REQUEST_TIME,
     ));
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_file_create called',
-      'entity_crud_hook_test_entity_create called for type file',
-    ));
-
     $_SESSION['entity_crud_hook_test'] = array();
     $file->save();
 
@@ -276,12 +210,6 @@ public function testNodeHooks() {
       'created' => REQUEST_TIME,
       'changed' => REQUEST_TIME,
     ));
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_node_create called',
-      'entity_crud_hook_test_entity_create called for type node',
-    ));
-
     $_SESSION['entity_crud_hook_test'] = array();
     $node->save();
 
@@ -334,7 +262,6 @@ public function testTaxonomyTermHooks() {
       'module' => 'entity_crud_hook_test',
     ));
     taxonomy_vocabulary_save($vocabulary);
-    $_SESSION['entity_crud_hook_test'] = array();
 
     $term = entity_create('taxonomy_term', array(
       'vid' => $vocabulary->id(),
@@ -343,12 +270,6 @@ public function testTaxonomyTermHooks() {
       'description' => NULL,
       'format' => 1,
     ));
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_taxonomy_term_create called',
-      'entity_crud_hook_test_entity_create called for type taxonomy_term',
-    ));
-
     $_SESSION['entity_crud_hook_test'] = array();
     taxonomy_term_save($term);
 
@@ -400,12 +321,6 @@ public function testTaxonomyVocabularyHooks() {
       'description' => NULL,
       'module' => 'entity_crud_hook_test',
     ));
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_taxonomy_vocabulary_create called',
-      'entity_crud_hook_test_entity_create called for type taxonomy_vocabulary',
-    ));
-
     $_SESSION['entity_crud_hook_test'] = array();
     taxonomy_vocabulary_save($vocabulary);
 
@@ -457,12 +372,6 @@ public function testUserHooks() {
       'status' => 1,
       'language' => 'en',
     ));
-
-    $this->assertHookMessageOrder(array(
-      'entity_crud_hook_test_user_create called',
-      'entity_crud_hook_test_entity_create called for type user',
-    ));
-
     $_SESSION['entity_crud_hook_test'] = array();
     $account->save();
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFormTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFormTest.php
index fbbd131..a978107 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityFormTest.php
@@ -85,7 +85,7 @@ protected function assertFormCRUD($entity_type) {
   protected function loadEntityByName($entity_type, $name) {
     // Always load the entity from the database to ensure that changes are
     // correctly picked up.
-    $this->container->get('plugin.manager.entity')->getStorageController($entity_type)->resetCache();
+    entity_get_controller($entity_type)->resetCache();
     return current(entity_load_multiple_by_properties($entity_type, array('name' => $name)));
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
index 4a6104c..b658cd9 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Entity/EntityTranslationTest.php
@@ -245,7 +245,7 @@ protected function assertMultilingualProperties($entity_type) {
       if ($langcode != $default_langcode) {
         $properties[$langcode] = array(
           'name' => array(0 => $this->randomName()),
-          'user_id' => array(0 => mt_rand(128, 256)),
+          'user_id' => array(0 => mt_rand(0, 127)),
         );
       }
       else {
diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php
index e3521cc..3b7f935 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Form/ElementTest.php
@@ -107,23 +107,4 @@ function testButtonClasses() {
     $this->assertEqual(1, count($this->xpath('//*[contains(concat(" ", @class, " "), " button-danger ")]')));
   }
 
-  /**
-   * Tests the #group property.
-   */
-  function testGroupElements() {
-    $this->drupalGet('form-test/group-details');
-    $elements = $this->xpath('//div[@class="details-wrapper"]//div[@class="details-wrapper"]//label');
-    $this->assertTrue(count($elements) == 1);
-    $this->drupalGet('form-test/group-container');
-    $elements = $this->xpath('//div[@id="edit-container"]//div[@class="details-wrapper"]//label');
-    $this->assertTrue(count($elements) == 1);
-    $this->drupalGet('form-test/group-fieldset');
-    $elements = $this->xpath('//fieldset[@id="edit-fieldset"]//div[@id="edit-meta"]//label');
-    $this->assertTrue(count($elements) == 1);
-    $this->drupalGet('form-test/group-vertical-tabs');
-    $elements = $this->xpath('//div[@class="vertical-tabs-panes"]//details[@id="edit-meta"]//label');
-    $this->assertTrue(count($elements) == 1);
-    $elements = $this->xpath('//div[@class="vertical-tabs-panes"]//details[@id="edit-meta-2"]//label');
-    $this->assertTrue(count($elements) == 1);
-  }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php b/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php
index b5989a6..9efe0c3 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Form/FormTest.php
@@ -29,11 +29,12 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $filtered_html_format = entity_create('filter_format', array(
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
-    ));
-    $filtered_html_format->save();
+    );
+    $filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($filtered_html_format);
 
     $filtered_html_permission = filter_permission_name($filtered_html_format);
     user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array($filtered_html_permission));
diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
index dcf53b0..9c51a89 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
@@ -47,8 +47,7 @@ function setUp() {
       'region' => 'content',
     );
     $this->drupalPlaceBlock('system_menu_block:menu-tools', $settings);
-    $settings['theme'] = config('system.theme')->get('admin');
-    $this->drupalPlaceBlock('system_menu_block:menu-tools', $settings);
+    $this->drupalPlaceBlock('system_menu_block:menu-tools', $settings, config('system.theme')->get('admin'));
   }
 
   /**
@@ -153,8 +152,7 @@ function testBreadCrumbs() {
     $this->assertBreadcrumb("admin/structure/types/manage/$type/fields/body/widget-type", $trail);
 
     // Verify Filter text format administration breadcrumbs.
-    $filter_formats = filter_formats();
-    $format = reset($filter_formats);
+    $format = db_query_range("SELECT format, name FROM {filter_format}", 1, 1)->fetch();
     $format_id = $format->format;
     $trail = $config + array(
       'admin/config/content' => t('Content authoring'),
diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php
index 35d23e8..b5861ba 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Menu/MenuRouterTest.php
@@ -63,7 +63,7 @@ function setUp() {
     variable_set('theme_default', $this->default_theme);
     config('system.theme')->set('admin', $this->admin_theme)->save();
     theme_disable(array($this->alternate_theme));
-    $this->drupalPlaceBlock('system_menu_block:menu-tools');
+
   }
 
   /**
diff --git a/core/modules/system/lib/Drupal/system/Tests/Module/DependencyTest.php b/core/modules/system/lib/Drupal/system/Tests/Module/DependencyTest.php
index 1c5527b..8fa84fe 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Module/DependencyTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Module/DependencyTest.php
@@ -134,11 +134,11 @@ function testModuleEnableOrder() {
     $this->assertModules(array('module_test'), TRUE);
     state()->set('module_test.dependency', 'dependency');
     // module_test creates a dependency chain:
-    // - forum depends on taxonomy, comment, history, and ban (via module_test)
+    // - forum depends on taxonomy, comment, history, and poll (via module_test)
     // - taxonomy depends on options
-    // - ban depends on php (via module_test)
+    // - poll depends on php (via module_test)
     // The correct enable order is:
-    $expected_order = array('php', 'ban', 'comment', 'history', 'options', 'taxonomy', 'forum');
+    $expected_order = array('comment', 'history', 'options', 'taxonomy', 'php', 'poll', 'forum');
 
     // Enable the modules through the UI, verifying that the dependency chain
     // is correct.
@@ -146,15 +146,15 @@ function testModuleEnableOrder() {
     $edit['modules[Core][forum][enable]'] = 'forum';
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
     $this->assertModules(array('forum'), FALSE);
-    $this->assertText(t('You must enable the History, Taxonomy, Options, Comment, Ban, PHP Filter modules to install Forum.'));
+    $this->assertText(t('You must enable the History, Taxonomy, Options, Comment, Poll, PHP Filter modules to install Forum.'));
     $edit['modules[Core][history][enable]'] = 'history';
     $edit['modules[Core][options][enable]'] = 'options';
     $edit['modules[Core][taxonomy][enable]'] = 'taxonomy';
     $edit['modules[Core][comment][enable]'] = 'comment';
-    $edit['modules[Core][ban][enable]'] = 'ban';
+    $edit['modules[Core][poll][enable]'] = 'poll';
     $edit['modules[Core][php][enable]'] = 'php';
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
-    $this->assertModules(array('forum', 'ban', 'php', 'comment', 'history', 'taxonomy', 'options'), TRUE);
+    $this->assertModules(array('forum', 'poll', 'php', 'comment', 'history', 'taxonomy', 'options'), TRUE);
 
     // Check the actual order which is saved by module_test_modules_enabled().
     $module_order = state()->get('system_test.module_enable_order') ?: array();
diff --git a/core/modules/system/lib/Drupal/system/Tests/Module/EnableDisableTest.php b/core/modules/system/lib/Drupal/system/Tests/Module/EnableDisableTest.php
index 2221aaf..e8602f4 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Module/EnableDisableTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Module/EnableDisableTest.php
@@ -43,7 +43,7 @@ function testEnableDisable() {
 
     // Remove already enabled modules (via installation profile).
     // @todo Remove this after removing all dependencies from Testing profile.
-    foreach ($this->container->get('module_handler')->getModuleList() as $dependency => $filename) {
+    foreach (module_list() as $dependency) {
       // Exclude required modules. Only installation profile "suggestions" can
       // be disabled and uninstalled.
       if (isset($modules[$dependency])) {
diff --git a/core/modules/system/lib/Drupal/system/Tests/Module/ModuleApiTest.php b/core/modules/system/lib/Drupal/system/Tests/Module/ModuleApiTest.php
index 75ce7cd..85a4184 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Module/ModuleApiTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Module/ModuleApiTest.php
@@ -25,7 +25,7 @@ public static function getInfo() {
   }
 
   /**
-   * The basic functionality of retrieving enabled modules.
+   * The basic functionality of module_list().
    */
   function testModuleList() {
     // Build a list of modules, sorted alphabetically.
@@ -36,48 +36,50 @@ function testModuleList() {
     $module_list[] = 'standard';
 
     sort($module_list);
-    // Compare this list to the one returned by the extension handler. We expect
-    // them to match, since all default profile modules have a weight equal to 0
+    // Compare this list to the one returned by module_list(). We expect them
+    // to match, since all default profile modules have a weight equal to 0
     // (except for block.module, which has a lower weight but comes first in
     // the alphabet anyway).
     $this->assertModuleList($module_list, t('Standard profile'));
 
     // Try to install a new module.
-    module_enable(array('ban'));
-    $module_list[] = 'ban';
+    module_enable(array('contact'));
+    $module_list[] = 'contact';
     sort($module_list);
     $this->assertModuleList($module_list, t('After adding a module'));
 
     // Try to mess with the module weights.
-    module_set_weight('ban', 20);
-
-    // Move ban to the end of the array.
-    unset($module_list[array_search('ban', $module_list)]);
-    $module_list[] = 'ban';
+    module_set_weight('contact', 20);
+    // Reset the module list.
+    system_list_reset();
+    // Move contact to the end of the array.
+    unset($module_list[array_search('contact', $module_list)]);
+    $module_list[] = 'contact';
     $this->assertModuleList($module_list, t('After changing weights'));
 
     // Test the fixed list feature.
     $fixed_list = array(
-      'system' => 'core/modules/system/system.module',
-      'menu' => 'core/modules/menu/menu.module',
+      'system' => array('filename' => drupal_get_path('module', 'system')),
+      'menu' => array('filename' => drupal_get_path('module', 'menu')),
     );
-    $this->container->get('module_handler')->setModuleList($fixed_list);
+    module_list(NULL, $fixed_list);
     $new_module_list = array_combine(array_keys($fixed_list), array_keys($fixed_list));
     $this->assertModuleList($new_module_list, t('When using a fixed list'));
 
+    // Reset the module list.
+    module_list_reset();
+    $this->assertModuleList($module_list, t('After reset'));
   }
 
   /**
-   * Assert that the extension handler returns the expected values.
+   * Assert that module_list() return the expected values.
    *
    * @param $expected_values
    *   The expected values, sorted by weight and module name.
    */
   protected function assertModuleList(Array $expected_values, $condition) {
-    $expected_values = array_values(array_unique($expected_values));
-    $enabled_modules = array_keys($this->container->get('module_handler')->getModuleList());
-    $enabled_modules = sort($enabled_modules);
-    $this->assertEqual($expected_values, $enabled_modules, format_string('@condition: extension handler returns correct results', array('@condition' => $condition)));
+    $expected_values = array_combine($expected_values, $expected_values);
+    $this->assertEqual($expected_values, module_list(), format_string('@condition: module_list() returns correct results', array('@condition' => $condition)));
   }
 
   /**
@@ -101,11 +103,12 @@ function testModuleImplements() {
     // already loaded when the cache is rebuilt.
     // For that activate the module_test which provides the file to load.
     module_enable(array('module_test'));
-    $module_handler = drupal_container()->get('module_handler');
-    $module_handler->loadAll();
+
     module_load_include('inc', 'module_test', 'module_test.file');
-    $modules = $module_handler->getImplementations('test_hook');
+    $modules = module_implements('test_hook');
+    $static = drupal_static('module_implements');
     $this->assertTrue(in_array('module_test', $modules), 'Hook found.');
+    $this->assertEqual($static['test_hook']['module_test'], 'file', 'Include file detected.');
   }
 
   /**
@@ -151,10 +154,10 @@ function testDependencyResolution() {
     module_enable(array('module_test'), FALSE);
     $this->assertTrue(module_exists('module_test'), 'Test module is enabled.');
     $this->assertFalse(module_exists('forum'), 'Forum module is disabled.');
-    $this->assertFalse(module_exists('ban'), 'Ban module is disabled.');
+    $this->assertFalse(module_exists('poll'), 'Poll module is disabled.');
     $this->assertFalse(module_exists('php'), 'PHP module is disabled.');
 
-    // First, create a fake missing dependency. Forum depends on ban, which
+    // First, create a fake missing dependency. Forum depends on poll, which
     // depends on a made-up module, foo. Nothing should be installed.
     state()->set('module_test.dependency', 'missing dependency');
     drupal_static_reset('system_rebuild_module_data');
@@ -162,27 +165,27 @@ function testDependencyResolution() {
     $this->assertFalse($result, 'module_enable() returns FALSE if dependencies are missing.');
     $this->assertFalse(module_exists('forum'), 'module_enable() aborts if dependencies are missing.');
 
-    // Now, fix the missing dependency. Forum module depends on ban, but ban
+    // Now, fix the missing dependency. Forum module depends on poll, but poll
     // depends on the PHP module. module_enable() should work.
     state()->set('module_test.dependency', 'dependency');
     drupal_static_reset('system_rebuild_module_data');
     $result = module_enable(array('forum'));
     $this->assertTrue($result, 'module_enable() returns the correct value.');
     // Verify that the fake dependency chain was installed.
-    $this->assertTrue(module_exists('ban') && module_exists('php'), 'Dependency chain was installed by module_enable().');
+    $this->assertTrue(module_exists('poll') && module_exists('php'), 'Dependency chain was installed by module_enable().');
     // Verify that the original module was installed.
     $this->assertTrue(module_exists('forum'), 'Module installation with unlisted dependencies succeeded.');
     // Finally, verify that the modules were enabled in the correct order.
     $module_order = state()->get('system_test.module_enable_order') ?: array();
-    $this->assertEqual($module_order, array('php', 'ban', 'forum'), 'Modules were enabled in the correct order by module_enable().');
+    $this->assertEqual($module_order, array('php', 'poll', 'forum'), 'Modules were enabled in the correct order by module_enable().');
 
-    // Now, disable the PHP module. Both forum and ban should be disabled as
+    // Now, disable the PHP module. Both forum and poll should be disabled as
     // well, in the correct order.
     module_disable(array('php'));
-    $this->assertTrue(!module_exists('forum') && !module_exists('ban'), 'Depedency chain was disabled by module_disable().');
+    $this->assertTrue(!module_exists('forum') && !module_exists('poll'), 'Depedency chain was disabled by module_disable().');
     $this->assertFalse(module_exists('php'), 'Disabling a module with unlisted dependents succeeded.');
     $disabled_modules = state()->get('module_test.disable_order') ?: array();
-    $this->assertEqual($disabled_modules, array('forum', 'ban', 'php'), 'Modules were disabled in the correct order by module_disable().');
+    $this->assertEqual($disabled_modules, array('forum', 'poll', 'php'), 'Modules were disabled in the correct order by module_disable().');
 
     // Disable a module that is listed as a dependency by the installation
     // profile. Make sure that the profile itself is not on the list of
@@ -202,20 +205,20 @@ function testDependencyResolution() {
     // that is too destructive to perform automatically.
     $result = module_uninstall(array('php'));
     $this->assertFalse($result, 'Calling module_uninstall() on a module whose dependents are not uninstalled fails.');
-    foreach (array('forum', 'ban', 'php') as $module) {
+    foreach (array('forum', 'poll', 'php') as $module) {
       $this->assertNotEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, format_string('The @module module was not uninstalled.', array('@module' => $module)));
     }
 
     // Now uninstall all three modules explicitly, but in the incorrect order,
     // and make sure that drupal_uninstal_modules() uninstalled them in the
     // correct sequence.
-    $result = module_uninstall(array('ban', 'php', 'forum'));
+    $result = module_uninstall(array('poll', 'php', 'forum'));
     $this->assertTrue($result, 'module_uninstall() returns the correct value.');
-    foreach (array('forum', 'ban', 'php') as $module) {
+    foreach (array('forum', 'poll', 'php') as $module) {
       $this->assertEqual(drupal_get_installed_schema_version($module), SCHEMA_UNINSTALLED, format_string('The @module module was uninstalled.', array('@module' => $module)));
     }
     $uninstalled_modules = state()->get('module_test.uninstall_order') ?: array();
-    $this->assertEqual($uninstalled_modules, array('forum', 'ban', 'php'), 'Modules were uninstalled in the correct order by module_uninstall().');
+    $this->assertEqual($uninstalled_modules, array('forum', 'poll', 'php'), 'Modules were uninstalled in the correct order by module_uninstall().');
 
     // Uninstall the profile module from above, and make sure that the profile
     // itself is not on the list of dependent modules to be uninstalled.
@@ -226,8 +229,8 @@ function testDependencyResolution() {
     $this->assertTrue(in_array('comment', $uninstalled_modules), 'Comment module is in the list of uninstalled modules.');
     $this->assertFalse(in_array($profile, $uninstalled_modules), 'The installation profile is not in the list of uninstalled modules.');
 
-    // Enable forum module again, which should enable both the ban module and
-    // php module. But, this time do it with ban module declaring a dependency
+    // Enable forum module again, which should enable both the poll module and
+    // php module. But, this time do it with poll module declaring a dependency
     // on a specific version of php module in its info file. Make sure that
     // module_enable() still works.
     state()->set('module_test.dependency', 'version dependency');
@@ -235,17 +238,17 @@ function testDependencyResolution() {
     $result = module_enable(array('forum'));
     $this->assertTrue($result, 'module_enable() returns the correct value.');
     // Verify that the fake dependency chain was installed.
-    $this->assertTrue(module_exists('ban') && module_exists('php'), 'Dependency chain was installed by module_enable().');
+    $this->assertTrue(module_exists('poll') && module_exists('php'), 'Dependency chain was installed by module_enable().');
     // Verify that the original module was installed.
     $this->assertTrue(module_exists('forum'), 'Module installation with version dependencies succeeded.');
     // Finally, verify that the modules were enabled in the correct order.
     $enable_order = state()->get('system_test.module_enable_order') ?: array();
     $php_position = array_search('php', $enable_order);
-    $ban_position = array_search('ban', $enable_order);
+    $poll_position = array_search('poll', $enable_order);
     $forum_position = array_search('forum', $enable_order);
-    $php_before_ban = $php_position !== FALSE && $ban_position !== FALSE && $php_position < $ban_position;
-    $ban_before_forum = $ban_position !== FALSE && $forum_position !== FALSE && $ban_position < $forum_position;
-    $this->assertTrue($php_before_ban && $ban_before_forum, 'Modules were enabled in the correct order by module_enable().');
+    $php_before_poll = $php_position !== FALSE && $poll_position !== FALSE && $php_position < $poll_position;
+    $poll_before_forum = $poll_position !== FALSE && $forum_position !== FALSE && $poll_position < $forum_position;
+    $this->assertTrue($php_before_poll && $poll_before_forum, 'Modules were enabled in the correct order by module_enable().');
   }
 
   /**
diff --git a/core/modules/system/lib/Drupal/system/Tests/Module/ModuleTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Module/ModuleTestBase.php
index 7804b0a..916555d 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Module/ModuleTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Module/ModuleTestBase.php
@@ -57,7 +57,6 @@ function assertTableCount($base_table, $count = TRUE) {
    *   The name of the module.
    */
   function assertModuleTablesExist($module) {
-    $this->rebuildContainer();
     $tables = array_keys(drupal_get_schema_unprocessed($module));
     $tables_exist = TRUE;
     foreach ($tables as $table) {
@@ -145,7 +144,7 @@ function assertNoModuleConfig($module) {
    *   Expected module state.
    */
   function assertModules(array $modules, $enabled) {
-    $this->rebuildContainer();
+    system_list_reset();
     foreach ($modules as $module) {
       if ($enabled) {
         $message = 'Module "@module" is enabled.';
@@ -153,7 +152,7 @@ function assertModules(array $modules, $enabled) {
       else {
         $message = 'Module "@module" is not enabled.';
       }
-      $this->assertEqual($this->container->get('module_handler')->moduleExists($module), $enabled, format_string($message, array('@module' => $module)));
+      $this->assertEqual(module_exists($module), $enabled, format_string($message, array('@module' => $module)));
     }
   }
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Plugin/CacheDecoratorLanguageTest.php b/core/modules/system/lib/Drupal/system/Tests/Plugin/CacheDecoratorLanguageTest.php
index 23d01fa..56c1d0d 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Plugin/CacheDecoratorLanguageTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Plugin/CacheDecoratorLanguageTest.php
@@ -7,9 +7,8 @@
 
 namespace Drupal\system\Tests\Plugin;
 
-use Drupal\Core\Language\Language;
-use Drupal\plugin_test\Plugin\CachedMockBlockManager;
 use Drupal\simpletest\WebTestBase;
+use Drupal\Core\Language\Language;
 
 /**
  * Tests that the AlterDecorator fires and respects the alter hook.
@@ -99,9 +98,8 @@ public function testCacheDecoratorLanguage() {
       $this->assertEqual($cache->cid, 'mock_block:' . $langcode, format_string('The !cache cache exists.', array('!cache' => 'mock_block:' . $langcode)));
       $this->assertEqual($cache->expire, 1542646800, format_string('The cache expiration was properly set.'));
     }
-    // Clear the plugin definitions.
-    $manager = new CachedMockBlockManager();
-    $manager->clearCachedDefinitions();
+    // Delete cached items tagged with "plugin_test".
+    cache()->deleteTags(array('plugin_test'));
     foreach ($languages as $langcode) {
       $cache = cache()->get('mock_block:' . $langcode);
       $this->assertFalse($cache, format_string('The !cache cache was properly cleared through the cache::deleteTags() method.', array('!cache' => 'mock_block:' . $langcode)));
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/ChainMatcherTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/ChainMatcherTest.php
new file mode 100644
index 0000000..c6b28cc
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/ChainMatcherTest.php
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system\Tests\Routing\ChainMatcherTest.
+ */
+
+namespace Drupal\system\Tests\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
+use Symfony\Component\Routing\Exception\ResourceNotFoundException;
+use Symfony\Component\Routing\Exception\RouteNotFoundException;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+
+use Drupal\simpletest\UnitTestBase;
+use Drupal\Core\Routing\ChainMatcher;
+
+use Exception;
+
+/**
+ * Basic tests for the ChainMatcher.
+ */
+class ChainMatcherTest extends UnitTestBase {
+  
+  public static function getInfo() {
+    return array(
+      'name' => 'Chain matcher tests',
+      'description' => 'Confirm that the chain matcher is working correctly.',
+      'group' => 'Routing',
+    );
+  }
+
+  /**
+   * Confirms that the expected exception is thrown.
+   */
+  public function testMethodNotAllowed() {
+
+    $chain = new ChainMatcher();
+
+    $method_not_allowed = new MockMatcher(function(Request $request) {
+      throw new MethodNotAllowedException(array('POST'));
+    });
+
+    try {
+      $chain->add($method_not_allowed);
+      $chain->matchRequest(Request::create('my/path'));
+    }
+    catch (MethodNotAllowedException $e) {
+      $this->pass('Correct exception thrown.');
+    }
+    catch (Exception $e) {
+      $this->fail('Incorrect exception thrown: ' . get_class($e));
+    }
+  }
+
+  /**
+   * Confirms that the expected exception is thrown.
+   */
+  public function testRequestNotFound() {
+
+    $chain = new ChainMatcher();
+
+    $resource_not_found = new MockMatcher(function(Request $request) {
+      throw new ResourceNotFoundException();
+    });
+
+    try {
+      $chain->add($resource_not_found);
+      $chain->matchRequest(Request::create('my/path'));
+    }
+    catch (ResourceNotFoundException $e) {
+      $this->pass('Correct exception thrown.');
+    }
+    catch (Exception $e) {
+      $this->fail('Incorrect exception thrown: ' . get_class($e));
+    }
+  }
+
+  /**
+   * Confirms that the expected exception is thrown.
+   */
+  public function testRequestFound() {
+
+    $chain = new ChainMatcher();
+
+    $method_not_allowed = new MockMatcher(function(Request $request) {
+      throw new MethodNotAllowedException(array('POST'));
+    });
+
+    $resource_not_found = new MockMatcher(function(Request $request) {
+      throw new ResourceNotFoundException();
+    });
+
+    $found_data = new MockMatcher(function(Request $request) {
+      return array('_controller' => 'foo');
+    });
+
+    try {
+      $chain->add($method_not_allowed);
+      $chain->add($resource_not_found);
+      $chain->add($found_data);
+      $request = Request::create('my/path');
+      $attributes = $chain->matchRequest($request);
+      $this->assertEqual($attributes['_controller'], 'foo', 'Correct attributes returned.');
+    }
+    catch (Exception $e) {
+      $this->fail('Exception thrown when a match should have been successful: ' . get_class($e));
+    }
+  }
+
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/FirstEntryFinalMatcherTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/FirstEntryFinalMatcherTest.php
new file mode 100644
index 0000000..c44a492
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/FirstEntryFinalMatcherTest.php
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system\Tests\Routing\NestedMatcherTest.
+ */
+
+namespace Drupal\system\Tests\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+
+use Drupal\simpletest\UnitTestBase;
+use Drupal\Core\Routing\HttpMethodMatcher;
+use Drupal\Core\Routing\NestedMatcher;
+use Drupal\Core\Routing\FirstEntryFinalMatcher;
+
+use Exception;
+
+/**
+ * Basic tests for the NestedMatcher class.
+ */
+class FirstEntryFinalMatcherTest extends UnitTestBase {
+
+  /**
+   * A collection of shared fixture data for tests.
+   *
+   * @var RoutingFixtures
+   */
+  protected $fixtures;
+
+  public static function getInfo() {
+    return array(
+      'name' => 'FirstEntryFinalMatcher tests',
+      'description' => 'Confirm that the FirstEntryFinalMatcher is working properly.',
+      'group' => 'Routing',
+    );
+  }
+
+  function __construct($test_id = NULL) {
+    parent::__construct($test_id);
+
+    $this->fixtures = new RoutingFixtures();
+  }
+
+  /**
+   * Confirms the final matcher returns correct attributes for static paths.
+   */
+  public function testFinalMatcherStatic() {
+
+    $collection = new RouteCollection();
+    $collection->add('route_a', new Route('/path/one', array(
+      '_controller' => 'foo',
+    )));
+
+    $request = Request::create('/path/one', 'GET');
+
+    $matcher = new FirstEntryFinalMatcher();
+    $matcher->setCollection($collection);
+    $attributes = $matcher->matchRequest($request);
+
+    $this->assertEqual($attributes['_route']->getOption('_name'), 'route_a', 'The correct matching route was found.');
+    $this->assertEqual($attributes['_controller'], 'foo', 'The correct controller was found.');
+  }
+
+  /**
+   * Confirms the final matcher returns correct attributes for pattern paths.
+   */
+  public function testFinalMatcherPattern() {
+
+    $collection = new RouteCollection();
+    $collection->add('route_a', new Route('/path/one/{value}', array(
+      '_controller' => 'foo',
+    )));
+
+    $request = Request::create('/path/one/narf', 'GET');
+    $request->attributes->set('system_path', 'path/one/narf');
+
+    $matcher = new FirstEntryFinalMatcher();
+    $matcher->setCollection($collection);
+    $attributes = $matcher->matchRequest($request);
+
+    $this->assertEqual($attributes['_route']->getOption('_name'), 'route_a', 'The correct matching route was found.');
+    $this->assertEqual($attributes['_controller'], 'foo', 'The correct controller was found.');
+    $this->assertEqual($attributes['value'], 'narf', 'Required placeholder value found.');
+  }
+
+  /**
+   * Confirms the final matcher returns correct attributes with default values.
+   */
+  public function testFinalMatcherPatternDefalts() {
+
+    $collection = new RouteCollection();
+    $collection->add('route_a', new Route('/path/one/{value}', array(
+      '_controller' => 'foo',
+      'value' => 'poink'
+    )));
+
+    $request = Request::create('/path/one', 'GET');
+    $request->attributes->set('system_path', 'path/one');
+
+    $matcher = new FirstEntryFinalMatcher();
+    $matcher->setCollection($collection);
+    $attributes = $matcher->matchRequest($request);
+
+    $this->assertEqual($attributes['_route']->getOption('_name'), 'route_a', 'The correct matching route was found.');
+    $this->assertEqual($attributes['_controller'], 'foo', 'The correct controller was found.');
+    $this->assertEqual($attributes['value'], 'poink', 'Optional placeholder value used default.');
+  }
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/HttpMethodMatcherTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/HttpMethodMatcherTest.php
new file mode 100644
index 0000000..8055743
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/HttpMethodMatcherTest.php
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system\Tests\Routing\HttpMethodMMatcherTest.
+ */
+
+namespace Drupal\system\Tests\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+
+use Drupal\simpletest\UnitTestBase;
+use Drupal\Core\Routing\HttpMethodMatcher;
+use Drupal\Core\Routing\NestedMatcher;
+use Drupal\Core\Routing\FirstEntryFinalMatcher;
+
+use Exception;
+
+/**
+ * Basic tests for the HttpMethodMatcher class.
+ */
+class HttpMethodMatcherTest extends UnitTestBase {
+
+  /**
+   * A collection of shared fixture data for tests.
+   *
+   * @var RoutingFixtures
+   */
+  protected $fixtures;
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Partial matcher HTTP Method tests',
+      'description' => 'Confirm that the Http Method partial matcher is functioning properly.',
+      'group' => 'Routing',
+    );
+  }
+
+  function __construct($test_id = NULL) {
+    parent::__construct($test_id);
+
+    $this->fixtures = new RoutingFixtures();
+  }
+
+  /**
+   * Confirms that the HttpMethod matcher matches properly.
+   */
+  public function testFilterRoutes() {
+
+    $matcher = new HttpMethodMatcher();
+    $matcher->setCollection($this->fixtures->sampleRouteCollection());
+
+    $routes = $matcher->matchRequestPartial(Request::create('path/one', 'GET'));
+
+    $this->assertEqual(count($routes->all()), 4, 'The correct number of routes was found.');
+    $this->assertNotNull($routes->get('route_a'), 'The first matching route was found.');
+    $this->assertNull($routes->get('route_b'), 'The non-matching route was not found.');
+    $this->assertNotNull($routes->get('route_c'), 'The second matching route was found.');
+    $this->assertNotNull($routes->get('route_d'), 'The all-matching route was found.');
+    $this->assertNotNull($routes->get('route_e'), 'The multi-matching route was found.');
+  }
+
+  /**
+   * Confirms we can nest multiple partial matchers.
+   */
+  public function testNestedMatcher() {
+
+    $matcher = new NestedMatcher();
+
+    $matcher->setInitialMatcher(new MockPathMatcher($this->fixtures->sampleRouteCollection()));
+    $matcher->addPartialMatcher(new HttpMethodMatcher());
+    $matcher->setFinalMatcher(new FirstEntryFinalMatcher());
+
+    $request = Request::create('/path/one', 'GET');
+
+    $attributes = $matcher->matchRequest($request);
+
+    $this->assertEqual($attributes['_route']->getOption('_name'), 'route_a', 'The correct matching route was found.');
+  }
+
+  /**
+   * Confirms that the HttpMethod matcher throws an exception for no-route.
+   */
+  public function testNoRouteFound() {
+    $matcher = new HttpMethodMatcher();
+
+    // Remove the sample route that would match any method.
+    $routes = $this->fixtures->sampleRouteCollection();
+    $routes->remove('route_d');
+
+    $matcher->setCollection($routes);
+
+    try {
+      $routes = $matcher->matchRequestPartial(Request::create('path/one', 'DELETE'));
+      $this->fail(t('No exception was thrown.'));
+    }
+    catch (Exception $e) {
+      $this->assertTrue($e instanceof MethodNotAllowedException, 'The correct exception was thrown.');
+    }
+
+  }
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/MimeTypeMatcherTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/MimeTypeMatcherTest.php
index 6061d56..05f8d42 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/MimeTypeMatcherTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/MimeTypeMatcherTest.php
@@ -7,7 +7,9 @@
 
 namespace Drupal\system\Tests\Routing;
 
+use Drupal\Core\Routing\FirstEntryFinalMatcher;
 use Drupal\Core\Routing\MimeTypeMatcher;
+use Drupal\Core\Routing\NestedMatcher;
 use Drupal\simpletest\UnitTestBase;
 
 use Symfony\Component\HttpFoundation\Request;
@@ -45,34 +47,52 @@ function __construct($test_id = NULL) {
   public function testFilterRoutes() {
 
     $matcher = new MimeTypeMatcher();
-    $collection = $this->fixtures->sampleRouteCollection();
+    $matcher->setCollection($this->fixtures->sampleRouteCollection());
 
     // Tests basic JSON request.
     $request = Request::create('path/two', 'GET');
     $request->headers->set('Accept', 'application/json, text/xml;q=0.9');
-    $routes = $matcher->filter($collection, $request);
-    $this->assertEqual(count($routes), 4, 'The correct number of routes was found.');
+    $routes = $matcher->matchRequestPartial($request);
+    $this->assertEqual(count($routes->all()), 4, 'The correct number of routes was found.');
     $this->assertNotNull($routes->get('route_c'), 'The json route was found.');
     $this->assertNull($routes->get('route_e'), 'The html route was not found.');
 
     // Tests JSON request with alternative JSON MIME type Accept header.
     $request = Request::create('path/two', 'GET');
     $request->headers->set('Accept', 'application/x-json, text/xml;q=0.9');
-    $routes = $matcher->filter($collection, $request);
-    $this->assertEqual(count($routes), 4, 'The correct number of routes was found.');
+    $routes = $matcher->matchRequestPartial($request);
+    $this->assertEqual(count($routes->all()), 4, 'The correct number of routes was found.');
     $this->assertNotNull($routes->get('route_c'), 'The json route was found.');
     $this->assertNull($routes->get('route_e'), 'The html route was not found.');
 
     // Tests basic HTML request.
     $request = Request::create('path/two', 'GET');
     $request->headers->set('Accept', 'text/html, text/xml;q=0.9');
-    $routes = $matcher->filter($collection, $request);
-    $this->assertEqual(count($routes), 4, 'The correct number of routes was found.');
+    $routes = $matcher->matchRequestPartial($request);
+    $this->assertEqual(count($routes->all()), 4, 'The correct number of routes was found.');
     $this->assertNull($routes->get('route_c'), 'The json route was not found.');
     $this->assertNotNull($routes->get('route_e'), 'The html route was found.');
   }
 
   /**
+   * Confirms we can nest multiple partial matchers.
+   */
+  public function testNestedMatcher() {
+
+    $matcher = new NestedMatcher();
+
+    $matcher->setInitialMatcher(new MockPathMatcher($this->fixtures->sampleRouteCollection()));
+    $matcher->addPartialMatcher(new MimeTypeMatcher());
+    $matcher->setFinalMatcher(new FirstEntryFinalMatcher());
+
+    $request = Request::create('/path/two', 'GET');
+    $request->headers->set('Accept', 'text/html, text/xml;q=0.9');
+
+    $attributes = $matcher->matchRequest($request);
+    $this->assertEqual($attributes['_route']->getOption('_name'), 'route_e', 'The correct matching route was found.');
+  }
+
+  /**
    * Confirms that the MimeTypeMatcher matcher throws an exception for no-route.
    */
   public function testNoRouteFound() {
@@ -85,10 +105,12 @@ public function testNoRouteFound() {
     $routes->remove('route_c');
     $routes->remove('route_d');
 
+    $matcher->setCollection($routes);
+
     try {
       $request = Request::create('path/two', 'GET');
       $request->headers->set('Accept', 'application/json, text/xml;q=0.9');
-      $routes = $matcher->filter($routes, $request);
+      $routes = $matcher->matchRequestPartial($request);
       $this->fail(t('No exception was thrown.'));
     }
     catch (UnsupportedMediaTypeHttpException $e) {
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/MockAliasManager.php b/core/modules/system/lib/Drupal/system/Tests/Routing/MockAliasManager.php
deleted file mode 100644
index 6f5add4..0000000
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/MockAliasManager.php
+++ /dev/null
@@ -1,92 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\system\Tests\Routing\MockAliasManager.
- */
-
-namespace Drupal\system\Tests\Routing;
-
-use Drupal\Core\Path\AliasManagerInterface;
-
-/**
- * An easily configurable mock alias manager.
- */
-class MockAliasManager implements AliasManagerInterface {
-
-  /**
-   * Array of mocked aliases. Keys are system paths, followed by language.
-   *
-   * @var array
-   */
-  protected $aliases = array();
-
-  /**
-   * Array of mocked aliases. Keys are aliases, followed by language.
-   *
-   * @var array
-   */
-  protected $systemPaths = array();
-
-  /**
-   * An index of aliases that have been requested.
-   *
-   * @var array
-   */
-  protected $lookedUp = array();
-
-  /**
-   * The language to assume a path alias is for if not specified.
-   *
-   * @var string
-   */
-  public $defaultLanguage = 'en';
-
-  /**
-   * Adds an alias to the in-memory alias table for this object.
-   *
-   * @param type $path
-   *   The system path of the alias.
-   * @param type $alias
-   *   The alias of the system path.
-   * @param type $path_language
-   *   The language of this alias.
-   */
-  public function addAlias($path, $alias, $path_language = NULL) {
-    $language = $path_language ?: $this->defaultLanguage;
-
-    $this->aliases[$path][$language] = $alias;
-    $this->systemPaths[$alias][$language] = $path;
-  }
-
-  /**
-   * Implements \Drupal\Core\Path\AliasManagerInterface::getSystemPath().
-   */
-  public function getSystemPath($path, $path_language = NULL) {
-    $language = $path_language ?: $this->defaultLanguage;
-    return $this->systemPaths[$path][$language];
-  }
-
-  /**
-   * Implements \Drupal\Core\Path\AliasManagerInterface::getPathAlias().
-   */
-  public function getPathAlias($path, $path_language = NULL) {
-    $language = $path_language ?: $this->defaultLanguage;
-    $this->lookedUp[$path] = 1;
-    return $this->aliases[$path][$language];
-  }
-
-  /**
-   * Implements \Drupal\Core\Path\AliasManagerInterface::getPathLookups().
-   */
-  public function getPathLookups() {
-    return array_keys($this->lookedUp);
-  }
-
-  /**
-   * Implements \Drupal\Core\Path\AliasManagerInterface::preloadPathLookups().
-   */
-  public function preloadPathLookups(array $path_list) {
-    // Not needed.
-  }
-}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/MockController.php b/core/modules/system/lib/Drupal/system/Tests/Routing/MockController.php
index bc9d093..fe09a7b 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/MockController.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/MockController.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains Drupal\system\Tests\Routing\MockController.
+ * Definition of Drupal\system\Tests\Routing\MockController.
  */
 
 namespace Drupal\system\Tests\Routing;
@@ -14,9 +14,6 @@
  */
 class MockController extends ContainerAware {
 
-  /**
-   * Does nothing; this is just a fake controller method.
-   */
   public function run() {}
 
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/MockMatcher.php b/core/modules/system/lib/Drupal/system/Tests/Routing/MockMatcher.php
index dc796b8..71611d4 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/MockMatcher.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/MockMatcher.php
@@ -9,9 +9,15 @@
 
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
+use Symfony\Component\Routing\Exception\ResourceNotFoundException;
+use Symfony\Component\Routing\Exception\RouteNotFoundException;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+
+use Closure;
 
 /**
  * A mock matcher that can be configured with any matching logic for testing.
+ *
  */
 class MockMatcher implements RequestMatcherInterface {
 
@@ -20,19 +26,10 @@ class MockMatcher implements RequestMatcherInterface {
    */
   protected $matcher;
 
-  /**
-   * Constructs a MockMatcher object.
-   *
-   * @param \Closure $matcher
-   *   An anonymous function that will be used for the matchRequest() method.
-   */
-  public function __construct(\Closure $matcher) {
+  public function __construct(Closure $matcher) {
     $this->matcher = $matcher;
   }
 
-  /**
-   * Implements \Symfony\Component\Routing\Matcher\RequestMatcherInterface::matchRequest().
-   */
   public function matchRequest(Request $request) {
     $matcher = $this->matcher;
     return $matcher($request);
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/MockPathMatcher.php b/core/modules/system/lib/Drupal/system/Tests/Routing/MockPathMatcher.php
new file mode 100644
index 0000000..1592cbf
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/MockPathMatcher.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace Drupal\system\Tests\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+
+use Drupal\Core\Routing\InitialMatcherInterface;
+
+/**
+ * Provides a mock path matcher.
+ */
+class MockPathMatcher implements InitialMatcherInterface {
+
+  /**
+   * Routes to be matched.
+   *
+   * @var Symfony\Component\Routing\RouteCollection
+   */
+  protected $routes;
+
+  /**
+   * Construct the matcher given the route collection.
+   *
+   * @param Symfony\Component\Routing\RouteCollection $routes
+   *   The routes being matched.
+   */
+  public function __construct(RouteCollection $routes) {
+    $this->routes = $routes;
+  }
+
+  /**
+   * Matches a request against multiple routes.
+   *
+   * @param Request $request
+   *   A Request object against which to match.
+   *
+   * @return RouteCollection
+   *   A RouteCollection of matched routes.
+   */
+  public function matchRequestPartial(Request $request) {
+    // For now for testing we'll just do a straight string match.
+
+    $path = $request->getPathInfo();
+
+    $return = new RouteCollection();
+
+    foreach ($this->routes as $name => $route) {
+      if ($route->getPattern() == $path) {
+        $return->add($name, $route);
+      }
+    }
+
+    return $return;
+  }
+
+
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/MockRouteProvider.php b/core/modules/system/lib/Drupal/system/Tests/Routing/MockRouteProvider.php
deleted file mode 100644
index 8cdf57e..0000000
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/MockRouteProvider.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\system\Tests\Routing\MockRouteProvider.
- */
-
-namespace Drupal\system\Tests\Routing;
-
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\Routing\RouteCollection;
-
-use Symfony\Cmf\Component\Routing\RouteProviderInterface;
-
-/**
- * Easily configurable mock route provider.
- */
-class MockRouteProvider implements RouteProviderInterface {
-
-  /**
-   * A collection of routes for this route provider.
-   *
-   * @var RouteCollection
-   */
-  protected $routes;
-
-  /**
-   * Constructs a new MockRouteProvider.
-   *
-   * @param \Symfony\Component\Routing\RouteCollection $routes
-   *   The route collection to use for this provider.
-   */
-  public function __construct(RouteCollection $routes) {
-    $this->routes = $routes;
-  }
-
-  /**
-   * Implements \Symfony\Cmf\Component\Routing\RouteProviderInterface::getRouteCollectionForRequest().
-   *
-   * Not implemented at present as it is not needed.
-   */
-  public function getRouteCollectionForRequest(Request $request) {
-
-  }
-
-  /**
-   * Implements \Symfony\Cmf\Component\Routing\RouteProviderInterface::getRouteByName().
-   */
-  public function getRouteByName($name, $parameters = array()) {
-    $routes = $this->getRoutesByNames(array($name), $parameters);
-    if (empty($routes)) {
-      throw new RouteNotFoundException(sprintf('Route "%s" does not exist.', $name));
-    }
-
-    return reset($routes);
-  }
-
-  /**
-   * Implements \Symfony\Cmf\Component\Routing\RouteProviderInterface::getRoutesByName().
-   */
-  public function getRoutesByNames($names, $parameters = array()) {
-    $routes = array();
-    foreach ($names as $name) {
-      $routes[] = $this->routes->get($name);
-    }
-
-    return $routes;
-  }
-
-}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/NestedMatcherTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/NestedMatcherTest.php
new file mode 100644
index 0000000..de29538
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/NestedMatcherTest.php
@@ -0,0 +1,65 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system\Tests\Routing\NestedMatcherTest.
+ */
+
+namespace Drupal\system\Tests\Routing;
+
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+use Symfony\Component\Routing\Exception\MethodNotAllowedException;
+
+use Drupal\simpletest\UnitTestBase;
+use Drupal\Core\Routing\HttpMethodMatcher;
+use Drupal\Core\Routing\NestedMatcher;
+use Drupal\Core\Routing\FirstEntryFinalMatcher;
+
+use Exception;
+
+/**
+ * Basic tests for the NestedMatcher class.
+ */
+class NestedMatcherTest extends UnitTestBase {
+
+  /**
+   * A collection of shared fixture data for tests.
+   *
+   * @var RoutingFixtures
+   */
+  protected $fixtures;
+
+  public static function getInfo() {
+    return array(
+      'name' => 'NestedMatcher tests',
+      'description' => 'Confirm that the NestedMatcher system is working properly.',
+      'group' => 'Routing',
+    );
+  }
+
+  function __construct($test_id = NULL) {
+    parent::__construct($test_id);
+
+    $this->fixtures = new RoutingFixtures();
+  }
+
+  /**
+   * Confirms we can nest multiple partial matchers.
+   */
+  public function testNestedMatcher() {
+
+    $matcher = new NestedMatcher();
+
+    $matcher->setInitialMatcher(new MockPathMatcher($this->fixtures->sampleRouteCollection()));
+    $matcher->addPartialMatcher(new HttpMethodMatcher(), 1);
+    $matcher->setFinalMatcher(new FirstEntryFinalMatcher());
+
+    $request = Request::create('/path/one', 'GET');
+
+    $attributes = $matcher->matchRequest($request);
+
+    $this->assertEqual($attributes['_route']->getOption('_name'), 'route_a', 'The correct matching route was found.');
+  }
+}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/RouteProviderTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/PathMatcherTest.php
similarity index 81%
rename from core/modules/system/lib/Drupal/system/Tests/Routing/RouteProviderTest.php
rename to core/modules/system/lib/Drupal/system/Tests/Routing/PathMatcherTest.php
index 310a4e6..6769107 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/RouteProviderTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/PathMatcherTest.php
@@ -2,7 +2,7 @@
 
 /**
  * @file
- * Contains Drupal\system\Tests\Routing\RouteProviderTest.
+ * Definition of Drupal\system\Tests\Routing\PartialMatcherTest.
  */
 
 namespace Drupal\system\Tests\Routing;
@@ -13,16 +13,16 @@
 use Symfony\Component\Routing\Exception\ResourceNotFoundException;
 
 use Drupal\simpletest\UnitTestBase;
-use Drupal\Core\Routing\RouteProvider;
+use Drupal\Core\Routing\PathMatcher;
 use Drupal\Core\Database\Database;
 use Drupal\Core\Routing\MatcherDumper;
 
 use Exception;
 
 /**
- * Basic tests for the RouteProvider.
+ * Basic tests for the UrlMatcherDumper.
  */
-class RouteProviderTest extends UnitTestBase {
+class PathMatcherTest extends UnitTestBase {
 
   /**
    * A collection of shared fixture data for tests.
@@ -33,8 +33,8 @@ class RouteProviderTest extends UnitTestBase {
 
   public static function getInfo() {
     return array(
-      'name' => 'Route Provider tests',
-      'description' => 'Confirm that the default route provider is working correctly.',
+      'name' => 'Path matcher tests',
+      'description' => 'Confirm that the path matching library is working correctly.',
       'group' => 'Routing',
     );
   }
@@ -57,11 +57,11 @@ public function tearDown() {
   public function testCandidateOutlines() {
 
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection);
+    $matcher = new PathMatcher($connection);
 
     $parts = array('node', '5', 'edit');
 
-    $candidates = $provider->getCandidateOutlines($parts);
+    $candidates = $matcher->getCandidateOutlines($parts);
 
     $candidates = array_flip($candidates);
 
@@ -77,7 +77,7 @@ public function testCandidateOutlines() {
    */
   function testExactPathMatch() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -89,7 +89,7 @@ function testExactPathMatch() {
 
     $request = Request::create($path, 'GET');
 
-    $routes = $provider->getRouteCollectionForRequest($request);
+    $routes = $matcher->matchRequestPartial($request);
 
     foreach ($routes as $route) {
       $this->assertEqual($route->getPattern(), $path, 'Found path has correct pattern');
@@ -101,7 +101,7 @@ function testExactPathMatch() {
    */
   function testOutlinePathMatch() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -113,14 +113,14 @@ function testOutlinePathMatch() {
 
     $request = Request::create($path, 'GET');
 
-    $routes = $provider->getRouteCollectionForRequest($request);
+    $routes = $matcher->matchRequestPartial($request);
 
     // All of the matching paths have the correct pattern.
     foreach ($routes as $route) {
       $this->assertEqual($route->compile()->getPatternOutline(), '/path/%/one', 'Found path has correct pattern');
     }
 
-    $this->assertEqual(count($routes), 2, 'The correct number of routes was found.');
+    $this->assertEqual(count($routes->all()), 2, 'The correct number of routes was found.');
     $this->assertNotNull($routes->get('route_a'), 'The first matching route was found.');
     $this->assertNotNull($routes->get('route_b'), 'The second matching route was not found.');
   }
@@ -130,7 +130,7 @@ function testOutlinePathMatch() {
    */
   function testOutlinePathMatchTrailingSlash() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -142,14 +142,14 @@ function testOutlinePathMatchTrailingSlash() {
 
     $request = Request::create($path, 'GET');
 
-    $routes = $provider->getRouteCollectionForRequest($request);
+    $routes = $matcher->matchRequestPartial($request);
 
     // All of the matching paths have the correct pattern.
     foreach ($routes as $route) {
       $this->assertEqual($route->compile()->getPatternOutline(), '/path/%/one', 'Found path has correct pattern');
     }
 
-    $this->assertEqual(count($routes), 2, 'The correct number of routes was found.');
+    $this->assertEqual(count($routes->all()), 2, 'The correct number of routes was found.');
     $this->assertNotNull($routes->get('route_a'), 'The first matching route was found.');
     $this->assertNotNull($routes->get('route_b'), 'The second matching route was not found.');
   }
@@ -159,7 +159,7 @@ function testOutlinePathMatchTrailingSlash() {
    */
   function testOutlinePathMatchDefaults() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -177,14 +177,15 @@ function testOutlinePathMatchDefaults() {
     $request = Request::create($path, 'GET');
 
     try {
-      $routes = $provider->getRouteCollectionForRequest($request);
+      $routes = $matcher->matchRequestPartial($request);
 
       // All of the matching paths have the correct pattern.
       foreach ($routes as $route) {
+        $compiled = $route->compile();
         $this->assertEqual($route->compile()->getPatternOutline(), '/some/path', 'Found path has correct pattern');
       }
 
-      $this->assertEqual(count($routes), 1, 'The correct number of routes was found.');
+      $this->assertEqual(count($routes->all()), 1, 'The correct number of routes was found.');
       $this->assertNotNull($routes->get('poink'), 'The first matching route was found.');
     }
     catch (ResourceNotFoundException $e) {
@@ -197,7 +198,7 @@ function testOutlinePathMatchDefaults() {
    */
   function testOutlinePathMatchDefaultsCollision() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -216,14 +217,15 @@ function testOutlinePathMatchDefaultsCollision() {
     $request = Request::create($path, 'GET');
 
     try {
-      $routes = $provider->getRouteCollectionForRequest($request);
+      $routes = $matcher->matchRequestPartial($request);
 
       // All of the matching paths have the correct pattern.
       foreach ($routes as $route) {
+        $compiled = $route->compile();
         $this->assertEqual($route->compile()->getPatternOutline(), '/some/path', 'Found path has correct pattern');
       }
 
-      $this->assertEqual(count($routes), 1, 'The correct number of routes was found.');
+      $this->assertEqual(count($routes->all()), 1, 'The correct number of routes was found.');
       $this->assertNotNull($routes->get('poink'), 'The first matching route was found.');
     }
     catch (ResourceNotFoundException $e) {
@@ -236,7 +238,7 @@ function testOutlinePathMatchDefaultsCollision() {
    */
   function testOutlinePathMatchDefaultsCollision2() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -255,14 +257,14 @@ function testOutlinePathMatchDefaultsCollision2() {
     $request = Request::create($path, 'GET');
 
     try {
-      $routes = $provider->getRouteCollectionForRequest($request);
+      $routes = $matcher->matchRequestPartial($request);
 
       // All of the matching paths have the correct pattern.
       foreach ($routes as $route) {
         $this->assertEqual($route->compile()->getPatternOutline(), '/some/path/here', 'Found path has correct pattern');
       }
 
-      $this->assertEqual(count($routes), 1, 'The correct number of routes was found.');
+      $this->assertEqual(count($routes->all()), 1, 'The correct number of routes was found.');
       $this->assertNotNull($routes->get('narf'), 'The first matching route was found.');
     }
     catch (ResourceNotFoundException $e) {
@@ -275,7 +277,7 @@ function testOutlinePathMatchDefaultsCollision2() {
    */
   function testOutlinePathNoMatch() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -288,12 +290,13 @@ function testOutlinePathNoMatch() {
     $request = Request::create($path, 'GET');
 
     try {
-      $routes = $provider->getRouteCollectionForRequest($request);
+      $routes = $matcher->matchRequestPartial($request);
       $this->fail(t('No exception was thrown.'));
     }
     catch (Exception $e) {
       $this->assertTrue($e instanceof ResourceNotFoundException, 'The correct exception was thrown.');
     }
+
   }
 
   /**
@@ -301,7 +304,7 @@ function testOutlinePathNoMatch() {
    */
   function testSystemPathMatch() {
     $connection = Database::getConnection();
-    $provider = new RouteProvider($connection, 'test_routes');
+    $matcher = new PathMatcher($connection, 'test_routes');
 
     $this->fixtures->createTables($connection);
 
@@ -312,7 +315,7 @@ function testSystemPathMatch() {
     $request = Request::create('/path/one', 'GET');
     $request->attributes->set('system_path', 'path/two');
 
-    $routes = $provider->getRouteCollectionForRequest($request);
+    $routes = $matcher->matchRequestPartial($request);
 
     foreach ($routes as $route) {
       $this->assertEqual($route->getPattern(), '/path/two', 'Found path has correct pattern');
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/RouteTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/RouteTest.php
index 6e808e7..4fc7a11 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/RouteTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Routing/RouteTest.php
@@ -10,6 +10,7 @@
 use Symfony\Component\Routing\Route;
 
 use Drupal\simpletest\UnitTestBase;
+use Drupal\Core\Database\Database;
 
 /**
  * Basic tests for the Route.
diff --git a/core/modules/system/lib/Drupal/system/Tests/Routing/UrlGeneratorTest.php b/core/modules/system/lib/Drupal/system/Tests/Routing/UrlGeneratorTest.php
deleted file mode 100644
index 0e9f13e..0000000
--- a/core/modules/system/lib/Drupal/system/Tests/Routing/UrlGeneratorTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\system\Tests\Routing\UrlGeneratorTest.
- */
-
-namespace Drupal\system\Tests\Routing;
-
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\Routing\Route;
-use Symfony\Component\Routing\RouteCollection;
-use Symfony\Component\Routing\RequestContext;
-
-use Drupal\simpletest\UnitTestBase;
-
-use Drupal\Core\Routing\UrlGenerator;
-
-/**
- * Basic tests for the Route.
- */
-class UrlGeneratorTest extends UnitTestBase {
-
-  protected $generator;
-
-  protected $aliasManager;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'UrlGenerator',
-      'description' => 'Confirm that the UrlGenerator is functioning properly.',
-      'group' => 'Routing',
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    $routes = new RouteCollection();
-    $routes->add('test_1', new Route('/test/one'));
-    $routes->add('test_2', new Route('/test/two/{narf}'));
-    $provider = new MockRouteProvider($routes);
-
-    $this->aliasManager = new MockAliasManager();
-    $this->aliasManager->addAlias('test/one', 'hello/world');
-
-    $context = new RequestContext();
-    $context->fromRequest(Request::create('/some/path'));
-
-    $generator = new UrlGenerator($provider, $this->aliasManager);
-    $generator->setContext($context);
-
-    $this->generator = $generator;
-  }
-
-  /**
-   * Confirms that generated routes will have aliased paths.
-   */
-  public function testAliasGeneration() {
-    $url = $this->generator->generate('test_1');
-
-    $this->assertEqual($url, '/hello/world', 'Correct URL generated including alias.');
-  }
-
-  /**
-   * Confirms that generated routes will have aliased paths.
-   */
-  public function testAliasGenerationWithParameters() {
-    $this->aliasManager->addAlias('test/two/5', 'goodbye/cruel/world');
-
-    $url = $this->generator->generate('test_2', array('narf' => '5'));
-
-    $this->assertEqual($url, '/goodbye/cruel/world', 'Correct URL generated including alias and parameters.');
-  }
-
-}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php b/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
index 89fa5ce..ea3c960 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Serialization/EntitySerializationTest.php
@@ -120,38 +120,9 @@ public function testSerialize() {
     $expected = json_encode($normalized);
     // Test 'json'.
     $actual = $serializer->serialize($this->entity, 'json');
-    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when "json" is requested.');
-    $actual = $serializer->serialize($normalized, 'json');
-    $this->assertIdentical($actual, $expected, 'A normalized array serializes to JSON when "json" is requested');
+    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when json is requested.');
     // Test 'ajax'.
     $actual = $serializer->serialize($this->entity, 'ajax');
-    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when "ajax" is requested.');
-    $actual = $serializer->serialize($normalized, 'ajax');
-    $this->assertIdentical($actual, $expected, 'A normalized array serializes to JSON when "ajax" is requested');
-
-    // Generate the expected xml in a way that allows changes to entity property
-    // order.
-    $expected = array(
-      'id' => '<id><value>' . $this->entity->id() . '</value></id>',
-      'revision_id' => '<revision_id><value>' . $this->entity->getRevisionId() . '</value></revision_id>',
-      'uuid' => '<uuid><value>' . $this->entity->uuid() . '</value></uuid>',
-      'langcode' => '<langcode><value>' . LANGUAGE_NOT_SPECIFIED . '</value></langcode>',
-      'default_langcode' => '<default_langcode><value/></default_langcode>',
-      'name' => '<name><value>' . $this->values['name'] . '</value></name>',
-      'user_id' => '<user_id><value>' . $this->values['user_id'] . '</value></user_id>',
-      'field_test_text' => '<field_test_text><value>' . $this->values['field_test_text']['value'] . '</value><format>' . $this->values['field_test_text']['format'] . '</format></field_test_text>',
-    );
-    // Sort it in the same order as normalised.
-    $expected = array_merge($normalized, $expected);
-    // Add header and footer.
-    array_unshift($expected, '<?xml version="1.0"?>' . PHP_EOL . '<response>');
-    $expected[] = '</response>' . PHP_EOL;
-    // Reduced the array to a string.
-    $expected = implode('', $expected);
-    // Test 'xml'. The output should match that of Symfony's XmlEncoder.
-    $actual = $serializer->serialize($this->entity, 'xml');
-    $this->assertIdentical($actual, $expected);
-    $actual = $serializer->serialize($normalized, 'xml');
-    $this->assertIdentical($actual, $expected);
+    $this->assertIdentical($actual, $expected, 'Entity serializes to JSON when ajax is requested.');
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php b/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php
index 7c8c85b..dc555cb 100644
--- a/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/System/AccessDeniedTest.php
@@ -82,7 +82,7 @@ function testAccessDenied() {
     $edit = array(
       'region' => -1,
     );
-    $this->drupalPost('admin/structure/block/manage/stark.login/configure', $edit, t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/plugin.core.block.stark.login/stark/configure', $edit, t('Save block'));
 
     // Check that we can log in from the 403 page.
     $this->drupalLogout();
diff --git a/core/modules/system/lib/Drupal/system/Tests/System/MainContentFallbackTest.php b/core/modules/system/lib/Drupal/system/Tests/System/MainContentFallbackTest.php
index 4e79ae9..2de5ad3 100644
--- a/core/modules/system/lib/Drupal/system/Tests/System/MainContentFallbackTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/System/MainContentFallbackTest.php
@@ -56,7 +56,7 @@ function testMainContentFallback() {
     $edit['modules[Core][block][enable]'] = FALSE;
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
     $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    $this->rebuildContainer();
+    system_list_reset();
     $this->assertFalse(module_exists('block'), 'Block module disabled.');
 
     // At this point, no region is filled and fallback should be triggered.
@@ -90,7 +90,7 @@ function testMainContentFallback() {
     $edit['modules[Core][block][enable]'] = 'block';
     $this->drupalPost('admin/modules', $edit, t('Save configuration'));
     $this->assertText(t('The configuration options have been saved.'), 'Modules status has been updated.');
-    $this->rebuildContainer();
+    system_list_reset();
     $this->assertTrue(module_exists('block'), 'Block module re-enabled.');
   }
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Theme/RegistryTest.php b/core/modules/system/lib/Drupal/system/Tests/Theme/RegistryTest.php
index 5ab43ca..7ea187f 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Theme/RegistryTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Theme/RegistryTest.php
@@ -40,7 +40,7 @@ function testRaceCondition() {
 
     // Directly instantiate the theme registry, this will cause a base cache
     // entry to be written in __construct().
-    $registry = new ThemeRegistry($cid, 'cache', array('theme_registry' => TRUE), $this->container->get('module_handler')->isLoaded());
+    $registry = new ThemeRegistry($cid, 'cache', array('theme_registry' => TRUE));
 
     $this->assertTrue(cache()->get($cid), 'Cache entry was created.');
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTest.php b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTest.php
index 6e9b383..5267300 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Theme/ThemeTest.php
@@ -175,19 +175,9 @@ function testRegistryRebuild() {
     $this->assertIdentical(theme('theme_test_foo', array('foo' => 'a')), 'a', 'The theme registry contains theme_test_foo.');
 
     module_disable(array('theme_test'), FALSE);
-    // After enabling/disabling a module during a test, we need to rebuild the
-    // container and ensure the extension handler is loaded, otherwise theme()
-    // throws an exception.
-    $this->rebuildContainer();
-    $this->container->get('module_handler')->loadAll();
     $this->assertIdentical(theme('theme_test_foo', array('foo' => 'b')), '', 'The theme registry does not contain theme_test_foo, because the module is disabled.');
 
     module_enable(array('theme_test'), FALSE);
-    // After enabling/disabling a module during a test, we need to rebuild the
-    // container and ensure the extension handler is loaded, otherwise theme()
-    // throws an exception.
-    $this->rebuildContainer();
-    $this->container->get('module_handler')->loadAll();
     $this->assertIdentical(theme('theme_test_foo', array('foo' => 'c')), 'c', 'The theme registry contains theme_test_foo again after re-enabling the module.');
   }
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/BareMinimalUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/BareMinimalUpgradePathTest.php
index 499acf2..8d4da51 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/BareMinimalUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/BareMinimalUpgradePathTest.php
@@ -82,7 +82,7 @@ public function testBasicMinimalUpgrade() {
     $this->assertFalse($result, 'No {menu_links} entry exists for user/autocomplete');
 
     // Verify that all required modules are enabled.
-    $enabled = $this->container->get('module_handler')->getModuleList();
+    $enabled = module_list();
     $required = array_filter(system_rebuild_module_data(), function ($data) {
       return !empty($data->info['required']);
     });
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php
index 36033bd..1778284 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/BlockUpgradePathTest.php
@@ -35,31 +35,27 @@ public function setUp() {
   public function testBlockUpgradeTitleLength() {
     $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
 
-    // WebTestBase::drupalPlaceBlock() uses the API directly, which doesn't
-    // output validation errors or success messages, so create the blocks from
-    // the UI.
-
     // Add a block instance with a 255-character title.
+    $title = $this->randomName(255);
+    $this->drupalPlaceBlock('system_powered_by_block', array('title' => $title));
     // Confirm that the custom block has been created, and title matches input.
-    $settings = array(
-      'label' => $this->randomName(255),
-      'machine_name' => strtolower($this->randomName(8)),
-      'region' => 'sidebar_first',
-    );
-    $this->drupalPost('admin/structure/block/add/system_powered_by_block/' . variable_get('theme_default', 'stark'), $settings, t('Save block'));
-    $this->assertText($settings['label'], 'Block with title longer than 64 characters successfully created.');
+    $this->drupalGet('');
+    $this->assertText($title, 'Block with title longer than 64 characters successfully created.');
 
     // Try to add a block with a title over 255 characters.
+    // WebTestBase::drupalPlaceBlock() asserts that the block is created
+    // successfully. In this case we expect the block creation to fail, so
+    // create a new instance of the block manually.
     $settings = array(
-      'label' => $this->randomName(256),
+      'title' => $this->randomName(256),
       'machine_name' => strtolower($this->randomName(8)),
       'region' => 'sidebar_first',
     );
-    $this->drupalPost('admin/structure/block/add/system_powered_by_block/' . variable_get('theme_default', 'stark'), $settings, t('Save block'));
+    $this->drupalPost('admin/structure/block/manage/system_powered_by_block/' . variable_get('theme_default', 'stark'), $settings, t('Save block'));
 
     // Confirm that the custom block cannot be created with title longer than
     // the maximum number of characters.
-    $this->assertText('Title cannot be longer than 255 characters');
+    $this->assertText('Block title cannot be longer than 255 characters');
   }
 
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldUIUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldUIUpgradePathTest.php
deleted file mode 100644
index 3ec88b3..0000000
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FieldUIUpgradePathTest.php
+++ /dev/null
@@ -1,76 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\system\Tests\Upgrade\FieldUIUpgradePathTest.
- */
-
-namespace Drupal\system\Tests\Upgrade;
-
-/**
- * Test upgrade of Field UI.
- */
-class FieldUIUpgradePathTest extends UpgradePathTestBase {
-
-  protected $normal_role_id = 4;
-  protected $normal_role_name = 'Normal role';
-  protected $admin_role_id = 5;
-  protected $admin_role_name = 'Admin role';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Field UI upgrade test',
-      'description' => 'Upgrade tests for Field UI.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    $this->databaseDumpFiles = array(
-      drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.filled.standard_all.database.php.gz',
-      drupal_get_path('module', 'system') . '/tests/upgrade/drupal-7.field_ui.database.php',
-    );
-    parent::setUp();
-  }
-
- /**
-   * Tests Field UI permissions upgrade path.
-   *
-   * Test that after upgrade users who have the 'administer comments',
-   * 'administer content types', 'administer users', and 'administer taxonomy'
-   * permission still have access to the manage field and display screens of
-   * those entities.
-   */
-  function testFieldUIPermissions() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    $permissions = array(
-      'administer comments' => array(
-         'administer comment fields',
-         'administer comment display',
-       ),
-      'administer content types' => array(
-         'administer node fields',
-         'administer node display',
-       ),
-      'administer users' => array(
-         'administer user fields',
-         'administer user display',
-       ),
-      'administer taxonomy' => array(
-         'administer taxonomy_term fields',
-         'administer taxonomy_term display',
-       ),
-    );
-
-    $role_permissions = user_role_permissions(array($this->normal_role_id => $this->normal_role_name, $this->admin_role_id => $this->admin_role_name));
-    foreach ($permissions as $old_permission => $new_permissions) {
-      $this->assertFalse(isset($role_permissions[$this->normal_role_id][$old_permission]), format_string('%role_name does not have the old %permission permission', array('%role_name' => $this->normal_role_name, '%permission' => $old_permission)));
-      $this->assertFalse(isset($role_permissions[$this->admin_role_id][$old_permission]), format_string('%role_name does not have the old %permission permission', array('%role_name' => $this->admin_role_name, '%permission' => $old_permission)));
-      foreach ($new_permissions as $new_permission) {
-        $this->assertFalse(isset($role_permissions[$this->normal_role_id][$new_permission]), format_string('%role_name does not have the new %permission permission', array('%role_name' => $this->normal_role_name, '%permission' => $new_permission)));
-        $this->assertTrue(isset($role_permissions[$this->admin_role_id][$new_permission]), format_string('%role_name has the new %permission permission', array('%role_name' => $this->admin_role_name, '%permission' => $new_permission)));
-      }
-    }
-  }
-}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php
deleted file mode 100644
index 1a42c7f..0000000
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/FilterFormatUpgradePathTest.php
+++ /dev/null
@@ -1,78 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\system\Tests\Upgrade\FilterFormatUpgradePathTest.
- */
-
-namespace Drupal\system\Tests\Upgrade;
-
-/**
- * Tests upgrading a bare database with user filter format data.
- *
- * Loads a bare installation of Drupal 7 with filter format data and runs the
- * upgrade process on it. Tests for the conversion filter formats into
- * configurables.
- */
-class FilterFormatUpgradePathTest extends UpgradePathTestBase {
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Filter Formats upgrade test',
-      'description' => 'Upgrade tests with filter formats data.',
-      'group' => 'Upgrade path',
-    );
-  }
-
-  public function setUp() {
-    $path = drupal_get_path('module', 'system');
-    $this->databaseDumpFiles = array(
-      $path . '/tests/upgrade/drupal-7.bare.standard_all.database.php.gz',
-      $path . '/tests/upgrade/drupal-7.roles.database.php',
-      $path . '/tests/upgrade/drupal-7.filter_formats.database.php',
-    );
-    parent::setUp();
-  }
-
-  /**
-   * Tests expected filter formats entities after a successful upgrade.
-   */
-  public function testFilterFormatUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Checks that all the formats were upgraded
-    $one = filter_format_load('format_one');
-    $this->assertTrue(!empty($one), 'Filter Format one was successfully upgraded');
-    $two = filter_format_load('format_two');
-    $this->assertTrue(!empty($two), 'Filter Format two was successfully upgraded');
-
-    // Filter format 'Three' is disabled, and filter_format_load should return
-    // FALSE. However the entity should be accessible using entity_load.
-    $three_disabled = filter_format_load('format_three');
-    $three_entity = entity_load('filter_format', 'format_three');
-    $this->assertTrue(empty($three_disabled) && !empty($three_entity), 'Filter Format three was successfully upgraded and it is disabled');
-
-    // Check the access to the text formats.
-
-    // Check that the anonymous user role ID has been converted from "1" to
-    // "anonymous" and text formats permissions were updated.
-    $this->drupalGet('admin/people/permissions');
-    $this->assertFieldChecked('edit-anonymous-use-text-format-format-one', 'Use text format format_one permission for "anonymous" is set correctly.');
-    $this->assertNoFieldChecked('edit-anonymous-use-text-format-format-two', 'Use text format format_two permission for "anonymous" is set correctly.');
-
-    // Check that the anonymous user role ID has been converted from "2" to
-    // "authenticated" and text formats permissions were updated.
-    $this->assertNoFieldChecked('edit-authenticated-use-text-format-format-one', 'Use text format format_one permission for "authenticated" is set correctly.');
-    $this->assertFieldChecked('edit-authenticated-use-text-format-format-two', 'Use text format format_two permission for "authenticated" is set correctly.');
-
-    // Check that the permission for "gärtner" still exists and text formats
-    // permissions were updated.
-    $this->assertFieldChecked('edit-4-use-text-format-format-one', 'Use text format format_one permission for role is set correctly.');
-    $this->assertNoFieldChecked('edit-4-use-text-format-format-two', 'Use text format format_two permission for role is set correctly.');
-
-    // Check that role 5 cannot access to the defined text formats
-    $this->assertNoFieldChecked('edit-5-use-text-format-format-one', 'Use text format format_one permission for role is set correctly.');
-    $this->assertNoFieldChecked('edit-5-use-text-format-format-two', 'Use text format format_two permission for role is set correctly.');
-  }
-
-}
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/ModulesDisabledUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/ModulesDisabledUpgradePathTest.php
index b02d5ff..c85c912 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/ModulesDisabledUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/ModulesDisabledUpgradePathTest.php
@@ -37,7 +37,7 @@ public function testDisabledUpgrade() {
     $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
 
     // Get enabled modules.
-    $enabled = drupal_container()->get('module_handler')->getModuleList();
+    $enabled = module_list();
     // Get all available modules.
     $available = system_rebuild_module_data();
     // Filter out hidden test modules.
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php
index 2929e71..ea6d6aa 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/SystemUpgradePathTest.php
@@ -108,14 +108,4 @@ public function testVariableUpgrade() {
       }
     }
   }
-
-  /**
-   * Check whether views got enabled.
-   */
-  public function testFrontpageUpgrade() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    $this->assertTrue(module_exists('views'), 'Views is enabled after the upgrade.');
-  }
-
 }
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UpgradePathTestBase.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UpgradePathTestBase.php
index c4dda65..106d726 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UpgradePathTestBase.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UpgradePathTestBase.php
@@ -268,8 +268,9 @@ protected function performUpgrade($register_errors = TRUE) {
 
     // Reload module list for modules that are enabled in the test database
     // but not on the test client.
-    drupal_container()->get('module_handler')->resetImplementations();
-    drupal_container()->get('module_handler')->reload();
+    system_list_reset();
+    module_implements_reset();
+    module_load_all(FALSE, TRUE);
 
     // Rebuild the container and all caches.
     $this->rebuildContainer();
diff --git a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php
index 670420a..4e968d2 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Upgrade/UserRoleUpgradePathTest.php
@@ -58,7 +58,7 @@ public function testRoleUpgrade() {
 
     // Check that the role visibility setting for the who's online block still
     // exists.
-    $this->drupalGet('admin/structure/block/add/user_online_block/bartik');
+    $this->drupalGet('admin/structure/block/manage/user_online_block/bartik');
 
     // @todo Blocks are not being upgraded.
     //   $this->assertFieldChecked('edit-visibility-role-roles-5', "Who's online block visibility setting is correctly set for the long role name.");
@@ -73,19 +73,4 @@ public function testRoleUpgrade() {
     $this->drupalGet('admin/config/people/accounts');
     $this->assertFieldByName('user_admin_role', 3);
   }
-
-  /**
-   * Tests that roles were converted to config.
-   */
-  public function testRoleUpgradeToConfig() {
-    $this->assertTrue($this->performUpgrade(), 'The upgrade was completed successfully.');
-
-    // Check that the 'anonymous' role has been converted to config.
-    $anonymous = entity_load('user_role', DRUPAL_ANONYMOUS_RID);
-    $this->assertNotEqual(FALSE, $anonymous, "The 'anonymous' role has been converted to config.");
-
-    // Check that the 'authenticated' role has been converted to config.
-    $authenticated = entity_load('user_role', DRUPAL_AUTHENTICATED_RID);
-    $this->assertNotEqual(FALSE, $authenticated, "The 'authenticated' role has been converted to config.");
-  }
 }
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 37a2bf2..c3c2ce4 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -1204,7 +1204,7 @@ function system_modules_submit($form, &$form_state) {
 
   // Gets list of modules prior to install process, unsets $form_state['storage']
   // so we don't get redirected back to the confirmation form.
-  $pre_install_list = drupal_container()->get('module_handler')->getModuleList();
+  $pre_install_list = module_list();
   unset($form_state['storage']);
 
   // Reverse the 'enable' list, to order dependencies before dependents.
@@ -1216,7 +1216,7 @@ function system_modules_submit($form, &$form_state) {
 
   // Gets module list after install process, flushes caches and displays a
   // message if there are changes.
-  $post_install_list = drupal_container()->get('module_handler')->getModuleList();
+  $post_install_list = module_list();
   if ($pre_install_list != $post_install_list) {
     drupal_flush_all_caches();
     drupal_set_message(t('The configuration options have been saved.'));
diff --git a/core/modules/system/system.base.css b/core/modules/system/system.base.css
index 233c6d7..b6d1ad0 100644
--- a/core/modules/system/system.base.css
+++ b/core/modules/system/system.base.css
@@ -27,9 +27,6 @@
   cursor: default;
   white-space: pre;
 }
-input.form-autocomplete {
-  max-width: 100%;
-}
 /* Animated throbber */
 .js input.form-autocomplete {
   background-image: url(../../misc/throbber.gif);
diff --git a/core/modules/system/system.install b/core/modules/system/system.install
index 5a0aade..ca5d6de 100644
--- a/core/modules/system/system.install
+++ b/core/modules/system/system.install
@@ -294,7 +294,7 @@ function system_requirements($phase) {
     }
 
     $description .= ' ' . $t('You can <a href="@cron">run cron manually</a>.', array('@cron' => url('admin/reports/status/run-cron')));
-    $description .= '<br />' . $t('To run cron from outside the site, go to <a href="!cron">!cron</a>', array('!cron' => url('cron/' . state()->get('system.cron_key'), array('absolute' => TRUE))));
+    $description .= '<br />' . $t('To run cron from outside the site, go to <a href="!cron">!cron</a>', array('!cron' => url('cron/' . state()->get('system.cron_key'))));
 
     $requirements['cron'] = array(
       'title' => $t('Cron maintenance tasks'),
@@ -400,7 +400,7 @@ function system_requirements($phase) {
     );
 
     // Check installed modules.
-    foreach (drupal_container()->get('module_handler')->getModuleList() as $module => $filename) {
+    foreach (module_list() as $module) {
       $updates = drupal_get_schema_versions($module);
       if ($updates !== FALSE) {
         $default = drupal_get_installed_schema_version($module);
@@ -1540,8 +1540,8 @@ function system_update_8004() {
   // internationalization, keep it, but standardize the specification.
   // Otherwise, add the field.
   if (db_field_exists('file_managed', 'langcode')) {
-    // According to the documentation of db_change_field(), indices using the
-    // field should be dropped first; if the contrib module created any indices,
+    // According to the documentation of db_change_field(), indeces using the
+    // field should be dropped first; if the contrib module created any indeces,
     // it is its responsibility to drop them in an update function that runs
     // before this one, which it can enforce via hook_update_dependencies().
     db_change_field('file_managed', 'langcode', 'langcode', $langcode_field);
@@ -2195,25 +2195,6 @@ function system_update_8045() {
 }
 
 /**
- * Enable Views if the node listing is set as the frontpage.
- */
-function system_update_8046() {
-  $front_page = config('system.site')->get('page.front');
-  if (!isset($front_page) || $front_page == 'node') {
-    update_module_enable(array('views'));
-
-    // Register views to the container, so views can use it's services.
-    $module_list = drupal_container()->getParameter('container.modules');
-    drupal_load('module', 'views');
-
-    drupal_container()->get('kernel')->updateModules(array_keys($module_list), array('views' => 'core/modules/views/views.module'));
-
-    // This does not fire a hook just calls views.
-    config_install_default_config('module', 'views');
-  }
-}
-
-/**
  * @} End of "defgroup updates-7.x-to-8.x".
  * The next series of updates should start at 9000.
  */
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 17015c6..cdf7b90 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -7,7 +7,7 @@
 
 use Drupal\Core\Utility\ModuleInfo;
 use Drupal\Core\TypedData\Primitive;
-use Drupal\system\Plugin\block\block\SystemMenuBlock;
+
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Response;
 
@@ -543,16 +543,15 @@ function system_element_info() {
   );
   $types['fieldset'] = array(
     '#value' => NULL,
-    '#process' => array('form_process_group', 'ajax_process_form'),
-    '#pre_render' => array('form_pre_render_group'),
+    '#process' => array('ajax_process_form'),
     '#theme_wrappers' => array('fieldset'),
   );
   $types['details'] = array(
     '#collapsible' => FALSE,
     '#collapsed' => FALSE,
     '#value' => NULL,
-    '#process' => array('form_process_group', 'ajax_process_form'),
-    '#pre_render' => array('form_pre_render_details', 'form_pre_render_group'),
+    '#process' => array('form_process_details', 'ajax_process_form'),
+    '#pre_render' => array('form_pre_render_details'),
     '#theme_wrappers' => array('details'),
   );
   $types['vertical_tabs'] = array(
@@ -571,8 +570,7 @@ function system_element_info() {
   );
 
   $types['container'] = array(
-    '#process' => array('form_process_group', 'form_process_container'),
-    '#pre_render' => array('form_pre_render_group'),
+    '#process' => array('form_process_container'),
     '#theme_wrappers' => array('container'),
   );
   $types['actions'] = array(
@@ -2636,7 +2634,7 @@ function system_preprocess_block(&$variables) {
 
     // System menu blocks should get the same class as menu module blocks.
     default:
-      if ($variables['elements']['#block']->getPlugin() instanceof SystemMenuBlock) {
+      if ($variables['block']->class == 'Drupal\\system\\Plugin\\block\\block\\SystemMenuBlock') {
         $variables['attributes_array']['role'] = 'navigation';
         $variables['classes_array'][] = 'block-menu';
       }
@@ -2777,7 +2775,7 @@ function system_get_info($type, $name = NULL) {
   $info = array();
   if ($type == 'module') {
     $data = system_rebuild_module_data();
-    foreach (drupal_container()->get('module_handler')->getModuleList() as $module => $filename) {
+    foreach (module_list() as $module) {
       $info[$module] = $data[$module]->info;
     }
   }
@@ -2920,7 +2918,7 @@ function system_rebuild_module_data() {
       $record->schema_version = SCHEMA_UNINSTALLED;
       $files[$module] = $record->filename;
     }
-    $modules = drupal_container()->get('module_handler')->buildModuleDependencies($modules);
+    $modules = _module_build_dependencies($modules);
     $modules_cache = $modules;
 
     // Store filenames to allow system_list() and drupal_get_filename() to
diff --git a/core/modules/system/system.theme.css b/core/modules/system/system.theme.css
index dd36ce3..b56d4b5 100644
--- a/core/modules/system/system.theme.css
+++ b/core/modules/system/system.theme.css
@@ -147,9 +147,6 @@ abbr.form-required, abbr.tabledrag-changed, abbr.ajax-changed {
 /**
  * Inline items.
  */
-.container-inline label:after {
-  content: ':';
-}
 .container-inline .form-actions,
 .container-inline.form-actions {
   margin-top: 0;
diff --git a/core/modules/system/tests/modules/common_test/common_test.module b/core/modules/system/tests/modules/common_test/common_test.module
index f932f0f..a41f608 100644
--- a/core/modules/system/tests/modules/common_test/common_test.module
+++ b/core/modules/system/tests/modules/common_test/common_test.module
@@ -15,9 +15,9 @@ function common_test_menu() {
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
   );
-  $items['common-test/drupal_goto/alternative'] = array(
+  $items['common-test/drupal_goto/alt'] = array(
     'title' => 'Drupal Goto',
-    'page callback' => 'common_test_drupal_goto_land_alternative',
+    'page callback' => 'common_test_drupal_goto_land_alt',
     'access arguments' => array('access content'),
     'type' => MENU_CALLBACK,
   );
@@ -101,8 +101,8 @@ function common_test_drupal_goto_land() {
  *
  * @see common_test_menu()
  */
-function common_test_drupal_goto_land_alternative() {
-  print "drupal_goto_alternative";
+function common_test_drupal_goto_land_alt() {
+  print "drupal_goto_alt";
 }
 
 /**
diff --git a/core/modules/system/tests/modules/entity_cache_test/entity_cache_test.module b/core/modules/system/tests/modules/entity_cache_test/entity_cache_test.module
index 6f23ebb..ed60fe8 100644
--- a/core/modules/system/tests/modules/entity_cache_test/entity_cache_test.module
+++ b/core/modules/system/tests/modules/entity_cache_test/entity_cache_test.module
@@ -15,6 +15,7 @@
  * dependency module.
  *
  * @see EnableDisableTestCase::testEntityCache()
+ * @see entity_cache_test_dependency_entity_info()
  */
 function entity_cache_test_watchdog($log_entry) {
   if ($log_entry['type'] == 'system' && $log_entry['message'] == '%module module installed.') {
diff --git a/core/modules/system/tests/modules/entity_crud_hook_test/entity_crud_hook_test.module b/core/modules/system/tests/modules/entity_crud_hook_test/entity_crud_hook_test.module
index 9ee487a..8a1e43c 100644
--- a/core/modules/system/tests/modules/entity_crud_hook_test/entity_crud_hook_test.module
+++ b/core/modules/system/tests/modules/entity_crud_hook_test/entity_crud_hook_test.module
@@ -8,62 +8,6 @@
 use Drupal\Core\Entity\EntityInterface;
 
 /**
- * Implements hook_entity_create().
- */
-function entity_crud_hook_test_entity_create(EntityInterface $entity) {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called for type ' . $entity->entityType());
-}
-
-/**
- * Implements hook_block_create().
- */
-function entity_crud_hook_test_block_create() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_comment_create().
- */
-function entity_crud_hook_test_comment_create() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_file_create().
- */
-function entity_crud_hook_test_file_create() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_node_create().
- */
-function entity_crud_hook_test_node_create() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_term_create().
- */
-function entity_crud_hook_test_taxonomy_term_create() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_taxonomy_vocabulary_create().
- */
-function entity_crud_hook_test_taxonomy_vocabulary_create() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
- * Implements hook_user_create().
- */
-function entity_crud_hook_test_user_create() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
  * Implements hook_entity_presave().
  */
 function entity_crud_hook_test_entity_presave(EntityInterface $entity) {
@@ -71,13 +15,6 @@ function entity_crud_hook_test_entity_presave(EntityInterface $entity) {
 }
 
 /**
- * Implements hook_block_presave().
- */
-function entity_crud_hook_test_block_presave() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
  * Implements hook_comment_presave().
  */
 function entity_crud_hook_test_comment_presave() {
@@ -127,13 +64,6 @@ function entity_crud_hook_test_entity_insert(EntityInterface $entity) {
 }
 
 /**
- * Implements hook_block_insert().
- */
-function entity_crud_hook_test_block_insert() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
  * Implements hook_comment_insert().
  */
 function entity_crud_hook_test_comment_insert() {
@@ -183,13 +113,6 @@ function entity_crud_hook_test_entity_load(array $entities, $type) {
 }
 
 /**
- * Implements hook_block_load().
- */
-function entity_crud_hook_test_block_load() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
  * Implements hook_comment_load().
  */
 function entity_crud_hook_test_comment_load() {
@@ -239,13 +162,6 @@ function entity_crud_hook_test_entity_update(EntityInterface $entity) {
 }
 
 /**
- * Implements hook_block_update().
- */
-function entity_crud_hook_test_block_update() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
  * Implements hook_comment_update().
  */
 function entity_crud_hook_test_comment_update() {
@@ -295,13 +211,6 @@ function entity_crud_hook_test_entity_predelete(EntityInterface $entity) {
 }
 
 /**
- * Implements hook_block_predelete().
- */
-function entity_crud_hook_test_block_predelete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
  * Implements hook_comment_predelete().
  */
 function entity_crud_hook_test_comment_predelete() {
@@ -351,13 +260,6 @@ function entity_crud_hook_test_entity_delete(EntityInterface $entity) {
 }
 
 /**
- * Implements hook_block_delete().
- */
-function entity_crud_hook_test_block_delete() {
-  $_SESSION['entity_crud_hook_test'][] = (__FUNCTION__ . ' called');
-}
-
-/**
  * Implements hook_comment_delete().
  */
 function entity_crud_hook_test_comment_delete() {
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.views.inc b/core/modules/system/tests/modules/entity_test/entity_test.views.inc
index 4e348b0..c3d8133 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.views.inc
+++ b/core/modules/system/tests/modules/entity_test/entity_test.views.inc
@@ -45,7 +45,6 @@ function entity_test_views_data() {
     ),
     'field' => array(
       'id' => 'standard',
-      'click sortable' => FALSE,
     ),
     'filter' => array(
       'id' => 'string',
@@ -61,6 +60,7 @@ function entity_test_views_data() {
       'help' => t('The {language}.langcode of the original variant of this test entity.'),
       'field' => array(
         'id' => 'language',
+        'click sortable' => TRUE,
       ),
       'filter' => array(
         'id' => 'language',
@@ -102,6 +102,7 @@ function entity_test_views_data() {
       'help' => t('The {language}.langcode of this variant of this test entity.'),
       'field' => array(
         'id' => 'language',
+        'click sortable' => TRUE,
       ),
       'filter' => array(
         'id' => 'language',
@@ -118,6 +119,7 @@ function entity_test_views_data() {
       'help' => t('Boolean indicating whether the current variant is in the original entity language.'),
       'field' => array(
         'id' => 'boolean',
+        'click sortable' => TRUE,
       ),
       'filter' => array(
         'id' => 'boolean',
@@ -136,6 +138,7 @@ function entity_test_views_data() {
     'help' => t('The name of the test entity.'),
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'string',
@@ -153,6 +156,7 @@ function entity_test_views_data() {
     'help' => t('The name of the test entity.'),
     'field' => array(
       'id' => 'user',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'user_name',
diff --git a/core/modules/filter/tests/filter_test/filter_test.info b/core/modules/system/tests/modules/filter_test/filter_test.info
similarity index 100%
rename from core/modules/filter/tests/filter_test/filter_test.info
rename to core/modules/system/tests/modules/filter_test/filter_test.info
diff --git a/core/modules/filter/tests/filter_test/filter_test.module b/core/modules/system/tests/modules/filter_test/filter_test.module
similarity index 100%
rename from core/modules/filter/tests/filter_test/filter_test.module
rename to core/modules/system/tests/modules/filter_test/filter_test.module
diff --git a/core/modules/system/tests/modules/form_test/form_test.module b/core/modules/system/tests/modules/form_test/form_test.module
index 8e1992c..9fd4bcb 100644
--- a/core/modules/system/tests/modules/form_test/form_test.module
+++ b/core/modules/system/tests/modules/form_test/form_test.module
@@ -314,31 +314,6 @@ function form_test_menu() {
     'access callback' => TRUE,
   );
 
-  $items['form-test/group-details'] = array(
-    'title' => 'Group details testing',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('form_test_group_details'),
-    'access callback' => TRUE,
-  );
-  $items['form-test/group-container'] = array(
-    'title' => 'Group container testing',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('form_test_group_container'),
-    'access callback' => TRUE,
-  );
-  $items['form-test/group-fieldset'] = array(
-    'title' => 'Group fieldset testing',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('form_test_group_fieldset'),
-    'access callback' => TRUE,
-  );
-  $items['form-test/group-vertical-tabs'] = array(
-    'title' => 'Group vertical tabs testing',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('form_test_group_vertical_tabs'),
-    'access callback' => TRUE,
-  );
-
   return $items;
 }
 
@@ -2358,90 +2333,3 @@ function form_test_button_class($form, &$form_state) {
   );
   return $form;
 }
-
-/**
- * Builds a simple form to test the #group property on #type 'details'.
- */
-function form_test_group_details() {
-  $form['details'] = array(
-    '#type' => 'details',
-    '#title' => 'Root element',
-  );
-  $form['meta'] = array(
-    '#type' => 'details',
-    '#title' => 'Group element',
-    '#group' => 'details',
-  );
-  $form['meta']['element'] = array(
-    '#type' => 'textfield',
-    '#title' => 'Nest in details element',
-  );
-  return $form;
-}
-
-/**
- * Builds a simple form to test the #group property on #type 'container'.
- */
-function form_test_group_container() {
-  $form['container'] = array(
-    '#type' => 'container',
-  );
-  $form['meta'] = array(
-    '#type' => 'details',
-    '#title' => 'Group element',
-    '#group' => 'container',
-  );
-  $form['meta']['element'] = array(
-    '#type' => 'textfield',
-    '#title' => 'Nest in details element',
-  );
-  return $form;
-}
-
-/**
- * Builds a simple form to test the #group property on #type 'fieldset'.
- */
-function form_test_group_fieldset() {
-  $form['fieldset'] = array(
-    '#type' => 'fieldset',
-    '#title' => 'Fieldset',
-  );
-  $form['meta'] = array(
-    '#type' => 'container',
-    '#title' => 'Group element',
-    '#group' => 'fieldset',
-  );
-  $form['meta']['element'] = array(
-    '#type' => 'textfield',
-    '#title' => 'Nest in container element',
-  );
-  return $form;
-}
-
-/**
- * Builds a simple form to test the #group property on #type 'vertical_tabs'.
- */
-function form_test_group_vertical_tabs() {
-  $form['vertical_tabs'] = array(
-    '#type' => 'vertical_tabs',
-  );
-  $form['meta'] = array(
-    '#type' => 'details',
-    '#title' => 'First group element',
-    '#group' => 'vertical_tabs',
-  );
-  $form['meta']['element'] = array(
-    '#type' => 'textfield',
-    '#title' => 'First nested element in details element',
-  );
-  $form['meta_2'] = array(
-    '#type' => 'details',
-    '#title' => 'Second group element',
-    '#group' => 'vertical_tabs',
-  );
-  $form['meta_2']['element_2'] = array(
-    '#type' => 'textfield',
-    '#title' => 'Second nested element in details element',
-  );
-  return $form;
-}
diff --git a/core/modules/system/tests/modules/module_test/module_test.module b/core/modules/system/tests/modules/module_test/module_test.module
index 1d35ea9..facf3c4 100644
--- a/core/modules/system/tests/modules/module_test/module_test.module
+++ b/core/modules/system/tests/modules/module_test/module_test.module
@@ -17,31 +17,31 @@ function module_test_permission() {
 function module_test_system_info_alter(&$info, $file, $type) {
   if (state()->get('module_test.dependency') == 'missing dependency') {
     if ($file->name == 'forum') {
-      // Make forum module depend on ban.
-      $info['dependencies'][] = 'ban';
+      // Make forum module depend on poll.
+      $info['dependencies'][] = 'poll';
     }
-    elseif ($file->name == 'ban') {
-      // Make ban depend on a made-up module.
+    elseif ($file->name == 'poll') {
+      // Make poll depend on a made-up module.
       $info['dependencies'][] = 'foo';
     }
   }
   elseif (state()->get('module_test.dependency') == 'dependency') {
     if ($file->name == 'forum') {
-      // Make the forum module depend on ban.
-      $info['dependencies'][] = 'ban';
+      // Make the forum module depend on poll.
+      $info['dependencies'][] = 'poll';
     }
-    elseif ($file->name == 'ban') {
-      // Make ban depend on php module.
+    elseif ($file->name == 'poll') {
+      // Make poll depend on php module.
       $info['dependencies'][] = 'php';
     }
   }
   elseif (state()->get('module_test.dependency') == 'version dependency') {
     if ($file->name == 'forum') {
-      // Make the forum module depend on ban.
-      $info['dependencies'][] = 'ban';
+      // Make the forum module depend on poll.
+      $info['dependencies'][] = 'poll';
     }
-    elseif ($file->name == 'ban') {
-      // Make ban depend on a specific version of php module.
+    elseif ($file->name == 'poll') {
+      // Make poll depend on a specific version of php module.
       $info['dependencies'][] = 'php (1.x)';
     }
     elseif ($file->name == 'php') {
diff --git a/core/modules/system/tests/upgrade/drupal-7.field_ui.database.php b/core/modules/system/tests/upgrade/drupal-7.field_ui.database.php
deleted file mode 100644
index 1487f8b..0000000
--- a/core/modules/system/tests/upgrade/drupal-7.field_ui.database.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Database additions for Field UI tests tests. Used in
- * \Drupal\system\Tests\Upgrade\FieldUIUpgradePathTest.
- *
- * This dump only contains data and schema components relevant for Field UI
- * upgrade tests. The drupal-7.filled.database.php.gz file is imported before
- * this dump, so the two form the database structure expected in tests
- * altogether.
- */
-
-db_insert('role')->fields(array(
-  'rid',
-  'name',
-  'weight',
-))
-->values(array(
-  'rid' => '4',
-  'name' => 'Normal role',
-  'weight' => '3',
-))
-->values(array(
-  'rid' => '5',
-  'name' => 'Admin role',
-  'weight' => '4',
-))
-->execute();
-
-// Add the 'Administer comments', 'Administer content types',
-// 'Administer users' and 'Administer vocabularies and terms' permissions
-// to the Admin role.
-db_insert('role_permission')->fields(array(
-  'rid',
-  'permission',
-  'module',
-))
-->values(array(
-  'rid' => '5',
-  'permission' => 'administer comments',
-  'module' => 'comment',
-))
-->values(array(
-  'rid' => '5',
-  'permission' => 'administer content types',
-  'module' => 'node',
-))
-->values(array(
-  'rid' => '5',
-  'permission' => 'administer users',
-  'module' => 'user',
-))
-->values(array(
-  'rid' => '5',
-  'permission' => 'administer taxonomy',
-  'module' => 'taxonomy',
-))
-->execute();
diff --git a/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php b/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php
deleted file mode 100644
index 402670c..0000000
--- a/core/modules/system/tests/upgrade/drupal-7.filter_formats.database.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-
-/**
- * @file
- * Database additions filter format tests. Used in upgrade.filter_formats.test.
- *
- * This dump only contains data and schema components relevant for role
- * functionality. The drupal-7.bare.database.php file is imported before
- * this dump, so the two form the database structure expected in tests
- * altogether.
- */
-
-db_insert('filter_format')->fields(array(
-  'format',
-  'name',
-  'cache',
-  'status',
-  'weight',
-))
-// Adds some filters formats
-->values(array(
-  'format' => 'format_one',
-  'name' => 'Format One',
-  'cache' => '1',
-  'weight' => '1',
-  'status' => '1'
-))
-->values(array(
-  'format' => 'format_two',
-  'name' => 'Format Two',
-  'cache' => '1',
-  'weight' => '2',
-  'status' => '1'
-))
-// Add a disabled filter format
-->values(array(
-  'format' => 'format_three',
-  'name' => 'Format Three',
-  'cache' => '1',
-  'weight' => '3',
-  'status' => '0'
-))
-->execute();
-
-// Adds filters to the crated filter formats
-db_insert('filter')->fields(array(
-  'format',
-  'module',
-  'name',
-  'weight',
-  'status',
-  'settings',
-))
-// Filters for: Format One
-->values(array(
-  'format' => 'format_one',
-  'module' => 'filter',
-  'name' => 'filter_autop',
-  'weight' => '2',
-  'status' => '1',
-  'settings' => 'a:0:{}',
-))
-->values(array(
-  'format' => 'format_one',
-  'module' => 'filter',
-  'name' => 'filter_html',
-  'weight' => '-10',
-  'status' => '0',
-  'settings' => 'a:3:{s:12:"allowed_html";s:74:"<a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>";s:16:"filter_html_help";i:1;s:20:"filter_html_nofollow";i:0;}',
-))
-->values(array(
-  'format' => 'format_one',
-  'module' => 'filter',
-  'name' => 'filter_htmlcorrector',
-  'weight' => '10',
-  'status' => '0',
-  'settings' => 'a:0:{}',
-))
-->values(array(
-  'format' => 'format_one',
-  'module' => 'filter',
-  'name' => 'filter_html_escape',
-  'weight' => '0',
-  'status' => '1',
-  'settings' => 'a:0:{}',
-))
-->values(array(
-  'format' => 'format_two',
-  'module' => 'filter',
-  'name' => 'filter_url',
-  'weight' => '1',
-  'status' => '1',
-  'settings' => 'a:1:{s:17:"filter_url_length";i:72;}',
-))
-->values(array(
-  'format' => 'format_two',
-  'module' => 'filter',
-  'name' => 'filter_autop',
-  'weight' => '0',
-  'status' => '0',
-  'settings' => 'a:0:{}',
-))
-->values(array(
-  'format' => 'format_three',
-  'module' => 'filter',
-  'name' => 'filter_html',
-  'weight' => '-10',
-  'status' => '1',
-  'settings' => 'a:3:{s:12:"allowed_html";s:9:"<a> <em> ";s:16:"filter_html_help";i:1;s:20:"filter_html_nofollow";i:0;}',
-))
-->values(array(
-  'format' => 'format_three',
-  'module' => 'filter',
-  'name' => 'filter_htmlcorrector',
-  'weight' => '10',
-  'status' => '0',
-  'settings' => 'a:0:{}',
-))
-->values(array(
-  'format' => 'format_three',
-  'module' => 'filter',
-  'name' => 'filter_html_escape',
-  'weight' => '-10',
-  'status' => '1',
-  'settings' => 'a:0:{}',
-))
-->values(array(
-  'format' => 'format_three',
-  'module' => 'filter',
-  'name' => 'filter_url',
-  'weight' => '0',
-  'status' => '1',
-  'settings' => 'a:1:{s:17:"filter_url_length";s:2:"72";}',
-))
-->execute();
-
-// Define which roles can use the text formats.
-db_insert('role_permission')->fields(array(
-  'rid',
-  'permission',
-  'module',
-))
-// Adds some filters formats
-->values(array(
-  'rid' => 1,
-  'permission' => 'use text format format_one',
-  'module' => 'filter',
-))
-->values(array(
-  'rid' => 4,
-  'permission' => 'use text format format_one',
-  'module' => 'filter',
-))
-->values(array(
-  'rid' => 2,
-  'permission' => 'use text format format_two',
-  'module' => 'filter',
-))
-->values(array(
-  'rid' => 4,
-  'permission' => 'use text format format_three',
-  'module' => 'filter',
-))
-->execute();
-
-db_insert('variable')->fields(array(
-  'name',
-  'value',
-))
-->values(array(
-  'name' => 'format_fallback_format',
-  'value' => 's:10:"plain_text";',
-))
-->execute();
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
index be46f2a..d669336 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Term.php
@@ -38,6 +38,12 @@
  *   bundle_keys = {
  *     "bundle" = "vid"
  *   },
+ *   view_modes = {
+ *     "full" = {
+ *       "label" = "Taxonomy term page",
+ *       "custom_settings" = FALSE
+ *     }
+ *   },
  *   menu_base_path = "taxonomy/term/%taxonomy_term"
  * )
  */
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
index ec2607c..9c65552 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/Core/Entity/Vocabulary.php
@@ -26,6 +26,12 @@
  *   entity_keys = {
  *     "id" = "vid",
  *     "label" = "name"
+ *   },
+ *   view_modes = {
+ *     "full" = {
+ *       "label" = "Taxonomy vocabulary",
+ *       "custom_settings" = FALSE
+ *     }
  *   }
  * )
  */
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
index 3d28ec0..278db90 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/RssTest.php
@@ -30,7 +30,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $this->admin_user = $this->drupalCreateUser(array('administer taxonomy', 'bypass node access', 'administer content types', 'administer node display'));
+    $this->admin_user = $this->drupalCreateUser(array('administer taxonomy', 'bypass node access', 'administer content types'));
     $this->drupalLogin($this->admin_user);
     $this->vocabulary = $this->createVocabulary();
 
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTestBase.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTestBase.php
index fab42f0..0317ad6 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTestBase.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/TaxonomyTestBase.php
@@ -51,13 +51,11 @@ function createVocabulary() {
    * Returns a new term with random properties in vocabulary $vid.
    */
   function createTerm($vocabulary) {
-    $filter_formats = filter_formats();
-    $format = array_pop($filter_formats);
     $term = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       // Use the first available text format.
-      'format' => $format->format,
+      'format' => db_query_range('SELECT format FROM {filter_format}', 0, 1)->fetchField(),
       'vid' => $vocabulary->id(),
       'langcode' => LANGUAGE_NOT_SPECIFIED,
     ));
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php
index ec91070..67adc3a 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/Views/TaxonomyTestBase.php
@@ -128,13 +128,11 @@ protected function mockStandardInstall() {
    *   The created taxonomy term.
    */
   protected function createTerm() {
-    $filter_formats = filter_formats();
-    $format = array_pop($filter_formats);
     $term = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       // Use the first available text format.
-      'format' => $format->format,
+      'format' => db_query_range('SELECT format FROM {filter_format}', 0, 1)->fetchField(),
       'vid' => $this->vocabulary->id(),
       'langcode' => LANGUAGE_NOT_SPECIFIED,
     ));
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php
index 8d05f64..0f7d328 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyTest.php
@@ -96,7 +96,7 @@ function testTaxonomyAdminChangingWeights() {
     $this->drupalPost('admin/structure/taxonomy', $edit, t('Save'));
 
     // Load the vocabularies from the database.
-    $this->container->get('plugin.manager.entity')->getStorageController('taxonomy_vocabulary')->resetCache();
+    entity_get_controller('taxonomy_vocabulary')->resetCache();
     $new_vocabularies = taxonomy_vocabulary_load_multiple();
     taxonomy_vocabulary_sort($new_vocabularies);
 
@@ -136,7 +136,7 @@ function testTaxonomyAdminDeletingVocabulary() {
     $this->assertText(t('Created new vocabulary'), 'New vocabulary was created.');
 
     // Check the created vocabulary.
-    $this->container->get('plugin.manager.entity')->getStorageController('taxonomy_vocabulary')->resetCache();
+    entity_get_controller('taxonomy_vocabulary')->resetCache();
     $vocabulary = taxonomy_vocabulary_load($vid);
     $this->assertTrue($vocabulary, 'Vocabulary found.');
 
@@ -149,7 +149,7 @@ function testTaxonomyAdminDeletingVocabulary() {
     // Confirm deletion.
     $this->drupalPost(NULL, NULL, t('Delete'));
     $this->assertRaw(t('Deleted vocabulary %name.', array('%name' => $vocabulary->name)), 'Vocabulary deleted.');
-    $this->container->get('plugin.manager.entity')->getStorageController('taxonomy_vocabulary')->resetCache();
+    entity_get_controller('taxonomy_vocabulary')->resetCache();
     $this->assertFalse(taxonomy_vocabulary_load($vid), t('Vocabulary not found.'));
   }
 }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
index d73302b..1395014 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Tests/VocabularyUnitTest.php
@@ -160,9 +160,9 @@ function testTaxonomyVocabularyChangeMachineName() {
     taxonomy_vocabulary_save($this->vocabulary);
 
     // Check that entity bundles are properly updated.
-    $info = entity_get_bundles('taxonomy_term');
-    $this->assertFalse(isset($info[$old_name]), 'The old bundle name does not appear in entity_get_bundles().');
-    $this->assertTrue(isset($info[$new_name]), 'The new bundle name appears in entity_get_bundles().');
+    $info = entity_get_info('taxonomy_term');
+    $this->assertFalse(isset($info['bundles'][$old_name]), 'The old bundle name does not appear in entity_get_info().');
+    $this->assertTrue(isset($info['bundles'][$new_name]), 'The new bundle name appears in entity_get_info().');
 
     // Check that the field instance is still attached to the vocabulary.
     $this->assertTrue(field_info_instance('taxonomy_term', 'field_test', $new_name), 'The bundle name was updated correctly.');
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php
index b14fc2f..3d2853d 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/VocabularyStorageController.php
@@ -100,8 +100,7 @@ protected function postDelete($entities) {
   public function resetCache(array $ids = NULL) {
     drupal_static_reset('taxonomy_vocabulary_get_names');
     parent::resetCache($ids);
-    cache_invalidate_tags(array('content' => TRUE));
-    entity_info_cache_clear();
+    cache_invalidate_tags(array('content' => TRUE, 'entity_info' => TRUE));
+    drupal_static_reset('entity_get_info');
   }
-
 }
diff --git a/core/modules/taxonomy/taxonomy.install b/core/modules/taxonomy/taxonomy.install
index 7b1d331..b058409 100644
--- a/core/modules/taxonomy/taxonomy.install
+++ b/core/modules/taxonomy/taxonomy.install
@@ -71,7 +71,7 @@ function taxonomy_schema() {
         'type' => 'varchar',
         'length' => 255,
         'not null' => FALSE,
-        'description' => 'The filter format ID of the description.',
+        'description' => 'The {filter_format}.format of the description.',
       ),
       'weight' => array(
         'type' => 'int',
@@ -225,9 +225,9 @@ function taxonomy_update_8001() {
     // internationalization, keep it, but standardize the specification.
     // Otherwise, add the field.
     if (db_field_exists($table, 'langcode')) {
-      // According to the documentation of db_change_field(), indices using the
+      // According to the documentation of db_change_field(), indeces using the
       // field should be dropped first; if the contrib module created any
-      // indices, it is its responsibility to drop them in an update function
+      // indeces, it is its responsibility to drop them in an update function
       // that runs before this one, which it can enforce via
       // hook_update_dependencies().
       db_change_field($table, 'langcode', 'langcode', $langcode_field);
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 16d1019..a15874e 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -106,35 +106,21 @@ function taxonomy_permission() {
 }
 
 /**
- * Implements hook_entity_view_mode_info().
+ * Implements hook_entity_info().
  */
-function taxonomy_entity_view_mode_info() {
-  $view_modes['taxonomy_term']['full'] = array(
-    'label' => t('Taxonomy term page'),
-  );
-  $view_modes['taxonomy_vocabulary']['full'] = array(
-    'label' => t('Taxonomy vocabulary'),
-  );
-  return $view_modes;
-}
-
-/**
- * Implements hook_entity_bundle_info().
- */
-function taxonomy_entity_bundle_info() {
-  $bundles = array();
+function taxonomy_entity_info(&$info) {
   foreach (taxonomy_vocabulary_get_names() as $id) {
     $config = config('taxonomy.vocabulary.' . $id);
-    $bundles['taxonomy_term'][$id] = array(
+    $info['taxonomy_term']['bundles'][$id] = array(
       'label' => $config->get('name'),
       'admin' => array(
         'path' => 'admin/structure/taxonomy/%taxonomy_vocabulary',
         'real path' => 'admin/structure/taxonomy/' . $id,
         'bundle argument' => 3,
+        'access arguments' => array('administer taxonomy'),
       ),
     );
   }
-  return $bundles;
 }
 
 /**
@@ -151,7 +137,8 @@ function taxonomy_term_uri($term) {
  */
 function taxonomy_field_extra_fields() {
   $return = array();
-  foreach (entity_get_bundles('taxonomy_term') as $bundle => $bundle_info) {
+  $info = entity_get_info('taxonomy_term');
+  foreach (array_keys($info['bundles']) as $bundle) {
     $return['taxonomy_term'][$bundle] = array(
       'form' => array(
         'name' => array(
@@ -599,7 +586,7 @@ function taxonomy_term_is_page(Term $term) {
  * Clear all static cache variables for terms.
  */
 function taxonomy_terms_static_reset() {
-  drupal_container()->get('plugin.manager.entity')->getStorageController('taxonomy_term')->resetCache();
+  entity_get_controller('taxonomy_term')->resetCache();
 }
 
 /**
@@ -609,7 +596,7 @@ function taxonomy_terms_static_reset() {
  *   An array of ids to reset in entity controller cache.
  */
 function taxonomy_vocabulary_static_reset(array $ids = NULL) {
-  drupal_container()->get('plugin.manager.entity')->getStorageController('taxonomy_vocabulary')->resetCache($ids);
+  entity_get_controller('taxonomy_vocabulary')->resetCache($ids);
 }
 
 /**
diff --git a/core/modules/taxonomy/taxonomy.views.inc b/core/modules/taxonomy/taxonomy.views.inc
index c82873e..7f87670 100644
--- a/core/modules/taxonomy/taxonomy.views.inc
+++ b/core/modules/taxonomy/taxonomy.views.inc
@@ -41,6 +41,7 @@ function taxonomy_views_data() {
     'help' => t('The tid of a taxonomy term.'),
     'field' => array(
       'id' => 'numeric',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -92,6 +93,7 @@ function taxonomy_views_data() {
     'help' => t('The taxonomy term name.'),
     'field' => array(
       'id' => 'taxonomy',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -114,6 +116,7 @@ function taxonomy_views_data() {
     'help' => t('The term weight field'),
     'field' => array(
       'id' => 'numeric',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -133,7 +136,6 @@ function taxonomy_views_data() {
     'field' => array(
       'id' => 'markup',
       'format' => array('field' => 'format'),
-      'click sortable' => FALSE,
     ),
     'filter' => array(
       'id' => 'string',
@@ -154,6 +156,7 @@ function taxonomy_views_data() {
     'help' => t('Language of the term'),
     'field' => array(
       'id' => 'taxonomy_term_language',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -172,7 +175,6 @@ function taxonomy_views_data() {
       'title' => t('Term edit link'),
       'help' => t('Provide a simple link to edit the term.'),
       'id' => 'term_link_edit',
-      'click sortable' => FALSE,
     ),
   );
 
@@ -289,7 +291,6 @@ function taxonomy_views_data_alter(&$data) {
       'help' => t('Display all taxonomy terms associated with a node from specified vocabularies.'),
       'id' => 'taxonomy_index_tid',
       'no group by' => TRUE,
-      'click sortable' => FALSE,
     ),
   );
 
diff --git a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_groupwise_term.yml b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_groupwise_term.yml
index 7a9cacd..5240f0c 100644
--- a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_groupwise_term.yml
+++ b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_groupwise_term.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_field: tid
 base_table: taxonomy_term_data
 core: 8.0-dev
@@ -61,5 +62,5 @@ display:
 human_name: test_groupwise
 langcode: und
 module: views
-id: test_groupwise_term
+name: test_groupwise_term
 tag: default
diff --git a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_node_term_data.yml b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_node_term_data.yml
index 02db809..383766a 100644
--- a/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_node_term_data.yml
+++ b/core/modules/taxonomy/tests/modules/taxonomy_test_views/test_views/views.view.test_taxonomy_node_term_data.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -68,5 +69,5 @@ display:
     id: default
     position: '0'
 human_name: test_taxonomy_node_term_data
-id: test_taxonomy_node_term_data
+name: test_taxonomy_node_term_data
 tag: ''
diff --git a/core/modules/telephone/lib/Drupal/telephone/Plugin/field/formatter/TelephoneLinkFormatter.php b/core/modules/telephone/lib/Drupal/telephone/Plugin/field/formatter/TelephoneLinkFormatter.php
deleted file mode 100644
index 831fa11..0000000
--- a/core/modules/telephone/lib/Drupal/telephone/Plugin/field/formatter/TelephoneLinkFormatter.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\telephone\Plugin\field\formatter\TelephoneLinkFormatter.
- */
-
-namespace Drupal\telephone\Plugin\field\formatter;
-
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-use Drupal\field\Plugin\Type\Formatter\FormatterBase;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Plugin implementation of the 'telephone_link' formatter.
- *
- * @Plugin(
- *   id = "telephone_link",
- *   module = "telephone",
- *   label = @Translation("Telephone link"),
- *   field_types = {
- *     "telephone"
- *   },
- *   settings = {
- *     "title" = ""
- *   }
- * )
- */
-class TelephoneLinkFormatter extends FormatterBase {
-
-  /**
-   * Implements \Drupal\field\Plugin\Type\Formatter\FormatterInterface::settingsForm().
-   */
-  public function settingsForm(array $form, array &$form_state) {
-    $elements['title'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Title to replace basic numeric telephone number display.'),
-      '#default_value' => $this->getSetting('title'),
-    );
-
-    return $elements;
-  }
-
-  /**
-   * Implements \Drupal\field\Plugin\Type\Formatter\FormatterInterface::settingsSummary().
-   */
-  public function settingsSummary() {
-    $settings = $this->getSettings();
-
-    if (!empty($settings['title'])) {
-      $summary = t('Link using text: @title', array('@title' => $settings['title']));
-    }
-    else {
-      $summary = t('Link using provided telephone number.');
-    }
-
-    return $summary;
-  }
-
-  /**
-   * Implements \Drupal\field\Plugin\Type\Formatter\FormatterInterface::prepareView().
-   */
-  public function prepareView(array $entities, $langcode, array &$items) {
-    $settings = $this->getSettings();
-
-    foreach ($entities as $id => $entity) {
-      foreach ($items[$id] as &$item) {
-        // If available, set custom link text.
-        if (!empty($settings['title'])) {
-          $item['title'] = $settings['title'];
-        }
-        // Otherwise, use telephone number itself as title.
-        else {
-          $item['title'] = $item['value'];
-        }
-      }
-    }
-  }
-
-  /**
-   * Implements \Drupal\field\Plugin\Type\Formatter\FormatterInterface::viewElements().
-   */
-  public function viewElements(EntityInterface $entity, $langcode, array $items) {
-    $element = array();
-
-    foreach ($items as $delta => $item) {
-      // Prepend 'tel:' to the telephone number.
-      $href = 'tel:' . rawurlencode(preg_replace('/\s+/', '', $item['value']));
-
-      // Render each element as link.
-      $element[$delta] = array(
-        '#type' => 'link',
-        '#title' => $item['title'],
-        '#href' => $href,
-        '#options' => array('external' => TRUE),
-      );
-    }
-
-    return $element;
-  }
-}
diff --git a/core/modules/telephone/lib/Drupal/telephone/Plugin/field/widget/TelephoneDefaultWidget.php b/core/modules/telephone/lib/Drupal/telephone/Plugin/field/widget/TelephoneDefaultWidget.php
deleted file mode 100644
index 8eab7df..0000000
--- a/core/modules/telephone/lib/Drupal/telephone/Plugin/field/widget/TelephoneDefaultWidget.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\telephone\Plugin\field\widget\TelephoneDefaultWidget.
- */
-
-namespace Drupal\telephone\Plugin\field\widget;
-
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-use Drupal\field\Plugin\Type\Widget\WidgetBase;
-
-/**
- * Plugin implementation of the 'telephone_default' widget.
- *
- * @Plugin(
- *   id = "telephone_default",
- *   module = "telephone",
- *   label = @Translation("Telephone number"),
- *   field_types = {
- *     "telephone"
- *   }
- * )
- */
-class TelephoneDefaultWidget extends WidgetBase {
-
-  /**
-   * Implements \Drupal\field\Plugin\Type\Widget\WidgetInterface::formElement().
-   */
-  public function formElement(array $items, $delta, array $element, $langcode, array &$form, array &$form_state) {
-    $element['value'] = $element + array(
-      '#type' => 'tel',
-      '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
-    );
-    return $element;
-  }
-
-}
diff --git a/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneFieldTest.php b/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneFieldTest.php
deleted file mode 100644
index 4d09f45..0000000
--- a/core/modules/telephone/lib/Drupal/telephone/Tests/TelephoneFieldTest.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\telephone\TelephoneFieldTest.
- */
-
-namespace Drupal\telephone\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests the creation of telephone fields.
- */
-class TelephoneFieldTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array(
-    'field',
-    'field_sql_storage',
-    'node',
-    'telephone'
-  );
-
-  protected $instance;
-  protected $web_user;
-
-  public static function getInfo() {
-    return array(
-      'name'  => 'Telephone field',
-      'description'  => "Test the creation of telephone fields.",
-      'group' => 'Field types'
-    );
-  }
-
-  function setUp() {
-    parent::setUp();
-
-    $this->drupalCreateContentType(array('type' => 'article'));
-    $this->article_creator = $this->drupalCreateUser(array('create article content', 'edit own article content'));
-    $this->drupalLogin($this->article_creator);
-  }
-
-  // Test fields.
-
-  /**
-   * Helper function for testTelephoneField().
-   */
-  function testTelephoneField() {
-
-    // Add the telepone field to the article content type.
-    $field = array(
-      'field_name' => 'field_telephone',
-      'type' => 'telephone',
-    );
-    field_create_field($field);
-
-    $instance = array(
-      'field_name' => 'field_telephone',
-      'label' => 'Telephone Number',
-      'entity_type' => 'node',
-      'bundle' => 'article',
-    );
-    field_create_instance($instance);
-
-    entity_get_display('node', 'article', 'default')
-      ->setComponent('field_telephone', array(
-        'type' => 'telephone_link',
-        'weight' => 1,
-      ))
-      ->save();
-
-    // Test basic entery of telephone field.
-    $edit = array(
-      "title" => $this->randomName(),
-      "field_telephone[und][0][value]" => "123456789",
-    );
-
-    $this->drupalPost('node/add/article', $edit, t('Save'));
-    $this->assertRaw('<a href="tel:123456789">', 'A telephone link is provided on the article node page.');
-
-    // Add number with a space in it. Need to ensure it is stripped.
-    $edit = array(
-      "title" => $this->randomName(),
-      "field_telephone[und][0][value]" => "1234 56789",
-    );
-
-    $this->drupalPost('node/add/article', $edit, t('Save'));
-    $this->assertRaw('<a href="tel:123456789">', 'Telephone link is output with whitespace removed.');
-  }
-}
diff --git a/core/modules/telephone/telephone.info b/core/modules/telephone/telephone.info
deleted file mode 100644
index 9ac6dac..0000000
--- a/core/modules/telephone/telephone.info
+++ /dev/null
@@ -1,6 +0,0 @@
-name = Telephone
-description = Defines a field type for telephone numbers.
-package = Core
-version = VERSION
-core = 8.x
-dependencies[] = field
diff --git a/core/modules/telephone/telephone.install b/core/modules/telephone/telephone.install
deleted file mode 100644
index d409b8b..0000000
--- a/core/modules/telephone/telephone.install
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-
-/**
- * @file
- * Install, update and uninstall functions for the Telephone module.
- */
-
-/**
- * Implements hook_field_schema().
- */
-function telephone_field_schema($field) {
-  $columns = array(
-    'value' => array(
-      'type' => 'varchar',
-      'length' => 256,
-      'not null' => FALSE,
-    ),
-  );
-  return array(
-    'columns' => $columns,
-  );
-}
diff --git a/core/modules/telephone/telephone.module b/core/modules/telephone/telephone.module
deleted file mode 100644
index 493f7d1..0000000
--- a/core/modules/telephone/telephone.module
+++ /dev/null
@@ -1,45 +0,0 @@
-<?php
-
-/**
- * @file
- * Defines a simple telephone number field type.
- */
-
-/**
- * Implements hook_field_info().
- */
-function telephone_field_info() {
-  return array(
-    'telephone' => array(
-      'label' => t('Telephone number'),
-      'description' => t('This field stores a telephone number in the database.'),
-      'default_widget' => 'telephone_default',
-      'default_formatter' => 'telephone_link',
-    ),
-  );
-}
-
-/**
- * Implements hook_field_info_alter().
- */
-function telephone_field_info_alter(&$info) {
-  if (module_exists('text')) {
-    $info['telephone']['default_formatter'] = 'text_plain';
-  }
-}
-
-/**
- * Implements hook_field_is_empty().
- */
-function telephone_field_is_empty($item, $field) {
-  return !isset($item['value']) || $item['value'] === '';
-}
-
-/**
- * Implements hook_field_formatter_info_alter().
- */
-function telephone_field_formatter_info_alter(&$info) {
-  if (isset($info['text_plain'])) {
-    $info['text_plain']['field_types'][] = 'telephone';
-  }
-}
diff --git a/core/modules/text/lib/Drupal/text/Plugin/field/widget/TextareaWithSummaryWidget.php b/core/modules/text/lib/Drupal/text/Plugin/field/widget/TextareaWithSummaryWidget.php
index 6982902..696cbe2 100644
--- a/core/modules/text/lib/Drupal/text/Plugin/field/widget/TextareaWithSummaryWidget.php
+++ b/core/modules/text/lib/Drupal/text/Plugin/field/widget/TextareaWithSummaryWidget.php
@@ -43,7 +43,7 @@ function formElement(array $items, $delta, array $element, $langcode, array &$fo
       '#rows' => $this->getSetting('summary_rows'),
       '#description' => t('Leave blank to use trimmed value of full text as the summary.'),
       '#attached' => array(
-        'library' => array(array('text', 'drupal.text')),
+        'js' => array(drupal_get_path('module', 'text') . '/text.js'),
       ),
       '#attributes' => array('class' => array('text-summary')),
       '#prefix' => '<div class="text-summary-wrapper">',
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
index f8c585b..f78396d 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextFieldTest.php
@@ -251,7 +251,7 @@ function _testTextfieldWidgetsFormatted($field_type, $widget_type) {
     $this->assertRaw(t('test_entity @id has been updated.', array('@id' => $id)), 'Entity was updated');
 
     // Display the entity.
-    $this->container->get('plugin.manager.entity')->getStorageController('test_entity')->resetCache(array($id));
+    entity_get_controller('test_entity')->resetCache(array($id));
     $entity = field_test_entity_test_load($id);
     $display = entity_get_display($entity->entityType(), $entity->bundle(), 'full');
     $entity->content = field_attach_view($entity, $display);
diff --git a/core/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php b/core/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php
index 742ec1f..25da4c6 100644
--- a/core/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php
+++ b/core/modules/text/lib/Drupal/text/Tests/TextTranslationTest.php
@@ -39,7 +39,6 @@ function setUp() {
     $this->admin = $this->drupalCreateUser(array(
       'administer languages',
       'administer content types',
-      'administer node fields',
       'access administration pages',
       'bypass node access',
       filter_permission_name($full_html_format),
diff --git a/core/modules/text/text.module b/core/modules/text/text.module
index 07c962e..a67903c 100644
--- a/core/modules/text/text.module
+++ b/core/modules/text/text.module
@@ -8,26 +8,6 @@
 use Drupal\Core\Entity\EntityInterface;
 
 /**
- * Implements hook_library_info().
- */
-function text_library_info() {
-  $libraries['drupal.text'] = array(
-    'title' => 'Text',
-    'version' => VERSION,
-    'js' => array(
-      drupal_get_path('module', 'text') . '/text.js' => array(),
-    ),
-    'dependencies' => array(
-      array('system', 'jquery'),
-      array('system', 'jquery.once'),
-      array('system', 'drupal'),
-    ),
-  );
-
-  return $libraries;
-}
-
-/**
  * Implements hook_help().
  */
 function text_help($path, $arg) {
diff --git a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
index 8c2dcef..42be87c 100644
--- a/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
+++ b/core/modules/translation_entity/lib/Drupal/translation_entity/Tests/EntityTranslationUITest.php
@@ -247,7 +247,7 @@ protected function createEntity($values, $langcode, $bundle_name = NULL) {
     if (!empty($info['entity_keys']['bundle'])) {
       $entity_values[$info['entity_keys']['bundle']] = $bundle_name ?: $this->bundle;
     }
-    $controller = $this->container->get('plugin.manager.entity')->getStorageController($this->entityType);
+    $controller = entity_get_controller($this->entityType);
     if (!($controller instanceof DatabaseStorageControllerNG)) {
       foreach ($values as $property => $value) {
         if (is_array($value)) {
diff --git a/core/modules/translation_entity/translation_entity.admin.inc b/core/modules/translation_entity/translation_entity.admin.inc
index aca0dd0..c4f5277 100644
--- a/core/modules/translation_entity/translation_entity.admin.inc
+++ b/core/modules/translation_entity/translation_entity.admin.inc
@@ -28,7 +28,7 @@ function _translation_entity_form_language_content_settings_form_alter(array &$f
   $form['#attached']['library'][] = array('translation_entity', 'drupal.translation_entity.admin');
 
   foreach ($form['#labels'] as $entity_type => $label) {
-    foreach (entity_get_bundles($entity_type) as $bundle => $bundle_info) {
+    foreach (entity_get_bundles($entity_type) as $bundle) {
       $form['settings'][$entity_type][$bundle]['translatable'] = array(
         '#type' => 'checkbox',
         '#default_value' => translation_entity_enabled($entity_type, $bundle),
diff --git a/core/modules/translation_entity/translation_entity.module b/core/modules/translation_entity/translation_entity.module
index ee16a9c..b5108ed 100644
--- a/core/modules/translation_entity/translation_entity.module
+++ b/core/modules/translation_entity/translation_entity.module
@@ -74,7 +74,6 @@ function translation_entity_language_types_info_alter(array &$language_types) {
 function translation_entity_entity_info_alter(array &$entity_info) {
   $edit_form_info = array();
 
-  $bundles_info = entity_get_bundles();
   // Provide defaults for translation info.
   foreach ($entity_info as $entity_type => &$info) {
     if (!isset($info['translation']['translation_entity'])) {
@@ -91,7 +90,7 @@ function translation_entity_entity_info_alter(array &$entity_info) {
     // use translation_entity_enabled() here since it would cause infinite
     // recursion, as it relies on entity info.
     $enabled = FALSE;
-    $bundles = isset($bundles_info[$entity_type]) ? array_keys($bundles_info[$entity_type]) : array($entity_type);
+    $bundles = isset($info['bundles']) ? array_keys($info['bundles']) : array($entity_type);
     foreach ($bundles as $bundle) {
       if (translation_entity_get_config($entity_type, $bundle, 'enabled')) {
         $enabled = TRUE;
@@ -380,7 +379,7 @@ function translation_entity_set_config($entity_type, $bundle, $setting, $value)
  */
 function translation_entity_enabled($entity_type, $bundle = NULL, $skip_handler = FALSE) {
   $enabled = FALSE;
-  $bundles = !empty($bundle) ? array($bundle) : array_keys(entity_get_bundles($entity_type));
+  $bundles = !empty($bundle) ? array($bundle) : entity_get_bundles($entity_type);
 
   foreach ($bundles as $bundle) {
     if (translation_entity_get_config($entity_type, $bundle, 'enabled')) {
@@ -631,7 +630,7 @@ function translation_entity_field_extra_fields() {
   $extra = array();
 
   foreach (entity_get_info() as $entity_type => $info) {
-    foreach (entity_get_bundles($entity_type) as $bundle => $bundle_info) {
+    foreach (entity_get_bundles($entity_type) as $bundle) {
       if (translation_entity_enabled($entity_type, $bundle)) {
         $extra[$entity_type][$bundle]['form']['translation'] = array(
           'label' => t('Translation'),
diff --git a/core/modules/translation_entity/translation_entity.pages.inc b/core/modules/translation_entity/translation_entity.pages.inc
index e2e76cc..294c97b 100644
--- a/core/modules/translation_entity/translation_entity.pages.inc
+++ b/core/modules/translation_entity/translation_entity.pages.inc
@@ -20,7 +20,7 @@ function translation_entity_overview(EntityInterface $entity) {
   $languages = language_list();
   $original = $entity->language()->langcode;
   $translations = $entity->getTranslationLanguages();
-  $field_ui = module_exists('field_ui') && user_access('administer ' . $entity->entityType() . ' fields');
+  $field_ui = module_exists('field_ui');
 
   $path = $controller->getViewPath($entity);
   $base_path = $controller->getBasePath($entity);
diff --git a/core/modules/user/config/user.mail.yml b/core/modules/user/config/user.mail.yml
index 7367e46..edd78b9 100644
--- a/core/modules/user/config/user.mail.yml
+++ b/core/modules/user/config/user.mail.yml
@@ -13,9 +13,6 @@ register_no_approval_required:
 register_pending_approval:
   body: "[user:name],\n\nThank you for registering at [site:name]. Your application for an account is currently pending approval. Once it has been approved, you will receive another e-mail containing information about how to log in, set your password, and other details.\n\n\n--  [site:name] team"
   subject: 'Account details for [user:name] at [site:name] (pending admin approval)'
-register_pending_approval_admin:
-  body: "[user:name] has applied for an account.\n\n[user:edit-url]"
-  subject: 'Account details for [user:name] at [site:name] (pending admin approval)'
 status_activated:
   body: "[user:name],\n\nYour account at [site:name] has been activated.\n\nYou may now log in by clicking this link or copying and pasting it into your browser:\n\n[user:one-time-login-url]\n\nThis link can only be used once to log in and will lead you to a page where you can set your password.\n\nAfter setting your password, you will be able to log in at [site:login-url] in the future using:\n\nusername: [user:name]\npassword: Your password\n\n--  [site:name] team"
   subject: 'Account details for [user:name] at [site:name] (approved)'
diff --git a/core/modules/user/config/user.role.anonymous.yml b/core/modules/user/config/user.role.anonymous.yml
deleted file mode 100644
index 11defb0..0000000
--- a/core/modules/user/config/user.role.anonymous.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-id: anonymous
-label: Anonymous user
-weight: 0
diff --git a/core/modules/user/config/user.role.authenticated.yml b/core/modules/user/config/user.role.authenticated.yml
deleted file mode 100644
index dc4b65d..0000000
--- a/core/modules/user/config/user.role.authenticated.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-id: authenticated
-label: Authenticated user
-weight: 1
diff --git a/core/modules/user/lib/Drupal/user/AccountFormController.php b/core/modules/user/lib/Drupal/user/AccountFormController.php
index 8f2f0c5..7a1001d 100644
--- a/core/modules/user/lib/Drupal/user/AccountFormController.php
+++ b/core/modules/user/lib/Drupal/user/AccountFormController.php
@@ -129,7 +129,7 @@ public function form(array $form, array &$form_state, EntityInterface $account)
       '#access' => $admin,
     );
 
-    $roles = array_map('check_plain', user_role_names(TRUE));
+    $roles = array_map('check_plain', user_roles(TRUE));
     // The disabled checkbox subelement for the 'authenticated user' role
     // must be generated separately and added to the checkboxes element,
     // because of a limitation in Form API not supporting a single disabled
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
deleted file mode 100644
index de17dc9..0000000
--- a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/Role.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\user\Plugin\Core\Entity\Role.
- */
-
-namespace Drupal\user\Plugin\Core\Entity;
-
-use Drupal\Core\Annotation\Plugin;
-use Drupal\Core\Annotation\Translation;
-use Drupal\Core\Config\Entity\ConfigEntityBase;
-
-/**
- * Defines the user role entity class.
- *
- * @Plugin(
- *   id = "user_role",
- *   label = @Translation("Role"),
- *   module = "user",
- *   controller_class = "Drupal\user\RoleStorageController",
- *   config_prefix = "user.role",
- *   entity_keys = {
- *     "id" = "id",
- *     "uuid" = "uuid",
- *     "label" = "label"
- *   }
- * )
- */
-class Role extends ConfigEntityBase {
-
-  /**
-   * The machine name of this role.
-   *
-   * @var string
-   */
-  public $id;
-
-  /**
-   * The UUID of this role.
-   *
-   * @var string
-   */
-  public $uuid;
-
-  /**
-   * The human-readable label of this role.
-   *
-   * @var string
-   */
-  public $label;
-
-  /**
-   * The weight of this role in administrative listings.
-   *
-   * @var int
-   */
-  public $weight;
-
-}
diff --git a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php
index c4f2c92..f2312fe 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/Core/Entity/User.php
@@ -32,6 +32,25 @@
  *   entity_keys = {
  *     "id" = "uid",
  *     "uuid" = "uuid"
+ *   },
+ *   bundles = {
+ *     "user" = {
+ *       "label" = "User",
+ *       "admin" = {
+ *         "path" = "admin/config/people/accounts",
+ *         "access arguments" = {"administer users"}
+ *       }
+ *     }
+ *   },
+ *   view_modes = {
+ *     "full" = {
+ *       "label" = "User account",
+ *       "custom_settings" = FALSE
+ *     },
+ *     "compact" = {
+ *       "label" = "Compact",
+ *       "custom_settings" = TRUE
+ *     }
  *   }
  * )
  */
diff --git a/core/modules/user/lib/Drupal/user/Plugin/block/block/UserLoginBlock.php b/core/modules/user/lib/Drupal/user/Plugin/block/block/UserLoginBlock.php
index 08eede6..51bc8ee 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/block/block/UserLoginBlock.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/block/block/UserLoginBlock.php
@@ -30,9 +30,9 @@ public function blockAccess() {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $form = drupal_get_form('user_login_form');
     unset($form['name']['#attributes']['autofocus']);
     unset($form['name']['#description']);
diff --git a/core/modules/user/lib/Drupal/user/Plugin/block/block/UserNewBlock.php b/core/modules/user/lib/Drupal/user/Plugin/block/block/UserNewBlock.php
index 5c39547..7f97df6 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/block/block/UserNewBlock.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/block/block/UserNewBlock.php
@@ -23,9 +23,9 @@
 class UserNewBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'properties' => array(
         'administrative' => TRUE
@@ -62,9 +62,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     // Retrieve a list of new users who have accessed the site successfully.
     $items = db_query_range('SELECT uid, name FROM {users} WHERE status <> 0 AND access <> 0 ORDER BY created DESC', 0, $this->configuration['whois_new_count'])->fetchAll();
     $build = array(
diff --git a/core/modules/user/lib/Drupal/user/Plugin/block/block/UserOnlineBlock.php b/core/modules/user/lib/Drupal/user/Plugin/block/block/UserOnlineBlock.php
index 6a9fb68..75f23f0 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/block/block/UserOnlineBlock.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/block/block/UserOnlineBlock.php
@@ -26,9 +26,9 @@
 class UserOnlineBlock extends BlockBase {
 
   /**
-   * Overrides \Drupal\block\BlockBase::settings().
+   * Overrides \Drupal\block\BlockBase::blockSettings().
    */
-  public function settings() {
+  public function blockSettings() {
     return array(
       'properties' => array(
         'administrative' => TRUE
@@ -76,9 +76,9 @@ public function blockSubmit($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     // Count users active within the defined period.
     $interval = REQUEST_TIME - $this->configuration['seconds_online'];
 
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/access/Role.php b/core/modules/user/lib/Drupal/user/Plugin/views/access/Role.php
index 146968a..2a07d79 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/access/Role.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/access/Role.php
@@ -46,7 +46,7 @@ public function summaryTitle() {
       return t('Multiple roles');
     }
     else {
-      $rids = user_role_names();
+      $rids = user_roles();
       $rid = reset($this->options['role']);
       return check_plain($rids[$rid]);
     }
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/argument/RolesRid.php b/core/modules/user/lib/Drupal/user/Plugin/views/argument/RolesRid.php
index da3bd92..634307e 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/argument/RolesRid.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/argument/RolesRid.php
@@ -23,7 +23,16 @@
 class RolesRid extends ManyToOne {
 
   function title_query() {
-    return array(entity_load('user_role', $this->value)->label());
+    $titles = array();
+
+    $query = db_select('role', 'r');
+    $query->addField('r', 'name');
+    $query->condition('r.rid', $this->value);
+    $result = $query->execute();
+    foreach ($result as $term) {
+      $titles[] = check_plain($term->name);
+    }
+    return $titles;
   }
 
 }
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/argument_validator/User.php b/core/modules/user/lib/Drupal/user/Plugin/views/argument_validator/User.php
index 36a6a5a..a31b0af 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/argument_validator/User.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/argument_validator/User.php
@@ -56,7 +56,7 @@ public function buildOptionsForm(&$form, &$form_state) {
     $form['roles'] = array(
       '#type' => 'checkboxes',
       '#title' => t('Restrict to the selected roles'),
-      '#options' => array_map('check_plain', user_role_names(TRUE)),
+      '#options' => array_map('check_plain', user_roles(TRUE)),
       '#default_value' => $this->options['roles'],
       '#description' => t('If no roles are selected, users from any role will be allowed.'),
       '#states' => array(
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/field/Roles.php b/core/modules/user/lib/Drupal/user/Plugin/views/field/Roles.php
index 0c4b72f..c4eb050 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/field/Roles.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/field/Roles.php
@@ -47,26 +47,17 @@ function pre_render(&$values) {
     }
 
     if ($uids) {
-      $roles = user_roles();
-      $query = db_select('users_roles', 'u');
+      $query = db_select('role', 'r');
+      $query->join('users_roles', 'u', 'u.rid = r.rid');
+      $query->addField('r', 'name');
       $query->fields('u', array('uid', 'rid'));
-      $query->condition('u.rid', array_keys($roles));
       $query->condition('u.uid', $uids);
-
+      $query->orderBy('r.name');
       $result = $query->execute();
       foreach ($result as $role) {
-        $this->items[$role->uid][$role->rid]['role'] = check_plain($roles[$role->rid]->label());
+        $this->items[$role->uid][$role->rid]['role'] = check_plain($role->name);
         $this->items[$role->uid][$role->rid]['rid'] = $role->rid;
       }
-      // Sort the roles for each user by role weight.
-      $ordered_roles = array_flip(array_keys($roles));
-      foreach ($this->items as &$user_roles) {
-        // Create an array of rids that the user has in the role weight order.
-        $sorted_keys  = array_intersect_key($ordered_roles, $user_roles);
-        // Merge with the unsorted array of role information which has the
-        // effect of sorting it.
-        $user_roles = array_merge($sorted_keys, $user_roles);
-      }
     }
   }
 
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php
index 139856e..8ee3569 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Roles.php
@@ -23,7 +23,7 @@
 class Roles extends ManyToOne {
 
   function get_value_options() {
-    $this->value_options = user_role_names(TRUE);
+    $this->value_options = user_roles(TRUE);
     unset($this->value_options[DRUPAL_AUTHENTICATED_RID]);
   }
 
diff --git a/core/modules/user/lib/Drupal/user/RoleStorageController.php b/core/modules/user/lib/Drupal/user/RoleStorageController.php
deleted file mode 100644
index f5f6575..0000000
--- a/core/modules/user/lib/Drupal/user/RoleStorageController.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\user\RoleStorageController.
- */
-
-namespace Drupal\user;
-
-use Drupal\Core\Config\Entity\ConfigStorageController;
-use Drupal\Core\Entity\EntityInterface;
-
-/**
- * Controller class for user roles.
- */
-class RoleStorageController extends ConfigStorageController {
-
-  /**
-   * Overrides ConfigStorageController::preSave().
-   */
-  public function preSave(EntityInterface $entity) {
-    if (!isset($entity->weight) && $roles = entity_load_multiple('user_role')) {
-      // Set a role weight to make this new role last.
-      $max = array_reduce($roles, function($max, $entity) {
-        return $max > $entity->weight ? $max : $entity->weight;
-      });
-      $entity->weight = $max + 1;
-    }
-    parent::preSave($entity);
-  }
-
-  /**
-   * Overrides ConfigStorageController::resetCache().
-   */
-  public function resetCache(array $ids = NULL) {
-    parent::resetCache($ids);
-
-    // Clear the user access cache.
-    drupal_static_reset('user_access');
-    drupal_static_reset('user_role_permissions');
-  }
-
-  /**
-   * Overrides ConfigStorageController::postDelete().
-   */
-  protected function postDelete($entities) {
-    $rids = array_keys($entities);
-
-    // Delete permission assignments.
-    db_delete('role_permission')
-      ->condition('rid', $rids)
-      ->execute();
-    // Remove the role from all users.
-    db_delete('users_roles')
-      ->condition('rid', $rids)
-      ->execute();
-  }
-
-  /**
-   * Overrides ConfigStorageController::attachLoad().
-   */
-  protected function attachLoad(&$queried_entities, $revision_id = FALSE) {
-    // Sort the queried roles by their weight.
-    uasort($queried_entities, 'Drupal\Core\Config\Entity\ConfigEntityBase::sort');
-
-    parent::attachLoad($queried_entities, $revision_id);
-  }
-
-}
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserAutocompleteTest.php b/core/modules/user/lib/Drupal/user/Tests/UserAutocompleteTest.php
index 380990e..d225150 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserAutocompleteTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserAutocompleteTest.php
@@ -46,14 +46,5 @@ function testUserAutocomplete() {
 
     // Using first letter of the user's name, make sure the user's full name is in the results.
     $this->assertRaw($this->unprivileged_user->name, 'User name found in autocompletion results.');
-
-    $anonymous_name = $this->randomString() . '<script>alert();</script>';
-    config('user.settings')->set('anonymous', $anonymous_name)->save();
-    // Test that anonymous username is in the result when requested and escaped
-    // with check_plain().
-    $users = $this->drupalGetAjax('user/autocomplete/anonymous', array('query' => array('q' => drupal_substr($anonymous_name, 0, 4))));
-    $this->assertTrue(in_array(check_plain($anonymous_name), $users), 'The anonymous name found in autocompletion results.');
-    $users = $this->drupalGetAjax('user/autocomplete', array('query' => array('q' => drupal_substr($anonymous_name, 0, 4))));
-    $this->assertFalse(isset($users[$anonymous_name]), 'The anonymous name not found in autocompletion results without enabling anonymous username.');
   }
 }
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php b/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php
index 052c254..a2f027f 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserBlocksTests.php
@@ -80,8 +80,9 @@ function testUserLoginBlock() {
    * Test the Who's Online block.
    */
   function testWhosOnlineBlock() {
-    $block = $this->drupalPlaceBlock('user_online_block');
-    $config = $block->get('settings');
+    $plugin_id = 'plugin.core.block.' . variable_get('theme_default', 'stark') . '.online';
+    $block = $this->container->get('plugin.manager.block')->getInstance(array('config' => $plugin_id));
+    $config = $block->getConfig();
 
     // Generate users.
     $user1 = $this->drupalCreateUser(array());
@@ -99,7 +100,7 @@ function testWhosOnlineBlock() {
     $this->updateAccess($this->adminUser->uid, $inactive_time);
 
     // Test block output.
-    $content = entity_view($block, 'block');
+    $content = $block->build();
     $this->drupalSetContent(render($content));
     $this->assertRaw(t('2 users'), 'Correct number of online users (2 users).');
     $this->assertText($user1->name, 'Active user 1 found in online list.');
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
index 38ca376..30164f0 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserRegistrationTest.php
@@ -53,7 +53,7 @@ function testRegistrationWithEmailVerification() {
     $edit['name'] = $name = $this->randomName();
     $edit['mail'] = $mail = $edit['name'] . '@example.com';
     $this->drupalPost('user/register', $edit, t('Create new account'));
-    $this->container->get('plugin.manager.entity')->getStorageController('user')->resetCache();
+    entity_get_controller('user')->resetCache();
     $accounts = entity_load_multiple_by_properties('user', array('name' => $name, 'mail' => $mail));
     $new_user = reset($accounts);
     $this->assertFalse($new_user->status, 'New account is blocked until approved by an administrator.');
@@ -82,7 +82,7 @@ function testRegistrationWithoutEmailVerification() {
     $edit['pass[pass1]'] = $new_pass = $this->randomName();
     $edit['pass[pass2]'] = $new_pass;
     $this->drupalPost('user/register', $edit, t('Create new account'));
-    $this->container->get('plugin.manager.entity')->getStorageController('user')->resetCache();
+    entity_get_controller('user')->resetCache();
     $accounts = entity_load_multiple_by_properties('user', array('name' => $name, 'mail' => $mail));
     $new_user = reset($accounts);
     $this->assertText(t('Registration successful. You are now logged in.'), 'Users are logged in after registering.');
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserRoleAdminTest.php b/core/modules/user/lib/Drupal/user/Tests/UserRoleAdminTest.php
index d322a64..50d4da7 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserRoleAdminTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserRoleAdminTest.php
@@ -37,10 +37,10 @@ function testRoleAdministration() {
     // correspond to an integer, to test that the role administration pages
     // correctly distinguish between role names and IDs.)
     $role_name = '123';
-    $edit = array('role[label]' => $role_name, 'role[id]' => $role_name);
+    $edit = array('role[name]' => $role_name, 'role[rid]' => $role_name);
     $this->drupalPost('admin/people/roles', $edit, t('Add role'));
     $this->assertText(t('The role has been added.'), 'The role has been added.');
-    $role = entity_load('user_role', $role_name);
+    $role = user_role_load($role_name);
     $this->assertTrue(is_object($role), 'The role was successfully retrieved from the database.');
 
     // Try adding a duplicate role.
@@ -50,18 +50,18 @@ function testRoleAdministration() {
     // Test renaming a role.
     $old_name = $role_name;
     $role_name = '456';
-    $edit = array('role[label]' => $role_name);
-    $this->drupalPost("admin/people/roles/edit/{$role->id()}", $edit, t('Save role'));
+    $edit = array('role[name]' => $role_name);
+    $this->drupalPost("admin/people/roles/edit/{$role->rid}", $edit, t('Save role'));
     $this->assertText(t('The role has been renamed.'), 'The role has been renamed.');
-    $new_role = entity_load('user_role', $old_name);
-    $this->assertEqual($new_role->label(), $role_name, 'The role name has been successfully changed.');
+    $new_role = user_role_load($old_name);
+    $this->assertEqual($new_role->name, $role_name, 'The role name has been successfully changed.');
 
     // Test deleting a role.
-    $this->drupalPost("admin/people/roles/edit/{$role->id()}", NULL, t('Delete role'));
+    $this->drupalPost("admin/people/roles/edit/{$role->rid}", NULL, t('Delete role'));
     $this->drupalPost(NULL, NULL, t('Delete'));
     $this->assertText(t('The role has been deleted.'), 'The role has been deleted');
-    $this->assertNoLinkByHref("admin/people/roles/edit/{$role->id()}", 'Role edit link removed.');
-    $this->assertFalse(entity_load('user_role', $role_name), 'A deleted role can no longer be loaded.');
+    $this->assertNoLinkByHref("admin/people/roles/edit/{$role->rid}", 'Role edit link removed.');
+    $this->assertFalse(user_role_load($role_name), 'A deleted role can no longer be loaded.');
 
     // Make sure that the system-defined roles can be edited via the user
     // interface.
@@ -74,36 +74,24 @@ function testRoleAdministration() {
   }
 
   /**
-   * Test user role weight change operation and ordering.
+   * Test user role weight change operation.
    */
-  function testRoleWeightOrdering() {
+  function testRoleWeightChange() {
     $this->drupalLogin($this->admin_user);
-    $roles = user_roles();
-    $weight = count($roles);
-    $new_role_weights = array();
-    $saved_rids = array();
-
-    // Change the role weights to make the roles in reverse order.
-    $edit = array();
-    foreach ($roles as $role) {
-      $edit['roles['. $role->id() .'][weight]'] =  $weight;
-      $new_role_weights[$role->id()] = $weight;
-      $saved_rids[] = $role->id;
-      $weight--;
-    }
+
+    // Pick up a random role and get its weight.
+    $rid = array_rand(user_roles());
+    $role = user_role_load($rid);
+    $old_weight = $role->weight;
+
+    // Change the role weight and submit the form.
+    $edit = array('roles['. $rid .'][weight]' => $old_weight + 1);
     $this->drupalPost('admin/people/roles', $edit, t('Save order'));
     $this->assertText(t('The role settings have been updated.'), 'The role settings form submitted successfully.');
 
-    // Load up the user roles with the new weights.
-    drupal_static_reset('user_roles');
-    $roles = user_roles();
-    $rids = array();
-    // Test that the role weights have been correctly saved.
-    foreach ($roles as $role) {
-      $this->assertEqual($role->weight, $new_role_weights[$role->id()]);
-      $rids[] = $role->id;
-    }
-    // The order of the roles should be reversed.
-    $this->assertIdentical($rids, array_reverse($saved_rids));
+    // Retrieve the saved role and compare its weight.
+    $role = user_role_load($rid);
+    $new_weight = $role->weight;
+    $this->assertTrue(($old_weight + 1) == $new_weight, 'Role weight updated successfully.');
   }
 }
diff --git a/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php b/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php
index 31f01b9..9ed88ca 100644
--- a/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/UserSignatureTest.php
@@ -41,17 +41,19 @@ function setUp() {
     // Prefetch and create text formats.
     $this->plain_text_format = filter_format_load('plain_text');
 
-    $this->filtered_html_format = entity_create('filter_format', array(
+    $filtered_html_format = array(
       'format' => 'filtered_html',
       'name' => 'Filtered HTML',
-    ));
-    $this->filtered_html_format->save();
+    );
+    $this->filtered_html_format = (object) $filtered_html_format;
+    filter_format_save($this->filtered_html_format);
 
-    $this->full_html_format = entity_create('filter_format', array(
+    $full_html_format = array(
       'format' => 'full_html',
       'name' => 'Full HTML',
-    ));
-    $this->full_html_format->save();
+    );
+    $this->full_html_format = (object) $full_html_format;
+    filter_format_save($this->full_html_format);
 
     user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array(filter_permission_name($this->filtered_html_format)));
     $this->checkPermissions(array(), TRUE);
diff --git a/core/modules/user/lib/Drupal/user/Tests/Views/HandlerFieldRoleTest.php b/core/modules/user/lib/Drupal/user/Tests/Views/HandlerFieldRoleTest.php
deleted file mode 100644
index f85d7fa..0000000
--- a/core/modules/user/lib/Drupal/user/Tests/Views/HandlerFieldRoleTest.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\user\Tests\Views\HandlerFieldRoleTest.
- */
-
-namespace Drupal\user\Tests\Views;
-
-/**
- * Tests the role field handler.
- *
- * @see views_handler_field_user_name
- */
-class HandlerFieldRoleTest extends UserTestBase {
-
-  /**
-   * Views used by this test.
-   *
-   * @var array
-   */
-  public static $testViews = array('test_views_handler_field_role');
-
-  public static function getInfo() {
-    return array(
-      'name' => 'User: Role Field',
-      'description' => 'Tests the handler of the user: role field.',
-      'group' => 'Views Modules',
-    );
-  }
-
-  public function testRole() {
-    // Create a couple of roles for the view.
-    $rolename_a = 'a' . $this->randomName(8);
-    $rid_a = $this->drupalCreateRole(array('access content'), $rolename_a, $rolename_a, 9);
-
-    $rolename_b = 'b' . $this->randomName(8);
-    $rid_b = $this->drupalCreateRole(array('access content'), $rolename_b, $rolename_b, 8);
-
-    $rolename_not_assigned = $this->randomName(8);
-    $this->drupalCreateRole(array('access content'), $rolename_not_assigned, $rolename_not_assigned);
-
-    // Add roles to user 1.
-    $user = user_load(1);
-    $user->roles[$rid_a] = $rolename_a;
-    $user->roles[$rid_b] = $rolename_b;
-    $user->save();
-
-    $view = views_get_view('test_views_handler_field_role');
-    $this->executeView($view);
-    $view->row_index = 0;
-    // The role field is populated during pre_render.
-    $view->field['rid']->pre_render($view->result);
-    $render = $view->field['rid']->advanced_render($view->result[0]);
-
-    $this->assertEqual($rolename_b . $rolename_a, $render, 'View test_views_handler_field_role renders role assigned to user in the correct order.');
-    $this->assertFalse(strpos($render, $rolename_not_assigned), 'View test_views_handler_field_role does not render a role not assigned to a user.');
-  }
-
-}
diff --git a/core/modules/user/lib/Drupal/user/UserStorageController.php b/core/modules/user/lib/Drupal/user/UserStorageController.php
index 3d8e981..5d7b634 100644
--- a/core/modules/user/lib/Drupal/user/UserStorageController.php
+++ b/core/modules/user/lib/Drupal/user/UserStorageController.php
@@ -34,9 +34,9 @@ function attachLoad(&$queried_users, $load_revision = FALSE) {
     }
 
     // Add any additional roles from the database.
-    $result = db_query('SELECT rid, uid FROM {users_roles} WHERE uid IN (:uids)', array(':uids' => array_keys($queried_users)));
+    $result = db_query('SELECT r.rid, r.name, ur.uid FROM {role} r INNER JOIN {users_roles} ur ON ur.rid = r.rid WHERE ur.uid IN (:uids)', array(':uids' => array_keys($queried_users)));
     foreach ($result as $record) {
-      $queried_users[$record->uid]->roles[$record->rid] = $record->rid;
+      $queried_users[$record->uid]->roles[$record->rid] = $record->name;
     }
 
     // Call the default attachLoad() method. This will add fields and call
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_views_handler_field_role.yml b/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_views_handler_field_role.yml
deleted file mode 100644
index 193c15b..0000000
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_views_handler_field_role.yml
+++ /dev/null
@@ -1,153 +0,0 @@
-base_field: uid
-base_table: users
-core: 8.x
-description: ''
-disabled: '0'
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: ''
-    display_options:
-      access:
-        type: perm
-        perm: 'access user profiles'
-      cache:
-        type: none
-      query:
-        type: views_query
-      exposed_form:
-        type: basic
-      pager:
-        type: none
-        options:
-          items_per_page: ''
-      style:
-        type: default
-      row:
-        type: fields
-      fields:
-        name:
-          id: name
-          table: users
-          field: name
-          relationship: none
-          group_type: group
-          admin_label: ''
-          label: Name
-          exclude: '0'
-          alter:
-            alter_text: '0'
-            text: ''
-            make_link: '0'
-            path: ''
-            absolute: '0'
-            external: '0'
-            replace_spaces: '0'
-            path_case: none
-            trim_whitespace: '0'
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: '0'
-            max_length: ''
-            word_boundary: '1'
-            ellipsis: '1'
-            more_link: '0'
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: '0'
-            trim: '0'
-            preserve_tags: ''
-            html: '0'
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: '1'
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: '1'
-          empty: ''
-          hide_empty: '0'
-          empty_zero: '0'
-          hide_alter_empty: '1'
-          link_to_user: '1'
-          overwrite_anonymous: '0'
-          anonymous_text: ''
-          format_username: '1'
-        rid:
-          id: rid
-          table: users_roles
-          field: rid
-          relationship: none
-          group_type: group
-          admin_label: ''
-          label: Roles
-          exclude: '0'
-          alter:
-            alter_text: '0'
-            text: ''
-            make_link: '0'
-            path: ''
-            absolute: '0'
-            external: '0'
-            replace_spaces: '0'
-            path_case: none
-            trim_whitespace: '0'
-            alt: ''
-            rel: ''
-            link_class: ''
-            prefix: ''
-            suffix: ''
-            target: ''
-            nl2br: '0'
-            max_length: ''
-            word_boundary: '1'
-            ellipsis: '1'
-            more_link: '0'
-            more_link_text: ''
-            more_link_path: ''
-            strip_tags: '0'
-            trim: '0'
-            preserve_tags: ''
-            html: '0'
-          element_type: ''
-          element_class: ''
-          element_label_type: ''
-          element_label_class: ''
-          element_label_colon: '1'
-          element_wrapper_type: ''
-          element_wrapper_class: ''
-          element_default_classes: '1'
-          empty: ''
-          hide_empty: '0'
-          empty_zero: '0'
-          hide_alter_empty: '1'
-          type: separator
-          separator: ''
-      filters:
-        status:
-          value: '1'
-          table: users
-          field: status
-          id: status
-          expose:
-            operator: '0'
-          group: '1'
-      sorts: {  }
-      title: test_user_role
-  page_1:
-    display_plugin: page
-    id: page_1
-    display_title: Page
-    position: ''
-    display_options:
-      path: test-views-handler-field-role
-human_name: test_views_handler_field_role
-id: test_views_handler_field_role
-tag: ''
diff --git a/core/modules/user/tests/modules/user_custom_phpass_params_test/lib/Drupal/user_custom_phpass_params_test/UserCustomPhpassParamsTestBundle.php b/core/modules/user/tests/user_custom_phpass_params_test/lib/Drupal/user_custom_phpass_params_test/UserCustomPhpassParamsTestBundle.php
similarity index 100%
rename from core/modules/user/tests/modules/user_custom_phpass_params_test/lib/Drupal/user_custom_phpass_params_test/UserCustomPhpassParamsTestBundle.php
rename to core/modules/user/tests/user_custom_phpass_params_test/lib/Drupal/user_custom_phpass_params_test/UserCustomPhpassParamsTestBundle.php
diff --git a/core/modules/user/tests/modules/user_custom_phpass_params_test/user_custom_phpass_params_test.info b/core/modules/user/tests/user_custom_phpass_params_test/user_custom_phpass_params_test.info
similarity index 100%
rename from core/modules/user/tests/modules/user_custom_phpass_params_test/user_custom_phpass_params_test.info
rename to core/modules/user/tests/user_custom_phpass_params_test/user_custom_phpass_params_test.info
diff --git a/core/modules/user/tests/modules/user_custom_phpass_params_test/user_custom_phpass_params_test.module b/core/modules/user/tests/user_custom_phpass_params_test/user_custom_phpass_params_test.module
similarity index 100%
rename from core/modules/user/tests/modules/user_custom_phpass_params_test/user_custom_phpass_params_test.module
rename to core/modules/user/tests/user_custom_phpass_params_test/user_custom_phpass_params_test.module
diff --git a/core/modules/user/tests/modules/user_form_test/user_form_test.info b/core/modules/user/tests/user_form_test.info
similarity index 100%
rename from core/modules/user/tests/modules/user_form_test/user_form_test.info
rename to core/modules/user/tests/user_form_test.info
diff --git a/core/modules/user/tests/modules/user_form_test/user_form_test.module b/core/modules/user/tests/user_form_test.module
similarity index 100%
rename from core/modules/user/tests/modules/user_form_test/user_form_test.module
rename to core/modules/user/tests/user_form_test.module
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_access_perm.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_access_perm.yml
similarity index 91%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_access_perm.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_access_perm.yml
index cab4e3f..f509323 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_access_perm.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_access_perm.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -24,5 +25,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_access_perm
+name: test_access_perm
 tag: ''
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_access_role.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_access_role.yml
similarity index 90%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_access_role.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_access_role.yml
index e8df49d..3d2b4d9 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_access_role.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_access_role.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -22,5 +23,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_access_role
+name: test_access_role
 tag: ''
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_groupwise_user.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_groupwise_user.yml
similarity index 97%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_groupwise_user.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_groupwise_user.yml
index 8b09600..7d79d11 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_groupwise_user.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_groupwise_user.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_field: uid
 base_table: users
 core: 8.0-dev
@@ -71,5 +72,5 @@ display:
 human_name: test_groupwise_user
 langcode: und
 module: views
-id: test_groupwise_user
+name: test_groupwise_user
 tag: default
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_plugin_argument_default_current_user.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_plugin_argument_default_current_user.yml
similarity index 94%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_plugin_argument_default_current_user.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_plugin_argument_default_current_user.yml
index 40b8ff1..54180b6 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_plugin_argument_default_current_user.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_plugin_argument_default_current_user.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -51,5 +52,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_plugin_argument_default_current_user
+name: test_plugin_argument_default_current_user
 tag: ''
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_name.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_user_name.yml
similarity index 96%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_name.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_user_name.yml
index 3288594..ab243bc 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_name.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_user_name.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: users
 core: '8'
 description: ''
@@ -48,5 +49,5 @@ display:
     id: page_1
     position: '0'
 human_name: ''
-id: test_user_name
+name: test_user_name
 tag: ''
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_relationship.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_user_relationship.yml
similarity index 97%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_relationship.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_user_relationship.yml
index 3c19d4e..096fa16 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_relationship.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_user_relationship.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -97,5 +98,5 @@ display:
     id: default
     position: '0'
 human_name: test_user_relationship
-id: test_user_relationship
+name: test_user_relationship
 tag: default
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_uid_argument.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_user_uid_argument.yml
similarity index 89%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_uid_argument.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_user_uid_argument.yml
index 6309f8a..7dfce3e 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_user_uid_argument.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_user_uid_argument.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: users
 core: '8'
 description: ''
@@ -22,4 +23,4 @@ display:
     id: default
     position: '0'
 human_name:
-id: test_user_uid_argument
+name: test_user_uid_argument
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_view_argument_validate_user.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_view_argument_validate_user.yml
similarity index 91%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_view_argument_validate_user.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_view_argument_validate_user.yml
index dba19db..2750f43 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_view_argument_validate_user.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_view_argument_validate_user.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -32,5 +33,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_view_argument_validate_user
+name: test_view_argument_validate_user
 tag: ''
diff --git a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_views_handler_field_user_name.yml b/core/modules/user/tests/user_test_views/test_views/views.view.test_views_handler_field_user_name.yml
similarity index 94%
rename from core/modules/user/tests/modules/user_test_views/test_views/views.view.test_views_handler_field_user_name.yml
rename to core/modules/user/tests/user_test_views/test_views/views.view.test_views_handler_field_user_name.yml
index f068501..48522e0 100644
--- a/core/modules/user/tests/modules/user_test_views/test_views/views.view.test_views_handler_field_user_name.yml
+++ b/core/modules/user/tests/user_test_views/test_views/views.view.test_views_handler_field_user_name.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: users
 core: '8'
 description: ''
@@ -45,5 +46,5 @@ display:
     id: default
     position: '0'
 human_name: test_views_handler_field_user_name
-id: test_views_handler_field_user_name
+name: test_views_handler_field_user_name
 tag: default
diff --git a/core/modules/user/tests/modules/user_test_views/user_test_views.info b/core/modules/user/tests/user_test_views/user_test_views.info
similarity index 100%
rename from core/modules/user/tests/modules/user_test_views/user_test_views.info
rename to core/modules/user/tests/user_test_views/user_test_views.info
diff --git a/core/modules/user/tests/modules/user_test_views/user_test_views.module b/core/modules/user/tests/user_test_views/user_test_views.module
similarity index 100%
rename from core/modules/user/tests/modules/user_test_views/user_test_views.module
rename to core/modules/user/tests/user_test_views/user_test_views.module
diff --git a/core/modules/user/user.admin.inc b/core/modules/user/user.admin.inc
index 4da13b8..1689f62 100644
--- a/core/modules/user/user.admin.inc
+++ b/core/modules/user/user.admin.inc
@@ -208,7 +208,7 @@ function user_admin_account() {
 
   $destination = drupal_get_destination();
   $status = array(t('blocked'), t('active'));
-  $roles = array_map('check_plain', user_role_names(TRUE));
+  $roles = array_map('check_plain', user_roles(TRUE));
   $accounts = array();
   foreach ($result as $account) {
     $account = user_load($account->uid);
@@ -316,7 +316,7 @@ function user_admin_settings($form, &$form_state) {
 
   // Do not allow users to set the anonymous or authenticated user roles as the
   // administrator role.
-  $roles = user_role_names();
+  $roles = user_roles();
   unset($roles[DRUPAL_ANONYMOUS_RID]);
   unset($roles[DRUPAL_AUTHENTICATED_RID]);
   $roles[0] = t('disabled');
@@ -439,27 +439,6 @@ function user_admin_settings($form, &$form_state) {
     '#rows' => 8,
   );
 
-  $form['email_pending_approval_admin'] = array(
-    '#type' => 'details',
-    '#title' => t('Admin (user awaiting approval)'),
-    '#collapsible' => TRUE,
-    '#collapsed' => ($config->get('register') != USER_REGISTER_VISITORS_ADMINISTRATIVE_APPROVAL),
-    '#description' => t('Edit the e-mail notifying the site administrator that there are new members awaiting administrative approval.') . ' ' . $email_token_help,
-    '#group' => 'email',
-  );
-  $form['email_pending_approval_admin']['register_pending_approval_admin_subject'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Subject'),
-    '#default_value' => $mail_config->get('register_pending_approval_admin.subject'),
-    '#maxlength' => 180,
-  );
-  $form['email_pending_approval_admin']['register_pending_approval_admin_body'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Body'),
-    '#default_value' => $mail_config->get('register_pending_approval_admin.body'),
-    '#rows' => 8,
-  );
-
   $form['email_no_approval_required'] = array(
     '#type' => 'details',
     '#title' => t('Welcome (no approval required)'),
@@ -677,7 +656,7 @@ function user_admin_settings_submit($form, &$form_state) {
 function user_admin_permissions($form, $form_state, $rid = NULL) {
 
   // Retrieve role names for columns.
-  $role_names = user_role_names();
+  $role_names = user_roles();
   if (isset($rid)) {
     $role_names = array($rid => $role_names[$rid]);
   }
@@ -778,7 +757,7 @@ function user_admin_permissions_submit($form, &$form_state) {
 function theme_user_admin_permissions($variables) {
   $form = $variables['form'];
 
-  $roles = user_role_names();
+  $roles = user_roles();
   foreach (element_children($form['permission']) as $key) {
     $row = array();
     // Module name
@@ -847,21 +826,27 @@ function theme_user_permission_description($variables) {
  * @see theme_user_admin_roles()
  */
 function user_admin_roles($form, $form_state) {
-  $roles = user_roles();
+  $roles = db_select('role', 'r')
+    ->addTag('translatable')
+    ->fields('r')
+    ->orderBy('weight')
+    ->orderBy('name')
+    ->execute();
 
   $form['roles'] = array(
     '#tree' => TRUE,
   );
-
-  foreach ($roles as $rid => $role) {
-    $form['roles'][$rid]['#role'] = $role;
-    $form['roles'][$rid]['#weight'] = $role->weight;
-    $form['roles'][$rid]['name'] = array(
-      '#markup' => check_plain($role->label()),
+  $max_weight = 0;
+  foreach ($roles as $role) {
+    $max_weight = max($max_weight, $role->weight);
+    $form['roles'][$role->rid]['#role'] = $role;
+    $form['roles'][$role->rid]['#weight'] = $role->weight;
+    $form['roles'][$role->rid]['name'] = array(
+      '#markup' => check_plain($role->name),
     );
-    $form['roles'][$rid]['weight'] = array(
+    $form['roles'][$role->rid]['weight'] = array(
       '#type' => 'textfield',
-      '#title' => t('Weight for @title', array('@title' => $role->label())),
+      '#title' => t('Weight for @title', array('@title' => $role->name)),
       '#title_display' => 'invisible',
       '#size' => 4,
       '#default_value' => $role->weight,
@@ -869,25 +854,26 @@ function user_admin_roles($form, $form_state) {
     );
     $links['edit'] = array(
       'title' => t('edit role'),
-      'href' => 'admin/people/roles/edit/' . $rid,
+      'href' => 'admin/people/roles/edit/' . $role->rid,
       'weight' => 0,
     );
     $links['permissions'] = array(
       'title' => t('edit permissions'),
-      'href' => 'admin/people/permissions/' . $rid,
+      'href' => 'admin/people/permissions/' . $role->rid,
       'weight' => 5,
     );
-    $form['roles'][$rid]['operations'] = array(
+    $form['roles'][$role->rid]['operations'] = array(
       '#type' => 'operations',
       '#links' => $links,
     );
   }
 
   // Embed the role add form.
-  $add_role = entity_create('user_role', array(
-    'id' => NULL,
-    'label' => NULL,
-  ));
+  $add_role = (object) array(
+    'rid' => NULL,
+    'name' => NULL,
+    'weight' => $max_weight + 1,
+  );
   $add_form = user_admin_role(array(), $form_state, $add_role);
   $add_form['actions']['submit']['#submit'] = array('user_admin_role_submit');
   $add_form['role']['actions'] = $add_form['actions'];
@@ -913,7 +899,7 @@ function user_admin_roles_order_submit($form, &$form_state) {
   foreach ($form_state['values']['roles'] as $rid => $role_values) {
     $role = $form['roles'][$rid]['#role'];
     $role->weight = $role_values['weight'];
-    $role->save();
+    user_role_save($role);
   }
   drupal_set_message(t('The role settings have been updated.'));
 }
@@ -967,33 +953,32 @@ function theme_user_admin_roles($variables) {
  *
  * @ingroup forms
  * @see user_admin_role_submit()
- *
- * @todo Move into a RoleFormController.
  */
 function user_admin_role($form, $form_state, $role) {
   $form['role'] = array(
     '#tree' => TRUE,
     '#parents' => array('role'),
   );
-  $form['role']['label'] = array(
+
+  $form['role']['name'] = array(
     '#type' => 'textfield',
     '#title' => t('Role name'),
-    '#default_value' => $role->label(),
+    '#default_value' => $role->name,
     '#size' => 30,
     '#required' => TRUE,
     '#maxlength' => 64,
     '#description' => t('The name for this role. Example: "Moderator", "Editorial board", "Site architect".'),
   );
-  $form['role']['id'] = array(
+  $form['role']['rid'] = array(
     '#type' => 'machine_name',
-    '#default_value' => $role->id(),
+    '#default_value' => $role->rid,
     '#required' => TRUE,
-    '#disabled' => !$role->isNew(),
+    '#disabled' => !empty($role->rid),
     '#size' => 30,
     '#maxlength' => 64,
     '#machine_name' => array(
       'exists' => 'user_role_load',
-      'source' => array('role', 'label'),
+      'source' => array('role', 'name'),
     ),
   );
   $form['role']['weight'] = array(
@@ -1003,12 +988,12 @@ function user_admin_role($form, $form_state, $role) {
   $form['actions'] = array('#type' => 'actions');
   $form['actions']['submit'] = array(
     '#type' => 'submit',
-    '#value' => !$role->isNew() ? t('Save role') : t('Add role'),
+    '#value' => !empty($role->rid) ? t('Save role') : t('Add role'),
   );
   $form['actions']['delete'] = array(
     '#type' => 'submit',
     '#value' => t('Delete role'),
-    '#access' => !$role->isNew() && !in_array($role->id(), array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID)),
+    '#access' => !empty($role->rid) && !in_array($role->rid, array(DRUPAL_ANONYMOUS_RID, DRUPAL_AUTHENTICATED_RID)),
     '#submit' => array('user_admin_role_delete_submit'),
   );
 
@@ -1019,11 +1004,9 @@ function user_admin_role($form, $form_state, $role) {
  * Form submit handler for the user_admin_role() form.
  */
 function user_admin_role_submit($form, &$form_state) {
-  // Prevent leading and trailing spaces in role names.
-  $form_state['values']['role']['label'] = trim($form_state['values']['role']['label']);
-
-  $role = entity_create('user_role', $form_state['values']['role']);
-  if ($role->save() == SAVED_UPDATED) {
+  $role = (object) $form_state['values']['role'];
+  $status = user_role_save($role);
+  if ($status === SAVED_UPDATED) {
     drupal_set_message(t('The role has been renamed.'));
   }
   else {
@@ -1036,25 +1019,26 @@ function user_admin_role_submit($form, &$form_state) {
  * Form submit handler for the user_admin_role() form.
  */
 function user_admin_role_delete_submit($form, &$form_state) {
-  $form_state['redirect'] = 'admin/people/roles/delete/' . $form_state['values']['role']['id'];
+  $form_state['redirect'] = 'admin/people/roles/delete/' . $form_state['values']['role']['rid'];
 }
 
 /**
  * Form to confirm role delete operation.
  */
 function user_admin_role_delete_confirm($form, &$form_state, $role) {
-  $form['id'] = array(
+  $form['rid'] = array(
     '#type' => 'value',
-    '#value' => $role->id(),
+    '#value' => $role->rid,
   );
-  return confirm_form($form, t('Are you sure you want to delete the role %name ?', array('%name' => $role->label())), 'admin/people/roles', t('This action cannot be undone.'), t('Delete'));
+  return confirm_form($form, t('Are you sure you want to delete the role %name ?', array('%name' => $role->name)), 'admin/people/roles', t('This action cannot be undone.'), t('Delete'));
 }
 
 /**
  * Form submit handler for user_admin_role_delete_confirm().
  */
 function user_admin_role_delete_confirm_submit($form, &$form_state) {
-  entity_delete_multiple('user_role', array($form_state['values']['id']));
+  user_role_delete($form_state['values']['rid']);
   drupal_set_message(t('The role has been deleted.'));
   $form_state['redirect'] = 'admin/people/roles';
 }
+
diff --git a/core/modules/user/user.api.php b/core/modules/user/user.api.php
index 652c5b5..cae3dde 100644
--- a/core/modules/user/user.api.php
+++ b/core/modules/user/user.api.php
@@ -440,7 +440,7 @@ function hook_user_role_insert($role) {
   // Save extra fields provided by the module to user roles.
   db_insert('my_module_table')
     ->fields(array(
-      'rid' => $role->id(),
+      'rid' => $role->rid,
       'role_description' => $role->description,
     ))
     ->execute();
@@ -460,7 +460,7 @@ function hook_user_role_insert($role) {
 function hook_user_role_update($role) {
   // Save extra fields provided by the module to user roles.
   db_merge('my_module_table')
-    ->key(array('rid' => $role->id()))
+    ->key(array('rid' => $role->rid))
     ->fields(array(
       'role_description' => $role->description
     ))
@@ -481,7 +481,7 @@ function hook_user_role_update($role) {
 function hook_user_role_delete($role) {
   // Delete existing instances of the deleted role.
   db_delete('my_module_table')
-    ->condition('rid', $role->id())
+    ->condition('rid', $role->rid)
     ->execute();
 }
 
diff --git a/core/modules/user/user.css b/core/modules/user/user.css
index 42ca431..8513db4 100644
--- a/core/modules/user/user.css
+++ b/core/modules/user/user.css
@@ -65,37 +65,6 @@ div.password-suggestions ul {
   width: 36.3em;
 }
 
- /**
- * Password strength indicator on narrow viewport.
- */
-@media screen and (max-width: 600px) {
-  .password-strength {
-    margin-top: 0;
-    width: auto;
-  }
-  .password-indicator {
-    margin-bottom: 0.4em;
-  }
-  input.password-confirm,
-  input.password-field {
-    margin-bottom: 0;
-    width: 100%;
-  }
-  div.password-confirm {
-    margin-top: 0;
-    width: auto;
-  }
-  div.form-item div.password-suggestions {
-    width: auto;
-  }
-  .confirm-parent,
-  .password-parent {
-    clear: none;
-    margin: 0;
-    width: 100%;
-  }
-}
-
 /**
  * Toolbar icon.
  */
diff --git a/core/modules/user/user.install b/core/modules/user/user.install
index 9a0b663..1475cda 100644
--- a/core/modules/user/user.install
+++ b/core/modules/user/user.install
@@ -75,7 +75,7 @@ function user_schema() {
         'type' => 'varchar',
         'length' => 255,
         'not null' => FALSE,
-        'description' => 'The filter format ID of the signature.',
+        'description' => 'The {filter_format}.format of the signature.',
       ),
       'created' => array(
         'type' => 'int',
@@ -148,6 +148,39 @@ function user_schema() {
     ),
   );
 
+  $schema['role'] = array(
+    'description' => 'Stores user roles.',
+    'fields' => array(
+      'rid' => array(
+        'type' => 'varchar',
+        // The role ID is often used as part of a compound index; at least MySQL
+        // has a maximum index length of 1000 characters (333 on utf8), so we
+        // limit the maximum length.
+        'length' => 64,
+        'not null' => TRUE,
+        'description' => 'Primary Key: Unique role ID.',
+      ),
+      'name' => array(
+        'type' => 'varchar',
+        'length' => 255,
+        'not null' => TRUE,
+        'default' => '',
+        'description' => 'Role label.',
+        'translatable' => TRUE,
+      ),
+      'weight' => array(
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+        'description' => 'The weight of this role in listings and the user interface.',
+      ),
+    ),
+    'primary key' => array('rid'),
+    'indexes' => array(
+      'name_weight' => array('name', 'weight'),
+    ),
+  );
+
   $schema['role_permission'] = array(
     'description' => 'Stores the permissions assigned to user roles.',
     'fields' => array(
@@ -293,6 +326,13 @@ function user_install() {
       'status' => 1,
     ))
     ->execute();
+
+  // Insert built-in roles.
+  db_insert('role')
+    ->fields(array('rid', 'name', 'weight'))
+    ->values(array(DRUPAL_ANONYMOUS_RID, 'Anonymous user', 0))
+    ->values(array(DRUPAL_AUTHENTICATED_RID, 'Authenticated user', 1))
+    ->execute();
 }
 
 /**
@@ -585,8 +625,6 @@ function user_update_8006() {
     'register_admin_created_body' => 'register_admin_created.body',
     'register_pending_approval_subject' => 'register_pending_approval.subject',
     'register_pending_approval_body' => 'register_pending_approval.body',
-    'register_pending_approval_admin_body' => 'register_pending_approval_admin.body',
-    'register_pending_approval_admin_subject' => 'register_pending_approval_admin.subject',
     'register_no_approval_required_subject' => 'register_no_approval_required.subject',
     'register_no_approval_required_body' => 'register_no_approval_required.body',
     'password_reset_subject' => 'password_reset.subject',
@@ -1017,33 +1055,5 @@ function user_update_8016() {
 }
 
 /**
- * Migrate user roles into configuration.
- *
- * @ingroup config_upgrade
- */
-function user_update_8017() {
-  $uuid = new Uuid();
-
-  $roles = db_select('role', 'r')
-    ->fields('r')
-    ->execute()
-    ->fetchAll();
-
-  foreach ($roles as $role) {
-    config('user.role.' . $role->rid)
-      ->set('id', $role->rid)
-      ->set('uuid', $uuid->generate())
-      ->set('label', $role->name)
-      ->set('weight', $role->weight)
-      ->set('langcode', LANGUAGE_NOT_SPECIFIED)
-      ->save();
-  }
-
-  update_config_manifest_add('user.role', array_map(function ($role) {
-    return $role->rid;
-  }, $roles));
-}
-
-/**
  * @} End of "addtogroup updates-7.x-to-8.x".
  */
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 55314bb..747758d 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -6,7 +6,6 @@
 use Drupal\entity\Plugin\Core\Entity\EntityDisplay;
 use Drupal\file\Plugin\Core\Entity\File;
 use Drupal\user\Plugin\Core\Entity\User;
-use Drupal\user\UserRole;
 use Drupal\Core\Template\Attribute;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 
@@ -124,33 +123,6 @@ function user_page_build(&$page) {
 }
 
 /**
- * Implements hook_entity_view_mode_info().
- */
-function user_entity_view_mode_info() {
-  $view_modes['user']['full'] = array(
-    'label' => t('User account'),
-  );
-  $view_modes['user']['compact'] = array(
-    'label' => t('Compact'),
-    'custom_settings' => TRUE,
-  );
-  return $view_modes;
-}
-
-/**
- * Implements hook_entity_bundle_info().
- */
-function user_entity_bundle_info() {
-  $bundles['user']['user'] = array(
-    'label' => t('User'),
-    'admin' => array(
-      'path' => 'admin/config/people/accounts',
-    ),
-  );
-  return $bundles;
-}
-
-/**
  * Entity URI callback.
  */
 function user_uri($user) {
@@ -917,15 +889,6 @@ function user_menu() {
     'file' => 'user.pages.inc',
   );
 
-  $items['user/autocomplete/anonymous'] = array(
-    'title' => 'User autocomplete including anonymous',
-    'page callback' => 'user_autocomplete',
-    'page arguments' => array(TRUE),
-    'access callback' => 'user_access',
-    'access arguments' => array('access user profiles'),
-    'type' => MENU_CALLBACK,
-    'file' => 'user.pages.inc',
-  );
   // Registration and login pages.
   $items['user'] = array(
     'title' => 'User account',
@@ -1855,25 +1818,6 @@ function user_mail_tokens(&$replacements, $data, $options) {
  *   An associative array with the role id as the key and the role name as
  *   value.
  */
-function user_role_names($membersonly = FALSE, $permission = NULL) {
-  return array_map(function($item) {
-    return $item->label();
-  }, user_roles($membersonly, $permission));
-}
-
-/**
- * Retrieve an array of roles matching specified conditions.
- *
- * @param $membersonly
- *   Set this to TRUE to exclude the 'anonymous' role.
- * @param $permission
- *   A string containing a permission. If set, only roles containing that
- *   permission are returned.
- *
- * @return
- *   An associative array with the role id as the key and the role object as
- *   value.
- */
 function user_roles($membersonly = FALSE, $permission = NULL) {
   $user_roles = &drupal_static(__FUNCTION__);
 
@@ -1886,22 +1830,23 @@ function user_roles($membersonly = FALSE, $permission = NULL) {
     }
   }
 
-  $roles = entity_load_multiple('user_role');
-  if ($membersonly) {
-    unset($roles[DRUPAL_ANONYMOUS_RID]);
-  }
-
+  $query = db_select('role', 'r');
+  $query->addTag('translatable');
+  $query->fields('r', array('rid', 'name'));
+  $query->orderBy('weight');
+  $query->orderBy('name');
   if (!empty($permission)) {
-    $result = db_select('role_permission', 'p')
-      ->fields('p', array('rid'))
-      ->condition('p.rid', array_keys($roles))
-      ->condition('p.permission', $permission)
-      ->execute()->fetchCol();
-    $roles = array_intersect_key($roles, array_flip($result));
+    $query->innerJoin('role_permission', 'p', 'r.rid = p.rid');
+    $query->condition('p.permission', $permission);
+  }
+  if ($membersonly) {
+    $query->condition('r.rid', DRUPAL_ANONYMOUS_RID, '!=');
   }
+  $roles = $query->execute()->fetchAllKeyed();
 
   if (empty($permission)) {
     $user_roles[$cid] = $roles;
+    return $user_roles[$cid];
   }
 
   return $roles;
@@ -1918,7 +1863,87 @@ function user_roles($membersonly = FALSE, $permission = NULL) {
  *   otherwise.
  */
 function user_role_load($rid) {
-  return entity_load('user_role', $rid);
+  return db_select('role', 'r')
+    ->fields('r')
+    ->condition('rid', $rid)
+    ->execute()
+    ->fetchObject();
+}
+
+/**
+ * Save a user role to the database.
+ *
+ * @param $role
+ *   A role object to modify or add.
+ *
+ * @return
+ *   Status constant indicating if role was created or updated.
+ *   Failure to write the user role record will return FALSE. Otherwise
+ *   SAVED_NEW or SAVED_UPDATED is returned depending on the operation
+ *   performed.
+ */
+function user_role_save($role) {
+  if ($role->name) {
+    // Prevent leading and trailing spaces in role names.
+    $role->name = trim($role->name);
+  }
+  if (!isset($role->weight)) {
+    // Set a role weight to make this new role last.
+    $query = db_select('role');
+    $query->addExpression('MAX(weight)');
+    $role->weight = $query->execute()->fetchField() + 1;
+  }
+
+  // Let modules modify the user role before it is saved to the database.
+  module_invoke_all('user_role_presave', $role);
+
+  $exists = db_select('role', 'r')
+    ->fields('r', array('rid'))
+    ->condition('rid', $role->rid)
+    ->execute()
+    ->fetchAll();
+
+  if (empty($exists)) {
+    $status = drupal_write_record('role', $role);
+    module_invoke_all('user_role_insert', $role);
+  }
+  else {
+    $status = drupal_write_record('role', $role, 'rid');
+    module_invoke_all('user_role_update', $role);
+  }
+
+  // Clear the user access cache.
+  drupal_static_reset('user_access');
+  drupal_static_reset('user_role_permissions');
+
+  return $status;
+}
+
+/**
+ * Delete a user role from database.
+ *
+ * @param $role
+ *   A string with the role ID.
+ */
+function user_role_delete($role) {
+  $role = user_role_load($role);
+
+  db_delete('role')
+    ->condition('rid', $role->rid)
+    ->execute();
+  db_delete('role_permission')
+    ->condition('rid', $role->rid)
+    ->execute();
+  // Update the users who have this role set:
+  db_delete('users_roles')
+    ->condition('rid', $role->rid)
+    ->execute();
+
+  module_invoke_all('user_role_delete', $role);
+
+  // Clear the user access cache.
+  drupal_static_reset('user_access');
+  drupal_static_reset('user_role_permissions');
 }
 
 /**
@@ -1926,7 +1951,7 @@ function user_role_load($rid) {
  */
 function user_role_delete_access($role) {
   // Prevent the system-defined roles from being removed.
-  if ($role->id() == DRUPAL_ANONYMOUS_RID || $role->id() == DRUPAL_AUTHENTICATED_RID) {
+  if ($role->rid == DRUPAL_ANONYMOUS_RID || $role->rid == DRUPAL_AUTHENTICATED_RID) {
     return FALSE;
   }
 
@@ -2065,7 +2090,7 @@ function user_user_operations($form = array(), $form_state = array()) {
   );
 
   if (user_access('administer permissions')) {
-    $roles = user_role_names(TRUE);
+    $roles = user_roles(TRUE);
     unset($roles[DRUPAL_AUTHENTICATED_RID]);  // Can't edit authenticated role.
 
     $add_roles = array();
@@ -2150,7 +2175,7 @@ function user_user_operations_block($accounts) {
  * Callback function for admin mass adding/deleting a user role.
  */
 function user_multiple_role_edit($accounts, $operation, $rid) {
-  $role_name = entity_load('user_role', $rid)->label();
+  $role_name = db_query('SELECT name FROM {role} WHERE rid = :rid', array(':rid' => $rid))->fetchField();
 
   switch ($operation) {
     case 'add_role':
@@ -2282,7 +2307,7 @@ function user_multiple_cancel_confirm_submit($form, &$form_state) {
 function user_filters() {
   // Regular filters
   $filters = array();
-  $roles = user_role_names(TRUE);
+  $roles = user_roles(TRUE);
   unset($roles[DRUPAL_AUTHENTICATED_RID]); // Don't list authorized role.
   if (count($roles)) {
     $filters['role'] = array(
@@ -2789,9 +2814,6 @@ function user_library_info() {
     'js' => array(
       drupal_get_path('module', 'user') . '/user.js' => array(),
     ),
-    'css' => array(
-      drupal_get_path('module', 'user') . '/user.css' => array(),
-    ),
     'dependencies' => array(
       array('system', 'jquery'),
       array('system', 'drupal'),
diff --git a/core/modules/user/user.pages.inc b/core/modules/user/user.pages.inc
index 5a872ab..c1b9349 100644
--- a/core/modules/user/user.pages.inc
+++ b/core/modules/user/user.pages.inc
@@ -12,29 +12,11 @@
 use Symfony\Component\HttpKernel\HttpKernelInterface;
 
 /**
- * Menu callback for user autocompletion.
- *
- * Like other autocomplete functions, this function inspects the 'q' query
- * parameter for the string to use to search for suggestions.
- *
- * @param bool $include_anonymous
- *   (optional) TRUE if the the name used to indicate anonymous users (e.g.
- *   "Anonymous") should be autocompleted. Defaults to FALSE.
- *
- * @return \Symfony\Component\HttpFoundation\JsonResponse
- *   A JSON response containing the autocomplete suggestions for existing users.
+ * Menu callback; Retrieve a JSON object containing autocomplete suggestions for existing users.
  */
-function user_autocomplete($include_anonymous = FALSE) {
+function user_autocomplete() {
   $matches = array();
-  $query = drupal_container()->get('request')->query;
-  if ($string = $query->get('q')) {
-    if ($include_anonymous) {
-      $anonymous_name = config('user.settings')->get('anonymous');
-      // Allow autocompletion for the anonymous user.
-      if (stripos($anonymous_name, $string) !== FALSE) {
-        $matches[$anonymous_name] = check_plain($anonymous_name);
-      }
-    }
+  if ($string = drupal_container()->get('request')->query->get('q')) {
     $result = db_select('users')->fields('users', array('name'))->condition('name', db_like($string) . '%', 'LIKE')->range(0, 10)->execute();
     foreach ($result as $account) {
       $matches[$account->name] = check_plain($account->name);
diff --git a/core/modules/user/user.views.inc b/core/modules/user/user.views.inc
index 5aefa46..9264381 100644
--- a/core/modules/user/user.views.inc
+++ b/core/modules/user/user.views.inc
@@ -32,6 +32,7 @@ function user_views_data() {
     'help' => t('The user ID'), // The help that appears on the UI,
     'field' => array(
       'id' => 'user',
+      'click sortable' => TRUE,
     ),
     'argument' => array(
       'id' => 'user_uid',
@@ -99,6 +100,7 @@ function user_views_data() {
     'help' => t('The user or author name.'), // The help that appears on the UI,
     'field' => array(
       'id' => 'user_name',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -120,6 +122,7 @@ function user_views_data() {
     'help' => t('Email address for a given user. This field is normally not shown to users, so be cautious when using it.'), // The help that appears on the UI,
     'field' => array(
       'id' => 'user_mail',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -138,6 +141,7 @@ function user_views_data() {
     'help' => t('Language of the user'),
     'field' => array(
       'id' => 'user_language',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'standard',
@@ -156,7 +160,6 @@ function user_views_data() {
       'title' => t('Link'),
       'help' => t('Provide a simple link to the user.'),
       'id' => 'user_link',
-      'click sortable' => FALSE,
     ),
   );
 
@@ -166,6 +169,7 @@ function user_views_data() {
     'help' => t('The date the user was created.'), // The help that appears on the UI,
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date'
@@ -235,6 +239,7 @@ function user_views_data() {
     'help' => t("The user's last access date."), // The help that appears on the UI,
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date'
@@ -250,6 +255,7 @@ function user_views_data() {
     'help' => t("The user's last login date."), // The help that appears on the UI,
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date'
@@ -266,6 +272,7 @@ function user_views_data() {
      // Information for displaying a title as a field
     'field' => array(
       'id' => 'boolean',
+      'click sortable' => TRUE,
       'output formats' => array(
         'active-blocked' => array(t('Active'), t('Blocked')),
       ),
@@ -288,7 +295,6 @@ function user_views_data() {
     'field' => array(
       'id' => 'markup',
       'format' => filter_fallback_format(),
-      'click sortable' => FALSE,
     ),
     'filter' => array(
       'id' => 'string',
@@ -300,7 +306,6 @@ function user_views_data() {
       'title' => t('Edit link'),
       'help' => t('Provide a simple link to edit the user.'),
       'id' => 'user_link_edit',
-      'click sortable' => FALSE,
     ),
   );
 
@@ -309,7 +314,6 @@ function user_views_data() {
       'title' => t('Cancel link'),
       'help' => t('Provide a simple link to cancel the user.'),
       'id' => 'user_link_cancel',
-      'click sortable' => FALSE,
     ),
   );
 
@@ -347,6 +351,22 @@ function user_views_data() {
     ),
   );
 
+  // role table
+
+  $data['role']['table']['join'] = array(
+     // Directly links to users table.
+    'users' => array(
+      'left_table' => 'users_roles',
+      'left_field' => 'rid',
+      'field' => 'rid',
+    ),
+    // needed for many to one helper sometimes
+    'users_roles' => array(
+      'left_field' => 'rid',
+      'field' => 'rid',
+    ),
+  );
+
   // permission table
   $data['role_permission']['table']['group']  = t('User');
   $data['role_permission']['table']['join'] = array(
diff --git a/core/modules/views/config/views.view.archive.yml b/core/modules/views/config/views.view.archive.yml
index 1623e79..f018c57 100644
--- a/core/modules/views/config/views.view.archive.yml
+++ b/core/modules/views/config/views.view.archive.yml
@@ -1,6 +1,7 @@
 disabled: true
+api_version: '3.0'
 module: node
-id: archive
+name: archive
 description: 'A list of months that link to content for that month.'
 tag: default
 base_table: node
diff --git a/core/modules/views/config/views.view.backlinks.yml b/core/modules/views/config/views.view.backlinks.yml
index 58de2ca..3d9011b 100644
--- a/core/modules/views/config/views.view.backlinks.yml
+++ b/core/modules/views/config/views.view.backlinks.yml
@@ -1,6 +1,7 @@
 disabled: true
+api_version: '3.0'
 module: search
-id: backlinks
+name: backlinks
 description: 'A list of other content items which have a link to the content item.'
 tag: default
 base_table: node
diff --git a/core/modules/views/config/views.view.comments_recent.yml b/core/modules/views/config/views.view.comments_recent.yml
index 57aab63..336f0da 100644
--- a/core/modules/views/config/views.view.comments_recent.yml
+++ b/core/modules/views/config/views.view.comments_recent.yml
@@ -1,6 +1,7 @@
 disabled: true
+api_version: '3.0'
 module: comment
-id: comments_recent
+name: comments_recent
 description: 'A block and a page with recent comments.'
 tag: default
 base_table: comment
diff --git a/core/modules/views/config/views.view.frontpage.yml b/core/modules/views/config/views.view.frontpage.yml
index 09c507d..a635a0e 100644
--- a/core/modules/views/config/views.view.frontpage.yml
+++ b/core/modules/views/config/views.view.frontpage.yml
@@ -1,6 +1,7 @@
 disabled: true
+api_version: '3.0'
 module: node
-id: frontpage
+name: frontpage
 description: 'Emulates the default Drupal front page; you may set the default home page path to this view to make it your front page.'
 tag: default
 base_table: node
diff --git a/core/modules/views/config/views.view.glossary.yml b/core/modules/views/config/views.view.glossary.yml
index 6ac297a..18f059c 100644
--- a/core/modules/views/config/views.view.glossary.yml
+++ b/core/modules/views/config/views.view.glossary.yml
@@ -1,6 +1,7 @@
 disabled: true
+api_version: '3.0'
 module: node
-id: glossary
+name: glossary
 description: 'A list of all content, by letter.'
 tag: default
 base_table: node
diff --git a/core/modules/views/config/views.view.taxonomy_term.yml b/core/modules/views/config/views.view.taxonomy_term.yml
index 704bb67..40d85ed 100644
--- a/core/modules/views/config/views.view.taxonomy_term.yml
+++ b/core/modules/views/config/views.view.taxonomy_term.yml
@@ -1,6 +1,7 @@
 disabled: true
+api_version: '3.0'
 module: taxonomy
-id: taxonomy_term
+name: taxonomy_term
 description: 'Customize the default taxonomy/term display.'
 tag: default
 base_table: node
diff --git a/core/modules/views/config/views.view.tracker.yml b/core/modules/views/config/views.view.tracker.yml
index 253259f..e9c903d 100644
--- a/core/modules/views/config/views.view.tracker.yml
+++ b/core/modules/views/config/views.view.tracker.yml
@@ -1,6 +1,7 @@
 disabled: true
+api_version: '3.0'
 module: node
-id: tracker
+name: tracker
 description: 'Shows all new activity on the system.'
 tag: default
 base_table: node
diff --git a/core/modules/views/includes/ajax.inc b/core/modules/views/includes/ajax.inc
index 5cf0caf..61f913c 100644
--- a/core/modules/views/includes/ajax.inc
+++ b/core/modules/views/includes/ajax.inc
@@ -208,7 +208,7 @@ function views_ajax_command_replace_title($title) {
   $command = array(
     'command' => 'viewsReplaceTitle',
     'title' => $title,
-    'siteName' => config('system.site')->id(),
+    'siteName' => config('system.site')->get('name'),
   );
   return $command;
 }
diff --git a/core/modules/views/views_ui/js/ajax.js b/core/modules/views/js/ajax.js
similarity index 100%
rename from core/modules/views/views_ui/js/ajax.js
rename to core/modules/views/js/ajax.js
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
index bf7eca2..4434cab 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Core/Entity/View.php
@@ -32,7 +32,7 @@
  *   config_prefix = "views.view",
  *   fieldable = FALSE,
  *   entity_keys = {
- *     "id" = "id",
+ *     "id" = "name",
  *     "label" = "human_name",
  *     "uuid" = "uuid"
  *   }
@@ -48,11 +48,11 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   protected $base_table = 'node';
 
   /**
-   * The unique ID of the view.
+   * The name of the view.
    *
    * @var string
    */
-  public $id = NULL;
+  public $name = NULL;
 
   /**
    * The description of the view, which is used only in the interface.
@@ -86,6 +86,13 @@ class View extends ConfigEntityBase implements ViewStorageInterface {
   protected $core = DRUPAL_CORE_COMPATIBILITY;
 
   /**
+   * The views API version this view was created by.
+   *
+   * @var string
+   */
+  protected $api_version = VIEWS_API_VERSION;
+
+  /**
    * Stores all display handlers of this view.
    *
    * An array containing Drupal\views\Plugin\views\display\DisplayPluginBase
@@ -155,6 +162,13 @@ public function uri() {
   }
 
   /**
+   * Overrides Drupal\Core\Entity\EntityInterface::id().
+   */
+  public function id() {
+    return $this->get('name');
+  }
+
+  /**
    * Overrides Drupal\Core\Config\Entity\ConfigEntityBase::createDuplicate().
    */
   public function createDuplicate() {
@@ -193,7 +207,7 @@ public function isEnabled() {
    */
   public function getHumanName() {
     if (!$human_name = $this->get('human_name')) {
-      $human_name = $this->id();
+      $human_name = $this->get('name');
     }
     return $human_name;
   }
@@ -382,6 +396,7 @@ public function getPaths() {
    */
   public function getExportProperties() {
     $names = array(
+      'api_version',
       'base_field',
       'base_table',
       'core',
@@ -390,7 +405,7 @@ public function getExportProperties() {
       'display',
       'human_name',
       'module',
-      'id',
+      'name',
       'tag',
       'uuid',
     );
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php
index ade4e8c..1bb7cfe 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsBlock.php
@@ -49,7 +49,7 @@ public function getDerivativeDefinitions(array $base_plugin_definition) {
       foreach ($executable->displayHandlers as $display) {
         // Add a block plugin definition for each block display.
         if (isset($display) && !empty($display->definition['uses_hook_block'])) {
-          $delta = $view->id() . '-' . $display->display['id'];
+          $delta = $view->get('name') . '-' . $display->display['id'];
           $desc = $display->getOption('block_description');
 
           if (empty($desc)) {
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsExposedFilterBlock.php b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsExposedFilterBlock.php
index e1ceb24..c537184 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsExposedFilterBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Derivative/ViewsExposedFilterBlock.php
@@ -50,8 +50,8 @@ public function getDerivativeDefinitions(array $base_plugin_definition) {
         if (isset($display) && $display->getOption('exposed_block')) {
           // Add a block definition for the block.
           if ($display->usesExposedFormInBlock()) {
-            $delta = $view->id() . '-' . $display->display['id'];
-            $desc = t('Exposed form: @view-@display_id', array('@view' => $view->id(), '@display_id' => $display->display['id']));
+            $delta = $view->get('name') . '-' . $display->display['id'];
+            $desc = t('Exposed form: @view-@display_id', array('@view' => $view->get('name'), '@display_id' => $display->display['id']));
             $this->derivatives[$delta] = array(
               'subject' => $desc,
               'cache' => DRUPAL_NO_CACHE,
diff --git a/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php b/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php
index c861095..296212c 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsBlock.php
@@ -8,7 +8,6 @@
 namespace Drupal\views\Plugin\block\block;
 
 use Drupal\block\BlockBase;
-use Drupal\block\Plugin\Core\Entity\Block;
 use Drupal\Core\Annotation\Plugin;
 use Drupal\Core\Annotation\Translation;
 use Drupal\Component\Plugin\Discovery\DiscoveryInterface;
@@ -42,8 +41,8 @@ class ViewsBlock extends BlockBase {
   /**
    * Overrides \Drupal\Component\Plugin\PluginBase::__construct().
    */
-  public function __construct(array $configuration, $plugin_id, DiscoveryInterface $discovery, Block $entity) {
-    parent::__construct($configuration, $plugin_id, $discovery, $entity);
+  public function __construct(array $configuration, $plugin_id, DiscoveryInterface $discovery) {
+    parent::__construct($configuration, $plugin_id, $discovery);
 
     list($plugin, $delta) = explode(':', $this->getPluginId());
     list($name, $this->displayID) = explode('-', $delta, 2);
@@ -70,12 +69,12 @@ public function blockForm($form, &$form_state) {
   }
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $output = $this->view->executeDisplay($this->displayID);
-    // Set the label to the title configured in the view.
-    $this->entity->set('label', filter_xss_admin($this->view->getTitle()));
+    // Set the subject to the title configured in the view.
+    $this->configuration['subject'] = filter_xss_admin($this->view->getTitle());
     // Before returning the block output, convert it to a renderable array
     // with contextual links.
     views_add_block_contextual_links($output, $this->view, $this->displayID);
diff --git a/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsExposedFilterBlock.php b/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsExposedFilterBlock.php
index 0330de9..2d51c25 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsExposedFilterBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/block/block/ViewsExposedFilterBlock.php
@@ -23,9 +23,9 @@
 class ViewsExposedFilterBlock extends ViewsBlock {
 
   /**
-   * Implements \Drupal\block\BlockBase::build().
+   * Implements \Drupal\block\BlockBase::blockBuild().
    */
-  public function build() {
+  public function blockBuild() {
     $type = 'exp';
     $output = $this->view->display_handler->viewSpecialBlocks($type);
     // Before returning the block output, convert it to a renderable array with
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
index ad0798b..7c789e6 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
@@ -821,7 +821,7 @@ public function getEntityType() {
       return $views_data['table']['entity type'];
     }
     else {
-      throw new \Exception(format_string('No entity type for field @field on view @view', array('@field' => $this->options['id'], '@view' => $this->view->storage->id())));
+      throw new \Exception(format_string('No entity type for field @field on view @view', array('@field' => $this->options['id'], '@view' => $this->view->storage->get('name'))));
     }
   }
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
index b860d0e..8ce189a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/AreaPluginBase.php
@@ -162,7 +162,9 @@ public function preRender(array $results) {
   /**
    * Render the area
    */
-  public abstract function render($empty = FALSE);
+  function render($empty = FALSE) {
+    return '';
+  }
 
   /**
    * Area handlers shouldn't have groupby.
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
index 3908547..52f6a7a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/Title.php
@@ -58,11 +58,4 @@ public function preRender(array $results) {
     return '';
   }
 
-  /**
-   * Implements \Drupal\views\Plugins\views\area\AreaPluginBase::render();
-   */
-  public function render($empty = FALSE) {
-    // Do nothing for this handler.
-  }
-
 }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php b/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
index a766c5d..1da8146 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/area/View.php
@@ -35,7 +35,7 @@ protected function defineOptions() {
   public function buildOptionsForm(&$form, &$form_state) {
     parent::buildOptionsForm($form, $form_state);
 
-    $view_display = $this->view->storage->id() . ':' . $this->view->current_display;
+    $view_display = $this->view->storage->get('name') . ':' . $this->view->current_display;
 
     $options = array('' => t('-Select-'));
     $options += views_get_views_as_options(FALSE, 'all', $view_display, FALSE, TRUE);
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
index 7df986e..6cce4b0 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
@@ -180,7 +180,7 @@ function cache_get($type) {
    * to be sure that we catch everything. Maybe that's a bad idea.
    */
   function cache_flush() {
-    cache($this->table)->deleteTags(array($this->view->storage->id() => TRUE));
+    cache($this->table)->deleteTags(array($this->view->storage->get('name') => TRUE));
   }
 
   /**
@@ -295,7 +295,7 @@ public function generateResultsKey() {
         }
       }
 
-      $this->resultsKey = $this->view->storage->id() . ':' . $this->displayHandler->display['id'] . ':results:' . hash('sha256', serialize($key_data));
+      $this->resultsKey = $this->view->storage->get('name') . ':' . $this->displayHandler->display['id'] . ':results:' . hash('sha256', serialize($key_data));
     }
 
     return $this->resultsKey;
@@ -319,7 +319,7 @@ public function generateOutputKey() {
         'base_url' => $GLOBALS['base_url'],
       );
 
-      $this->outputKey = $this->view->storage->id() . ':' . $this->displayHandler->display['id'] . ':output:' . hash('sha256', serialize($key_data));
+      $this->outputKey = $this->view->storage->get('name') . ':' . $this->displayHandler->display['id'] . ':output:' . hash('sha256', serialize($key_data));
     }
 
     return $this->outputKey;
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index b0c6511..bf02934 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -977,7 +977,7 @@ public function optionLink($text, $section, $class = '', $title = '') {
       $title = $text;
     }
 
-    return l($text, 'admin/structure/views/nojs/display/' . $this->view->storage->id() . '/' . $this->display['id'] . '/' . $section, array('attributes' => array('class' => 'views-ajax-link ' . $class, 'title' => $title, 'id' => drupal_html_id('views-' . $this->display['id'] . '-' . $section)), 'html' => TRUE));
+    return l($text, 'admin/structure/views/nojs/display/' . $this->view->storage->get('name') . '/' . $this->display['id'] . '/' . $section, array('attributes' => array('class' => 'views-ajax-link ' . $class, 'title' => $title, 'id' => drupal_html_id('views-' . $this->display['id'] . '-' . $section)), 'html' => TRUE));
   }
 
   /**
@@ -1259,9 +1259,8 @@ public function optionsSummary(&$categories, &$options) {
 
     if ($this->usesLinkDisplay()) {
       $display_id = $this->getLinkDisplay();
-      $displays = $this->view->storage->get('display');
-      $link_display = empty($displays[$display_id]) ? t('None') : check_plain($displays[$display_id]['display_title']);
-      $link_display = $this->getOption('link_display') == 'custom_url' ? t('Custom URL') : $link_display;
+      $link_display = empty($this->view->display[$display_id]) ? t('None') : check_plain($this->view->display[$display_id]['display_title']);
+      $link_display =  $this->getOption('link_display') == 'custom_url' ? t('Custom URL') : $link_display;
       $options['link_display'] = array(
         'category' => 'other',
         'title' => t('Link display'),
@@ -2627,8 +2626,8 @@ public function getSpecialBlocks() {
     $blocks = array();
 
     if ($this->usesExposedFormInBlock()) {
-      $delta = '-exp-' . $this->view->storage->id() . '-' . $this->display['id'];
-      $desc = t('Exposed form: @view-@display_id', array('@view' => $this->view->storage->id(), '@display_id' => $this->display['id']));
+      $delta = '-exp-' . $this->view->storage->get('name') . '-' . $this->display['id'];
+      $desc = t('Exposed form: @view-@display_id', array('@view' => $this->view->storage->get('name'), '@display_id' => $this->display['id']));
 
       $blocks[$delta] = array(
         'info' => $desc,
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
index 8a0a85e..8136f38 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/PathPluginBase.php
@@ -41,7 +41,7 @@ public function executeHookMenu($callbacks) {
     // views_arg_load -- which lives in views.module.
 
     $bits = explode('/', $this->getOption('path'));
-    $page_arguments = array($this->view->storage->id(), $this->display['id']);
+    $page_arguments = array($this->view->storage->name, $this->display['id']);
     $this->view->initHandlers();
     $view_arguments = $this->view->argument;
 
@@ -103,7 +103,7 @@ public function executeHookMenu($callbacks) {
         'access callback' => 'views_access',
         'access arguments' => $access_arguments,
         // Identify URL embedded arguments and correlate them to a handler.
-        'load arguments'  => array($this->view->storage->id(), $this->display['id'], '%index'),
+        'load arguments'  => array($this->view->storage->name, $this->display['id'], '%index'),
       );
       $menu = $this->getOption('menu');
       if (empty($menu)) {
@@ -165,7 +165,7 @@ public function executeHookMenu($callbacks) {
               'access arguments' => $access_arguments,
               // Identify URL embedded arguments and correlate them to a
               // handler.
-              'load arguments'  => array($this->view->storage->id(), $this->display['id'], '%index'),
+              'load arguments'  => array($this->view->storage->name, $this->display['id'], '%index'),
               'title' => $tab_options['title'],
               'description' => $tab_options['description'],
               'menu_name' => $tab_options['name'],
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/exposed_form/ExposedFormPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/exposed_form/ExposedFormPluginBase.php
index 1c61147..06bb4ea 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/exposed_form/ExposedFormPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/exposed_form/ExposedFormPluginBase.php
@@ -124,7 +124,7 @@ function render_exposed_form($block = FALSE) {
     // Deal with any exposed filters we may have, before building.
     $form_state = array(
       'view' => &$this->view,
-      'display' => &$this->view->display_handler->display,
+      'display' => &$this->display,
       'method' => 'get',
       'rerender' => TRUE,
       'no_redirect' => TRUE,
@@ -284,8 +284,8 @@ function reset_form(&$form, &$form_state) {
     // remember settings.
     $display_id = ($this->view->display_handler->isDefaulted('filters')) ? 'default' : $this->view->current_display;
 
-    if (isset($_SESSION['views'][$this->view->storage->id()][$display_id])) {
-      unset($_SESSION['views'][$this->view->storage->id()][$display_id]);
+    if (isset($_SESSION['views'][$this->view->storage->get('name')][$display_id])) {
+      unset($_SESSION['views'][$this->view->storage->get('name')][$display_id]);
     }
 
     // Set the form to allow redirect.
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
index f72db81..2c866d3 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
@@ -177,13 +177,9 @@ function click_sort($order) {
 
   /**
    * Determine if this field is click sortable.
-   *
-   * @return bool
-   *   The value of 'click sortable' from the plugin definition, this defaults
-   *   to TRUE if not set.
    */
   function click_sortable() {
-    return isset($this->definition['click sortable']) ? $this->definition['click sortable'] : TRUE;
+    return !empty($this->definition['click sortable']);
   }
 
   /**
@@ -1615,19 +1611,19 @@ public function themeFunctions() {
     $display = $this->view->display_handler->display;
 
     if (!empty($display)) {
-      $themes[] = $hook . '__' . $this->view->storage->id()  . '__' . $display['id'] . '__' . $this->options['id'];
-      $themes[] = $hook . '__' . $this->view->storage->id()  . '__' . $display['id'];
+      $themes[] = $hook . '__' . $this->view->storage->get('name')  . '__' . $display['id'] . '__' . $this->options['id'];
+      $themes[] = $hook . '__' . $this->view->storage->get('name')  . '__' . $display['id'];
       $themes[] = $hook . '__' . $display['id'] . '__' . $this->options['id'];
       $themes[] = $hook . '__' . $display['id'];
       if ($display['id'] != $display['display_plugin']) {
-        $themes[] = $hook . '__' . $this->view->storage->id()  . '__' . $display['display_plugin'] . '__' . $this->options['id'];
-        $themes[] = $hook . '__' . $this->view->storage->id()  . '__' . $display['display_plugin'];
+        $themes[] = $hook . '__' . $this->view->storage->get('name')  . '__' . $display['display_plugin'] . '__' . $this->options['id'];
+        $themes[] = $hook . '__' . $this->view->storage->get('name')  . '__' . $display['display_plugin'];
         $themes[] = $hook . '__' . $display['display_plugin'] . '__' . $this->options['id'];
         $themes[] = $hook . '__' . $display['display_plugin'];
       }
     }
-    $themes[] = $hook . '__' . $this->view->storage->id() . '__' . $this->options['id'];
-    $themes[] = $hook . '__' . $this->view->storage->id();
+    $themes[] = $hook . '__' . $this->view->storage->get('name') . '__' . $this->options['id'];
+    $themes[] = $hook . '__' . $this->view->storage->get('name');
     $themes[] = $hook . '__' . $this->options['id'];
     $themes[] = $hook;
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
index b737cc7..c7771c0 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
@@ -551,7 +551,7 @@ public function buildExposeForm(&$form, &$form_state) {
       '#default_value' => $this->options['expose']['remember'],
     );
 
-    $role_options = array_map('check_plain', user_role_names());
+    $role_options = array_map('check_plain', user_roles());
     $form['expose']['remember_roles'] = array(
       '#type' => 'checkboxes',
       '#title' => t('User roles'),
@@ -1244,8 +1244,8 @@ function store_group_input($input, $status) {
 
     // false means that we got a setting that means to recuse ourselves,
     // so we should erase whatever happened to be there.
-    if ($status === FALSE && isset($_SESSION['views'][$this->view->storage->id()][$display_id])) {
-      $session = &$_SESSION['views'][$this->view->storage->id()][$display_id];
+    if ($status === FALSE && isset($_SESSION['views'][$this->view->storage->get('name')][$display_id])) {
+      $session = &$_SESSION['views'][$this->view->storage->get('name')][$display_id];
 
       if (isset($session[$this->options['group_info']['identifier']])) {
         unset($session[$this->options['group_info']['identifier']]);
@@ -1253,11 +1253,11 @@ function store_group_input($input, $status) {
     }
 
     if ($status !== FALSE) {
-      if (!isset($_SESSION['views'][$this->view->storage->id()][$display_id])) {
-        $_SESSION['views'][$this->view->storage->id()][$display_id] = array();
+      if (!isset($_SESSION['views'][$this->view->storage->get('name')][$display_id])) {
+        $_SESSION['views'][$this->view->storage->get('name')][$display_id] = array();
       }
 
-      $session = &$_SESSION['views'][$this->view->storage->id()][$display_id];
+      $session = &$_SESSION['views'][$this->view->storage->get('name')][$display_id];
 
       $session[$this->options['group_info']['identifier']] = $input[$this->options['group_info']['identifier']];
     }
@@ -1338,8 +1338,8 @@ public function storeExposedInput($input, $status) {
 
     // false means that we got a setting that means to recuse ourselves,
     // so we should erase whatever happened to be there.
-    if (!$status && isset($_SESSION['views'][$this->view->storage->id()][$display_id])) {
-      $session = &$_SESSION['views'][$this->view->storage->id()][$display_id];
+    if (!$status && isset($_SESSION['views'][$this->view->storage->get('name')][$display_id])) {
+      $session = &$_SESSION['views'][$this->view->storage->get('name')][$display_id];
       if ($operator && isset($session[$this->options['expose']['operator_id']])) {
         unset($session[$this->options['expose']['operator_id']]);
       }
@@ -1350,11 +1350,11 @@ public function storeExposedInput($input, $status) {
     }
 
     if ($status) {
-      if (!isset($_SESSION['views'][$this->view->storage->id()][$display_id])) {
-        $_SESSION['views'][$this->view->storage->id()][$display_id] = array();
+      if (!isset($_SESSION['views'][$this->view->storage->get('name')][$display_id])) {
+        $_SESSION['views'][$this->view->storage->get('name')][$display_id] = array();
       }
 
-      $session = &$_SESSION['views'][$this->view->storage->id()][$display_id];
+      $session = &$_SESSION['views'][$this->view->storage->get('name')][$display_id];
 
       if ($operator && isset($input[$this->options['expose']['operator_id']])) {
         $session[$this->options['expose']['operator_id']] = $input[$this->options['expose']['operator_id']];
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/pager/Full.php b/core/modules/views/lib/Drupal/views/Plugin/views/pager/Full.php
index e0a7821..cc2db4e 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/pager/Full.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/pager/Full.php
@@ -22,28 +22,79 @@
  *   help = @Translation("Paged output, full Drupal style")
  * )
  */
-class Full extends SqlBase {
+class Full extends PagerPluginBase {
+
+  public function summaryTitle() {
+    if (!empty($this->options['offset'])) {
+      return format_plural($this->options['items_per_page'], '@count item, skip @skip', 'Paged, @count items, skip @skip', array('@count' => $this->options['items_per_page'], '@skip' => $this->options['offset']));
+    }
+      return format_plural($this->options['items_per_page'], '@count item', 'Paged, @count items', array('@count' => $this->options['items_per_page']));
+  }
 
-  /**
-   * Overrides \Drupal\views\Plugin\views\SqlBase::defineOptions().
-   */
   protected function defineOptions() {
     $options = parent::defineOptions();
-
+    $options['items_per_page'] = array('default' => 10);
+    $options['offset'] = array('default' => 0);
+    $options['id'] = array('default' => 0);
+    $options['total_pages'] = array('default' => '');
     // Use the same default quantity that core uses by default.
     $options['quantity'] = array('default' => 9);
+    $options['expose'] = array(
+      'contains' => array(
+        'items_per_page' => array('default' => FALSE, 'bool' => TRUE),
+        'items_per_page_label' => array('default' => 'Items per page', 'translatable' => TRUE),
+        'items_per_page_options' => array('default' => '5, 10, 20, 40, 60'),
+        'items_per_page_options_all' => array('default' => FALSE, 'bool' => TRUE),
+        'items_per_page_options_all_label' => array('default' => '- All -', 'translatable' => TRUE),
 
-    $options['tags']['contains']['first'] = array('default' => '« first', 'translatable' => TRUE);
-    $options['tags']['contains']['last'] = array('default' => 'last »', 'translatable' => TRUE);
-
+        'offset' => array('default' => FALSE, 'bool' => TRUE),
+        'offset_label' => array('default' => 'Offset', 'translatable' => TRUE),
+      ),
+    );
+    $options['tags'] = array(
+      'contains' => array(
+        'first' => array('default' => '« first', 'translatable' => TRUE),
+        'previous' => array('default' => '‹ previous', 'translatable' => TRUE),
+        'next' => array('default' => 'next ›', 'translatable' => TRUE),
+        'last' => array('default' => 'last »', 'translatable' => TRUE),
+      ),
+    );
     return $options;
   }
 
   /**
-   * Overrides \Drupal\views\Plugin\views\SqlBase::buildOptionsForm().
+   * Provide the default form for setting options.
    */
   public function buildOptionsForm(&$form, &$form_state) {
     parent::buildOptionsForm($form, $form_state);
+    $pager_text = $this->displayHandler->getPagerText();
+    $form['items_per_page'] = array(
+      '#title' => $pager_text['items per page title'],
+      '#type' => 'number',
+      '#description' => $pager_text['items per page description'],
+      '#default_value' => $this->options['items_per_page'],
+    );
+
+    $form['offset'] = array(
+      '#type' => 'number',
+      '#title' => t('Offset'),
+      '#description' => t('The number of items to skip. For example, if this field is 3, the first 3 items will be skipped and not displayed.'),
+      '#default_value' => $this->options['offset'],
+    );
+
+    $form['id'] = array(
+      '#type' => 'number',
+      '#title' => t('Pager ID'),
+      '#description' => t("Unless you're experiencing problems with pagers related to this view, you should leave this at 0. If using multiple pagers on one page you may need to set this number to a higher value so as not to conflict within the ?page= array. Large values will add a lot of commas to your URLs, so avoid if possible."),
+      '#default_value' => $this->options['id'],
+    );
+
+    $form['total_pages'] = array(
+      '#type' => 'number',
+      '#title' => t('Number of pages'),
+      '#description' => t('The total number of pages. Leave empty to show all pages.'),
+      '#default_value' => $this->options['total_pages'],
+    );
 
     $form['quantity'] = array(
       '#type' => 'number',
@@ -52,34 +103,188 @@ public function buildOptionsForm(&$form, &$form_state) {
       '#default_value' => $this->options['quantity'],
     );
 
+    $form['tags'] = array(
+      '#type' => 'details',
+      '#collapsible' => FALSE,
+      '#collapsed' => FALSE,
+      '#tree' => TRUE,
+      '#title' => t('Pager link labels'),
+      '#input' => TRUE,
+    );
+
     $form['tags']['first'] = array(
       '#type' => 'textfield',
       '#title' => t('First page link text'),
       '#default_value' => $this->options['tags']['first'],
-      '#weight' => -10,
+    );
+
+    $form['tags']['previous'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Previous page link text'),
+      '#default_value' => $this->options['tags']['previous'],
+    );
+
+    $form['tags']['next'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Next page link text'),
+      '#default_value' => $this->options['tags']['next'],
     );
 
     $form['tags']['last'] = array(
       '#type' => 'textfield',
       '#title' => t('Last page link text'),
       '#default_value' => $this->options['tags']['last'],
-      '#weight' => 10,
+    );
+
+    $form['expose'] = array(
+      '#type' => 'details',
+      '#collapsible' => FALSE,
+      '#collapsed' => FALSE,
+      '#tree' => TRUE,
+      '#title' => t('Exposed options'),
+      '#input' => TRUE,
+      '#description' => t('Exposing this options allows users to define their values in a exposed form when view is displayed'),
+    );
+
+    $form['expose']['items_per_page'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Expose items per page'),
+      '#description' => t('When checked, users can determine how many items per page show in a view'),
+      '#default_value' => $this->options['expose']['items_per_page'],
+    );
+
+    $form['expose']['items_per_page_label'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Items per page label'),
+      '#required' => TRUE,
+      '#description' => t('Label to use in the exposed items per page form element.'),
+      '#default_value' => $this->options['expose']['items_per_page_label'],
+      '#states' => array(
+        'invisible' => array(
+          'input[name="pager_options[expose][items_per_page]"]' => array('checked' => FALSE),
+        ),
+      ),
+    );
+
+    $form['expose']['items_per_page_options'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Exposed items per page options'),
+      '#required' => TRUE,
+      '#description' => t('Set between which values the user can choose when determining the items per page. Separated by comma.'),
+      '#default_value' => $this->options['expose']['items_per_page_options'],
+      '#states' => array(
+        'invisible' => array(
+          'input[name="pager_options[expose][items_per_page]"]' => array('checked' => FALSE),
+        ),
+      ),
+    );
+
+
+    $form['expose']['items_per_page_options_all'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Include all items option'),
+      '#description' => t('If checked, an extra item will be included to items per page to display all items'),
+      '#default_value' => $this->options['expose']['items_per_page_options_all'],
+    );
+
+    $form['expose']['items_per_page_options_all_label'] = array(
+      '#type' => 'textfield',
+      '#title' => t('All items label'),
+      '#description' => t('Which label will be used to display all items'),
+      '#default_value' => $this->options['expose']['items_per_page_options_all_label'],
+      '#states' => array(
+        'invisible' => array(
+          'input[name="pager_options[expose][items_per_page_options_all]"]' => array('checked' => FALSE),
+        ),
+      ),
+    );
+
+    $form['expose']['offset'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Expose Offset'),
+      '#description' => t('When checked, users can determine how many items should be skipped at the beginning.'),
+      '#default_value' => $this->options['expose']['offset'],
+    );
+
+    $form['expose']['offset_label'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Offset label'),
+      '#required' => TRUE,
+      '#description' => t('Label to use in the exposed offset form element.'),
+      '#default_value' => $this->options['expose']['offset_label'],
+      '#states' => array(
+        'invisible' => array(
+          'input[name="pager_options[expose][offset]"]' => array('checked' => FALSE),
+        ),
+      ),
     );
   }
 
-  /**
-   * Overrides \Drupal\views\Plugin\views\pager\PagerPluginBase::summaryTitle().
-   */
-  public function summaryTitle() {
-    if (!empty($this->options['offset'])) {
-      return format_plural($this->options['items_per_page'], '@count item, skip @skip', 'Paged, @count items, skip @skip', array('@count' => $this->options['items_per_page'], '@skip' => $this->options['offset']));
+  public function validateOptionsForm(&$form, &$form_state) {
+    // Only accept integer values.
+    $error = FALSE;
+    $exposed_options = $form_state['values']['pager_options']['expose']['items_per_page_options'];
+    if (strpos($exposed_options, '.') !== FALSE) {
+      $error = TRUE;
+    }
+    $options = explode(',', $exposed_options);
+    if (!$error && is_array($options)) {
+      foreach ($options as $option) {
+        if (!is_numeric($option) || intval($option) == 0) {
+          $error = TRUE;
+        }
+      }
+    }
+    else {
+      $error = TRUE;
+    }
+    if ($error) {
+      form_set_error('pager_options][expose][items_per_page_options', t('Please insert a list of integer numeric values separated by commas: e.g: 10, 20, 50, 100'));
+    }
+
+    // Take sure that the items_per_page is part of the expose settings.
+    if (!empty($form_state['values']['pager_options']['expose']['items_per_page']) && !empty($form_state['values']['pager_options']['items_per_page'])) {
+      $items_per_page = $form_state['values']['pager_options']['items_per_page'];
+      if (array_search($items_per_page, $options) === FALSE) {
+        form_set_error('pager_options][expose][items_per_page_options', t('Please insert the items per page (@items_per_page) from above.',
+          array('@items_per_page' => $items_per_page))
+        );
+      }
     }
-    return format_plural($this->options['items_per_page'], '@count item', 'Paged, @count items', array('@count' => $this->options['items_per_page']));
   }
 
-  /**
-   * Overrides \Drupal\views\Plugin\views\pager\PagerPluginBase::render().
-   */
+  public function query() {
+    if ($this->items_per_page_exposed()) {
+      $query = drupal_container()->get('request')->query;
+      $items_per_page = $query->get('items_per_page');
+      if ($items_per_page > 0) {
+        $this->options['items_per_page'] = $items_per_page;
+      }
+      elseif ($items_per_page == 'All' && $this->options['expose']['items_per_page_options_all']) {
+        $this->options['items_per_page'] = 0;
+      }
+    }
+    if ($this->offset_exposed()) {
+      $query = drupal_container()->get('request')->query;
+      $offset = $query->get('offset');
+      if (isset($offset) && $offset >= 0) {
+        $this->options['offset'] = $offset;
+      }
+    }
+
+    $limit = $this->options['items_per_page'];
+    $offset = $this->current_page * $this->options['items_per_page'] + $this->options['offset'];
+    if (!empty($this->options['total_pages'])) {
+      if ($this->current_page >= $this->options['total_pages']) {
+        $limit = $this->options['items_per_page'];
+        $offset = $this->options['total_pages'] * $this->options['items_per_page'];
+      }
+    }
+
+    $this->view->query->set_limit($limit);
+    $this->view->query->set_offset($offset);
+  }
+
   function render($input) {
     $pager_theme = views_theme_functions('pager', $this->view, $this->view->display_handler->display);
     // The 0, 1, 3, 4 index are correct. See theme_pager documentation.
@@ -98,5 +303,136 @@ function render($input) {
     return $output;
   }
 
+  /**
+   * Set the current page.
+   *
+   * @param $number
+   *   If provided, the page number will be set to this. If NOT provided,
+   *   the page number will be set from the global page array.
+   */
+  function set_current_page($number = NULL) {
+    if (isset($number)) {
+      $this->current_page = max(0, $number);
+      return;
+    }
+
+    // If the current page number was not specified, extract it from the global
+    // page array.
+    global $pager_page_array;
+
+    if (empty($pager_page_array)) {
+      $pager_page_array = array();
+    }
+
+    // Fill in missing values in the global page array, in case the global page
+    // array hasn't been initialized before.
+    $page = drupal_container()->get('request')->query->get('page');
+    $page = isset($page) ? explode(',', $page) : array();
+
+    for ($i = 0; $i <= $this->options['id'] || $i < count($pager_page_array); $i++) {
+      $pager_page_array[$i] = empty($page[$i]) ? 0 : $page[$i];
+    }
+
+    // Don't allow the number to be less than zero.
+    $this->current_page = max(0, intval($pager_page_array[$this->options['id']]));
+  }
+
+  function get_pager_total() {
+    if ($items_per_page = intval($this->get_items_per_page())) {
+      return ceil($this->total_items / $items_per_page);
+    }
+    else {
+      return 1;
+    }
+  }
+
+  /**
+   * Update global paging info.
+   *
+   * This is called after the count query has been run to set the total
+   * items available and to update the current page if the requested
+   * page is out of range.
+   */
+  function update_page_info() {
+    if (!empty($this->options['total_pages'])) {
+      if (($this->options['total_pages'] * $this->options['items_per_page']) < $this->total_items) {
+        $this->total_items = $this->options['total_pages'] * $this->options['items_per_page'];
+      }
+    }
+
+    // Don't set pager settings for items per page = 0.
+    $items_per_page = $this->get_items_per_page();
+    if (!empty($items_per_page)) {
+      // Dump information about what we already know into the globals.
+      global $pager_page_array, $pager_total, $pager_total_items, $pager_limits;
+      // Set the limit.
+      $pager_limits[$this->options['id']] = $this->options['items_per_page'];
+      // Set the item count for the pager.
+      $pager_total_items[$this->options['id']] = $this->total_items;
+      // Calculate and set the count of available pages.
+      $pager_total[$this->options['id']] = $this->get_pager_total();
+
+      // See if the requested page was within range:
+      if ($this->current_page >= $pager_total[$this->options['id']]) {
+        // Pages are numbered from 0 so if there are 10 pages, the last page is 9.
+        $this->set_current_page($pager_total[$this->options['id']] - 1);
+      }
+
+      // Put this number in to guarantee that we do not generate notices when the pager
+      // goes to look for it later.
+      $pager_page_array[$this->options['id']] = $this->current_page;
+    }
+  }
+
+  function uses_exposed() {
+    return $this->items_per_page_exposed() || $this->offset_exposed();
+  }
+
+  function items_per_page_exposed() {
+    return !empty($this->options['expose']['items_per_page']);
+  }
+
+  function offset_exposed() {
+    return !empty($this->options['expose']['offset']);
+  }
+
+  function exposed_form_alter(&$form, &$form_state) {
+    if ($this->items_per_page_exposed()) {
+      $options = explode(',', $this->options['expose']['items_per_page_options']);
+      $sanitized_options = array();
+      if (is_array($options)) {
+        foreach ($options as $option) {
+          $sanitized_options[intval($option)] = intval($option);
+        }
+        if (!empty($this->options['expose']['items_per_page_options_all']) && !empty($this->options['expose']['items_per_page_options_all_label'])) {
+          $sanitized_options['All'] = $this->options['expose']['items_per_page_options_all_label'];
+        }
+        $form['items_per_page'] = array(
+          '#type' => 'select',
+          '#title' => $this->options['expose']['items_per_page_label'],
+          '#options' => $sanitized_options,
+          '#default_value' => $this->get_items_per_page(),
+        );
+      }
+    }
+
+    if ($this->offset_exposed()) {
+      $form['offset'] = array(
+        '#type' => 'textfield',
+        '#size' => 10,
+        '#maxlength' => 10,
+        '#title' => $this->options['expose']['offset_label'],
+        '#default_value' => $this->get_offset(),
+      );
+    }
+  }
+
+  function exposed_form_validate(&$form, &$form_state) {
+    if (!empty($form_state['values']['offset']) && trim($form_state['values']['offset'])) {
+      if (!is_numeric($form_state['values']['offset']) || $form_state['values']['offset'] < 0) {
+        form_set_error('offset', t('Offset must be an number greather or equal than 0.'));
+      }
+    }
+  }
 
 }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php b/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php
index 56e0727..4783b2a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/pager/Mini.php
@@ -22,25 +22,8 @@
  *   help = @Translation("Use the mini pager output.")
  * )
  */
-class Mini extends SqlBase {
+class Mini extends Full {
 
-  /**
-   * Overrides \Drupal\views\Plugin\views\pager\PagerPlugin::defineOptions().
-   *
-   * Provides sane defaults for the next/previous links.
-   */
-  public function defineOptions() {
-    $options = parent::defineOptions();
-
-    $options['tags']['contains']['previous']['default'] = '‹‹';
-    $options['tags']['contains']['next']['default'] = '››';
-
-    return $options;
-  }
-
-  /**
-   * Overrides \Drupal\views\Plugin\views\pager\PagerPluginBase::summaryTitle().
-   */
   public function summaryTitle() {
     if (!empty($this->options['offset'])) {
       return format_plural($this->options['items_per_page'], 'Mini pager, @count item, skip @skip', 'Mini pager, @count items, skip @skip', array('@count' => $this->options['items_per_page'], '@skip' => $this->options['offset']));
@@ -48,22 +31,10 @@ public function summaryTitle() {
       return format_plural($this->options['items_per_page'], 'Mini pager, @count item', 'Mini pager, @count items', array('@count' => $this->options['items_per_page']));
   }
 
-  /**
-   * Overrides \Drupal\views\Plugin\views\pager\PagerPluginBase::render().
-   */
   function render($input) {
     $pager_theme = views_theme_functions('views_mini_pager', $this->view, $this->view->display_handler->display);
-    // The 1, 3 index are correct, see theme_pager().
-    $tags = array(
-      1 => $this->options['tags']['previous'],
-      3 => $this->options['tags']['next'],
-    );
-    $output = theme($pager_theme, array(
-      'parameters' => $input,
-      'element' => $this->options['id'],
-      'tags' => $tags,
-    ));
-    return $output;
+    return theme($pager_theme, array(
+      'parameters' => $input, 'element' => $this->options['id']));
   }
 
 }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/pager/SqlBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/pager/SqlBase.php
deleted file mode 100644
index 5e5d9e8..0000000
--- a/core/modules/views/lib/Drupal/views/Plugin/views/pager/SqlBase.php
+++ /dev/null
@@ -1,379 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\views\Plugin\views\pager\SqlBase
- */
-
-namespace Drupal\views\Plugin\views\pager;
-
-/**
- * A common base class for sql based pager.
- */
-abstract class SqlBase extends PagerPluginBase {
-
-  protected function defineOptions() {
-    $options = parent::defineOptions();
-    $options['items_per_page'] = array('default' => 10);
-    $options['offset'] = array('default' => 0);
-    $options['id'] = array('default' => 0);
-    $options['total_pages'] = array('default' => '');
-    $options['expose'] = array(
-      'contains' => array(
-        'items_per_page' => array('default' => FALSE, 'bool' => TRUE),
-        'items_per_page_label' => array('default' => 'Items per page', 'translatable' => TRUE),
-        'items_per_page_options' => array('default' => '5, 10, 20, 40, 60'),
-        'items_per_page_options_all' => array('default' => FALSE, 'bool' => TRUE),
-        'items_per_page_options_all_label' => array('default' => '- All -', 'translatable' => TRUE),
-
-        'offset' => array('default' => FALSE, 'bool' => TRUE),
-        'offset_label' => array('default' => 'Offset', 'translatable' => TRUE),
-      ),
-    );
-    $options['tags'] = array(
-      'contains' => array(
-        'previous' => array('default' => '‹ previous', 'translatable' => TRUE),
-        'next' => array('default' => 'next ›', 'translatable' => TRUE),
-      ),
-    );
-    return $options;
-  }
-
-  /**
-   * Provide the default form for setting options.
-   */
-  public function buildOptionsForm(&$form, &$form_state) {
-    parent::buildOptionsForm($form, $form_state);
-    $pager_text = $this->displayHandler->getPagerText();
-    $form['items_per_page'] = array(
-      '#title' => $pager_text['items per page title'],
-      '#type' => 'number',
-      '#description' => $pager_text['items per page description'],
-      '#default_value' => $this->options['items_per_page'],
-    );
-
-    $form['offset'] = array(
-      '#type' => 'number',
-      '#title' => t('Offset'),
-      '#description' => t('The number of items to skip. For example, if this field is 3, the first 3 items will be skipped and not displayed.'),
-      '#default_value' => $this->options['offset'],
-    );
-
-    $form['id'] = array(
-      '#type' => 'number',
-      '#title' => t('Pager ID'),
-      '#description' => t("Unless you're experiencing problems with pagers related to this view, you should leave this at 0. If using multiple pagers on one page you may need to set this number to a higher value so as not to conflict within the ?page= array. Large values will add a lot of commas to your URLs, so avoid if possible."),
-      '#default_value' => $this->options['id'],
-    );
-
-    $form['total_pages'] = array(
-      '#type' => 'number',
-      '#title' => t('Number of pages'),
-      '#description' => t('The total number of pages. Leave empty to show all pages.'),
-      '#default_value' => $this->options['total_pages'],
-    );
-
-    $form['tags'] = array(
-      '#type' => 'details',
-      '#collapsible' => FALSE,
-      '#collapsed' => FALSE,
-      '#tree' => TRUE,
-      '#title' => t('Pager link labels'),
-      '#input' => TRUE,
-    );
-
-    $form['tags']['previous'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Previous page link text'),
-      '#default_value' => $this->options['tags']['previous'],
-    );
-
-    $form['tags']['next'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Next page link text'),
-      '#default_value' => $this->options['tags']['next'],
-    );
-
-    $form['expose'] = array(
-      '#type' => 'details',
-      '#collapsible' => FALSE,
-      '#collapsed' => FALSE,
-      '#tree' => TRUE,
-      '#title' => t('Exposed options'),
-      '#input' => TRUE,
-      '#description' => t('Exposing this options allows users to define their values in a exposed form when view is displayed'),
-    );
-
-    $form['expose']['items_per_page'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Expose items per page'),
-      '#description' => t('When checked, users can determine how many items per page show in a view'),
-      '#default_value' => $this->options['expose']['items_per_page'],
-    );
-
-    $form['expose']['items_per_page_label'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Items per page label'),
-      '#required' => TRUE,
-      '#description' => t('Label to use in the exposed items per page form element.'),
-      '#default_value' => $this->options['expose']['items_per_page_label'],
-      '#states' => array(
-        'invisible' => array(
-          'input[name="pager_options[expose][items_per_page]"]' => array('checked' => FALSE),
-        ),
-      ),
-    );
-
-    $form['expose']['items_per_page_options'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Exposed items per page options'),
-      '#required' => TRUE,
-      '#description' => t('Set between which values the user can choose when determining the items per page. Separated by comma.'),
-      '#default_value' => $this->options['expose']['items_per_page_options'],
-      '#states' => array(
-        'invisible' => array(
-          'input[name="pager_options[expose][items_per_page]"]' => array('checked' => FALSE),
-        ),
-      ),
-    );
-
-
-    $form['expose']['items_per_page_options_all'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Include all items option'),
-      '#description' => t('If checked, an extra item will be included to items per page to display all items'),
-      '#default_value' => $this->options['expose']['items_per_page_options_all'],
-    );
-
-    $form['expose']['items_per_page_options_all_label'] = array(
-      '#type' => 'textfield',
-      '#title' => t('All items label'),
-      '#description' => t('Which label will be used to display all items'),
-      '#default_value' => $this->options['expose']['items_per_page_options_all_label'],
-      '#states' => array(
-        'invisible' => array(
-          'input[name="pager_options[expose][items_per_page_options_all]"]' => array('checked' => FALSE),
-        ),
-      ),
-    );
-
-    $form['expose']['offset'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Expose Offset'),
-      '#description' => t('When checked, users can determine how many items should be skipped at the beginning.'),
-      '#default_value' => $this->options['expose']['offset'],
-    );
-
-    $form['expose']['offset_label'] = array(
-      '#type' => 'textfield',
-      '#title' => t('Offset label'),
-      '#required' => TRUE,
-      '#description' => t('Label to use in the exposed offset form element.'),
-      '#default_value' => $this->options['expose']['offset_label'],
-      '#states' => array(
-        'invisible' => array(
-          'input[name="pager_options[expose][offset]"]' => array('checked' => FALSE),
-        ),
-      ),
-    );
-  }
-
-  public function validateOptionsForm(&$form, &$form_state) {
-    // Only accept integer values.
-    $error = FALSE;
-    $exposed_options = $form_state['values']['pager_options']['expose']['items_per_page_options'];
-    if (strpos($exposed_options, '.') !== FALSE) {
-      $error = TRUE;
-    }
-    $options = explode(',', $exposed_options);
-    if (!$error && is_array($options)) {
-      foreach ($options as $option) {
-        if (!is_numeric($option) || intval($option) == 0) {
-          $error = TRUE;
-        }
-      }
-    }
-    else {
-      $error = TRUE;
-    }
-    if ($error) {
-      form_set_error('pager_options][expose][items_per_page_options', t('Please insert a list of integer numeric values separated by commas: e.g: 10, 20, 50, 100'));
-    }
-
-    // Take sure that the items_per_page is part of the expose settings.
-    if (!empty($form_state['values']['pager_options']['expose']['items_per_page']) && !empty($form_state['values']['pager_options']['items_per_page'])) {
-      $items_per_page = $form_state['values']['pager_options']['items_per_page'];
-      if (array_search($items_per_page, $options) === FALSE) {
-        form_set_error('pager_options][expose][items_per_page_options', t('Please insert the items per page (@items_per_page) from above.',
-            array('@items_per_page' => $items_per_page))
-        );
-      }
-    }
-  }
-
-  public function query() {
-    if ($this->items_per_page_exposed()) {
-      $query = drupal_container()->get('request')->query;
-      $items_per_page = $query->get('items_per_page');
-      if ($items_per_page > 0) {
-        $this->options['items_per_page'] = $items_per_page;
-      }
-      elseif ($items_per_page == 'All' && $this->options['expose']['items_per_page_options_all']) {
-        $this->options['items_per_page'] = 0;
-      }
-    }
-    if ($this->offset_exposed()) {
-      $query = drupal_container()->get('request')->query;
-      $offset = $query->get('offset');
-      if (isset($offset) && $offset >= 0) {
-        $this->options['offset'] = $offset;
-      }
-    }
-
-    $limit = $this->options['items_per_page'];
-    $offset = $this->current_page * $this->options['items_per_page'] + $this->options['offset'];
-    if (!empty($this->options['total_pages'])) {
-      if ($this->current_page >= $this->options['total_pages']) {
-        $limit = $this->options['items_per_page'];
-        $offset = $this->options['total_pages'] * $this->options['items_per_page'];
-      }
-    }
-
-    $this->view->query->set_limit($limit);
-    $this->view->query->set_offset($offset);
-  }
-
-
-  /**
-   * Set the current page.
-   *
-   * @param $number
-   *   If provided, the page number will be set to this. If NOT provided,
-   *   the page number will be set from the global page array.
-   */
-  function set_current_page($number = NULL) {
-    if (isset($number)) {
-      $this->current_page = max(0, $number);
-      return;
-    }
-
-    // If the current page number was not specified, extract it from the global
-    // page array.
-    global $pager_page_array;
-
-    if (empty($pager_page_array)) {
-      $pager_page_array = array();
-    }
-
-    // Fill in missing values in the global page array, in case the global page
-    // array hasn't been initialized before.
-    $page = drupal_container()->get('request')->query->get('page');
-    $page = isset($page) ? explode(',', $page) : array();
-
-    for ($i = 0; $i <= $this->options['id'] || $i < count($pager_page_array); $i++) {
-      $pager_page_array[$i] = empty($page[$i]) ? 0 : $page[$i];
-    }
-
-    // Don't allow the number to be less than zero.
-    $this->current_page = max(0, intval($pager_page_array[$this->options['id']]));
-  }
-
-  function get_pager_total() {
-    if ($items_per_page = intval($this->get_items_per_page())) {
-      return ceil($this->total_items / $items_per_page);
-    }
-    else {
-      return 1;
-    }
-  }
-
-  /**
-   * Update global paging info.
-   *
-   * This is called after the count query has been run to set the total
-   * items available and to update the current page if the requested
-   * page is out of range.
-   */
-  function update_page_info() {
-    if (!empty($this->options['total_pages'])) {
-      if (($this->options['total_pages'] * $this->options['items_per_page']) < $this->total_items) {
-        $this->total_items = $this->options['total_pages'] * $this->options['items_per_page'];
-      }
-    }
-
-    // Don't set pager settings for items per page = 0.
-    $items_per_page = $this->get_items_per_page();
-    if (!empty($items_per_page)) {
-      // Dump information about what we already know into the globals.
-      global $pager_page_array, $pager_total, $pager_total_items, $pager_limits;
-      // Set the limit.
-      $pager_limits[$this->options['id']] = $this->options['items_per_page'];
-      // Set the item count for the pager.
-      $pager_total_items[$this->options['id']] = $this->total_items;
-      // Calculate and set the count of available pages.
-      $pager_total[$this->options['id']] = $this->get_pager_total();
-
-      // See if the requested page was within range:
-      if ($this->current_page >= $pager_total[$this->options['id']]) {
-        // Pages are numbered from 0 so if there are 10 pages, the last page is 9.
-        $this->set_current_page($pager_total[$this->options['id']] - 1);
-      }
-
-      // Put this number in to guarantee that we do not generate notices when the pager
-      // goes to look for it later.
-      $pager_page_array[$this->options['id']] = $this->current_page;
-    }
-  }
-
-  function uses_exposed() {
-    return $this->items_per_page_exposed() || $this->offset_exposed();
-  }
-
-  function items_per_page_exposed() {
-    return !empty($this->options['expose']['items_per_page']);
-  }
-
-  function offset_exposed() {
-    return !empty($this->options['expose']['offset']);
-  }
-
-  function exposed_form_alter(&$form, &$form_state) {
-    if ($this->items_per_page_exposed()) {
-      $options = explode(',', $this->options['expose']['items_per_page_options']);
-      $sanitized_options = array();
-      if (is_array($options)) {
-        foreach ($options as $option) {
-          $sanitized_options[intval($option)] = intval($option);
-        }
-        if (!empty($this->options['expose']['items_per_page_options_all']) && !empty($this->options['expose']['items_per_page_options_all_label'])) {
-          $sanitized_options['All'] = $this->options['expose']['items_per_page_options_all_label'];
-        }
-        $form['items_per_page'] = array(
-          '#type' => 'select',
-          '#title' => $this->options['expose']['items_per_page_label'],
-          '#options' => $sanitized_options,
-          '#default_value' => $this->get_items_per_page(),
-        );
-      }
-    }
-
-    if ($this->offset_exposed()) {
-      $form['offset'] = array(
-        '#type' => 'textfield',
-        '#size' => 10,
-        '#maxlength' => 10,
-        '#title' => $this->options['expose']['offset_label'],
-        '#default_value' => $this->get_offset(),
-      );
-    }
-  }
-
-  function exposed_form_validate(&$form, &$form_state) {
-    if (!empty($form_state['values']['offset']) && trim($form_state['values']['offset'])) {
-      if (!is_numeric($form_state['values']['offset']) || $form_state['values']['offset'] < 0) {
-        form_set_error('offset', t('Offset must be an number greather or equal than 0.'));
-      }
-    }
-  }
-
-}
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php
index 55785d2..12b9795 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/query/Sql.php
@@ -1283,7 +1283,7 @@ public function query($get_count = FALSE) {
     $query = Database::getConnection($target, $key)
       ->select($this->view->storage->get('base_table'), $this->view->storage->get('base_table'), $options)
       ->addTag('views')
-      ->addTag('views_' . $this->view->storage->id());
+      ->addTag('views_' . $this->view->storage->get('name'));
 
     // Add the tags added to the view itself.
     foreach ($this->tags as $tag) {
@@ -1514,7 +1514,7 @@ function execute(ViewExecutable $view) {
           drupal_set_message($e->getMessage(), 'error');
         }
         else {
-          throw new DatabaseExceptionWrapper(format_string('Exception in @human_name[@view_name]: @message', array('@human_name' => $view->storage->getHumanName(), '@view_name' => $view->storage->id(), '@message' => $e->getMessage())));
+          throw new DatabaseExceptionWrapper(format_string('Exception in @human_name[@view_name]: @message', array('@human_name' => $view->storage->getHumanName(), '@view_name' => $view->storage->get('name'), '@message' => $e->getMessage())));
         }
       }
 
@@ -1646,7 +1646,7 @@ function load_entities(&$results) {
   }
 
   function add_signature(ViewExecutable $view) {
-    $view->query->add_field(NULL, "'" . $view->storage->id() . ':' . $view->current_display . "'", 'view_name');
+    $view->query->add_field(NULL, "'" . $view->storage->get('name') . ':' . $view->current_display . "'", 'view_name');
   }
 
   function get_aggregation_info() {
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
index cd2a73f..0b085c6 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/relationship/GroupwiseMax.php
@@ -132,10 +132,10 @@ public function buildOptionsForm(&$form, &$form_state) {
         // TODO: check the field is the correct sort?
         // or let users hang themselves at this stage and check later?
         if ($view->type == 'Default') {
-          $views[t('Default Views')][$view->storage->id()] = $view->storage->id();
+          $views[t('Default Views')][$view->storage->get('name')] = $view->storage->get('name');
         }
         else {
-          $views[t('Existing Views')][$view->storage->id()] = $view->storage->id();
+          $views[t('Existing Views')][$view->storage->get('name')] = $view->storage->get('name');
         }
       }
     }
@@ -171,7 +171,7 @@ function get_temporary_view() {
    * When the form is submitted, take sure to clear the subquery string cache.
    */
   public function submitOptionsForm(&$form, &$form_state) {
-    $cid = 'views_relationship_groupwise_max:' . $this->view->storage->id() . ':' . $this->view->current_display . ':' . $this->options['id'];
+    $cid = 'views_relationship_groupwise_max:' . $this->view->storage->get('name') . ':' . $this->view->current_display . ':' . $this->options['id'];
     cache('views_results')->delete($cid);
   }
 
@@ -362,7 +362,7 @@ public function query() {
     }
     else {
       // Get the stored subquery SQL string.
-      $cid = 'views_relationship_groupwise_max:' . $this->view->storage->id() . ':' . $this->view->current_display . ':' . $this->options['id'];
+      $cid = 'views_relationship_groupwise_max:' . $this->view->storage->get('name') . ':' . $this->view->current_display . ':' . $this->options['id'];
       $cache = cache('views_results')->get($cid);
       if (isset($cache->data)) {
         $def['left_query'] = $cache->data;
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
index 50013dc..7df19f3 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/wizard/WizardPluginBase.php
@@ -558,12 +558,12 @@ protected function build_filters(&$form, &$form_state) {
     // Find all the fields we are allowed to filter by.
     $fields = views_fetch_fields($this->base_table, 'filter');
 
-    $bundles = entity_get_bundles($this->entity_type);
+    $entity_info = $this->entity_info;
     // If the current base table support bundles and has more than one (like user).
-    if (isset($this->entity_info['bundle_keys']) && !empty($bundles)) {
+    if (isset($entity_info['bundle_keys']) && isset($entity_info['bundles'])) {
       // Get all bundles and their human readable names.
       $options = array('all' => t('All'));
-      foreach ($bundles as $type => $bundle) {
+      foreach ($entity_info['bundles'] as $type => $bundle) {
         $options[$type] = $bundle['label'];
       }
       $form['displays']['show']['type'] = array(
@@ -621,7 +621,7 @@ protected function build_sorts(&$form, &$form_state) {
   protected function instantiate_view($form, &$form_state) {
     // Build the basic view properties and create the view.
     $values = array(
-      'id' => $form_state['values']['id'],
+      'name' => $form_state['values']['name'],
       'human_name' => $form_state['values']['human_name'],
       'description' => $form_state['values']['description'],
       'base_table' => $this->base_table,
diff --git a/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php b/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
index a075b6a..01eaca3 100644
--- a/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/DefaultViewsTest.php
@@ -119,7 +119,7 @@ protected function setUp() {
    */
   public function testDefaultViews() {
     // Get all default views.
-    $controller = $this->container->get('plugin.manager.entity')->getStorageController('view');
+    $controller = entity_get_controller('view');
     $views = $controller->load();
 
     foreach ($views as $name => $view_storage) {
@@ -133,7 +133,7 @@ public function testDefaultViews() {
           $view->preExecute($this->viewArgMap[$name]);
         }
 
-        $this->assert(TRUE, format_string('View @view will be executed.', array('@view' => $view->storage->id())));
+        $this->assert(TRUE, format_string('View @view will be executed.', array('@view' => $view->storage->get('name'))));
         $view->execute();
 
         $tokens = array('@name' => $name, '@display_id' => $display_id);
@@ -150,13 +150,11 @@ public function testDefaultViews() {
    * Returns a new term with random properties in vocabulary $vid.
    */
   function createTerm($vocabulary) {
-    $filter_formats = filter_formats();
-    $format = array_pop($filter_formats);
     $term = entity_create('taxonomy_term', array(
       'name' => $this->randomName(),
       'description' => $this->randomName(),
       // Use the first available text format.
-      'format' => $format->format,
+      'format' => db_query_range('SELECT format FROM {filter_format}', 0, 1)->fetchField(),
       'vid' => $vocabulary->id(),
       'langcode' => LANGUAGE_NOT_SPECIFIED,
     ));
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php
index fadce30..21224c3 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/AreaTextTest.php
@@ -34,7 +34,8 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('system', 'user', 'filter'));
+    $this->enableModules(array('system'));
+    $this->enableModules(array('filter'));
   }
 
   public function testAreaText() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php
index 5b21a67..b9c6257 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldUnitTest.php
@@ -47,8 +47,6 @@ protected function setUp() {
   protected function viewsData() {
     $data = parent::viewsData();
     $data['views_test_data']['job']['field']['id'] = 'test_field';
-    $data['views_test_data']['job']['field']['click sortable'] = FALSE;
-    $data['views_test_data']['id']['field']['click sortable'] = TRUE;
     return $data;
   }
 
@@ -516,21 +514,4 @@ function testIsValueEmpty() {
     $this->assertTrue($field->is_value_empty(NULL, TRUE, FALSE), 'Null should be always seen as empty, regardless of no_skip_empty.');
   }
 
-  /**
-   * Tests whether the filters are click sortable as expected.
-   */
-  public function testClickSortable() {
-    // Test that click_sortable is TRUE by default.
-    $plugin = views_get_handler('views_test_data', 'name', 'field');
-    $this->assertTrue($plugin->click_sortable(), 'TRUE as a default value is correct.');
-
-    // Test that click_sortable is TRUE by when set TRUE in the data.
-    $plugin = views_get_handler('views_test_data', 'id', 'field');
-    $this->assertTrue($plugin->click_sortable(), 'TRUE as a views data value is correct.');
-
-    // Test that click_sortable is FALSE by when set FALSE in the data.
-    $plugin = views_get_handler('views_test_data', 'job', 'field');
-    $this->assertFalse($plugin->click_sortable(), 'FALSE as a views data value is correct.');
-  }
-
 }
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/RelationshipTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/RelationshipTest.php
index 63cb46b..cbab5ea 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/RelationshipTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/RelationshipTest.php
@@ -8,14 +8,13 @@
 namespace Drupal\views\Tests\Handler;
 
 use Drupal\views\Tests\ViewUnitTestBase;
-use Drupal\views\Tests\Plugin\RelationshipJoinTestBase;
 
 /**
  * Tests the base relationship handler.
  *
  * @see Drupal\views\Plugin\views\relationship\RelationshipPluginBase
  */
-class RelationshipTest extends RelationshipJoinTestBase {
+class RelationshipTest extends ViewUnitTestBase {
 
   /**
    * Views used by this test.
@@ -42,6 +41,56 @@ public static function getInfo() {
     );
   }
 
+  protected function setUp() {
+    parent::setUp();
+
+    $this->enableModules(array('field', 'user'));
+  }
+
+  /**
+   * Overrides Drupal\views\Tests\ViewTestBase::schemaDefinition().
+   *
+   * Adds a uid column to test the relationships.
+   *
+   * @return array
+   */
+  protected function schemaDefinition() {
+    $schema = parent::schemaDefinition();
+
+    $schema['views_test_data']['fields']['uid'] = array(
+      'description' => "The {users}.uid of the author of the beatle entry.",
+      'type' => 'int',
+      'unsigned' => TRUE,
+      'not null' => TRUE,
+      'default' => 0
+    );
+
+    return $schema;
+  }
+
+
+  /**
+   * Overrides Drupal\views\Tests\ViewTestBase::viewsData().
+   *
+   * Adds a relationship for the uid column.
+   *
+   * @return array
+   */
+  protected function viewsData() {
+    $data = parent::viewsData();
+    $data['views_test_data']['uid'] = array(
+      'title' => t('UID'),
+      'help' => t('The test data UID'),
+      'relationship' => array(
+        'id' => 'standard',
+        'base' => 'users',
+        'base field' => 'uid'
+      )
+    );
+
+    return $data;
+  }
+
   /**
    * Tests the query result of a view with a relationship.
    */
diff --git a/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php b/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php
index 5b9b6cd..5ecedec 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ModuleTest.php
@@ -112,7 +112,7 @@ function testviews_get_handler() {
    */
   public function testLoadFunctions() {
     $this->enableModules(array('node'), FALSE);
-    $controller = $this->container->get('plugin.manager.entity')->getStorageController('view');
+    $controller = entity_get_controller('view');
 
     // Test views_view_is_enabled/disabled.
     $load = $controller->load(array('archive'));
@@ -208,7 +208,7 @@ protected function formatViewOptions(array $views = array()) {
     foreach ($views as $id => $view) {
       foreach ($view->get('display') as $display_id => $display) {
         $expected_options[$view->id() . ':' . $display['id']] = t('View: @view - Display: @display',
-          array('@view' => $view->id(), '@display' => $display['id']));
+          array('@view' => $view->name, '@display' => $display['id']));
       }
     }
 
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/CacheTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/CacheTest.php
index 6ac76d7..0f32a60 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/CacheTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/CacheTest.php
@@ -131,7 +131,7 @@ function testHeaderStorage() {
     // so they should be added to the css/js storage.
     $view = views_get_view('test_view');
     $view->setDisplay();
-    $view->storage->set('id', 'test_cache_header_storage');
+    $view->storage->set('name', 'test_cache_header_storage');
     $view->display_handler->overrideOption('cache', array(
       'type' => 'time',
       'options' => array(
@@ -158,7 +158,7 @@ function testHeaderStorage() {
 
     // Now add some css/jss before running the view.
     // Make sure that this css is not added when running the cached view.
-    $view->storage->set('id', 'test_cache_header_storage_2');
+    $view->storage->set('name', 'test_cache_header_storage_2');
 
     $system_css_path = drupal_get_path('module', 'system') . '/system.maintenance.css';
     drupal_add_css($system_css_path);
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php
index e4755bc..1276bd9 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/ExposedFormTest.php
@@ -49,7 +49,7 @@ protected function setUp() {
   }
 
   /**
-   * Tests whether the reset button works on an exposed form.
+   * Tests whether the reset button works on an expoed form.
    */
   public function testResetButton() {
     $this->drupalGet('test_reset_button', array('query' => array('type' => 'article')));
@@ -89,22 +89,6 @@ public function testRenameResetButton() {
   }
 
   /**
-   * Tests the exposed form markup.
-   */
-  public function testExposedFormRender() {
-    $view = views_get_view('test_reset_button');
-    $this->executeView($view);
-    $exposed_form = $view->display_handler->getPlugin('exposed_form');
-    $this->drupalSetContent($exposed_form->render_exposed_form());
-
-    $expected_id = drupal_clean_css_identifier('views-exposed-form-' . $view->storage->id() . '-' . $view->current_display);
-    $this->assertFieldByXpath('//form/@id', $expected_id, 'Expected form ID found.');
-
-    $expected_action = url($view->display_handler->getUrl());
-    $this->assertFieldByXPath('//form/@action', $expected_action, 'The expected value for the action attribute was found.');
-  }
-
-  /**
    * Tests the admin interface of exposed filter and sort items.
    */
   function testExposedAdminUi() {
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/JoinTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/JoinTest.php
index df011c4..8430a45 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/JoinTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/JoinTest.php
@@ -13,23 +13,13 @@
 
 /**
  * Tests a generic join plugin and the join plugin base.
- *
- * @see \Drupal\views_test_data\Plugin\views\join\JoinTest
- * @see \Drupal\views\Plugin\views\join\JoinPluginBase
  */
-class JoinTest extends RelationshipJoinTestBase {
-
-  /**
-   * Views used by this test.
-   *
-   * @var array
-   */
-  public static $testViews = array('test_view');
+class JoinTest extends PluginTestBase {
 
   /**
    * A plugin manager which handlers the instances of joins.
    *
-   * @var \Drupal\views\Plugin\ViewsPluginManager
+   * @var Drupal\views\Plugin\Type\ViewsPluginManager
    */
   protected $manager;
 
@@ -48,18 +38,19 @@ protected function setUp() {
     $this->manager = drupal_container()->get('plugin.manager.views.join');
   }
 
+
   /**
    * Tests an example join plugin.
    */
   public function testExamplePlugin() {
 
     // Setup a simple join and test the result sql.
-    $view = views_get_view('test_view');
+    $view = views_get_view('frontpage');
     $view->initDisplay();
     $view->initQuery();
 
     $configuration = array(
-      'left_table' => 'views_test_data',
+      'left_table' => 'node',
       'left_field' => 'uid',
       'table' => 'users',
       'field' => 'uid',
@@ -70,13 +61,14 @@ public function testExamplePlugin() {
     $rand_int = rand(0, 1000);
     $join->setJoinValue($rand_int);
 
-    $query = db_select('views_test_data');
+    $query = db_select('node');
     $table = array('alias' => 'users');
     $join->buildJoin($query, $table, $view->query);
 
     $tables = $query->getTables();
     $join_info = $tables['users'];
-    $this->assertTrue(strpos($join_info['condition'], "views_test_data.uid = $rand_int") !== FALSE, 'Make sure that the custom join plugin can extend the join base and alter the result.');
+    debug($join_info);
+    $this->assertTrue(strpos($join_info['condition'], "node.uid = $rand_int") !== FALSE, 'Make sure that the custom join plugin can extend the join base and alter the result.');
   }
 
   /**
@@ -85,14 +77,14 @@ public function testExamplePlugin() {
   public function testBasePlugin() {
 
     // Setup a simple join and test the result sql.
-    $view = views_get_view('test_view');
+    $view = views_get_view('frontpage');
     $view->initDisplay();
     $view->initQuery();
 
     // First define a simple join without an extra condition.
     // Set the various options on the join object.
     $configuration = array(
-      'left_table' => 'views_test_data',
+      'left_table' => 'node',
       'left_field' => 'uid',
       'table' => 'users',
       'field' => 'uid',
@@ -105,7 +97,7 @@ public function testBasePlugin() {
 
     // Build the actual join values and read them back from the dbtng query
     // object.
-    $query = db_select('views_test_data');
+    $query = db_select('node');
     $table = array('alias' => 'users');
     $join->buildJoin($query, $table, $view->query);
 
@@ -114,7 +106,7 @@ public function testBasePlugin() {
     $this->assertEqual($join_info['join type'], 'LEFT', 'Make sure the default join type is LEFT');
     $this->assertEqual($join_info['table'], $configuration['table']);
     $this->assertEqual($join_info['alias'], 'users');
-    $this->assertEqual($join_info['condition'], 'views_test_data.uid = users.uid');
+    $this->assertEqual($join_info['condition'], 'node.uid = users.uid');
 
     // Set a different alias and make sure table info is as expected.
     $join = $this->manager->createInstance('standard', $configuration);
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/MiniPagerTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/MiniPagerTest.php
deleted file mode 100644
index e239e7b..0000000
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/MiniPagerTest.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\views\Tests\Plugin\MiniPagerTest.
- */
-
-namespace Drupal\views\Tests\Plugin;
-
-/**
- * Tests the mini pager plugin
- *
- * @see \Drupal\views\Plugin\views\pager\Mini
- */
-class MiniPagerTest extends PluginTestBase {
-
-  /**
-   * Views used by this test.
-   *
-   * @var array
-   */
-  public static $testViews = array('test_mini_pager');
-
-  /**
-   * Nodes used by the test.
-   *
-   * @var array
-   */
-  protected $nodes;
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Pager: Mini',
-      'description' => 'Test the mini pager plugin.',
-      'group' => 'Views Plugins',
-    );
-  }
-
-  protected function setUp() {
-    parent::setUp();
-
-    // Create a bunch of test nodes.
-    for ($i = 0; $i < 20; $i++) {
-      $this->nodes[] = $this->drupalCreateNode();
-    }
-  }
-
-  /**
-   * Tests the rendering of mini pagers.
-   */
-  public function testMiniPagerRender() {
-    menu_router_rebuild();
-    $this->drupalGet('test_mini_pager');
-    $this->assertText('›› test', 'Make sure the next link appears on the first page.');
-    $this->assertNoText('‹‹ test', 'Make sure the previous link does not appear on the first page.');
-
-    $this->drupalGet('test_mini_pager', array('query' => array('page' => 1)));
-    $this->assertText('‹‹ test', 'Make sure the previous link appears.');
-    $this->assertText('›› test', 'Make sure the next link appears.');
-
-    $this->drupalGet('test_mini_pager', array('query' => array('page' => 6)));
-    $this->assertNoText('›› test', 'Make sure the next link appears on the last page.');
-    $this->assertText('‹‹ test', 'Make sure the previous link does not appear on the last page.');
-  }
-
-}
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/RelationshipJoinTestBase.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/RelationshipJoinTestBase.php
deleted file mode 100644
index 63a9f23..0000000
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/RelationshipJoinTestBase.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\views\Tests\Plugin\RelationshipJoinTestBase.
- */
-
-namespace Drupal\views\Tests\Plugin;
-
-/**
- * Provies a base class for a testing a relationship.
- *
- * @see \Drupal\views\Tests\Handler\JoinTest
- * @see \Drupal\views\Tests\Plugin\RelationshipTest
- */
-abstract class RelationshipJoinTestBase extends PluginTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('user');
-
-  protected function setUp() {
-    parent::setUp();
-
-    $this->enableViewsTestModule();
-  }
-
-  /**
-   * Overrides \Drupal\views\Tests\ViewTestBase::schemaDefinition().
-   *
-   * Adds a uid column to test the relationships.
-   */
-  protected function schemaDefinition() {
-    $schema = parent::schemaDefinition();
-
-    $schema['views_test_data']['fields']['uid'] = array(
-      'description' => "The {users}.uid of the author of the beatle entry.",
-      'type' => 'int',
-      'unsigned' => TRUE,
-      'not null' => TRUE,
-      'default' => 0
-    );
-
-    return $schema;
-  }
-
-  /**
-   * Overrides \Drupal\views\Tests\ViewTestBase::viewsData().
-   *
-   * Adds a relationship for the uid column.
-   */
-  protected function viewsData() {
-    $data = parent::viewsData();
-    $data['views_test_data']['uid'] = array(
-      'title' => t('UID'),
-      'help' => t('The test data UID'),
-      'relationship' => array(
-        'id' => 'standard',
-        'base' => 'users',
-        'base field' => 'uid'
-      )
-    );
-
-    return $data;
-  }
-
-}
diff --git a/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php b/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php
index 632504f..c3c24b1 100644
--- a/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/TokenReplaceTest.php
@@ -44,7 +44,7 @@ function testTokenReplacement() {
     $expected = array(
       '[view:name]' => 'Test tokens',
       '[view:description]' => 'Test view to token replacement tests.',
-      '[view:id]' => 'test_tokens',
+      '[view:machine-name]' => 'test_tokens',
       '[view:title]' => 'Test token page',
       '[view:url]' => url('test_tokens', array('absolute' => TRUE)),
       '[view:total-rows]' => (string) $view->total_rows,
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/DefaultViewsTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/DefaultViewsTest.php
index 3ce171b..a96172b 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/DefaultViewsTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/DefaultViewsTest.php
@@ -84,7 +84,7 @@ function testDefaultViews() {
     $this->drupalGet('admin/structure/views');
     $this->clickViewsOperationLink(t('Clone'), '/frontpage');
     $edit = array(
-      'id' => 'clone_of_frontpage',
+      'name' => 'clone_of_frontpage',
     );
     $this->assertTitle(t('Clone of @human_name | @site-name', array('@human_name' => 'Front page', '@site-name' => config('system.site')->get('name'))));
     $this->drupalPost(NULL, $edit, t('Clone'));
@@ -94,7 +94,7 @@ function testDefaultViews() {
     $this->drupalGet('admin/structure/views');
     $this->clickViewsOperationLink(t('Clone'), '/frontpage');
     $random_name = strtolower($this->randomName());
-    $this->drupalPost(NULL, array('id' => $random_name), t('Clone'));
+    $this->drupalPost(NULL, array('name' => $random_name), t('Clone'));
     $this->assertUrl("admin/structure/views/view/$random_name/edit", array(), 'The custom view name got saved.');
 
     // Now disable the view, and make sure it stops appearing on the main view
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/DisplayExtenderUITest.php b/core/modules/views/lib/Drupal/views/Tests/UI/DisplayExtenderUITest.php
index 7f11dec..c56e59c 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/DisplayExtenderUITest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/DisplayExtenderUITest.php
@@ -34,7 +34,7 @@ public function testDisplayExtenderUI() {
     config('views.settings')->set('display_extenders', array('display_extender_test'))->save();
 
     $view = views_get_view('test_view');
-    $view_edit_url = "admin/structure/views/view/{$view->storage->id()}/edit";
+    $view_edit_url = "admin/structure/views/view/{$view->storage->get('name')}/edit";
     $display_option_url = 'admin/structure/views/nojs/display/test_view/default/test_extender_test_option';
 
     $this->drupalGet($view_edit_url);
@@ -44,7 +44,7 @@ public function testDisplayExtenderUI() {
     $this->drupalPost($display_option_url, array('test_extender_test_option' => $random_text), t('Apply'));
     $this->assertLink($random_text);
     $this->drupalPost(NULL, array(), t('Save'));
-    $view = views_get_view($view->storage->id());
+    $view = views_get_view($view->storage->get('name'));
     $view->initDisplay();
     $this->assertEqual($view->display_handler->getOption('test_extender_test_option'), $random_text, 'Make sure that the display extender option got saved.');
   }
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/DisplayTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/DisplayTest.php
index e726162..b9342cd 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/DisplayTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/DisplayTest.php
@@ -34,10 +34,10 @@ public function randomView(array $view = array()) {
     // Create a new view in the UI.
     $default = array();
     $default['human_name'] = $this->randomName(16);
-    $default['id'] = strtolower($this->randomName(16));
+    $default['name'] = strtolower($this->randomName(16));
     $default['description'] = $this->randomName(16);
     $default['page[create]'] = TRUE;
-    $default['page[path]'] = $default['id'];
+    $default['page[path]'] = $default['name'];
 
     $view += $default;
 
@@ -51,7 +51,7 @@ public function randomView(array $view = array()) {
    */
   public function testRemoveDisplay() {
     $view = $this->randomView();
-    $path_prefix = 'admin/structure/views/view/' . $view['id'] .'/edit';
+    $path_prefix = 'admin/structure/views/view/' . $view['name'] .'/edit';
 
     $this->drupalGet($path_prefix . '/default');
     $this->assertNoFieldById('edit-displays-settings-settings-content-tab-content-details-top-actions-delete', 'delete Page', 'Make sure there is no delete button on the default display.');
@@ -65,9 +65,6 @@ public function testRemoveDisplay() {
     $element = $this->xpath('//a[contains(@href, :href) and contains(@class, :class)]', array(':href' => $path_prefix . '/page_1', ':class' => 'views-display-deleted-link'));
     $this->assertTrue(!empty($element), 'Make sure the display link is marked as to be deleted.');
 
-    $element = $this->xpath('//a[contains(@href, :href) and contains(@class, :class)]', array(':href' => $path_prefix . '/page_1', ':class' => 'views-display-deleted-link'));
-    $this->assertTrue(!empty($element), 'Make sure the display link is marked as to be deleted.');
-
     // Undo the deleting of the display.
     $this->drupalPost($path_prefix . '/page_1', array(), 'undo delete of Page');
     $this->assertNoFieldById('edit-displays-settings-settings-content-tab-content-details-top-actions-undo-delete', 'undo delete of Page', 'Make sure there is no undo button on the page display after reverting.');
@@ -90,7 +87,7 @@ public function testAddDisplay() {
     $settings['page[create]'] = FALSE;
     $view = $this->randomView($settings);
 
-    $path_prefix = 'admin/structure/views/view/' . $view['id'] .'/edit';
+    $path_prefix = 'admin/structure/views/view/' . $view['name'] .'/edit';
     $this->drupalGet($path_prefix);
 
     // Add a new display.
@@ -109,7 +106,7 @@ public function testReorderDisplay() {
       'block[create]' => TRUE
     );
     $view = $this->randomView($view);
-    $path_prefix = 'admin/structure/views/view/' . $view['id'] .'/edit';
+    $path_prefix = 'admin/structure/views/view/' . $view['name'] .'/edit';
 
     $this->clickLink(t('reorder displays'));
     $this->assertTrue($this->xpath('//tr[@id="display-row-default"]'), 'Make sure the default display appears on the reorder listing');
@@ -124,7 +121,7 @@ public function testReorderDisplay() {
     $this->drupalPost(NULL, $edit, t('Apply'));
     $this->drupalPost(NULL, array(), t('Save'));
 
-    $view = views_get_view($view['id']);
+    $view = views_get_view($view['name']);
     $displays = $view->storage->get('display');
     $this->assertEqual($displays['default']['position'], 0, 'Make sure the master display comes first.');
     $this->assertEqual($displays['block_1']['position'], 1, 'Make sure the block display comes before the page display.');
@@ -145,39 +142,11 @@ public function testDefaultDisplay() {
    */
   public function testCloneDisplay() {
     $view = $this->randomView();
-    $path_prefix = 'admin/structure/views/view/' . $view['id'] .'/edit';
+    $path_prefix = 'admin/structure/views/view/' . $view['name'] .'/edit';
 
     $this->drupalGet($path_prefix);
     $this->drupalPost(NULL, array(), 'clone Page');
-    $this->assertLinkByHref($path_prefix . '/page_2', 0, 'Make sure after cloning the new display appears in the UI');
-    $this->assertUrl($path_prefix . '/page_2', array(), 'The user got redirected to the new display.');
-
-    // Set the title and override the css classes.
-    $random_title = $this->randomName();
-    $random_css = $this->randomName();
-    $this->drupalPost("admin/structure/views/nojs/display/{$view['id']}/page_2/title", array('title' => $random_title), t('Apply'));
-    $this->drupalPost("admin/structure/views/nojs/display/{$view['id']}/page_2/css_class", array('override[dropdown]' => 'page_2', 'css_class' => $random_css), t('Apply'));
-
-    // Clone as a different display type.
-    $this->drupalPost(NULL, array(), 'clone as Block');
-    $this->assertLinkByHref($path_prefix . '/block_1', 0, 'Make sure after cloning the new display appears in the UI');
-    $this->assertUrl($path_prefix . '/block_1', array(), 'The user got redirected to the new display.');
-    $this->assertText(t('Block settings'));
-    $this->assertNoText(t('Page settings'));
-
-    $this->drupalPost(NULL, array(), t('Save'));
-    $view = views_get_view($view['id']);
-    $view->initDisplay();
-
-    $page_2 = $view->displayHandlers->get('page_2');
-    $this->assertTrue($page_2, 'The new page display got saved.');
-    $this->assertEqual($page_2->display['display_title'], 'Page');
-    $block_1 = $view->displayHandlers->get('block_1');
-    $this->assertTrue($block_1, 'The new block display got saved.');
-    $this->assertEqual($block_1->display['display_plugin'], 'block');
-    $this->assertEqual($block_1->display['display_title'], 'Block', 'The new display title got generated as expected.');
-    $this->assertEqual($block_1->getOption('title'), $random_title, 'The overridden title option from the display got copied into the clone');
-    $this->assertEqual($block_1->getOption('css_class'), $random_css, 'The overridden css_class option from the display got copied into the clone');
+    $this->assertLinkByHref($path_prefix . '/page_1', 0, 'Make sure after cloning the new display appears in the UI');
   }
 
   /**
@@ -185,7 +154,7 @@ public function testCloneDisplay() {
    */
   public function testDisableDisplay() {
     $view = $this->randomView();
-    $path_prefix = 'admin/structure/views/view/' . $view['id'] .'/edit';
+    $path_prefix = 'admin/structure/views/view/' . $view['name'] .'/edit';
 
     $this->drupalGet($path_prefix);
     $this->assertFalse($this->xpath('//div[contains(@class, :class)]', array(':class' => 'views-display-disabled')), 'Make sure the disabled display css class does not appear after initial adding of a view.');
@@ -246,26 +215,4 @@ public function testDisplayAreas() {
     }
   }
 
-  /**
-   * Tests the link-display setting.
-   */
-  public function testLinkDisplay() {
-    // Test setting the link display in the UI form.
-    $path = 'admin/structure/views/view/test_display/edit/block_1';
-    $link_display_path = 'admin/structure/views/nojs/display/test_display/block_1/link_display';
-    $this->drupalPost($link_display_path, array('link_display' => 'page_1'), t('Apply'));
-    // The form redirects to the master display.
-    $this->drupalGet($path);
-
-    $result = $this->xpath("//a[contains(@href, :path)]", array(':path' => $link_display_path));
-    $this->assertEqual($result[0], 'Page', 'Make sure that the link option summary shows the right linked display.');
-
-    $link_display_path = 'admin/structure/views/nojs/display/test_display/block_1/link_display';
-    $this->drupalPost($link_display_path, array('link_display' => 'custom_url'), t('Apply'));
-    // The form redirects to the master display.
-    $this->drupalGet($path);
-
-    $this->assertLink(t('Custom URL'), 0, 'The link option has custom url as summary.');
-  }
-
 }
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php
index b60f9d4..be4868e 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/OverrideDisplaysTest.php
@@ -27,7 +27,7 @@ function testOverrideDisplays() {
     // Create a basic view that shows all content, with a page and a block
     // display.
     $view['human_name'] = $this->randomName(16);
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $view['page[create]'] = 1;
     $view['page[path]'] = $this->randomName(16);
     $view['block[create]'] = 1;
@@ -41,8 +41,8 @@ function testOverrideDisplays() {
     $edit = array();
     $edit['title'] = $original_title = $this->randomName(16);
     $edit['override[dropdown]'] = 'default';
-    $this->drupalPost("admin/structure/views/nojs/display/{$view['id']}/page_1/title", $edit, t('Apply'));
-    $this->drupalPost("admin/structure/views/view/{$view['id']}/edit/page_1", array(), t('Save'));
+    $this->drupalPost("admin/structure/views/nojs/display/{$view['name']}/page_1/title", $edit, t('Apply'));
+    $this->drupalPost("admin/structure/views/view/{$view['name']}/edit/page_1", array(), t('Save'));
 
     // Add a node that will appear in the view, so that the block will actually
     // be displayed.
@@ -58,7 +58,7 @@ function testOverrideDisplays() {
     $this->assertText('View: ' . $view['human_name']);
 
     // Place the block.
-    $this->drupalPlaceBlock("views_block:{$view['id']}-block_1");
+    $this->drupalPlaceBlock("views_block:{$view['name']}-block_1");
 
     // Make sure the title appears in the block.
     $this->drupalGet('');
@@ -69,8 +69,8 @@ function testOverrideDisplays() {
     $edit = array();
     $edit['title'] = $new_title = $this->randomName(16);
     $edit['override[dropdown]'] = 'page_1';
-    $this->drupalPost("admin/structure/views/nojs/display/{$view['id']}/page_1/title", $edit, t('Apply'));
-    $this->drupalPost("admin/structure/views/view/{$view['id']}/edit/page_1", array(), t('Save'));
+    $this->drupalPost("admin/structure/views/nojs/display/{$view['name']}/page_1/title", $edit, t('Apply'));
+    $this->drupalPost("admin/structure/views/view/{$view['name']}/edit/page_1", array(), t('Save'));
     $this->drupalGet($view_path);
     $this->assertResponse(200);
     $this->assertText($new_title);
@@ -86,7 +86,7 @@ function testWizardMixedDefaultOverriddenDisplays() {
     // page and feed to inherit their titles from the default display, but the
     // block to override it.
     $view['human_name'] = $this->randomName(16);
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $view['page[create]'] = 1;
     $view['page[title]'] = $this->randomName(16);
     $view['page[path]'] = $this->randomName(16);
@@ -117,7 +117,7 @@ function testWizardMixedDefaultOverriddenDisplays() {
     $this->assertText('View: ' . $view['human_name']);
 
     // Place the block.
-    $this->drupalPlaceBlock("views_block:{$view['id']}-block_1");
+    $this->drupalPlaceBlock("views_block:{$view['name']}-block_1");
     $this->drupalGet('');
     $this->assertText($view['block[title]']);
     $this->assertNoText($view['page[title]']);
@@ -126,8 +126,8 @@ function testWizardMixedDefaultOverriddenDisplays() {
     // the feed's title also, but not the block.
     $edit = array();
     $edit['title'] = $new_default_title = $this->randomName(16);
-    $this->drupalPost("admin/structure/views/nojs/display/{$view['id']}/page_1/title", $edit, t('Apply'));
-    $this->drupalPost("admin/structure/views/view/{$view['id']}/edit/page_1", array(), t('Save'));
+    $this->drupalPost("admin/structure/views/nojs/display/{$view['name']}/page_1/title", $edit, t('Apply'));
+    $this->drupalPost("admin/structure/views/view/{$view['name']}/edit/page_1", array(), t('Save'));
     $this->drupalGet($view['page[path]']);
     $this->assertResponse(200);
     $this->assertText($new_default_title);
@@ -146,8 +146,8 @@ function testWizardMixedDefaultOverriddenDisplays() {
     // the block title only, and leave the defaults alone.
     $edit = array();
     $edit['title'] = $new_block_title = $this->randomName(16);
-    $this->drupalPost("admin/structure/views/nojs/display/{$view['id']}/block_1/title", $edit, t('Apply'));
-    $this->drupalPost("admin/structure/views/view/{$view['id']}/edit/block_1", array(), t('Save'));
+    $this->drupalPost("admin/structure/views/nojs/display/{$view['name']}/block_1/title", $edit, t('Apply'));
+    $this->drupalPost("admin/structure/views/view/{$view['name']}/edit/block_1", array(), t('Save'));
     $this->drupalGet($view['page[path]']);
     $this->assertResponse(200);
     $this->assertText($new_default_title);
@@ -168,7 +168,7 @@ function testRevertAllDisplays() {
     // Because there is both a title on page and block we expect the title on
     // the block be overriden.
     $view['human_name'] = $this->randomName(16);
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $view['page[create]'] = 1;
     $view['page[title]'] = $this->randomName(16);
     $view['page[path]'] = $this->randomName(16);
@@ -182,8 +182,8 @@ function testRevertAllDisplays() {
     $edit['title'] = $new_block_title = $this->randomName();
     $edit['override[dropdown]'] = 'default_revert';
 
-    $this->drupalPost("admin/structure/views/nojs/display/{$view['id']}/block_1/title", $edit, t('Apply'));
-    $this->drupalPost("admin/structure/views/view/{$view['id']}/edit/block_1", array(), t('Save'));
+    $this->drupalPost("admin/structure/views/nojs/display/{$view['name']}/block_1/title", $edit, t('Apply'));
+    $this->drupalPost("admin/structure/views/view/{$view['name']}/edit/block_1", array(), t('Save'));
     $this->assertText($view['page[title]']);
   }
 
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/SettingsTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/SettingsTest.php
index 28978d6..a97a9e8 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/SettingsTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/SettingsTest.php
@@ -45,7 +45,7 @@ function testEditUI() {
 
     $view = array();
     $view['human_name'] = $this->randomName(16);
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $view['description'] = $this->randomName(16);
     $view['page[create]'] = TRUE;
     $view['page[title]'] = $this->randomName(16);
@@ -65,7 +65,7 @@ function testEditUI() {
 
     // Create a view with an additional display, so master should be hidden.
     $view['page[create]'] = TRUE;
-    $view['id'] = strtolower($this->randomName());
+    $view['name'] = strtolower($this->randomName());
     $this->drupalPost('admin/structure/views/add', $view, t('Save and edit'));
 
     $this->assertNoLink(t('Master'));
@@ -79,7 +79,7 @@ function testEditUI() {
     );
     $this->drupalPost('admin/structure/views/settings', $edit, t('Save configuration'));
 
-    $view['id'] = strtolower($this->randomName());
+    $view['name'] = strtolower($this->randomName());
     $this->drupalPost('admin/structure/views/add', $view, t('Save and edit'));
     $this->assertFieldById('edit-displays-top-add-display-embed');
 
@@ -97,7 +97,7 @@ function testEditUI() {
     );
     $this->drupalPost('admin/structure/views/settings', $edit, t('Save configuration'));
 
-    $view['id'] = strtolower($this->randomName());
+    $view['name'] = strtolower($this->randomName());
     $this->drupalPost('admin/structure/views/add', $view, t('Save and edit'));
 
     $this->drupalPost(NULL, array(), t('Update preview'));
@@ -109,7 +109,7 @@ function testEditUI() {
     );
     $this->drupalPost('admin/structure/views/settings', $edit, t('Save configuration'));
 
-    $view['id'] = strtolower($this->randomName());
+    $view['name'] = strtolower($this->randomName());
     $this->drupalPost('admin/structure/views/add', $view, t('Save and edit'));
 
     $this->drupalPost(NULL, array(), t('Update preview'));
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php
index e5cac15..6c87423 100644
--- a/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/TagTest.php
@@ -34,7 +34,7 @@ public function testViewsUiAutocompleteTag() {
       $suffix = $i % 2 ? 'odd' : 'even';
       $tag = 'autocomplete_tag_test_' . $suffix . $this->randomName();
       $tags[] = $tag;
-      entity_create('view', array('tag' => $tag, 'id' => $this->randomName()))->save();
+      entity_create('view', array('tag' => $tag, 'name' => $this->randomName()))->save();
     }
 
     // Make sure just ten results are returns.
diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php b/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
index b5c6711..8f3ad63 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewExecutableTest.php
@@ -36,6 +36,7 @@ class ViewExecutableTest extends ViewUnitTestBase {
    */
   protected $configProperties = array(
     'disabled',
+    'api_version',
     'name',
     'description',
     'tag',
@@ -78,7 +79,7 @@ public static function getInfo() {
   protected function setUp() {
     parent::setUp();
 
-    $this->enableModules(array('system', 'node', 'comment', 'user', 'filter'));
+    $this->enableModules(array('node', 'comment', 'user', 'filter'));
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php b/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php
index ec36ae1..e50a950 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewStorageTest.php
@@ -28,8 +28,9 @@ class ViewStorageTest extends ViewUnitTestBase {
    */
   protected $config_properties = array(
     'disabled',
+    'api_version',
     'module',
-    'id',
+    'name',
     'description',
     'tag',
     'base_table',
@@ -73,7 +74,7 @@ public static function getInfo() {
   function testConfigurationEntityCRUD() {
     // Get the configuration entity information and controller.
     $this->info = entity_get_info('view');
-    $this->controller = $this->container->get('plugin.manager.entity')->getStorageController('view');
+    $this->controller = entity_get_controller('view');
 
     // Confirm that an info array has been returned.
     $this->assertTrue(!empty($this->info) && is_array($this->info), 'The View info array is loaded.');
@@ -157,7 +158,7 @@ protected function createTests() {
     }
 
     // Check the UUID of the loaded View.
-    $created->set('id', 'test_view_storage_new');
+    $created->set('name', 'test_view_storage_new');
     $created->save();
     $created_loaded = entity_load('view', 'test_view_storage_new');
     $this->assertIdentical($created->uuid(), $created_loaded->uuid(), 'The created UUID has been saved correctly.');
@@ -180,7 +181,7 @@ protected function displayTests() {
     $executable->initDisplay();
     $this->assertTrue($executable->displayHandlers->get($new_id) instanceof Page, 'New page display "test" uses the right display plugin.');
 
-    $view->set('id', 'test_view_storage_new_new2');
+    $view->set('name', 'test_view_storage_new_new2');
     $view->save();
     $values = config('views.view.test_view_storage_new_new2')->get();
 
@@ -377,6 +378,7 @@ public function testCreateDuplicate() {
     // @todo Create a reusable property on the base test class for these?
     $config_properties = array(
       'disabled',
+      'api_version',
       'description',
       'tag',
       'base_table',
diff --git a/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php b/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php
index 5547a00..a33244e 100644
--- a/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php
+++ b/core/modules/views/lib/Drupal/views/Tests/ViewTestData.php
@@ -137,6 +137,7 @@ public static function viewsData() {
       'help' => t('The test data ID'),
       'field' => array(
         'id' => 'numeric',
+        'click sortable' => TRUE,
       ),
       'argument' => array(
         'id' => 'numeric',
@@ -153,6 +154,7 @@ public static function viewsData() {
       'help' => t('The name of the person'),
       'field' => array(
         'id' => 'standard',
+        'click sortable' => TRUE,
       ),
       'argument' => array(
         'id' => 'string',
@@ -169,6 +171,7 @@ public static function viewsData() {
       'help' => t('The age of the person'),
       'field' => array(
         'id' => 'numeric',
+        'click sortable' => TRUE,
       ),
       'argument' => array(
         'id' => 'numeric',
@@ -185,6 +188,7 @@ public static function viewsData() {
       'help' => t('The job of the person'),
       'field' => array(
         'id' => 'standard',
+        'click sortable' => TRUE,
       ),
       'argument' => array(
         'id' => 'string',
@@ -201,6 +205,7 @@ public static function viewsData() {
       'help' => t('The creation date of this record'),
       'field' => array(
         'id' => 'date',
+        'click sortable' => TRUE,
       ),
       'argument' => array(
         'id' => 'date',
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php
index b786859..aff9227 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/BasicTest.php
@@ -31,7 +31,7 @@ function testViewsWizardAndListing() {
     // Create a simple and not at all useful view.
     $view1 = array();
     $view1['human_name'] = $this->randomName(16);
-    $view1['id'] = strtolower($this->randomName(16));
+    $view1['name'] = strtolower($this->randomName(16));
     $view1['description'] = $this->randomName(16);
     $view1['page[create]'] = FALSE;
     $this->drupalPost('admin/structure/views/add', $view1, t('Save and edit'));
@@ -41,7 +41,7 @@ function testViewsWizardAndListing() {
     $this->assertText($view1['description']);
     // @todo For now, clone is being left to config.module to solve.
     foreach (array('delete', 'edit') as $operation) {
-      $this->assertLinkByHref(url('admin/structure/views/view/' . $view1['id'] . '/' . $operation));
+      $this->assertLinkByHref(url('admin/structure/views/view/' . $view1['name'] . '/' . $operation));
     }
 
     // This view should not have a block.
@@ -55,7 +55,7 @@ function testViewsWizardAndListing() {
     // Now create a page with simple node listing and an attached feed.
     $view2 = array();
     $view2['human_name'] = $this->randomName(16);
-    $view2['id'] = strtolower($this->randomName(16));
+    $view2['name'] = strtolower($this->randomName(16));
     $view2['description'] = $this->randomName(16);
     $view2['page[create]'] = 1;
     $view2['page[title]'] = $this->randomName(16);
@@ -97,7 +97,7 @@ function testViewsWizardAndListing() {
     // Create a view with a page and a block, and filter the listing.
     $view3 = array();
     $view3['human_name'] = $this->randomName(16);
-    $view3['id'] = strtolower($this->randomName(16));
+    $view3['name'] = strtolower($this->randomName(16));
     $view3['description'] = $this->randomName(16);
     $view3['show[wizard_key]'] = 'node';
     $view3['show[type]'] = 'page';
@@ -127,7 +127,7 @@ function testViewsWizardAndListing() {
     $this->assertText('View: ' . $view3['human_name']);
 
     // Place the block.
-    $this->drupalPlaceBlock("views_block:{$view3['id']}-block_1");
+    $this->drupalPlaceBlock("views_block:{$view3['name']}-block_1");
 
     // Visit a random page (not the one that displays the view itself) and look
     // for the expected node title in the block.
@@ -139,15 +139,4 @@ function testViewsWizardAndListing() {
     $this->assertNoText('tracker', t('Default tracker view does not show on the listing page.'));
   }
 
-  /**
-   * Tests the actual wizard form.
-   *
-   * @see \Drupal\views_ui\ViewAddFormController::form()
-   */
-  protected function testWizardForm() {
-    $this->drupalGet('admin/structure/views/add');
-
-    $result = $this->xpath('//small[@id = "edit-human-name-machine-name-suffix"]');
-    $this->assertTrue(count($result), 'Ensure that the machine name is applied to the name field.');
-  }
 }
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php
index 16e86fa..95f4709 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/ItemsPerPageTest.php
@@ -41,7 +41,7 @@ function testItemsPerPage() {
     // 3 in the block.
     $view = array();
     $view['human_name'] = $this->randomName(16);
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $view['description'] = $this->randomName(16);
     $view['show[wizard_key]'] = 'node';
     $view['show[type]'] = 'article';
@@ -79,7 +79,7 @@ function testItemsPerPage() {
     $this->assertText('View: ' . $view['human_name']);
     // Place the block, visit a page that displays the block, and check that the
     // nodes we expect appear in the correct order.
-    $this->drupalPlaceBlock("views_block:{$view['id']}-block_1");
+    $this->drupalPlaceBlock("views_block:{$view['name']}-block_1");
 
     $this->drupalGet('user');
     $content = $this->drupalGetContent();
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php
index 9c9ab60..7b4bd2c 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/MenuTest.php
@@ -27,7 +27,7 @@ function testMenus() {
     // Create a view with a page display and a menu link in the Main Menu.
     $view = array();
     $view['human_name'] = $this->randomName(16);
-    $view['id'] = strtolower($this->randomName(16));
+    $view['name'] = strtolower($this->randomName(16));
     $view['description'] = $this->randomName(16);
     $view['page[create]'] = 1;
     $view['page[title]'] = $this->randomName(16);
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/SortingTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/SortingTest.php
index 0813353..5492904 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/SortingTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/SortingTest.php
@@ -33,7 +33,7 @@ function testSorting() {
     // Create a view that sorts oldest first.
     $view1 = array();
     $view1['human_name'] = $this->randomName(16);
-    $view1['id'] = strtolower($this->randomName(16));
+    $view1['name'] = strtolower($this->randomName(16));
     $view1['description'] = $this->randomName(16);
     $view1['show[sort]'] = 'created:ASC';
     $view1['page[create]'] = 1;
@@ -58,7 +58,7 @@ function testSorting() {
     // Create a view that sorts newest first.
     $view2 = array();
     $view2['human_name'] = $this->randomName(16);
-    $view2['id'] = strtolower($this->randomName(16));
+    $view2['name'] = strtolower($this->randomName(16));
     $view2['description'] = $this->randomName(16);
     $view2['show[sort]'] = 'created:DESC';
     $view2['page[create]'] = 1;
diff --git a/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php b/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php
index 6416193..693ed68 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Wizard/TaggedWithTest.php
@@ -125,7 +125,7 @@ function testTaggedWith() {
     $this->drupalPost('admin/structure/views/add', $view1, t('Update "of type" choice'));
     // Now resubmit the entire form to the same URL.
     $view1['human_name'] = $this->randomName(16);
-    $view1['id'] = strtolower($this->randomName(16));
+    $view1['name'] = strtolower($this->randomName(16));
     $view1['description'] = $this->randomName(16);
     $view1['show[tagged_with]'] = 'tag1';
     $view1['page[create]'] = 1;
@@ -147,7 +147,7 @@ function testTaggedWith() {
     $this->drupalPost('admin/structure/views/add', $view2, t('Update "of type" choice'));
     $this->assertResponse(200);
     $view2['human_name'] = $this->randomName(16);
-    $view2['id'] = strtolower($this->randomName(16));
+    $view2['name'] = strtolower($this->randomName(16));
     $view2['description'] = $this->randomName(16);
     $view2['show[tagged_with]'] = 'tag2';
     $view2['page[create]'] = 1;
diff --git a/core/modules/views/lib/Drupal/views/ViewExecutable.php b/core/modules/views/lib/Drupal/views/ViewExecutable.php
index 7447488..99cf668 100644
--- a/core/modules/views/lib/Drupal/views/ViewExecutable.php
+++ b/core/modules/views/lib/Drupal/views/ViewExecutable.php
@@ -572,8 +572,8 @@ public function getExposedInput() {
       // remember settings.
       $display_id = ($this->display_handler->isDefaulted('filters')) ? 'default' : $this->current_display;
 
-      if (empty($this->exposed_input) && !empty($_SESSION['views'][$this->storage->id()][$display_id])) {
-        $this->exposed_input = $_SESSION['views'][$this->storage->id()][$display_id];
+      if (empty($this->exposed_input) && !empty($_SESSION['views'][$this->storage->get('name')][$display_id])) {
+        $this->exposed_input = $_SESSION['views'][$this->storage->get('name')][$display_id];
       }
     }
 
@@ -1227,6 +1227,9 @@ public function render($display_id = NULL) {
     drupal_theme_initialize();
     $config = config('views.settings');
 
+    // Set the response so other parts can alter it.
+    $this->response = new Response('', 200);
+
     $start = microtime(TRUE);
     if (!empty($this->live_preview) && $config->get('ui.show.additional_queries')) {
       $this->startQueryCapture();
@@ -1257,11 +1260,6 @@ public function render($display_id = NULL) {
       // Initialize the style plugin.
       $this->initStyle();
 
-      if (!isset($this->response)) {
-        // Set the response so other parts can alter it.
-        $this->response = new Response('', 200);
-      }
-
       // Give field handlers the opportunity to perform additional queries
       // using the entire resultset prior to rendering.
       if ($this->style_plugin->usesFields()) {
@@ -1415,7 +1413,7 @@ public function preExecute($args = array()) {
     }
 
     // Allow hook_views_pre_view() to set the dom_id, then ensure it is set.
-    $this->dom_id = !empty($this->dom_id) ? $this->dom_id : hash('sha256', $this->storage->id() . REQUEST_TIME . mt_rand());
+    $this->dom_id = !empty($this->dom_id) ? $this->dom_id : hash('sha256', $this->storage->get('name') . REQUEST_TIME . mt_rand());
 
     // Allow the display handler to set up for execution
     $this->display_handler->preExecute();
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_access_dynamic.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_access_dynamic.yml
index 2d75b3a..a78537d 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_access_dynamic.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_access_dynamic.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -29,5 +30,5 @@ display:
     id: page_1
     position: '0'
 human_name: ''
-id: test_access_dynamic
+name: test_access_dynamic
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_access_none.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_access_none.yml
index 8595c89..79019ef 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_access_none.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_access_none.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -22,5 +23,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_access_none
+name: test_access_none
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_access_static.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_access_static.yml
index 6c3410f..cd3a94c 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_access_static.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_access_static.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -29,5 +30,5 @@ display:
     id: page_1
     position: '0'
 human_name: ''
-id: test_access_static
+name: test_access_static
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml
index 95ebe54..7a42247 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_aggregate_count.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -52,5 +53,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_aggregate_count
+name: test_aggregate_count
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_alias.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_alias.yml
index e1e4478..3755f24 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_alias.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_alias.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: users
 core: 8.0-dev
 description: ''
@@ -82,6 +83,6 @@ display:
     position: '0'
 human_name: test_alias
 module: views
-id: test_alias
+name: test_alias
 tag: default
 uuid: 3bdfd3e6-15aa-4324-9005-5ad8b321d265
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_current_user.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_current_user.yml
index 6ba4d7f..3cf754d 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_current_user.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_current_user.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -48,5 +49,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_argument_default_current_user
+name: test_argument_default_current_user
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_fixed.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_fixed.yml
index ea0540c..061b209 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_fixed.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_argument_default_fixed.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -51,5 +52,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_argument_default_fixed
+name: test_argument_default_fixed
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_attachment_ui.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_attachment_ui.yml
index d114623..3d3702e 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_attachment_ui.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_attachment_ui.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -63,5 +64,5 @@ display:
             guid_field_is_permalink: '0'
       path: test_attachment_ui_feed
     position: '3'
-id: test_attachment_ui
+name: test_attachment_ui
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_cache.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_cache.yml
index 5177f9b..b15a64a 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_cache.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_cache.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -36,6 +37,6 @@ display:
           field: id
           relationship: none
 human_name: ''
-id: test_cache
+name: test_cache
 tag: ''
 base_field: nid
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_click_sort.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_click_sort.yml
index f212edc..8aa2eb2 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_click_sort.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_click_sort.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -47,5 +48,5 @@ display:
     id: page_1
     position: '0'
 human_name: {  }
-id: test_click_sort
+name: test_click_sort
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_destroy.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_destroy.yml
index 800179f..a28c6b1 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_destroy.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_destroy.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -155,5 +156,5 @@ display:
     id: page_1
     position: '0'
 human_name: ''
-id: test_destroy
+name: test_destroy
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_display.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_display.yml
index b5c70f4..d9c5430 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_display.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_display.yml
@@ -1,9 +1,10 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
 disabled: '1'
 display:
-  block_1:
+  block:
     display_options:
       defaults:
         pager: '0'
@@ -29,7 +30,7 @@ display:
       style_plugin: default
     display_plugin: block
     display_title: Block
-    id: block_1
+    id: block
     position: '2'
   default:
     display_options:
@@ -82,5 +83,5 @@ display:
     id: page_1
     position: '1'
 human_name: ''
-id: test_display
+name: test_display
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_display_attachment.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_display_attachment.yml
index b80669c..82a87fc 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_display_attachment.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_display_attachment.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_field: id
 base_table: views_test_data
 core: 8.x
@@ -62,5 +63,5 @@ display:
         page_1: page_1
 human_name: test_display_attachment
 module: views
-id: test_display_attachment
+name: test_display_attachment
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_dropbutton.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_dropbutton.yml
index b985e0b..2d4fe32 100755
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_dropbutton.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_dropbutton.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_field: nid
 base_table: node
 core: 8.x
@@ -222,5 +223,5 @@ display:
           link_to_node: '0'
 human_name: test_dropbutton
 module: views
-id: test_dropbutton
+name: test_dropbutton
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_example_area.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_example_area.yml
index 39fcb4e..2a8fb0b 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_example_area.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_example_area.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -29,5 +30,5 @@ display:
     id: default
     position: '0'
 human_name: {  }
-id: test_example_area
+name: test_example_area
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_executable_displays.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_executable_displays.yml
index 18031d8..f4645c4 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_executable_displays.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_executable_displays.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -19,5 +20,5 @@ display:
     id: page_2
     position: '2'
 human_name: ''
-id: test_executable_displays
+name: test_executable_displays
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_admin_ui.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_admin_ui.yml
index 92b775f..d73dfb8 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_admin_ui.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_admin_ui.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -48,5 +49,5 @@ display:
     id: page_1
     position: '0'
 human_name: ''
-id: test_exposed_admin_ui
+name: test_exposed_admin_ui
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml
index 6d6adb3..736ba03 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_exposed_form.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -22,5 +23,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_exposed_form
+name: test_exposed_form
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_feed_display.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_feed_display.yml
index bf58c2a..6ba9d11 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_feed_display.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_feed_display.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: 8.0-dev
 description: ''
@@ -86,5 +87,5 @@ display:
     position: '0'
 human_name: test_feed_display
 module: views
-id: test_feed_display
+name: test_feed_display
 tag: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_classes.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_classes.yml
index a3a118f..d2fe5b2 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_classes.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_classes.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -28,5 +29,5 @@ display:
     id: page_1
     position: '0'
 human_name: {  }
-id: test_field_classes
+name: test_field_classes
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_get_entity.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_get_entity.yml
index f39d416..5ba2fc9 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_get_entity.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_get_entity.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: comment
 core: 8.0-dev
 description: ''
@@ -59,5 +60,5 @@ display:
     id: default
     position: '0'
 human_name: test_field_get_entity
-id: test_field_get_entity
+name: test_field_get_entity
 tag: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_output.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_output.yml
index b6275ce..6d0d73f 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_output.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_output.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -21,5 +22,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_field_output
+name: test_field_output
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_tokens.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_tokens.yml
index 18afed9..01431a6 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_tokens.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_tokens.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -40,5 +41,5 @@ display:
     display_title: Defaults
     id: default
     position: '0'
-id: test_field_tokens
+name: test_field_tokens
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_type.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_type.yml
index a031aab..c9172bc 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_field_type.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_field_type.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -15,5 +16,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_field_type
+name: test_field_type
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter.yml
index aedaf23..3f11e83 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: 8
 disabled: false
@@ -36,4 +37,4 @@ display:
     id: default
     position: '0'
 human_name: 'Test filters'
-id: test_filter
+name: test_filter
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_date_between.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_date_between.yml
index 9a2e16d..71f4b2f 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_date_between.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_date_between.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -36,5 +37,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_filter_date_between
+name: test_filter_date_between
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_group_override.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_group_override.yml
index a4de3cb..379eff6 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_group_override.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_group_override.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -49,5 +50,5 @@ display:
     id: page_1
     position: '0'
 human_name: test_filter_group_override
-id: test_filter_group_override
+name: test_filter_group_override
 tag: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_groups.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_groups.yml
index de084bc..d71c02e 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_groups.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_groups.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -106,5 +107,5 @@ display:
     id: page
     position: '0'
 human_name: test_filter_groups
-id: test_filter_groups
+name: test_filter_groups
 tag: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_in_operator_ui.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_in_operator_ui.yml
index 6cfe7e1..a68c790 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_in_operator_ui.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_filter_in_operator_ui.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -34,5 +35,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_filter_in_operator_ui
+name: test_filter_in_operator_ui
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_get_attach_displays.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_get_attach_displays.yml
index 89b6ce1..96a1be7 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_get_attach_displays.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_get_attach_displays.yml
@@ -1,9 +1,10 @@
 base_table: node
-id: test_get_attach_displays
+name: test_get_attach_displays
 description: ''
 tag: ''
 human_name: test_get_attach_displays
 core: 8.x
+api_version: '3.0'
 display:
   default:
     display_plugin: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_glossary.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_glossary.yml
index 71dbbc5..33045e5 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_glossary.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_glossary.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -43,5 +44,5 @@ display:
     id: default
     position: '0'
 human_name: test_glossary
-id: test_glossary
+name: test_glossary
 tag: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml
index 22e9a5d..7ea0ab8 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_count.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -55,5 +56,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_group_by_count
+name: test_group_by_count
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml
index 446c6d8..c494b09 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_group_by_in_filters.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -48,5 +49,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_group_by_in_filters
+name: test_group_by_in_filters
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_relationships.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_relationships.yml
index b60fa39..409fb2c 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_relationships.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_relationships.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -25,5 +26,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_handler_relationships
+name: test_handler_relationships
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_test_access.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_test_access.yml
index 4063a89..f7cbce5 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_test_access.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_handler_test_access.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: 8
 display:
@@ -43,4 +44,4 @@ display:
     display_title: Master
     id: default
     position: '0'
-id: test_handler_test_access
+name: test_handler_test_access
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_history.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_history.yml
index ba96ad1..ee816ef 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_history.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_history.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_field: nid
 base_table: node
 core: 8.x
@@ -203,5 +204,5 @@ display:
           1: AND
 human_name: test_history
 module: views
-id: test_history
+name: test_history
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_mini_pager.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_mini_pager.yml
deleted file mode 100644
index 83c7a70..0000000
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_mini_pager.yml
+++ /dev/null
@@ -1,83 +0,0 @@
-base_table: node
-id: test_mini_pager
-description: ''
-tag: ''
-human_name: test_mini_pager
-core: 8.x
-api_version: '3.0'
-display:
-  default:
-    display_plugin: default
-    id: default
-    display_title: Master
-    position: ''
-    display_options:
-      access:
-        type: perm
-      cache:
-        type: none
-      query:
-        type: views_query
-      exposed_form:
-        type: basic
-      pager:
-        type: mini
-        options:
-          items_per_page: '3'
-          offset: '0'
-          id: '0'
-          total_pages: ''
-          tags:
-            previous: ‹‹ test
-            next: ›› test
-          expose:
-            items_per_page: '0'
-            items_per_page_label: 'Items per page'
-            items_per_page_options: '5, 10, 20, 40, 60'
-            items_per_page_options_all: '0'
-            items_per_page_options_all_label: '- All -'
-            offset: '0'
-            offset_label: Offset
-      style:
-        type: default
-      row:
-        type: node
-        options:
-          build_mode: teaser
-          links: '1'
-          comments: '0'
-      fields:
-        title:
-          id: title
-          table: node
-          field: title
-          label: ''
-          alter:
-            alter_text: '0'
-            make_link: '0'
-            absolute: '0'
-            trim: '0'
-            word_boundary: '0'
-            ellipsis: '0'
-            strip_tags: '0'
-            html: '0'
-          hide_empty: '0'
-          empty_zero: '0'
-          link_to_node: '1'
-      filters: {  }
-      sorts: {  }
-      title: test_mini_pager
-      filter_groups:
-        operator: AND
-        groups: {  }
-  page_1:
-    display_plugin: page
-    id: page_1
-    display_title: Page
-    position: ''
-    display_options:
-      path: test_mini_pager
-base_field: nid
-disabled: '0'
-module: views
-langcode: und
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_page_display.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_page_display.yml
index 0027a58..92ed6c7 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_page_display.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_page_display.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -28,5 +29,5 @@ display:
     id: page_2
     position: '0'
 human_name: ''
-id: test_page_display
+name: test_page_display
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_full.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_full.yml
index 5000688..08be354 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_full.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_full.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -26,5 +27,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_pager_full
+name: test_pager_full
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_none.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_none.yml
index 96b046e..7b20316 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_none.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_none.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -22,5 +23,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_pager_none
+name: test_pager_none
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_some.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_some.yml
index 0c6bb7f..d9ecda5 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_some.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_pager_some.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -25,5 +26,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_pager_some
+name: test_pager_some
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_preview.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_preview.yml
index 0c2eb5f..91ba690 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_preview.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_preview.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_field: id
 base_table: views_test_data
 core: 8.x
@@ -56,5 +57,5 @@ display:
           title: ''
 human_name: test_preview
 module: views
-id: test_preview
+name: test_preview
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_redirect_view.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_redirect_view.yml
index 31cfe08..1217693 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_redirect_view.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_redirect_view.yml
@@ -1,9 +1,10 @@
 base_table: node
-id: test_redirect_view
+name: test_redirect_view
 description: ''
 tag: ''
 human_name: test_redirect_view
 core: 8.x
+api_version: '3.0'
 display:
   default:
     display_plugin: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_reset_button.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_reset_button.yml
index e66e2fc..e01c83e 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_reset_button.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_reset_button.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -49,5 +50,5 @@ display:
     id: page_1
     position: '0'
 human_name: ''
-id: test_reset_button
+name: test_reset_button
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_simple_argument.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_simple_argument.yml
index 0d1c3a5..8f1e259 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_simple_argument.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_simple_argument.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -81,5 +82,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_simple_argument
+name: test_simple_argument
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_store_pager_settings.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_store_pager_settings.yml
index 1ec7885..0c4acfe 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_store_pager_settings.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_store_pager_settings.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -22,5 +23,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_store_pager_settings
+name: test_store_pager_settings
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_style_mapping.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_style_mapping.yml
index a4339fc..30d4dd9 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_style_mapping.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_style_mapping.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -53,5 +54,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_style_mapping
+name: test_style_mapping
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_tokens.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_tokens.yml
index 58c8433..f6e640c 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_tokens.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_tokens.yml
@@ -1,9 +1,10 @@
 base_table: views_test_data
-id: test_tokens
+name: test_tokens
 description: 'Test view to token replacement tests.'
 tag: ''
 human_name: 'Test tokens'
 core: 8.x
+api_version: '3.0'
 display:
   default:
     display_options:
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view.yml
index 7200766..57dd103 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -43,5 +44,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_view
+name: test_view
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_numeric.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_numeric.yml
index 515aa6a..446aa63 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_numeric.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_numeric.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -32,5 +33,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_view_argument_validate_numeric
+name: test_view_argument_validate_numeric
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_php.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_php.yml
index 3ec9cb2..1b4dc28 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_php.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_argument_validate_php.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -32,5 +33,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_view_argument_validate_php
+name: test_view_argument_validate_php
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_delete.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_delete.yml
index 3b43da5..ca28db8 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_delete.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_delete.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -24,5 +25,5 @@ display:
     id: default
     position: '0'
 human_name: test_view_delete
-id: test_view_delete
+name: test_view_delete
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_handler_weight.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_handler_weight.yml
index ebcfd0e..cf47d54 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_handler_weight.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_handler_weight.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -58,5 +59,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_view_handler_weight
+name: test_view_handler_weight
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_pager_full_zero_items_per_page.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_pager_full_zero_items_per_page.yml
index 105a3f8..5b909ea 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_pager_full_zero_items_per_page.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_pager_full_zero_items_per_page.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -42,5 +43,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_view_pager_full_zero_items_per_page
+name: test_view_pager_full_zero_items_per_page
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_render.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_render.yml
index c63da26..e3ad228 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_render.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_render.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 description: ''
@@ -45,5 +46,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_view_render
+name: test_view_render
 tag: ''
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_status.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_status.yml
index 886ce2c..08261f5 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_status.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_status.yml
@@ -1,9 +1,10 @@
 base_table: views_test_data
-id: test_view_status
+name: test_view_status
 description: ''
 tag: ''
 human_name: test_view_status
 core: 8.x
+api_version: '3.0'
 display:
   default:
     display_plugin: default
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_storage.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_storage.yml
index ab0c603..c28829f 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_view_storage.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_view_storage.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: views_test_data
 core: '8'
 module: views
@@ -48,5 +49,5 @@ display:
         type: views_query
         options: {  }
 human_name: 'Storage Test View'
-id: test_view_storage
+name: test_view_storage
 tag: 'test'
diff --git a/core/modules/views/tests/views_test_config/test_views/views.view.test_views_groupby_save.yml b/core/modules/views/tests/views_test_config/test_views/views.view.test_views_groupby_save.yml
index 9db8ce8..05f9b5c 100644
--- a/core/modules/views/tests/views_test_config/test_views/views.view.test_views_groupby_save.yml
+++ b/core/modules/views/tests/views_test_config/test_views/views.view.test_views_groupby_save.yml
@@ -1,3 +1,4 @@
+api_version: '3.0'
 base_table: node
 core: '8'
 description: ''
@@ -22,5 +23,5 @@ display:
     id: default
     position: '0'
 human_name: ''
-id: test_views_groupby_save
+name: test_views_groupby_save
 tag: ''
diff --git a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php
index 48060f0..5d0cb73 100644
--- a/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php
+++ b/core/modules/views/tests/views_test_data/lib/Drupal/views_test_data/Plugin/views/join/JoinTest.php
@@ -51,7 +51,7 @@ public function setJoinValue($join_value) {
    */
   public function buildJoin($select_query, $table, $view_query) {
     // Add an additional hardcoded condition to the query.
-    $this->extra = 'views_test_data.uid = ' . $this->getJoinValue();
+    $this->extra = 'node.uid = ' . $this->getJoinValue();
     parent::buildJoin($select_query, $table, $view_query);
   }
 
diff --git a/core/modules/views/tests/views_test_data/views_test_data.module b/core/modules/views/tests/views_test_data/views_test_data.module
index 9e23992..324a446 100644
--- a/core/modules/views/tests/views_test_data/views_test_data.module
+++ b/core/modules/views/tests/views_test_data/views_test_data.module
@@ -78,7 +78,7 @@ function views_test_data_handler_test_access_callback_argument($argument = FALSE
  * @see \Drupal\views\Tests\Plugin\RenderTest
  */
 function views_test_data_views_pre_render(ViewExecutable $view) {
-  if ($view->storage->id() == 'test_cache_header_storage') {
+  if ($view->storage->get('name') == 'test_cache_header_storage') {
     $path = drupal_get_path('module', 'views_test_data');
     $view->element['#attached']['js'][] = "$path/views_cache.test.js";
     $view->element['#attached']['css'][] = "$path/views_cache.test.css";
@@ -91,7 +91,7 @@ function views_test_data_views_pre_render(ViewExecutable $view) {
  * Implements hook_preprocess_HOOK() for views-view-table.tpl.php.
  */
 function views_test_data_preprocess_views_view_table(&$variables) {
-  if ($variables['view']->storage->id() == 'test_view_render') {
+  if ($variables['view']->storage->get('name') == 'test_view_render') {
     $views_render_test = state()->get('views_render.test');
     $views_render_test++;
     state()->set('views_render.test', $views_render_test);
@@ -102,7 +102,7 @@ function views_test_data_preprocess_views_view_table(&$variables) {
  * Implements hook_views_post_build().
  */
 function views_test_data_views_post_build(ViewExecutable $view) {
-  if ($view->storage->id() == 'test_page_display') {
+  if ($view->storage->get('name') == 'test_page_display') {
     if ($view->current_display == 'page_1') {
       $view->build_info['denied'] = TRUE;
     }
diff --git a/core/modules/views/views.api.php b/core/modules/views/views.api.php
index 0687b9d..6e9dae8 100644
--- a/core/modules/views/views.api.php
+++ b/core/modules/views/views.api.php
@@ -191,6 +191,7 @@ function hook_views_data() {
     'help' => t('Just a plain text field.'),
     'field' => array(
       'id' => 'standard',
+      'click sortable' => TRUE, // This is use by the table display plugin.
     ),
     'sort' => array(
       'id' => 'standard',
@@ -209,6 +210,7 @@ function hook_views_data() {
     'help' => t('Just a numeric field.'),
     'field' => array(
       'id' => 'numeric',
+      'click sortable' => TRUE,
      ),
     'filter' => array(
       'id' => 'numeric',
@@ -224,6 +226,7 @@ function hook_views_data() {
     'help' => t('Just an on/off field.'),
     'field' => array(
       'id' => 'boolean',
+      'click sortable' => TRUE,
     ),
     'filter' => array(
       'id' => 'boolean',
@@ -245,6 +248,7 @@ function hook_views_data() {
     'help' => t('Just a timestamp field.'),
     'field' => array(
       'id' => 'date',
+      'click sortable' => TRUE,
     ),
     'sort' => array(
       'id' => 'date',
diff --git a/core/modules/views/views.install b/core/modules/views/views.install
index 8bda10e..d395d08 100644
--- a/core/modules/views/views.install
+++ b/core/modules/views/views.install
@@ -26,17 +26,3 @@ function views_schema() {
 
   return $schema;
 }
-
-/**
- * Provide an initial schema.
- *
- * @see update_module_enable().
- */
-function views_schema_0() {
-  module_load_install('system');
-  // Add the cache_views_info and cache_views_results tables.
-  $cache_schema = system_schema_cache_8007();
-  $schema['cache_views_info'] = $cache_schema;
-  $schema['cache_views_results'] = $cache_schema;
-  return $schema;
-}
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 8a85c97..957416f 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -15,6 +15,11 @@
 use Drupal\views\Plugin\Core\Entity\View;
 
 /**
+ * Views API version string.
+ */
+const VIEWS_API_VERSION = '3.0';
+
+/**
  * Implements hook_forms().
  *
  * To provide distinct form IDs for Views forms, the View name and
@@ -38,7 +43,7 @@ function views_forms($form_id, $args) {
 function views_form_id($view) {
   $parts = array(
     'views_form',
-    $view->storage->id(),
+    $view->storage->get('name'),
     $view->current_display,
   );
 
@@ -218,7 +223,7 @@ function views_plugin_list() {
         }
 
         // Add this view to the list for this plugin.
-        $plugins[$key]['views'][$view->id()] = $view->id();
+        $plugins[$key]['views'][$view->get('name')] = $view->get('name');
       }
     }
   }
@@ -235,11 +240,11 @@ function views_plugin_list() {
  */
 function views_preprocess_node(&$vars) {
   // The 'view' attribute of the node is added in views_preprocess_node()
-  if (!empty($vars['node']->view) && $vars['node']->view->storage->id()) {
+  if (!empty($vars['node']->view) && $vars['node']->view->storage->get('name')) {
     $vars['view'] = $vars['node']->view;
-    $vars['theme_hook_suggestions'][] = 'node__view__' . $vars['node']->view->storage->id();
+    $vars['theme_hook_suggestions'][] = 'node__view__' . $vars['node']->view->storage->get('name');
     if (!empty($vars['node']->view->current_display)) {
-      $vars['theme_hook_suggestions'][] = 'node__view__' . $vars['node']->view->storage->id() . '__' . $vars['node']->view->current_display;
+      $vars['theme_hook_suggestions'][] = 'node__view__' . $vars['node']->view->storage->get('name') . '__' . $vars['node']->view->current_display;
 
       // If a node is being rendered in a view, and the view does not have a path,
       // prevent drupal from accidentally setting the $page variable:
@@ -261,11 +266,11 @@ function views_preprocess_node(&$vars) {
  */
 function views_preprocess_comment(&$vars) {
   // The 'view' attribute of the node is added in template_preprocess_views_view_row_comment()
-  if (!empty($vars['comment']->view) && $vars['comment']->view->storage->id()) {
+  if (!empty($vars['comment']->view) && $vars['comment']->view->storage->get('name')) {
     $vars['view'] = &$vars['comment']->view;
-    $vars['theme_hook_suggestions'][] = 'comment__view__' . $vars['comment']->view->storage->id();
+    $vars['theme_hook_suggestions'][] = 'comment__view__' . $vars['comment']->view->storage->get('name');
     if (!empty($vars['node']->view->current_display)) {
-      $vars['theme_hook_suggestions'][] = 'comment__view__' . $vars['comment']->view->storage->id() . '__' . $vars['comment']->view->current_display;
+      $vars['theme_hook_suggestions'][] = 'comment__view__' . $vars['comment']->view->storage->get('name') . '__' . $vars['comment']->view->current_display;
     }
   }
 }
@@ -658,7 +663,7 @@ function views_add_contextual_links(&$render_element, $location, ViewExecutable
           $render_element['#views_contextual_links_info'][$module] = array(
             'location' => $location,
             'view' => $view,
-            'view_name' => $view->storage->id(),
+            'view_name' => $view->storage->get('name'),
             'view_display_id' => $display_id,
           );
         }
@@ -909,6 +914,7 @@ function views_library_info() {
     'version' => VERSION,
     'js' => array(
       "$path/base.js" => array('group' => JS_DEFAULT),
+      "$path/ajax.js" => array('group' => JS_DEFAULT),
       "$path/ajax_view.js" => array('group' => JS_DEFAULT),
     ),
     'dependencies' => array(
@@ -1150,7 +1156,7 @@ function views_get_applicable_views($type) {
  * Returns an array of all views as fully loaded $view objects.
  */
 function views_get_all_views() {
-  return drupal_container()->get('plugin.manager.entity')->getStorageController('view')->load();
+  return entity_get_controller('view')->load();
 }
 
 /**
@@ -1522,7 +1528,7 @@ function views_exposed_form($form, &$form_state) {
   // Let form plugins know this is for exposed widgets.
   $form_state['exposed'] = TRUE;
   // Check if the form was already created
-  if ($cache = views_exposed_form_cache($view->storage->id(), $view->current_display)) {
+  if ($cache = views_exposed_form_cache($view->storage->get('name'), $view->current_display)) {
     return $cache;
   }
 
@@ -1556,19 +1562,24 @@ function views_exposed_form($form, &$form_state) {
     '#name' => '',
     '#type' => 'submit',
     '#value' => t('Apply'),
-    '#id' => drupal_html_id('edit-submit-' . $view->storage->id()),
+    '#id' => drupal_html_id('edit-submit-' . $view->storage->get('name')),
   );
 
   $form['#action'] = url($view->display_handler->getUrl());
   $form['#theme'] = views_theme_functions('views_exposed_form', $view, $display);
-  $form['#id'] = drupal_clean_css_identifier('views_exposed_form-' . check_plain($view->storage->id()) . '-' . check_plain($display['id']));
+  $form['#id'] = drupal_clean_css_identifier('views_exposed_form-' . check_plain($view->storage->get('name')) . '-' . check_plain($display['id']));
 //  $form['#attributes']['class'] = array('views-exposed-form');
 
+  // If using AJAX, we need the form plugin.
+  if ($view->use_ajax) {
+    $form['#attached']['library'][] = array('system', 'jquery.form');
+  }
+
   $exposed_form_plugin = $form_state['exposed_form_plugin'];
   $exposed_form_plugin->exposed_form_alter($form, $form_state);
 
   // Save the form
-  views_exposed_form_cache($view->storage->id(), $view->current_display, $form);
+  views_exposed_form_cache($view->storage->get('name'), $view->current_display, $form);
 
   return $form;
 }
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index 395f275..23dc731 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -22,7 +22,7 @@ function _views_theme_functions($hook, ViewExecutable $view, $display = NULL) {
   $themes = array();
 
   if ($display) {
-    $themes[] = $hook . '__' . $view->storage->id() . '__' . $display['id'];
+    $themes[] = $hook . '__' . $view->storage->get('name') . '__' . $display['id'];
     $themes[] = $hook . '__' . $display['id'];
     // Add theme suggestions for each single tag.
     foreach (drupal_explode_tags($view->storage->get('tag')) as $tag) {
@@ -30,11 +30,11 @@ function _views_theme_functions($hook, ViewExecutable $view, $display = NULL) {
     }
 
     if ($display['id'] != $display['display_plugin']) {
-      $themes[] = $hook . '__' . $view->storage->id() . '__' . $display['display_plugin'];
+      $themes[] = $hook . '__' . $view->storage->get('name') . '__' . $display['display_plugin'];
       $themes[] = $hook . '__' . $display['display_plugin'];
     }
   }
-  $themes[] = $hook . '__' . $view->storage->id();
+  $themes[] = $hook . '__' . $view->storage->get('name');
   $themes[] = $hook;
   return $themes;
 }
@@ -53,8 +53,8 @@ function template_preprocess_views_view(&$vars) {
     $vars['rows'] = array('#markup' => $vars['rows']);
   }
 
-  $vars['css_name'] = drupal_clean_css_identifier($view->storage->id());
-  $vars['id'] = $view->storage->id();
+  $vars['css_name']   = drupal_clean_css_identifier($view->storage->get('name'));
+  $vars['name']       = $view->storage->get('name');
   $vars['display_id'] = $view->current_display;
 
   // Basic classes
@@ -62,8 +62,8 @@ function template_preprocess_views_view(&$vars) {
 
   $vars['attributes']['class'] = array();
   $vars['attributes']['class'][] = 'view';
-  $vars['attributes']['class'][] = 'view-' . drupal_clean_css_identifier($vars['id']);
-  $vars['attributes']['class'][] = 'view-id-' . $vars['id'];
+  $vars['attributes']['class'][] = 'view-' . drupal_clean_css_identifier($vars['name']);
+  $vars['attributes']['class'][] = 'view-id-' . $vars['name'];
   $vars['attributes']['class'][] = 'view-display-id-' . $vars['display_id'];
 
   $css_class = $view->display_handler->getOption('css_class');
@@ -136,7 +136,7 @@ function template_preprocess_views_view(&$vars) {
         'ajax_path' => url('views/ajax'),
         'ajaxViews' => array(
           'views_dom_id:' . $vars['dom_id'] => array(
-            'view_name' => $view->storage->id(),
+            'view_name' => $view->storage->get('name'),
             'view_display_id' => $view->current_display,
             'view_args' => check_plain(implode('/', $view->args)),
             'view_path' => check_plain(current_path()),
@@ -877,7 +877,7 @@ function template_preprocess_views_view_rss(&$vars) {
   $vars['description'] = check_plain(decode_entities(strip_tags($style->get_description())));
 
   if ($view->display_handler->getOption('sitename_title')) {
-    $title = $config->id();
+    $title = $config->get('name');
     if ($slogan = $config->get('slogan')) {
       $title .= ' - ' . $slogan;
     }
@@ -1044,57 +1044,65 @@ function theme_views_mini_pager($vars) {
   $parameters = $vars['parameters'];
   $quantity = $vars['quantity'];
 
+  // Calculate various markers within this pager piece:
+  // Middle is used to "center" pages around the current page.
+  $pager_middle = ceil($quantity / 2);
   // current is the page we are currently paged to
   $pager_current = $pager_page_array[$element] + 1;
   // max is the maximum page number
   $pager_max = $pager_total[$element];
   // End of marker calculations.
 
-  $li_previous = array();
-  if ($pager_total[$element] > 1 && $pager_page_array[$element] > 0) {
-    $li_previous = array(
-      '#theme' => 'pager_link__previous',
-      '#text' => (isset($tags[1]) ? $tags[1] : t('‹‹')),
-      '#page_new' => pager_load_array($pager_page_array[$element] - 1, $element, $pager_page_array),
-      '#element' => $element,
-      '#interval' => 1,
-      '#parameters' => $parameters,
+  if ($pager_total[$element] > 1) {
+
+    $li_previous = theme('pager_previous',
+      array(
+        'text' => (isset($tags[1]) ? $tags[1] : t('‹‹')),
+        'element' => $element,
+        'interval' => 1,
+        'parameters' => $parameters,
+      )
     );
-  }
+    if (empty($li_previous)) {
+      $li_previous = "&nbsp;";
+    }
 
-  $li_next = array();
-  if ($pager_page_array[$element] < ($pager_total[$element] - 1)) {
-    $li_next = array(
-      '#theme' => 'pager_link__next',
-      '#text' => (isset($tags[3]) ? $tags[3] : t('››')),
-      '#page_new' => pager_load_array($pager_page_array[$element] + 1, $element, $pager_page_array),
-      '#element' => $element,
-      '#interval' => 1,
-      '#parameters' => $parameters,
+    $li_next = theme('pager_next',
+      array(
+        'text' => (isset($tags[3]) ? $tags[3] : t('››')),
+        'element' => $element,
+        'interval' => 1,
+        'parameters' => $parameters,
+      )
     );
-  }
 
-  $items[] = array(
-    '#wrapper_attributes' => array('class' => array('pager-previous')),
-  ) + $li_previous;
-
-  $items[] = array(
-    '#wrapper_attributes' => array('class' => array('pager-current')),
-    '#markup' => t('@current of @max', array('@current' => $pager_current, '@max' => $pager_max)),
-  );
-
-  $items[] = array(
-    '#wrapper_attributes' => array('class' => array('pager-next')),
-  ) + $li_next;
-
-  return theme('item_list',
-    array(
-      'items' => $items,
-      'title' => NULL,
-      'type' => 'ul',
-      'attributes' => array('class' => array('pager')),
-    )
-  );
+    if (empty($li_next)) {
+      $li_next = "&nbsp;";
+    }
+
+    $items[] = array(
+      'class' => array('pager-previous'),
+      'data' => $li_previous,
+    );
+
+    $items[] = array(
+      'class' => array('pager-current'),
+      'data' => t('@current of @max', array('@current' => $pager_current, '@max' => $pager_max)),
+    );
+
+    $items[] = array(
+      'class' => array('pager-next'),
+      'data' => $li_next,
+    );
+    return theme('item_list',
+      array(
+        'items' => $items,
+        'title' => NULL,
+        'type' => 'ul',
+        'attributes' => array('class' => array('pager')),
+      )
+    );
+  }
 }
 
 /**
diff --git a/core/modules/views/views.tokens.inc b/core/modules/views/views.tokens.inc
index 9ca541a..4674d1b 100644
--- a/core/modules/views/views.tokens.inc
+++ b/core/modules/views/views.tokens.inc
@@ -22,9 +22,9 @@ function views_token_info() {
     'name' => t('Description'),
     'description' => t('The description of the view.'),
   );
-  $info['tokens']['view']['id'] = array(
-    'name' => t('ID'),
-    'description' => t('The machine-readable ID of the view.'),
+  $info['tokens']['view']['machine-name'] = array(
+    'name' => t('Machine name'),
+    'description' => t('The machine-readable name of the view.'),
   );
   $info['tokens']['view']['title'] = array(
     'name' => t('Title'),
@@ -89,8 +89,8 @@ function views_tokens($type, $tokens, array $data = array(), array $options = ar
           $replacements[$original] = $sanitize ? check_plain($view->storage->get('description')) : $view->storage->get('description');
           break;
 
-        case 'id':
-          $replacements[$original] = $view->storage->id();
+        case 'machine-name':
+          $replacements[$original] = $view->storage->get('name');
           break;
 
         case 'title':
diff --git a/core/modules/views/views_ui/admin.inc b/core/modules/views/views_ui/admin.inc
index 9e9f1ba..2639878 100644
--- a/core/modules/views/views_ui/admin.inc
+++ b/core/modules/views/views_ui/admin.inc
@@ -285,19 +285,19 @@ function views_ui_break_lock_confirm($form, &$form_state, ViewUI $view) {
   $form = array();
 
   if (empty($view->locked)) {
-    $form['message']['#markup'] = t('There is no lock on view %name to break.', array('%name' => $view->id()));
+    $form['message']['#markup'] = t('There is no lock on view %name to break.', array('%name' => $view->get('name')));
     return $form;
   }
 
   $cancel = drupal_container()->get('request')->query->get('cancel');
   if (empty($cancel)) {
-    $cancel = 'admin/structure/views/view/' . $view->id() . '/edit';
+    $cancel = 'admin/structure/views/view/' . $view->get('name') . '/edit';
   }
 
   $account = user_load($view->locked->owner);
   $form = confirm_form($form,
                   t('Do you want to break the lock on view %name?',
-                  array('%name' => $view->id())),
+                  array('%name' => $view->get('name'))),
                   $cancel,
                   t('By breaking this lock, any unsaved changes made by !user will be lost.', array('!user' => theme('username', array('account' => $account)))),
                   t('Break lock'),
@@ -418,16 +418,9 @@ function views_ui_standard_display_dropdown(&$form, &$form_state, $section) {
   $displays = $executable->displayHandlers;
   $current_display = $executable->display_handler;
 
-  // @todo Move this to a separate function if it's needed on any forms that
-  // don't have the display dropdown.
-  $form['override'] = array(
-    '#prefix' => '<div class="views-override clearfix container-inline">',
-    '#suffix' => '</div>',
-    '#weight' => -1000,
-    '#tree' => TRUE,
-  );
-
   // Add the "2 of 3" progress indicator.
+  // @TODO: Move this to a separate function if it's needed on any forms that
+  // don't have the display dropdown.
   if ($form_progress = $view->getFormProgress()) {
     $form['progress']['#markup'] = '<div id="views-progress-indicator">' . t('@current of @total', array('@current' => $form_progress['current'], '@total' => $form_progress['total'])) . '</div>';
     $form['progress']['#weight'] = -1001;
@@ -456,6 +449,12 @@ function views_ui_standard_display_dropdown(&$form, &$form_state, $section) {
     $display_dropdown['default_revert'] = t('Revert to default');
   }
 
+  $form['override'] = array(
+    '#prefix' => '<div class="views-override clearfix container-inline">',
+    '#suffix' => '</div>',
+    '#weight' => -1000,
+    '#tree' => TRUE,
+  );
   $form['override']['dropdown'] = array(
     '#type' => 'select',
     '#title' => t('For'), // @TODO: Translators may need more context than this.
@@ -541,7 +540,7 @@ function views_ui_ajax_forms($key = NULL) {
 function views_ui_build_form_url($form_state) {
   $form = views_ui_ajax_forms($form_state['form_key']);
   $ajax = empty($form_state['ajax']) ? 'nojs' : 'ajax';
-  $name = $form_state['view']->id();
+  $name = $form_state['view']->get('name');
   $url = "admin/structure/views/$ajax/$form_state[form_key]/$name/$form_state[display_id]";
   foreach ($form['args'] as $arg) {
     $url .= '/' . $form_state[$arg];
@@ -622,7 +621,7 @@ function views_ui_ajax_form($js, $key, ViewUI $view, $display_id = '') {
     }
     elseif (!$js) {
       // if nothing on the stack, non-js forms just go back to the main view editor.
-      return drupal_goto("admin/structure/views/view/{$view->id()}/edit");
+      return drupal_goto("admin/structure/views/view/{$view->get('name')}/edit");
     }
     else {
       $output = array();
@@ -636,9 +635,7 @@ function views_ui_ajax_form($js, $key, ViewUI $view, $display_id = '') {
     // If this form was for view-wide changes, there's no need to regenerate
     // the display section of the form.
     if ($display_id !== '') {
-      drupal_container()->get('plugin.manager.entity')
-        ->getFormController('view', 'edit')
-        ->rebuildCurrentTab($view, $output, $display_id);
+      entity_form_controller('view', 'edit')->rebuildCurrentTab($view, $output, $display_id);
     }
   }
 
@@ -673,7 +670,7 @@ function views_ui_analyze_view_form($form, &$form_state) {
  * Submit handler for views_ui_analyze_view_form
  */
 function views_ui_analyze_view_form_submit($form, &$form_state) {
-  $form_state['redirect'] = 'admin/structure/views/view/' . $form_state['view']->id() . '/edit';
+  $form_state['redirect'] = 'admin/structure/views/view/' . $form_state['view']->get('name') . '/edit';
 }
 
 /**
@@ -1217,6 +1214,7 @@ function views_ui_add_item_form($form, &$form_state) {
   $type = $form_state['type'];
 
   $form = array(
+    'override' => array(),
     'options' => array(
       '#theme_wrappers' => array('container'),
       '#attributes' => array('class' => array('scroll')),
@@ -2274,7 +2272,7 @@ function views_ui_field_list() {
               && $field_data = $table_data[$item['field']][$type]) {
               // The final check that we have a fieldapi field now.
               if (isset($field_data['field_name'])) {
-                $fields[$field_data['field_name']][$view->id()] = $view->id();
+                $fields[$field_data['field_name']][$view->get('name')] = $view->get('name');
               }
             }
           }
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php
index ca6478d..ea0bf11 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewAddFormController.php
@@ -44,7 +44,7 @@ public function form(array $form, array &$form_state, EntityInterface $view) {
       '#default_value' => '',
       '#maxlength' => 255,
     );
-    $form['name']['id'] = array(
+    $form['name']['name'] = array(
       '#type' => 'machine_name',
       '#maxlength' => 128,
       '#machine_name' => array(
@@ -160,7 +160,7 @@ public function submit(array $form, array &$form_state) {
     }
     $view->save();
 
-    $form_state['redirect'] = array('admin/structure/views/view/' . $view->id());
+    $form_state['redirect'] = array('admin/structure/views/view/' . $view->get('name'));
   }
 
   /**
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php
index dcf319a..70f18a9 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewCloneFormController.php
@@ -36,7 +36,7 @@ public function form(array $form, array &$form_state, EntityInterface $entity) {
       '#maxlength' => 255,
       '#default_value' => t('Clone of @human_name', array('@human_name' => $entity->getHumanName())),
     );
-    $form['id'] = array(
+    $form['name'] = array(
       '#type' => 'machine_name',
       '#maxlength' => 128,
       '#machine_name' => array(
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
index 595113f..a885f27 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewEditFormController.php
@@ -8,7 +8,6 @@
 namespace Drupal\views_ui;
 
 use Drupal\Core\Entity\EntityInterface;
-use Drupal\Component\Utility\NestedArray;
 use Drupal\views\ViewExecutable;
 
 /**
@@ -88,7 +87,7 @@ public function form(array $form, array &$form_state, EntityInterface $view) {
       $form['locked'] = array(
         '#type' => 'container',
         '#attributes' => array('class' => array('view-locked', 'messages', 'warning')),
-        '#children' => t('This view is being edited by user !user, and is therefore locked from editing by others. This lock is !age old. Click here to <a href="!break">break this lock</a>.', array('!user' => theme('username', array('account' => user_load($view->locked->owner))), '!age' => format_interval(REQUEST_TIME - $view->locked->updated), '!break' => url('admin/structure/views/view/' . $view->id() . '/break-lock'))),
+        '#children' => t('This view is being edited by user !user, and is therefore locked from editing by others. This lock is !age old. Click here to <a href="!break">break this lock</a>.', array('!user' => theme('username', array('account' => user_load($view->locked->owner))), '!age' => format_interval(REQUEST_TIME - $view->locked->updated), '!break' => url('admin/structure/views/view/' . $view->get('name') . '/break-lock'))),
         '#weight' => -10,
       );
     }
@@ -240,7 +239,7 @@ public function submit(array $form, array &$form_state) {
         $displays[$new_id] = $displays[$id];
         unset($displays[$id]);
         // Redirect the user to the renamed display to be sure that the page itself exists and doesn't throw errors.
-        $form_state['redirect'] = 'admin/structure/views/view/' . $view->id() . '/edit/' . $new_id;
+        $form_state['redirect'] = 'admin/structure/views/view/' . $view->get('name') . '/edit/' . $new_id;
       }
     }
     $view->set('display', $displays);
@@ -251,7 +250,7 @@ public function submit(array $form, array &$form_state) {
     $destination = $query->get('destination');
     if (!empty($destination)) {
       // Find out the first display which has a changed path and redirect to this url.
-      $old_view = views_get_view($view->id());
+      $old_view = views_get_view($view->get('name'));
       $old_view->initDisplay();
       foreach ($old_view->displayHandlers as $id => $display) {
         // Only check for displays with a path.
@@ -275,7 +274,7 @@ public function submit(array $form, array &$form_state) {
     drupal_set_message(t('The view %name has been saved.', array('%name' => $view->getHumanName())));
 
     // Remove this view from cache so we can edit it properly.
-    drupal_container()->get('user.tempstore')->get('views')->delete($view->id());
+    drupal_container()->get('user.tempstore')->get('views')->delete($view->get('name'));
   }
 
   /**
@@ -289,7 +288,7 @@ public function submit(array $form, array &$form_state) {
   public function cancel(array $form, array &$form_state) {
     // Remove this view from cache so edits will be lost.
     $view = $this->getEntity($form_state);
-    drupal_container()->get('user.tempstore')->get('views')->delete($view->id());
+    drupal_container()->get('user.tempstore')->get('views')->delete($view->get('name'));
     $form_state['redirect'] = 'admin/structure/views';
   }
 
@@ -423,21 +422,6 @@ public function getDisplayDetails($view, $display) {
             "#suffix" => '</li>',
           );
         }
-
-        foreach (views_fetch_plugin_names('display', NULL, array($view->get('storage')->get('base_table'))) as $type => $label) {
-          if ($type == $display['display_plugin']) {
-            continue;
-          }
-
-          $build['top']['actions']['clone_as'][$type] = array(
-            '#type' => 'submit',
-            '#value' => t('clone as @type', array('@type' => $label)),
-            '#limit_validation_errors' => array(),
-            '#submit' => array(array($this, 'submitCloneDisplayAsType'), array($this, 'submitDelayDestination')),
-            '#prefix' => '<li class="duplicate">',
-            '#suffix' => '</li>',
-          );
-        }
       }
       else {
         $build['top']['actions']['undo_delete'] = array(
@@ -554,7 +538,7 @@ public function submitDisplayUndoDelete($form, &$form_state) {
     views_ui_cache_set($view);
 
     // Redirect to the top-level edit page.
-    $form_state['redirect'] = 'admin/structure/views/view/' . $view->id() . '/edit/' . $id;
+    $form_state['redirect'] = 'admin/structure/views/view/' . $view->get('name') . '/edit/' . $id;
   }
 
   /**
@@ -570,7 +554,7 @@ public function submitDisplayEnable($form, &$form_state) {
     views_ui_cache_set($view);
 
     // Redirect to the top-level edit page.
-    $form_state['redirect'] = 'admin/structure/views/view/' . $view->id() . '/edit/' . $id;
+    $form_state['redirect'] = 'admin/structure/views/view/' . $view->get('name') . '/edit/' . $id;
   }
 
   /**
@@ -585,7 +569,7 @@ public function submitDisplayDisable($form, &$form_state) {
     views_ui_cache_set($view);
 
     // Redirect to the top-level edit page.
-    $form_state['redirect'] = 'admin/structure/views/view/' . $view->id() . '/edit/' . $id;
+    $form_state['redirect'] = 'admin/structure/views/view/' . $view->get('name') . '/edit/' . $id;
   }
 
   /**
@@ -603,7 +587,7 @@ public function submitDisplayDelete($form, &$form_state) {
 
     // Redirect to the top-level edit page. The first remaining display will
     // become the active display.
-    $form_state['redirect'] = 'admin/structure/views/view/' . $view->id();
+    $form_state['redirect'] = 'admin/structure/views/view/' . $view->get('name');
   }
 
   /**
@@ -644,21 +628,21 @@ public function renderDisplayTop(ViewUI $view) {
       '#links' => array(
         'edit-details' => array(
           'title' => t('edit view name/description'),
-          'href' => "admin/structure/views/nojs/edit-details/{$view->id()}",
+          'href' => "admin/structure/views/nojs/edit-details/{$view->get('name')}",
           'attributes' => array('class' => array('views-ajax-link')),
         ),
         'analyze' => array(
           'title' => t('analyze view'),
-          'href' => "admin/structure/views/nojs/analyze/{$view->id()}/$display_id",
+          'href' => "admin/structure/views/nojs/analyze/{$view->get('name')}/$display_id",
           'attributes' => array('class' => array('views-ajax-link')),
         ),
         'clone' => array(
           'title' => t('clone view'),
-          'href' => "admin/structure/views/view/{$view->id()}/clone",
+          'href' => "admin/structure/views/view/{$view->get('name')}/clone",
         ),
         'reorder' => array(
           'title' => t('reorder displays'),
-          'href' => "admin/structure/views/nojs/reorder-displays/{$view->id()}/$display_id",
+          'href' => "admin/structure/views/nojs/reorder-displays/{$view->get('name')}/$display_id",
           'attributes' => array('class' => array('views-ajax-link')),
         ),
       ),
@@ -671,14 +655,14 @@ public function renderDisplayTop(ViewUI $view) {
       if ($view->type == t('Overridden')) {
         $element['extra_actions']['#links']['revert'] = array(
           'title' => t('revert view'),
-          'href' => "admin/structure/views/view/{$view->id()}/revert",
-          'query' => array('destination' => "admin/structure/views/view/{$view->id()}"),
+          'href' => "admin/structure/views/view/{$view->get('name')}/revert",
+          'query' => array('destination' => "admin/structure/views/view/{$view->get('name')}"),
         );
       }
       else {
         $element['extra_actions']['#links']['delete'] = array(
           'title' => t('delete view'),
-          'href' => "admin/structure/views/view/{$view->id()}/delete",
+          'href' => "admin/structure/views/view/{$view->get('name')}/delete",
         );
       }
     }
@@ -761,7 +745,7 @@ public function submitDisplayDuplicate($form, &$form_state) {
     views_ui_cache_set($view);
 
     // Redirect to the new display's edit page.
-    $form_state['redirect'] = 'admin/structure/views/view/' . $view->id() . '/edit/' . $new_display_id;
+    $form_state['redirect'] = 'admin/structure/views/view/' . $view->get('name') . '/edit/' . $new_display_id;
   }
 
   /**
@@ -779,39 +763,7 @@ public function submitDisplayAdd($form, &$form_state) {
     views_ui_cache_set($view);
 
     // Redirect to the new display's edit page.
-    $form_state['redirect'] = 'admin/structure/views/view/' . $view->id() . '/edit/' . $display_id;
-  }
-
-  /**
-   * Submit handler to clone a display as another display type.
-   */
-  public function submitCloneDisplayAsType($form, &$form_state) {
-    $view = $this->getEntity($form_state);
-    $display_id = $view->displayID;
-
-    // Create the new display.
-    $parents = $form_state['triggering_element']['#parents'];
-    $display_type = array_pop($parents);
-    $new_display_id = $view->addDisplay($display_type);
-    $displays = $view->get('display');
-
-    // Let the display title be generated by the addDisplay method and set the
-    // right display plugin, but keep the rest from the original display.
-    $display_clone = $displays[$display_id];
-    unset($display_clone['display_title']);
-    unset($display_clone['display_plugin']);
-
-    $displays[$new_display_id] = NestedArray::mergeDeep($displays[$new_display_id], $display_clone);
-    $displays[$new_display_id]['id'] = $new_display_id;
-    $view->set('display', $displays);
-
-    // By setting the current display the changed marker will appear on the new
-    // display.
-    $view->get('executable')->current_display = $new_display_id;
-    views_ui_cache_set($view);
-
-    // Redirect to the new display's edit page.
-    $form_state['redirect'] = 'admin/structure/views/view/' . $view->id() . '/edit/' . $new_display_id;
+    $form_state['redirect'] = 'admin/structure/views/view/' . $view->get('name') . '/edit/' . $display_id;
   }
 
   /**
@@ -865,17 +817,11 @@ public function getFormBucket(ViewUI $view, $type, $display) {
 
     $build['#name'] = $build['#title'] = $types[$type]['title'];
 
-    $rearrange_url = "admin/structure/views/nojs/rearrange/{$view->id()}/{$display['id']}/$type";
-    $rearrange_text = t('Rearrange');
-    $class = 'icon compact rearrange';
-
     // Different types now have different rearrange forms, so we use this switch
     // to get the right one.
     switch ($type) {
       case 'filter':
-        // The rearrange form for filters contains the and/or UI, so override
-        // the used path.
-        $rearrange_url = "admin/structure/views/nojs/rearrange-$type/{$view->id()}/{$display['id']}/$type";
+        $rearrange_url = "admin/structure/views/nojs/rearrange-$type/{$view->get('name')}/{$display['id']}/$type";
         $rearrange_text = t('And/Or, Rearrange');
         // TODO: Add another class to have another symbol for filter rearrange.
         $class = 'icon compact rearrange';
@@ -892,7 +838,6 @@ public function getFormBucket(ViewUI $view, $type, $display) {
           );
           return $build;
         }
-        break;
       case 'header':
       case 'footer':
       case 'empty':
@@ -904,7 +849,10 @@ public function getFormBucket(ViewUI $view, $type, $display) {
           );
           return $build;
         }
-        break;
+      default:
+        $rearrange_url = "admin/structure/views/nojs/rearrange/{$view->get('name')}/{$display['id']}/$type";
+        $rearrange_text = t('Rearrange');
+        $class = 'icon compact rearrange';
     }
 
     // Create an array of actions to pass to theme_links
@@ -912,7 +860,7 @@ public function getFormBucket(ViewUI $view, $type, $display) {
     $count_handlers = count($view->get('executable')->displayHandlers->get($display['id'])->getHandlers($type));
     $actions['add'] = array(
       'title' => t('Add'),
-      'href' => "admin/structure/views/nojs/add-item/{$view->id()}/{$display['id']}/$type",
+      'href' => "admin/structure/views/nojs/add-item/{$view->get('name')}/{$display['id']}/$type",
       'attributes' => array('class' => array('icon compact add', 'views-ajax-link'), 'title' => t('Add'), 'id' => 'views-add-' . $type),
       'html' => TRUE,
     );
@@ -977,7 +925,7 @@ public function getFormBucket(ViewUI $view, $type, $display) {
       if (empty($handler)) {
         $build['fields'][$id]['#class'][] = 'broken';
         $field_name = t('Broken/missing handler: @table > @field', array('@table' => $field['table'], '@field' => $field['field']));
-        $build['fields'][$id]['#link'] = l($field_name, "admin/structure/views/nojs/config-item/{$view->id()}/{$display['id']}/$type/$id", array('attributes' => array('class' => array('views-ajax-link')), 'html' => TRUE));
+        $build['fields'][$id]['#link'] = l($field_name, "admin/structure/views/nojs/config-item/{$view->get('name')}/{$display['id']}/$type/$id", array('attributes' => array('class' => array('views-ajax-link')), 'html' => TRUE));
         continue;
       }
 
@@ -992,15 +940,15 @@ public function getFormBucket(ViewUI $view, $type, $display) {
       if (!empty($field['exclude'])) {
         $link_attributes['class'][] = 'views-field-excluded';
       }
-      $build['fields'][$id]['#link'] = l($link_text, "admin/structure/views/nojs/config-item/{$view->id()}/{$display['id']}/$type/$id", array('attributes' => $link_attributes, 'html' => TRUE));
+      $build['fields'][$id]['#link'] = l($link_text, "admin/structure/views/nojs/config-item/{$view->get('name')}/{$display['id']}/$type/$id", array('attributes' => $link_attributes, 'html' => TRUE));
       $build['fields'][$id]['#class'][] = drupal_clean_css_identifier($display['id']. '-' . $type . '-' . $id);
 
       if ($view->get('executable')->displayHandlers->get($display['id'])->useGroupBy() && $handler->usesGroupBy()) {
-        $build['fields'][$id]['#settings_links'][] = l('<span class="label">' . t('Aggregation settings') . '</span>', "admin/structure/views/nojs/config-item-group/{$view->id()}/{$display['id']}/$type/$id", array('attributes' => array('class' => 'views-button-configure views-ajax-link', 'title' => t('Aggregation settings')), 'html' => TRUE));
+        $build['fields'][$id]['#settings_links'][] = l('<span class="label">' . t('Aggregation settings') . '</span>', "admin/structure/views/nojs/config-item-group/{$view->get('name')}/{$display['id']}/$type/$id", array('attributes' => array('class' => 'views-button-configure views-ajax-link', 'title' => t('Aggregation settings')), 'html' => TRUE));
       }
 
       if ($handler->hasExtraOptions()) {
-        $build['fields'][$id]['#settings_links'][] = l('<span class="label">' . t('Settings') . '</span>', "admin/structure/views/nojs/config-item-extra/{$view->id()}/{$display['id']}/$type/$id", array('attributes' => array('class' => array('views-button-configure', 'views-ajax-link'), 'title' => t('Settings')), 'html' => TRUE));
+        $build['fields'][$id]['#settings_links'][] = l('<span class="label">' . t('Settings') . '</span>', "admin/structure/views/nojs/config-item-extra/{$view->get('name')}/{$display['id']}/$type/$id", array('attributes' => array('class' => array('views-button-configure', 'views-ajax-link'), 'title' => t('Settings')), 'html' => TRUE));
       }
 
       if ($grouping) {
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php
index e9ed64f..3683875 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewFormControllerBase.php
@@ -92,7 +92,7 @@ public function getDisplayTabs(ViewUI $view) {
         '#theme' => 'menu_local_task',
         '#link' => array(
           'title' => $this->getDisplayLabel($view, $id),
-          'href' => 'admin/structure/views/view/' . $view->id() . '/edit/' . $id,
+          'href' => 'admin/structure/views/view/' . $view->get('name') . '/edit/' . $id,
           'localized_options' => array(),
         ),
       );
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php
index f6798fe..a710ab4 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewPreviewFormController.php
@@ -61,7 +61,7 @@ public function form(array $form, array &$form_state, EntityInterface $view) {
         '#markup' => $view->renderPreview($view->displayID, $args),
       );
     }
-    $form['#action'] = url('admin/structure/views/view/' . $view->id() .'/preview/' . $view->displayID);
+    $form['#action'] = url('admin/structure/views/view/' . $view->get('name') .'/preview/' . $view->displayID);
 
     return $form;
   }
@@ -82,7 +82,7 @@ protected function actions(array $form, array &$form_state) {
         '#submit' => array(array($this, 'submitPreview')),
         '#id' => 'preview-submit',
         '#ajax' => array(
-          'path' => 'admin/structure/views/view/' . $view->id() . '/preview/' . $view->displayID . '/ajax',
+          'path' => 'admin/structure/views/view/' . $view->get('name') . '/preview/' . $view->displayID . '/ajax',
           'wrapper' => 'views-preview-wrapper',
           'event' => 'click',
           'progress' => array('type' => 'throbber'),
@@ -98,7 +98,7 @@ protected function actions(array $form, array &$form_state) {
   public function submitPreview($form, &$form_state) {
     // Rebuild the form with a pristine $view object.
     $view = $this->getEntity($form_state);
-    $form_state['build_info']['args'][0] = views_ui_cache_load($view->id());
+    $form_state['build_info']['args'][0] = views_ui_cache_load($view->get('name'));
     $view->renderPreview = TRUE;
     $form_state['show_preview'] = TRUE;
     $form_state['rebuild'] = TRUE;
diff --git a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewUI.php b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewUI.php
index d161c97..0dead3b 100644
--- a/core/modules/views/views_ui/lib/Drupal/views_ui/ViewUI.php
+++ b/core/modules/views/views_ui/lib/Drupal/views_ui/ViewUI.php
@@ -215,7 +215,7 @@ public function standardCancel($form, &$form_state) {
       views_ui_cache_set($this);
     }
 
-    $form_state['redirect'] = 'admin/structure/views/view/' . $this->id() . '/edit';
+    $form_state['redirect'] = 'admin/structure/views/view/' . $this->get('name') . '/edit';
   }
 
   /**
@@ -348,8 +348,8 @@ public function getOverrideValues($form, $form_state) {
    * Submit handler to break_lock a view.
    */
   public function submitBreakLock(&$form, &$form_state) {
-    drupal_container()->get('user.tempstore')->get('views')->delete($this->id());
-    $form_state['redirect'] = 'admin/structure/views/view/' . $this->id() . '/edit';
+    drupal_container()->get('user.tempstore')->get('views')->delete($this->get('name'));
+    $form_state['redirect'] = 'admin/structure/views/view/' . $this->get('name') . '/edit';
     drupal_set_message(t('The lock has been broken and you may now edit this view.'));
   }
 
@@ -411,7 +411,7 @@ public function buildDisplaysReorderForm($form, &$form_state) {
       'limit' => 0,
     );
 
-    $form['#action'] = url('admin/structure/views/nojs/reorder-displays/' . $this->id() . '/' . $display_id);
+    $form['#action'] = url('admin/structure/views/nojs/reorder-displays/' . $this->get('name') . '/' . $display_id);
 
     $this->getStandardButtons($form, $form_state, 'views_ui_reorder_displays_form');
     $form['buttons']['submit']['#submit'] = array(array($this, 'submitDisplaysReorderForm'));
@@ -463,7 +463,7 @@ public function submitDisplaysReorderForm($form, &$form_state) {
 
     // Store in cache
     views_ui_cache_set($this);
-    $form_state['redirect'] = array('admin/structure/views/view/' . $this->id() . '/edit', array('fragment' => 'views-tab-default'));
+    $form_state['redirect'] = array('admin/structure/views/view/' . $this->get('name') . '/edit', array('fragment' => 'views-tab-default'));
   }
 
   /**
@@ -630,7 +630,7 @@ public function renderPreview($display_id, $args = array()) {
       }
 
       // Make view links come back to preview.
-      $this->override_path = 'admin/structure/views/nojs/preview/' . $this->id() . '/' . $display_id;
+      $this->override_path = 'admin/structure/views/nojs/preview/' . $this->get('name') . '/' . $display_id;
 
       // Also override the current path so we get the pager.
       $original_path = current_path();
@@ -795,7 +795,7 @@ public function buildIdentifier($key, $display_id, $args) {
     $form = views_ui_ajax_forms($key);
     // Automatically remove the single-form cache if it exists and
     // does not match the key.
-    $identifier = implode('-', array($key, $this->id(), $display_id));
+    $identifier = implode('-', array($key, $this->get('name'), $display_id));
 
     foreach ($form['args'] as $id) {
       $arg = (!empty($args)) ? array_shift($args) : NULL;
diff --git a/core/modules/views/views_ui/templates/views-ui-edit-view.tpl.php b/core/modules/views/views_ui/templates/views-ui-edit-view.tpl.php
index d651c4a..5f5e02f 100644
--- a/core/modules/views/views_ui/templates/views-ui-edit-view.tpl.php
+++ b/core/modules/views/views_ui/templates/views-ui-edit-view.tpl.php
@@ -21,7 +21,7 @@
       <?php print $quick_links ?>
     </div>
     <?php print t('View %name, displaying items of type <strong>@base</strong>.',
-        array('%name' => $view->id(), '@base' => $base_table)); ?>
+        array('%name' => $view->get('name'), '@base' => $base_table)); ?>
   </div>
 
   <?php print $tabs; ?>
diff --git a/core/modules/views/views_ui/views_ui.module b/core/modules/views/views_ui/views_ui.module
index 5157195..3162b7c 100644
--- a/core/modules/views/views_ui/views_ui.module
+++ b/core/modules/views/views_ui/views_ui.module
@@ -277,14 +277,11 @@ function views_ui_theme() {
 function views_ui_library_info() {
   $libraries = array();
 
-  $path = drupal_get_path('module', 'views_ui') . '/js/';
-
   $libraries['views_ui.admin'] = array(
     'title' => 'Views UI ADMIN',
     'version' => VERSION,
     'js' => array(
-      $path . 'ajax.js' => array('group' => JS_DEFAULT),
-      $path . 'views-admin.js' => array('group' => JS_DEFAULT),
+      drupal_get_path('module', 'views_ui') . '/js/views-admin.js' => array('group' => JS_DEFAULT),
     ),
     'dependencies' => array(
       array('system', 'jquery'),
@@ -350,7 +347,7 @@ function views_ui_cache_load($name) {
   if (empty($view)) {
     return FALSE;
   }
-  $view->locked = $views_temp_store->getMetadata($view->id());
+  $view->locked = $views_temp_store->getMetadata($view->get('name'));
 
   return $view;
 }
@@ -379,7 +376,7 @@ function views_ui_cache_set(ViewUI $view) {
   unset($executable->default_display);
   $executable->query = NULL;
   unset($executable->displayHandlers);
-  drupal_container()->get('user.tempstore')->get('views')->set($view->id(), $view);
+  drupal_container()->get('user.tempstore')->get('views')->set($view->get('name'), $view);
 }
 
 /**
@@ -441,13 +438,13 @@ function views_ui_view_preview_section_handler_links(ViewExecutable $view, $type
     $field_name = $handler->adminLabel(TRUE);
     $links[$type . '-edit-' . $id] = array(
       'title' => t('Edit @section', array('@section' => $field_name)),
-      'href' => "admin/structure/views/nojs/config-item/{$view->storage->id()}/{$display['id']}/$type/$id",
+      'href' => "admin/structure/views/nojs/config-item/{$view->storage->get('name')}/{$display['id']}/$type/$id",
       'attributes' => array('class' => array('views-ajax-link')),
     );
   }
   $links[$type . '-add'] = array(
     'title' => t('Add new'),
-    'href' => "admin/structure/views/nojs/add-item/{$view->storage->id()}/{$display['id']}/$type",
+    'href' => "admin/structure/views/nojs/add-item/{$view->storage->get('name')}/{$display['id']}/$type",
     'attributes' => array('class' => array('views-ajax-link')),
   );
 
@@ -462,7 +459,7 @@ function views_ui_view_preview_section_display_category_links(ViewExecutable $vi
   $links = array(
     $type . '-edit' => array(
       'title' => t('Edit @section', array('@section' => $title)),
-      'href' => "admin/structure/views/nojs/display/{$view->storage->id()}/{$display['id']}/$type",
+      'href' => "admin/structure/views/nojs/display/{$view->storage->get('name')}/{$display['id']}/$type",
       'attributes' => array('class' => array('views-ajax-link')),
     ),
   );
@@ -490,7 +487,7 @@ function views_ui_view_preview_section_rows_links(ViewExecutable $view) {
  */
 function views_ui_views_plugins_display_alter(&$plugins) {
   // Attach contextual links to each display plugin. The links will point to
-  // paths underneath "admin/structure/views/view/{$view->id()}" (i.e., paths
+  // paths underneath "admin/structure/views/view/{$view->get('name')}" (i.e., paths
   // for editing and performing other contextual actions on the view).
   foreach ($plugins as &$display) {
     $display['contextual links']['views_ui'] = array(
@@ -694,7 +691,7 @@ function views_ui_ajax_callback(ViewExecutable $view, $op) {
 
   // If the request is via AJAX, return the rendered list as JSON.
   if (drupal_container()->get('request')->request->get('js')) {
-    $list = views_ui_list_page();
+    $list = entity_list_controller('view')->render();
     $commands = array(ajax_command_replace('#views-entity-list', drupal_render($list)));
     return new JsonResponse(ajax_render($commands));
   }
@@ -741,7 +738,5 @@ function views_ui_confirm_delete_submit($form, &$form_state) {
  * @see views_ui_menu()
  */
 function views_ui_list_page() {
-  return drupal_container()->get('plugin.manager.entity')
-    ->getListController('view')
-    ->render();
+  return entity_list_controller('view')->render();
 }
diff --git a/core/profiles/minimal/config/block.block.stark.admin.yml b/core/profiles/minimal/config/block.block.stark.admin.yml
deleted file mode 100644
index 5f62f7d..0000000
--- a/core/profiles/minimal/config/block.block.stark.admin.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-id: stark.admin
-label: Administration
-region: sidebar_first
-weight: '1'
-module: system
-status: '1'
-visibility:
-  path:
-    visibility: '0'
-    pages: ''
-  role:
-    roles: {  }
-  node_type:
-    types: {  }
-  visibility__active_tab: edit-visibility-path
-plugin: 'system_menu_block:menu-admin'
-settings:
-  cache: '-1'
diff --git a/core/profiles/minimal/config/block.block.stark.login.yml b/core/profiles/minimal/config/block.block.stark.login.yml
deleted file mode 100644
index 6154106..0000000
--- a/core/profiles/minimal/config/block.block.stark.login.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-id: stark.login
-label: 'User login'
-region: sidebar_first
-weight: '0'
-module: user
-status: '1'
-visibility:
-  path:
-    visibility: '0'
-    pages: ''
-  role:
-    roles: {  }
-  node_type:
-    types: {  }
-  visibility__active_tab: edit-visibility-path
-plugin: user_login_block
-settings:
-  cache: '-1'
diff --git a/core/profiles/minimal/config/block.block.stark.tools.yml b/core/profiles/minimal/config/block.block.stark.tools.yml
deleted file mode 100644
index 4942f50..0000000
--- a/core/profiles/minimal/config/block.block.stark.tools.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-id: stark.tools
-label: Tools
-region: sidebar_first
-weight: '0'
-module: system
-status: '1'
-visibility:
-  path:
-    visibility: '0'
-    pages: ''
-  role:
-    roles: {  }
-  node_type:
-    types: {  }
-  visibility__active_tab: edit-visibility-path
-plugin: 'system_menu_block:menu-tools'
-settings:
-  cache: '-1'
diff --git a/core/profiles/minimal/lib/Drupal/minimal/Tests/MinimalTest.php b/core/profiles/minimal/lib/Drupal/minimal/Tests/MinimalTest.php
deleted file mode 100644
index fbfb65b..0000000
--- a/core/profiles/minimal/lib/Drupal/minimal/Tests/MinimalTest.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains Drupal\minimal\Tests\MinimalTest.
- */
-
-namespace Drupal\minimal\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests Minimal installation profile expectations.
- */
-class MinimalTest extends WebTestBase {
-
-  protected $profile = 'minimal';
-
-  public static function getInfo() {
-    return array(
-      'name' => 'Minimal installation profile',
-      'description' => 'Tests Minimal installation profile expectations.',
-      'group' => 'Minimal',
-    );
-  }
-
-  /**
-   * Tests Minimal installation profile.
-   */
-  function testMinimal() {
-    $this->drupalGet('');
-    // Check the login block is present.
-    $this->assertLink(t('Create new account'));
-    $this->assertResponse(200);
-
-    // Create a user to test tools and navigation blocks for logged in users
-    // with appropriate permissions.
-    $user = $this->drupalCreateUser(array('access administration pages', 'administer content types'));
-    $this->drupalLogin($user);
-    $this->drupalGet('');
-    $this->assertText(t('Tools'));
-    $this->assertText(t('Administration'));
-  }
-}
diff --git a/core/profiles/standard/config/block.block.bartik.footer.yml b/core/profiles/standard/config/block.block.bartik.footer.yml
deleted file mode 100644
index 4496313..0000000
--- a/core/profiles/standard/config/block.block.bartik.footer.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-id: bartik.footer
-plugin: 'system_menu_block:menu-footer'
-status: '1'
-settings:
-  cache: '-1'
-label: 'Footer menu'
-visibility:
-  path:
-    visibility: '0'
-    pages: ''
-  role:
-    roles: {  }
-  node_type:
-    types:
-      article: '0'
-      page: '0'
-  visibility__active_tab: edit-visibility-path
-module: system
-region: footer
-weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/filter.format.filtered_html.yml b/core/profiles/standard/config/filter.format.filtered_html.yml
deleted file mode 100644
index 11623fe..0000000
--- a/core/profiles/standard/config/filter.format.filtered_html.yml
+++ /dev/null
@@ -1,22 +0,0 @@
-format: filtered_html
-name: 'Filtered HTML'
-status: '1'
-weight: '0'
-roles:
-  - anonymous
-  - authenticated
-cache: '1'
-filters:
-  filter_url:
-    module: filter
-    status: '1'
-  filter_html:
-    module: filter
-    status: '1'
-  filter_autop:
-    module: filter
-    status: '1'
-  filter_htmlcorrector:
-    module: filter
-    status: '1'
-langcode: und
diff --git a/core/profiles/standard/config/filter.format.full_html.yml b/core/profiles/standard/config/filter.format.full_html.yml
deleted file mode 100644
index 26ff727..0000000
--- a/core/profiles/standard/config/filter.format.full_html.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-format: full_html
-name: 'Full HTML'
-status: '1'
-weight: '1'
-roles:
-  - administrator
-cache: '1'
-filters:
-  filter_url:
-    module: filter
-    status: '1'
-  filter_autop:
-    module: filter
-    status: '1'
-  filter_htmlcorrector:
-    module: filter
-    status: '1'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.content.yml b/core/profiles/standard/config/plugin.core.block.bartik.content.yml
similarity index 71%
rename from core/profiles/standard/config/block.block.bartik.content.yml
rename to core/profiles/standard/config/plugin.core.block.bartik.content.yml
index 7f1a9f8..e10f903 100644
--- a/core/profiles/standard/config/block.block.bartik.content.yml
+++ b/core/profiles/standard/config/plugin.core.block.bartik.content.yml
@@ -1,8 +1,6 @@
-id: bartik.content
-plugin: system_main_block
+id: system_main_block
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: ''
+subject: ''
 module: system
 region: content
 weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.seven.help.yml b/core/profiles/standard/config/plugin.core.block.bartik.footer.yml
similarity index 68%
copy from core/profiles/standard/config/block.block.seven.help.yml
copy to core/profiles/standard/config/plugin.core.block.bartik.footer.yml
index 72c4509..7b6f9b7 100644
--- a/core/profiles/standard/config/block.block.seven.help.yml
+++ b/core/profiles/standard/config/plugin.core.block.bartik.footer.yml
@@ -1,8 +1,7 @@
-id: seven.help
-plugin: system_help_block
+id: 'system_menu_block:menu-footer'
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
+subject: 'Footer menu'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +13,6 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: ''
 module: system
-region: help
+region: footer
 weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.help.yml b/core/profiles/standard/config/plugin.core.block.bartik.help.yml
similarity index 72%
rename from core/profiles/standard/config/block.block.bartik.help.yml
rename to core/profiles/standard/config/plugin.core.block.bartik.help.yml
index 58d10a3..a5c4467 100644
--- a/core/profiles/standard/config/block.block.bartik.help.yml
+++ b/core/profiles/standard/config/plugin.core.block.bartik.help.yml
@@ -1,8 +1,6 @@
-id: bartik.help
-plugin: system_help_block
+id: system_help_block
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: ''
+subject: ''
 module: system
 region: help
 weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.login.yml b/core/profiles/standard/config/plugin.core.block.bartik.login.yml
similarity index 72%
copy from core/profiles/standard/config/block.block.bartik.login.yml
copy to core/profiles/standard/config/plugin.core.block.bartik.login.yml
index 21d73d8..8d8923a 100644
--- a/core/profiles/standard/config/block.block.bartik.login.yml
+++ b/core/profiles/standard/config/plugin.core.block.bartik.login.yml
@@ -1,8 +1,7 @@
-id: bartik.login
+id: user_login_block
 whois_new_count: '5'
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,9 +13,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: 'User login'
+subject: 'User login'
 module: user
 region: sidebar_first
 weight: '0'
-plugin: user_login_block
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.powered.yml b/core/profiles/standard/config/plugin.core.block.bartik.powered.yml
similarity index 70%
rename from core/profiles/standard/config/block.block.bartik.powered.yml
rename to core/profiles/standard/config/plugin.core.block.bartik.powered.yml
index 446e51a..1f9dc52 100644
--- a/core/profiles/standard/config/block.block.bartik.powered.yml
+++ b/core/profiles/standard/config/plugin.core.block.bartik.powered.yml
@@ -1,8 +1,6 @@
-id: bartik.powered
-plugin: system_powered_by_block
+id: system_powered_by_block
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: ''
+subject: ''
 module: system
 region: footer
 weight: '10'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.search.yml b/core/profiles/standard/config/plugin.core.block.bartik.search.yml
similarity index 71%
rename from core/profiles/standard/config/block.block.bartik.search.yml
rename to core/profiles/standard/config/plugin.core.block.bartik.search.yml
index 3dcda34..d314a49 100644
--- a/core/profiles/standard/config/block.block.bartik.search.yml
+++ b/core/profiles/standard/config/plugin.core.block.bartik.search.yml
@@ -1,8 +1,6 @@
-id: bartik.search
-plugin: search_form_block
+id: search_form_block
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: 'Search'
+subject: 'Search'
 module: search
 region: sidebar_first
 weight: '-1'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.tools.yml b/core/profiles/standard/config/plugin.core.block.bartik.tools.yml
similarity index 69%
copy from core/profiles/standard/config/block.block.bartik.tools.yml
copy to core/profiles/standard/config/plugin.core.block.bartik.tools.yml
index 44e3aeb..d6a38c9 100644
--- a/core/profiles/standard/config/block.block.bartik.tools.yml
+++ b/core/profiles/standard/config/plugin.core.block.bartik.tools.yml
@@ -1,8 +1,6 @@
-id: bartik.tools
-plugin: 'system_menu_block:menu-tools'
+id: 'system_menu_block:menu-tools'
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: 'Tools'
+subject: 'Tools'
 module: system
 region: sidebar_first
 weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.seven.content.yml b/core/profiles/standard/config/plugin.core.block.seven.content.yml
similarity index 72%
rename from core/profiles/standard/config/block.block.seven.content.yml
rename to core/profiles/standard/config/plugin.core.block.seven.content.yml
index 675f718..e10f903 100644
--- a/core/profiles/standard/config/block.block.seven.content.yml
+++ b/core/profiles/standard/config/plugin.core.block.seven.content.yml
@@ -1,8 +1,6 @@
-id: seven.content
-plugin: system_main_block
+id: system_main_block
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: ''
+subject: ''
 module: system
 region: content
 weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.seven.help.yml b/core/profiles/standard/config/plugin.core.block.seven.help.yml
similarity index 72%
rename from core/profiles/standard/config/block.block.seven.help.yml
rename to core/profiles/standard/config/plugin.core.block.seven.help.yml
index 72c4509..a5c4467 100644
--- a/core/profiles/standard/config/block.block.seven.help.yml
+++ b/core/profiles/standard/config/plugin.core.block.seven.help.yml
@@ -1,8 +1,6 @@
-id: seven.help
-plugin: system_help_block
+id: system_help_block
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: ''
+subject: ''
 module: system
 region: help
 weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.seven.login.yml b/core/profiles/standard/config/plugin.core.block.seven.login.yml
similarity index 70%
rename from core/profiles/standard/config/block.block.seven.login.yml
rename to core/profiles/standard/config/plugin.core.block.seven.login.yml
index c35ba59..8c4eca5 100644
--- a/core/profiles/standard/config/block.block.seven.login.yml
+++ b/core/profiles/standard/config/plugin.core.block.seven.login.yml
@@ -1,8 +1,7 @@
-id: seven.login
-plugin: user_login_block
+id: user_login_block
+whois_new_count: '5'
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +13,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: 'User login'
+subject: 'User login'
 module: user
 region: content
 weight: '10'
-langcode: und
diff --git a/core/profiles/standard/config/user.role.administrator.yml b/core/profiles/standard/config/user.role.administrator.yml
deleted file mode 100644
index 71187f9..0000000
--- a/core/profiles/standard/config/user.role.administrator.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-id: administrator
-label: Administrator
-weight: 2
diff --git a/core/profiles/standard/standard.install b/core/profiles/standard/standard.install
index 8802bbc..5cb8fb3 100644
--- a/core/profiles/standard/standard.install
+++ b/core/profiles/standard/standard.install
@@ -12,6 +12,62 @@
  * @see system_install()
  */
 function standard_install() {
+  // Add text formats.
+  $filtered_html_format = array(
+    'format' => 'filtered_html',
+    'name' => 'Filtered HTML',
+    'weight' => 0,
+    'filters' => array(
+      // URL filter.
+      'filter_url' => array(
+        'weight' => 0,
+        'status' => 1,
+      ),
+      // HTML filter.
+      'filter_html' => array(
+        'weight' => 1,
+        'status' => 1,
+      ),
+      // Line break filter.
+      'filter_autop' => array(
+        'weight' => 2,
+        'status' => 1,
+      ),
+      // HTML corrector filter.
+      'filter_htmlcorrector' => array(
+        'weight' => 10,
+        'status' => 1,
+      ),
+    ),
+  );
+  $filtered_html_format = (object) $filtered_html_format;
+  filter_format_save($filtered_html_format);
+
+  $full_html_format = array(
+    'format' => 'full_html',
+    'name' => 'Full HTML',
+    'weight' => 1,
+    'filters' => array(
+      // URL filter.
+      'filter_url' => array(
+        'weight' => 0,
+        'status' => 1,
+      ),
+      // Line break filter.
+      'filter_autop' => array(
+        'weight' => 1,
+        'status' => 1,
+      ),
+      // HTML corrector filter.
+      'filter_htmlcorrector' => array(
+        'weight' => 10,
+        'status' => 1,
+      ),
+    ),
+  );
+  $full_html_format = (object) $full_html_format;
+  filter_format_save($full_html_format);
+
   // Enable Bartik theme and set it as default theme instead of Stark.
   // @see system_install()
   $default_theme = 'bartik';
@@ -222,17 +278,23 @@ function standard_install() {
   user_install_picture_field();
 
   // Enable default permissions for system roles.
-  user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content', 'access comments'));
-  user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access content', 'access comments', 'post comments', 'skip comment approval'));
+  $filtered_html_permission = filter_permission_name($filtered_html_format);
+  user_role_grant_permissions(DRUPAL_ANONYMOUS_RID, array('access content', 'access comments', $filtered_html_permission));
+  user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access content', 'access comments', 'post comments', 'skip comment approval', $filtered_html_permission));
 
-  // Enable all permissions for the administrator role.
-  user_role_grant_permissions('administrator', array_keys(module_invoke_all('permission')));
+  // Create a default role for site administrators, with all available permissions assigned.
+  $admin_role = new stdClass();
+  $admin_role->rid = 'administrator';
+  $admin_role->name = 'Administrator';
+  $admin_role->weight = 2;
+  user_role_save($admin_role);
+  user_role_grant_permissions($admin_role->rid, array_keys(module_invoke_all('permission')));
   // Set this as the administrator role.
-  $user_settings->set('admin_role', 'administrator')->save();
+  $user_settings->set('admin_role', $admin_role->rid)->save();
 
   // Assign user 1 the "administrator" role.
   db_insert('users_roles')
-    ->fields(array('uid' => 1, 'rid' => 'administrator'))
+    ->fields(array('uid' => 1, 'rid' => $admin_role->rid))
     ->execute();
 
   // Create a Home link in the main menu.
@@ -249,7 +311,7 @@ function standard_install() {
   user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access site-wide contact form'));
 
   // Populate the default shortcut set.
-  $shortcut_set = shortcut_set_load('default');
+  $shortcut_set = shortcut_set_load(SHORTCUT_DEFAULT_SET_NAME);
   $shortcut_set->links[] = array(
     'link_path' => 'node/add',
     'link_title' => st('Add content'),
@@ -260,7 +322,7 @@ function standard_install() {
     'link_title' => st('Find content'),
     'weight' => -19,
   );
-  $shortcut_set->save();
+  shortcut_set_save($shortcut_set);
 
   // Enable the admin theme.
   theme_enable(array('seven'));
diff --git a/core/profiles/standard/config/block.block.bartik.tools.yml b/core/profiles/testing/config/plugin.core.block.stark.admin.yml
similarity index 69%
copy from core/profiles/standard/config/block.block.bartik.tools.yml
copy to core/profiles/testing/config/plugin.core.block.stark.admin.yml
index 44e3aeb..960e2cb 100644
--- a/core/profiles/standard/config/block.block.bartik.tools.yml
+++ b/core/profiles/testing/config/plugin.core.block.stark.admin.yml
@@ -1,8 +1,6 @@
-id: bartik.tools
-plugin: 'system_menu_block:menu-tools'
+id: 'system_menu_block:menu-admin'
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: 'Tools'
+subject: ''
 module: system
 region: sidebar_first
 weight: '0'
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.login.yml b/core/profiles/testing/config/plugin.core.block.stark.online.yml
similarity index 61%
rename from core/profiles/standard/config/block.block.bartik.login.yml
rename to core/profiles/testing/config/plugin.core.block.stark.online.yml
index 21d73d8..3b3f5c5 100644
--- a/core/profiles/standard/config/block.block.bartik.login.yml
+++ b/core/profiles/testing/config/plugin.core.block.stark.online.yml
@@ -1,8 +1,11 @@
-id: bartik.login
-whois_new_count: '5'
+id: user_online_block
+properties:
+  administrative: '1'
+seconds_online: '900'
+max_list_count: '10'
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
+subject: 'Who''s online'
 visibility:
   path:
     visibility: '0'
@@ -13,10 +16,8 @@ visibility:
     types:
       article: '0'
       page: '0'
+      poll: '0'
   visibility__active_tab: edit-visibility-path
-label: 'User login'
 module: user
 region: sidebar_first
 weight: '0'
-plugin: user_login_block
-langcode: und
diff --git a/core/profiles/standard/config/block.block.bartik.tools.yml b/core/profiles/testing/config/plugin.core.block.stark.tools.yml
similarity index 69%
rename from core/profiles/standard/config/block.block.bartik.tools.yml
rename to core/profiles/testing/config/plugin.core.block.stark.tools.yml
index 44e3aeb..5e8b188 100644
--- a/core/profiles/standard/config/block.block.bartik.tools.yml
+++ b/core/profiles/testing/config/plugin.core.block.stark.tools.yml
@@ -1,8 +1,6 @@
-id: bartik.tools
-plugin: 'system_menu_block:menu-tools'
+id: 'system_menu_block:menu-tools'
 status: '1'
-settings:
-  cache: '-1'
+cache: '-1'
 visibility:
   path:
     visibility: '0'
@@ -14,8 +12,7 @@ visibility:
       article: '0'
       page: '0'
   visibility__active_tab: edit-visibility-path
-label: 'Tools'
+subject: ''
 module: system
 region: sidebar_first
 weight: '0'
-langcode: und
diff --git a/core/scripts/dump-database-d6.sh b/core/scripts/dump-database-d6.sh
index 106568d..d39bb43 100644
--- a/core/scripts/dump-database-d6.sh
+++ b/core/scripts/dump-database-d6.sh
@@ -44,7 +44,7 @@
 
 ENDOFHEADER;
 
-foreach (drupal_container()->get('module_handler')->getModuleList() as $module => $filename) {
+foreach (module_list() as $module) {
   $output .= " *  - $module\n";
 }
 $output .= " */\n\n";
diff --git a/core/scripts/dump-database-d7.sh b/core/scripts/dump-database-d7.sh
index 3b8597d..3440fa2 100644
--- a/core/scripts/dump-database-d7.sh
+++ b/core/scripts/dump-database-d7.sh
@@ -45,7 +45,7 @@
 
 ENDOFHEADER;
 
-foreach (drupal_container()->get('module_handler')->getModuleList() as $module => $filename) {
+foreach (module_list() as $module) {
   $output .= " *  - $module\n";
 }
 $output .= " */\n\n";
diff --git a/core/themes/bartik/css/style-rtl.css b/core/themes/bartik/css/style-rtl.css
index dc7c2a4..2f4841b 100644
--- a/core/themes/bartik/css/style-rtl.css
+++ b/core/themes/bartik/css/style-rtl.css
@@ -235,6 +235,22 @@ ul.tips {
   float: right;
 }
 
+/* ---------- Poll ----------- */
+
+.poll .vote-form {
+  text-align: right;
+}
+.poll .total {
+  text-align: left;
+}
+.poll .choice-title {
+  clear: left;
+}
+.poll .percent {
+  float: left;
+  text-align: left;
+}
+
 /* ---------- Color Form ----------- */
 
 .color-form #palette {
diff --git a/core/themes/bartik/css/style.css b/core/themes/bartik/css/style.css
index 44deab1..db19d88 100644
--- a/core/themes/bartik/css/style.css
+++ b/core/themes/bartik/css/style.css
@@ -1497,6 +1497,54 @@ div.admin-panel .description {
   width: auto;
 }
 
+/* ---------- Poll ----------- */
+
+.node .poll {
+  margin: 2em 0;
+}
+.node .poll #edit-choice {
+  margin: 0 0 1.5em;
+}
+.poll .vote-form {
+  text-align: left; /* LTR */
+  margin: 0;
+}
+.poll .percent {
+  font-size: 0.857em;
+  font-style: italic;
+  margin-bottom: 3em;
+  margin-top: -3.2em;
+  float: right; /* LTR */
+  text-align: right; /* LTR */
+}
+.poll .choice-title {
+  clear: right; /* LTR */
+}
+.poll .total {
+  font-size: 0.929em;
+  font-style: italic;
+  text-align: right; /* LTR */
+  clear: both;
+}
+.node .poll {
+  margin: 1.8em 0 0;
+}
+.node .poll .text {
+  margin-right: 6.75em;
+}
+.node .poll #edit-choice {
+  margin: 0 0 1.2em;
+}
+.poll .bar .foreground {
+  background-color: #666;
+}
+#footer-wrapper .poll .bar {
+  background-color: #666;
+}
+#footer-wrapper .poll .bar .foreground {
+  background-color: #ddd;
+}
+
 /* ---------- book ----------- */
 .book-navigation .menu {
   border-top: 1px solid #d6d6d6;
diff --git a/core/themes/seven/style.css b/core/themes/seven/style.css
index 8741599..9c4fff4 100644
--- a/core/themes/seven/style.css
+++ b/core/themes/seven/style.css
@@ -232,13 +232,13 @@ ul.primary {
   border-bottom: none;
   text-transform: uppercase;
   font-size: 0.923em;
+  height: 2.60em;
   margin: 0;
   padding-top: 0;
 }
 ul.primary li {
   float: left; /* LTR */
   list-style: none;
-  height: 2.60em;
   margin: 0 2px;
 }
 ul.primary li a:link,
@@ -249,7 +249,9 @@ ul.primary li a:hover,
 ul.primary li.active a {
   display: block;
   float: left; /* LTR */
-  padding: 0.615em 18px;
+  height: 2.60em;
+  line-height: 2.60em;
+  padding: 0 18px 8px;
   background-color: #a6a7a2;
   color: #000;
   font-weight: bold;
@@ -307,52 +309,6 @@ ul.secondary li.active a.active {
 #content {
   clear: left;
 }
-@media screen and (max-width:56.538em) { /* 735px */
-  .touch #branding {
-    padding-right: 0;
-    position: relative;
-  }
-  .touch ul.primary {
-    clear: both;
-    float: none;
-    margin-bottom: -3px;
-    overflow-x: scroll;
-    -webkit-overflow-scrolling: touch;
-    white-space: nowrap;
-    padding-right: 40px;
-  }
-  .touch #branding:after {
-    background-image: -moz-linear-gradient(360deg, rgba(224, 224, 216, 0), #E0E0D8 80%);
-    background-image: -o-linear-gradient(360deg, rgba(224, 224, 216, 0), #E0E0D8  80%);
-    background-image: -webkit-linear-gradient(360deg, rgba(224, 224, 216, 0), #E0E0D8 80%);
-    background-image: linear-gradient(360deg, rgba(224, 224, 216, 0), #E0E0D8 80%);
-    content: ' ';
-    display: block;
-    float: right;
-    height: 40px;
-    width: 80px;
-    position: relative;
-    right: 0;
-    top: -40px;
-    margin-bottom: -40px;
-  }
-  .touch ul.primary li {
-    float: none;
-    white-space: nowrap;
-  }
-  .touch ul.primary li a:link,
-  .touch ul.primary li a.active,
-  .touch ul.primary li a:active,
-  .touch ul.primary li a:visited,
-  .touch ul.primary li a:hover,
-  .touch ul.primary li.active a {
-    -webkit-box-sizing: border-box;
-    -moz-box-sizing: border-box;
-    box-sizing: border-box;
-    text-align: center;
-    width: 100%;
-  }
-}
 
 /**
  * Page layout.
@@ -550,6 +506,12 @@ details summary {
   padding-top: 0.5em;
   padding-bottom: 0.5em;
 }
+details details {
+  background-color: #fff;
+}
+details details details {
+  background-color: #f8f8f8;
+}
 
 /**
  * Form elements.
@@ -805,6 +767,7 @@ select.form-select:focus {
     overflow: hidden;
     text-overflow: ellipsis;
     white-space: nowrap;
+    width: 100%;
   }
   #dblog-filter-form .form-actions {
     float: none;
@@ -1443,65 +1406,3 @@ details.fieldset-no-legend {
 /* @end */
 
 /* @end */
-
-/**
- * Entity meta settings.
- */
-.entity-meta {
-  background-color: #e2e2e2;
-  border-bottom: 0;
-  border-left: 1px solid #a5a5a5;
-  border-right: 1px solid #a5a5a5;
-  border-top: 0;
-  -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, .15);
-  box-shadow:         inset 0 0 5px rgba(0, 0, 0, .15);
-  margin-top: 0;
-  padding-top: 0;
-}
-.entity-meta-header,
-.entity-meta details {
-  background-color: #f2f2f2;
-  border-top: 1px solid #a5a5a5;
-  border-bottom: 1px solid #a5a5a5;
-}
-.entity-meta-header {
-  padding: 1em 1.5em;
-}
-.entity-meta-header .published {
-  font-size: 1.231em;
-  font-weight: bold;
-  text-shadow: 0 1px 0 #fff;
-}
-.entity-meta-header .changed {
-  font-style: italic; /* As-designed, but really: why is this italic? */
-}
-.entity-meta details {
-  border-left: 0;
-  border-right: 0;
-  border-top: 1px solid #fff;
-  margin: 0;
-}
-.entity-meta details[open] {
-  background-color: transparent;
-  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, .15), transparent 5px);
-  background-image:    -moz-linear-gradient(top, rgba(0, 0, 0, .15), transparent 5px);
-  background-image:      -o-linear-gradient(top, rgba(0, 0, 0, .15), transparent 5px);
-  background-image:         linear-gradient(to bottom, rgba(0, 0, 0, .15), transparent 5px);
-  border-top-width: 0;
-  padding-top: 1px;
-}
-.entity-meta details[open] + [open] {
-  background-image: none;
-  border-top-width: 1px;
-  padding-top: 0;
-}
-.entity-meta details > .details-wrapper {
-  padding-top: 0;
-}
-.entity-meta details > summary {
-  padding: 0.85em 1.25em;
-  text-shadow: 0 1px 0 white;
-}
-.entity-meta details .summary {
-  display: none; /* Hide JS summaries. @todo Rethink summaries. */
-}
diff --git a/core/update.php b/core/update.php
index 1f7ac5f..17b44fd 100644
--- a/core/update.php
+++ b/core/update.php
@@ -333,15 +333,10 @@ function update_access_allowed() {
   // Calls to user_access() might fail during the Drupal 6 to 7 update process,
   // so we fall back on requiring that the user be logged in as user #1.
   try {
-    $module_handler = drupal_container()->get('module_handler');
-    $module_filenames = $module_handler->getModuleList();
-    $module_filenames['user'] = 'core/modules/user/user.module';
-    $module_handler->setModuleList($module_filenames);
-    $module_handler->reload();
-    drupal_container()->get('kernel')->updateModules($module_filenames, $module_filenames);
+    require_once DRUPAL_ROOT . '/' . drupal_get_path('module', 'user') . '/user.module';
     return user_access('administer software updates');
   }
-  catch (\Exception $e) {
+  catch (Exception $e) {
     return ($user->uid == 1);
   }
 }
@@ -440,14 +435,13 @@ function update_check_requirements($skip_warnings = FALSE) {
 
   // Load module basics.
   include_once DRUPAL_ROOT . '/core/includes/module.inc';
-  $module_list['system'] = 'core/modules/system/system.module';
-  $module_handler = drupal_container()->get('module_handler');
-  $module_handler->setModuleList($module_list);
-  $module_handler->load('system');
+  $module_list['system']['filename'] = 'core/modules/system/system.module';
+  module_list(NULL, $module_list);
+  drupal_load('module', 'system');
 
-  // Reset the module implementations cache so that any new hook implementations
+  // Reset the module_implements() cache so that any new hook implementations
   // in updated code are picked up.
-  $module_handler->resetImplementations();
+  module_implements_reset();
 
   // Set up $language, since the installer components require it.
   drupal_language_initialize();
diff --git a/core/vendor/autoload.php b/core/vendor/autoload.php
index b7e5745..622540f 100644
--- a/core/vendor/autoload.php
+++ b/core/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a::getLoader();
+return ComposerAutoloaderInit4f0cafaacf65c45167c785b9f087e425::getLoader();
diff --git a/core/vendor/composer/ClassLoader.php b/core/vendor/composer/ClassLoader.php
index 596c65d..a4a0dc5 100644
--- a/core/vendor/composer/ClassLoader.php
+++ b/core/vendor/composer/ClassLoader.php
@@ -75,64 +75,31 @@ public function addClassMap(array $classMap)
     }
 
     /**
-     * Registers a set of classes, merging with any others previously set.
+     * Registers a set of classes
      *
-     * @param string       $prefix  The classes prefix
-     * @param array|string $paths   The location(s) of the classes
-     * @param bool         $prepend Prepend the location(s)
+     * @param string       $prefix The classes prefix
+     * @param array|string $paths  The location(s) of the classes
      */
-    public function add($prefix, $paths, $prepend = false)
+    public function add($prefix, $paths)
     {
         if (!$prefix) {
-            if ($prepend) {
-                $this->fallbackDirs = array_merge(
-                    (array) $paths,
-                    $this->fallbackDirs
-                );
-            } else {
-                $this->fallbackDirs = array_merge(
-                    $this->fallbackDirs,
-                    (array) $paths
-                );
+            foreach ((array) $paths as $path) {
+                $this->fallbackDirs[] = $path;
             }
 
             return;
         }
-        if (!isset($this->prefixes[$prefix])) {
-            $this->prefixes[$prefix] = (array) $paths;
-
-            return;
-        }
-        if ($prepend) {
-            $this->prefixes[$prefix] = array_merge(
-                (array) $paths,
-                $this->prefixes[$prefix]
-            );
-        } else {
+        if (isset($this->prefixes[$prefix])) {
             $this->prefixes[$prefix] = array_merge(
                 $this->prefixes[$prefix],
                 (array) $paths
             );
+        } else {
+            $this->prefixes[$prefix] = (array) $paths;
         }
     }
 
     /**
-     * Registers a set of classes, replacing any others previously set.
-     *
-     * @param string       $prefix  The classes prefix
-     * @param array|string $paths   The location(s) of the classes
-     */
-    public function set($prefix, $paths)
-    {
-        if (!$prefix) {
-            $this->fallbackDirs = (array) $paths;
-
-            return;
-        }
-        $this->prefixes[$prefix] = (array) $paths;
-    }
-
-    /**
      * Turns on searching the include path for class files.
      *
      * @param bool $useIncludePath
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 913d6b8..4fa7f51 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -21,7 +21,7 @@
     'Guzzle\\Parser' => $vendorDir . '/guzzle/parser/',
     'Guzzle\\Http' => $vendorDir . '/guzzle/http/',
     'Guzzle\\Common' => $vendorDir . '/guzzle/common/',
-    'EasyRdf_' => $vendorDir . '/easyrdf/easyrdf/lib/',
     'Doctrine\\Common' => $vendorDir . '/doctrine/common/lib/',
     'Assetic' => $vendorDir . '/kriswallsmith/assetic/src/',
+    'EasyRdf_' => $vendorDir . '/njh/easyrdf/lib/',
 );
diff --git a/core/vendor/composer/autoload_real.php b/core/vendor/composer/autoload_real.php
index 5784e03..d492d5c 100644
--- a/core/vendor/composer/autoload_real.php
+++ b/core/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php generated by Composer
 
-class ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a
+class ComposerAutoloaderInit4f0cafaacf65c45167c785b9f087e425
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ public static function getLoader()
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a', 'loadClassLoader'));
+        spl_autoload_register(array('ComposerAutoloaderInit4f0cafaacf65c45167c785b9f087e425', 'loadClassLoader'));
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInitdff5596d4902476e49b77f22ebf69e4a', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit4f0cafaacf65c45167c785b9f087e425', 'loadClassLoader'));
 
         $vendorDir = dirname(__DIR__);
         $baseDir = dirname($vendorDir);
@@ -36,7 +36,7 @@ public static function getLoader()
             $loader->addClassMap($classMap);
         }
 
-        $loader->register(true);
+        $loader->register();
 
         return $loader;
     }
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index e8e495c..bb8d2e1 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -229,6 +229,237 @@
         ]
     },
     {
+        "name": "guzzle/common",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "target-dir": "Guzzle/Common",
+        "source": {
+            "type": "git",
+            "url": "git://github.com/guzzle/common.git",
+            "reference": "23162d56daa85b1ee6f1d73d9b5a5ecda2d70849"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://github.com/guzzle/common/archive/23162d56daa85b1ee6f1d73d9b5a5ecda2d70849.zip",
+            "reference": "23162d56daa85b1ee6f1d73d9b5a5ecda2d70849",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2",
+            "symfony/event-dispatcher": ">=2.1"
+        },
+        "time": "2012-12-06 02:26:39",
+        "type": "library",
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Guzzle\\Common": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "description": "Common libraries used by Guzzle",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "event",
+            "exception",
+            "common",
+            "collection"
+        ]
+    },
+    {
+        "name": "guzzle/stream",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "target-dir": "Guzzle/Stream",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/guzzle/stream",
+            "reference": "v3.0.5"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://github.com/guzzle/stream/archive/v3.0.5.zip",
+            "reference": "v3.0.5",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2",
+            "guzzle/common": "self.version"
+        },
+        "time": "2012-11-11 23:54:57",
+        "type": "library",
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Guzzle\\Stream": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "Guzzle stream wrapper component",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "stream",
+            "Guzzle",
+            "component"
+        ]
+    },
+    {
+        "name": "guzzle/parser",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "target-dir": "Guzzle/Parser",
+        "source": {
+            "type": "git",
+            "url": "git://github.com/guzzle/parser.git",
+            "reference": "v3.0.5"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://github.com/guzzle/parser/archive/v3.0.5.zip",
+            "reference": "v3.0.5",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2"
+        },
+        "time": "2012-11-19 00:07:13",
+        "type": "library",
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Guzzle\\Parser": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "description": "Interchangeable parsers used by Guzzle",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "http",
+            "url",
+            "message",
+            "cookie",
+            "URI Template"
+        ]
+    },
+    {
+        "name": "guzzle/http",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "target-dir": "Guzzle/Http",
+        "source": {
+            "type": "git",
+            "url": "git://github.com/guzzle/http.git",
+            "reference": "v3.0.5"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://github.com/guzzle/http/archive/v3.0.5.zip",
+            "reference": "v3.0.5",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2",
+            "guzzle/common": "self.version",
+            "guzzle/parser": "self.version",
+            "guzzle/stream": "self.version"
+        },
+        "time": "2012-11-18 05:28:55",
+        "type": "library",
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Guzzle\\Http": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Michael Dowling",
+                "email": "mtdowling@gmail.com",
+                "homepage": "https://github.com/mtdowling"
+            }
+        ],
+        "description": "HTTP libraries used by Guzzle",
+        "homepage": "http://guzzlephp.org/",
+        "keywords": [
+            "curl",
+            "http",
+            "http client",
+            "client",
+            "Guzzle"
+        ]
+    },
+    {
+        "name": "symfony-cmf/routing",
+        "version": "dev-master",
+        "version_normalized": "9999999-dev",
+        "target-dir": "Symfony/Cmf/Component/Routing",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony-cmf/Routing",
+            "reference": "1.0.0-alpha3"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://github.com/symfony-cmf/Routing/archive/1.0.0-alpha3.zip",
+            "reference": "1.0.0-alpha3",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.2",
+            "symfony/routing": ">=2.1,<2.3-dev",
+            "symfony/http-kernel": ">=2.1,<2.3-dev"
+        },
+        "time": "2012-12-16 17:52:57",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.0-dev"
+            }
+        },
+        "installation-source": "source",
+        "autoload": {
+            "psr-0": {
+                "Symfony\\Cmf\\Component\\Routing": ""
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony CMF Community",
+                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+            }
+        ],
+        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
+        "homepage": "http://cmf.symfony.com",
+        "keywords": [
+            "database",
+            "routing"
+        ]
+    },
+    {
         "name": "symfony/class-loader",
         "version": "dev-master",
         "version_normalized": "9999999-dev",
@@ -672,313 +903,5 @@
         ],
         "description": "Symfony Yaml Component",
         "homepage": "http://symfony.com"
-    },
-    {
-        "name": "guzzle/common",
-        "version": "v3.1.0",
-        "version_normalized": "3.1.0.0",
-        "target-dir": "Guzzle/Common",
-        "source": {
-            "type": "git",
-            "url": "git://github.com/guzzle/common.git",
-            "reference": "v3.1.0"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://github.com/guzzle/common/archive/v3.1.0.zip",
-            "reference": "v3.1.0",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.2",
-            "symfony/event-dispatcher": ">=2.1"
-        },
-        "time": "2013-01-13 05:14:34",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Guzzle\\Common": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "description": "Common libraries used by Guzzle",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "event",
-            "exception",
-            "common",
-            "collection"
-        ]
-    },
-    {
-        "name": "guzzle/stream",
-        "version": "v3.1.0",
-        "version_normalized": "3.1.0.0",
-        "target-dir": "Guzzle/Stream",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/guzzle/stream",
-            "reference": "v3.1.0"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://github.com/guzzle/stream/archive/v3.1.0.zip",
-            "reference": "v3.1.0",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.2",
-            "guzzle/common": "self.version"
-        },
-        "time": "2012-12-07 16:45:11",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Guzzle\\Stream": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
-            }
-        ],
-        "description": "Guzzle stream wrapper component",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "stream",
-            "Guzzle",
-            "component"
-        ]
-    },
-    {
-        "name": "guzzle/parser",
-        "version": "v3.1.0",
-        "version_normalized": "3.1.0.0",
-        "target-dir": "Guzzle/Parser",
-        "source": {
-            "type": "git",
-            "url": "git://github.com/guzzle/parser.git",
-            "reference": "v3.1.0"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://github.com/guzzle/parser/archive/v3.1.0.zip",
-            "reference": "v3.1.0",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.2"
-        },
-        "time": "2013-01-12 21:43:21",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Guzzle\\Parser": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "description": "Interchangeable parsers used by Guzzle",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "http",
-            "url",
-            "message",
-            "cookie",
-            "URI Template"
-        ]
-    },
-    {
-        "name": "guzzle/http",
-        "version": "v3.1.0",
-        "version_normalized": "3.1.0.0",
-        "target-dir": "Guzzle/Http",
-        "source": {
-            "type": "git",
-            "url": "git://github.com/guzzle/http.git",
-            "reference": "v3.1.0"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://github.com/guzzle/http/archive/v3.1.0.zip",
-            "reference": "v3.1.0",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.2",
-            "ext-curl": "*",
-            "guzzle/common": "self.version",
-            "guzzle/parser": "self.version",
-            "guzzle/stream": "self.version"
-        },
-        "time": "2013-01-13 05:09:32",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "3.0-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Guzzle\\Http": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Michael Dowling",
-                "email": "mtdowling@gmail.com",
-                "homepage": "https://github.com/mtdowling"
-            }
-        ],
-        "description": "HTTP libraries used by Guzzle",
-        "homepage": "http://guzzlephp.org/",
-        "keywords": [
-            "curl",
-            "http",
-            "http client",
-            "client",
-            "Guzzle"
-        ]
-    },
-    {
-        "name": "easyrdf/easyrdf",
-        "version": "dev-master",
-        "version_normalized": "9999999-dev",
-        "source": {
-            "type": "git",
-            "url": "git://github.com/njh/easyrdf.git",
-            "reference": "d1c363bd04cd55169fbefe52328e86031c6db3a2"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://github.com/njh/easyrdf/archive/d1c363bd04cd55169fbefe52328e86031c6db3a2.zip",
-            "reference": "d1c363bd04cd55169fbefe52328e86031c6db3a2",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.2.8"
-        },
-        "replace": {
-            "njh/easyrdf": "self.version"
-        },
-        "require-dev": {
-            "phpunit/phpunit": ">=3.5.15",
-            "squizlabs/php_codesniffer": ">=1.4.3",
-            "sami/sami": "dev-master"
-        },
-        "time": "2013-01-13 01:20:04",
-        "type": "library",
-        "installation-source": "source",
-        "autoload": {
-            "psr-0": {
-                "EasyRdf_": "lib/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "authors": [
-            {
-                "name": "Nicholas Humfrey",
-                "email": "njh@aelius.com",
-                "homepage": "http://www.aelius.com/njh/",
-                "role": "Developer"
-            }
-        ],
-        "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
-        "homepage": "http://www.easyrdf.org/",
-        "keywords": [
-            "rdfa",
-            "RDF",
-            "Semantic Web",
-            "Turtle",
-            "Linked Data"
-        ]
-    },
-    {
-        "name": "symfony-cmf/routing",
-        "version": "dev-master",
-        "version_normalized": "9999999-dev",
-        "target-dir": "Symfony/Cmf/Component/Routing",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/symfony-cmf/Routing",
-            "reference": "ea4a10"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://github.com/symfony-cmf/Routing/archive/ea4a10dd971580a9a57a69397f165e25233ba667.zip",
-            "reference": "ea4a10",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.2",
-            "symfony/routing": ">=2.1,<2.3-dev",
-            "symfony/http-kernel": ">=2.1,<2.3-dev"
-        },
-        "time": "2013-01-21 20:33:16",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.0-dev"
-            }
-        },
-        "installation-source": "source",
-        "autoload": {
-            "psr-0": {
-                "Symfony\\Cmf\\Component\\Routing": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Symfony CMF Community",
-                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
-            }
-        ],
-        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
-        "homepage": "http://cmf.symfony.com",
-        "keywords": [
-            "database",
-            "routing"
-        ]
     }
 ]
diff --git a/core/vendor/easyrdf/easyrdf/.gitignore b/core/vendor/easyrdf/easyrdf/.gitignore
deleted file mode 100644
index 83892d7..0000000
--- a/core/vendor/easyrdf/easyrdf/.gitignore
+++ /dev/null
@@ -1,9 +0,0 @@
-doap.rdf
-docs
-samicache
-lib/arc/
-reports
-*.tar.gz
-vendor
-composer.phar
-composer.lock
diff --git a/core/vendor/easyrdf/easyrdf/CHANGELOG.md b/core/vendor/easyrdf/easyrdf/CHANGELOG.md
deleted file mode 100644
index 482076e..0000000
--- a/core/vendor/easyrdf/easyrdf/CHANGELOG.md
+++ /dev/null
@@ -1,254 +0,0 @@
-EasyRdf 0.8.0
-=============
-
-API changes
------------
-* is_a() has been renamed to isA()
-
-Major new features
-------------------
-* Now PSR-2 compliant
-* Added RDFa parser
-
-Enhancements
-------------
-
-Bug Fixes
----------
-
-
-
-EasyRdf 0.7.2
-=============
-
-Enhancements
-------------
-* Removed automatic registration of ARC2 and librdf parsers and serialisers
-** You must now specifically choose the parser or serialiser
-* Refactored `EasyRdf_Literal` with datatypes so that it preserves exact value
-* Changed Turtle serialiser to not escape Unicode characters unnecessarily
-* Fix for escaping literals objects in Turtle serialiser
-* Added a new static function `newAndLoad()` to `EasyRdf_Graph`
-* Added setters for each of the components of the URI to the class `EasyRdf_ParsedUri`
-* Added option to the converter example, to allow raw output, without any HTML
-
-Bug Fixes
----------
-* Fixed broken Redland parser (thanks to Jon Phipps)
-* Fix for serialising two bnodes that reference each other in Turtle
-* Added support for parsing literals with single quotes in Turtle
-* Removed require for EasyRdf/Exception.php
-* Fix for serialising `EasyRdf_Literal_DateTime` to Turtle
-* Fix for serialising Turtle literals with a shorthand syntax
-* Several typo fixes and minor corrections
-
-
-EasyRdf 0.7.1
-=============
-
-Enhancements
-------------
-* Changed minimum version of PHPUnit to 3.5.15
-* Added RDFa namespace
-* Added Open Graph Protocol namespace
-* Made improvements to formatting of the Turtle serialiser
-* Added new splitUri() function to EasyRdf_Namespace
-* Made improvements to format guessing
-
-Bug Fixes
----------
-* Fix for RDF/XML parser not returning the number of triples
-* Added re-mapping of b-nodes to N-Triples and Redland parsers
-
-
-EasyRdf 0.7.0
-=============
-
-API Changes
------------
-* You must now wrap full property URIs in angle brackets
-
-Major new features
-------------------
-* Added a new pure-PHP Turtle parser
-* Added basic property-path support for traversing graphs
-* Added support for serialising to the GraphViz dot format (and generating images)
-* Added a new class `EasyRdf_ParsedUri` - a RFC3986 compliant URI parser
-
-Enhancements
-------------
-* The load() function in `EasyRdf_Graph` no-longer takes a $data argument
-* The parse() and load() methods, now return the number of triples parsed
-* Added count() method to `EasyRdf_Resource` and `EasyRdf_Graph`
-* Added localName() method to `EasyRdf_Resource`
-* Added htmlLink() method to `EasyRdf_Resource`
-* Added methods deleteResource() and deleteLiteral() to `EasyRdf_Graph`
-* Added support for guessing the file format based on the file extension
-* Performance improvements to built-in serialisers
-
-Environment changes
--------------------
-* Added PHP Composer description to the project
-* Now properly PSR-0 autoloader compatible
-* New minimum version of PHP is 5.2.8
-* Changed test suite to require PHPUnit 3.6
-* Changed from Phing to GNU Make based build system
-* Added automated testing of the examples
-
-Bug Fixes
----------
-* Fix for loading https:// URLs
-* Fix for storing the value 0 in a `EasyRdf_Graph`
-* Fix for HTTP servers that return relative URIs in the Location header
-* Fix for Literals with languages in the SPARQL Query Results XML Format
-* Fix for SPARQL servers that put extra whitespace into the XML result
-* Fix for the httpget.php example in PHP 5.4+
-
-
-EasyRdf 0.6.3
-=============
-* Added $graph->parseFile() method.
-* Added support for SSL (https) to the built-in HTTP client
-* Fixes for HTTP responses with a charset parameter in the Content Type.
-* Improved error handling and empty documents in JSON and rapper parsers.
-* Added connivence class for xsd:hexBinary literals:
-  - `EasyRdf_Literal_HexBinary`
-* Made EasyRdf more tolerant of 'badly serialised bnodes'
-* Fix for SPARQL servers that return charset in the MIME Type.
-* Fix for using xml:lang in SPARQL 1.1 Query Results JSON Format
-* Changed datetime ISO formatting to use 'Z' instead of +0000 for UTC dateTimes
-* Added the namespace for 'The Cert Ontology' to EasyRdf.
-
-
-EasyRdf 0.6.2
-=============
-* Bug fix for missing triples in the RDF/XML serialiser.
-* Added countTriples() method to `EasyRdf_Graph`.
-* Re-factored the mechanism for mapping RDF datatypes to PHP classes.
-* Added subclasses of `EasyRdf_Literal` for various XSD datatypes:
-  - `EasyRdf_Literal_Boolean`
-  - `EasyRdf_Literal_Date`
-  - `EasyRdf_Literal_DateTime`
-  - `EasyRdf_Literal_Decimal`
-  - `EasyRdf_Literal_Integer`
-* Made the Redland based parser write triples directly to `EasyRdf_Graph`
-* Added support for datatypes and languages in the `EasyRdf_Parser_Ntriples` parser.
-* Fix for parsing XML Literals in RDF/XML
-
-
-EasyRdf 0.6.1
-=============
-* Updated API documentation for new classes and methods added in 0.6.0
-* Added a description to the top of the source code for each example.
-* Changed the generated bnode identifier names from eidXXX to genidXXX.
-* Implemented inlining of resources in the RDF/XML serialiser.
-* Added new reversePropertyUris() method to `EasyRdf_Graph` and `EasyRdf_Resource`.
-* Added addType() and setType() to `EasyRdf_Resource`.
-* Added a textarea to the converter example.
-* Added support for parsing the json-triples format.
-* Renamed `EasyRdf_SparqlClient` to `EasyRdf_Sparql_Client`
-* Renamed `EasyRdf_SparqlResult` to `EasyRdf_Sparql_Result`
-* Fix for $graph->isEmpty() failing after adding and deleting some triples
-* Added new `EasyRdf_DatatypeMapper` class that allows you to map RDF datatypes to PHP classes.
-* Renamed guessDatatype() to getDatatypeForValue() in `EasyRdf_Literal`.
-* Added getResource() and allResources() to `EasyRdf_Graph` and `EasyRdf_Resource`
-* Implemented value casting in literals based on the datatype.
-
-
-EasyRdf 0.6.0
-=============
-* Major re-factor of the way data is stored internally in `EasyRdf_Graph`.
-* Parsing and serialising is now much faster and will enable further optimisations.
-* API is mostly backwards-compatible apart from:
-  - Changed inverse property operator from - to ^ to match Sparql 1.1 property paths.
-  - New `EasyRdf_Graphs` will not automatically be loaded on creation
-    You must now call $graph->load();
-  - Setting the default HTTP client is now part of a new `EasyRdf_Http` class
-  - It is no-longer possible to add multiple properties at once using an associative array.
-* Added methods to `EasyRdf_Graph` for direct manipulation of triples.
-* Added new `EasyRdf_GraphStore` - class for fetching, saving and deleting graphs to a Graph Store over HTTP.
-* Added new `EasyRdf_SparqlClient` and `EasyRdf_SparqlResult` - class for querying a SPARQL endpoint over HTTP.
-* Added q values for each Mime-Type associated with an `EasyRdf_Format`.
-* New example demonstrating integration with the Zend Framework.
-* New `EasyRdf_HTTP_MockClient` class makes testing easier.
-
-
-EasyRdf 0.5.2
-=============
-* Added a built-in RDF/XML parser
-* Made the RDF/XML serialiser use the rdf:type to open tags
-* Added support for comments in the N-Triples parser
-* Added new resolveUriReference() function to `EasyRdf_Utils`
-* Added the application/rdf+json and text/rdf+n3 mime types
-
-
-EasyRdf 0.5.1
-=============
-* Bug fixes for PHP 5.2
-
-
-EasyRdf 0.5.0
-=============
-* Added support for inverse properties.
-* Updated RDF/XML and Turtle serialisers to create new namespaces if possible.
-* Added new is_a($type) method to `EasyRdf_Resource`.
-* Added support for passing an array of properties to the get() method.
-* Added primaryTopic() method to `EasyRdf_Resource`.
-* The function label() in `EasyRdf_Resource` will no longer attempted to shorten the URI,
-  if there is no label available.
-* Resource types are now stored as resources, instead of shortened URIs.
-* Added support for deleting a specific value for property to `EasyRdf_Resource`.
-* Properties and datatypes are now stored as full URIs and not
-  converted to qnames during import.
-* Change the TypeMapper to store full URIs internally.
-* Added bibo and geo to the set of default namespaces.
-* Improved bnode links in dump format
-* Fix for converting non-string `EasyRdf_Literal` to string.
-* Created an example that resolves UK postcodes using uk-postcodes.com.
-
-
-EasyRdf 0.4.0
-=============
-* Moved source code to Github
-* Added an `EasyRdf_Literal` class
-* Added proper support for Datatypes and Languages
-* Added built-in RDF/XML serialiser
-* Added built-in Turtle serialiser
-* Added a new `EasyRdf_Format` class to deal with mime types etc.
-* finished a major refactoring of the Parser/Serialiser registration
-* removed all parsing related code from `EasyRdf_Graph`
-* Added a basic serialisation example
-* Added additional common namespaces
-* Test fixes
-
-
-EasyRdf 0.3.0
-=============
-* Generated Wiki pages from phpdoc
-* Filtering of literals by language
-* Moved parsers into `EasyRdf_Parser_XXX` namespace
-* Added support for serialisation
-* Wrote RDF generation example (foafmaker.php)
-* Added built-in ntriples parser/generator
-* Added built-in RDF/PHP serialiser
-* Added built-in RDF/JSON serialiser
-* Added SKOS and RSS to the set of default namespaces.
-
-
-EasyRdf 0.2.0
-=============
-* Added support for Redland PHP bindings
-* Added support for n-triples document type.
-* Improved blank node handing and added newBNode() method to `EasyRdf_Graph`.
-* Add option to `EasyRdf_RapperParser` to choose location of rapper command
-* Added Rails style HTML tag helpers to examples to make them simpler
-
-
-EasyRdf 0.1.0
-=============
-* First public release
-* Support for ARC2 and Rapper
-* Built-in HTTP Client
-* API Documentation
-* PHP Unit tests for every class.
-* Several usage examples
diff --git a/core/vendor/easyrdf/easyrdf/LICENSE.md b/core/vendor/easyrdf/easyrdf/LICENSE.md
deleted file mode 100644
index 274a8e6..0000000
--- a/core/vendor/easyrdf/easyrdf/LICENSE.md
+++ /dev/null
@@ -1,23 +0,0 @@
-LICENSE
-=======
-
-Copyright (c) 2009-2011 Nicholas J Humfrey.  All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
- * The name of the author 'Nicholas J Humfrey" may be used to endorse or promote products derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
diff --git a/core/vendor/easyrdf/easyrdf/Makefile b/core/vendor/easyrdf/easyrdf/Makefile
deleted file mode 100644
index fe45368..0000000
--- a/core/vendor/easyrdf/easyrdf/Makefile
+++ /dev/null
@@ -1,136 +0,0 @@
-PACKAGE = easyrdf
-VERSION = $(shell php -r "print json_decode(file_get_contents('composer.json'))->version;")
-distdir = $(PACKAGE)-$(VERSION)
-PHP = $(shell which php)
-COMPOSER_FLAGS=--no-ansi --no-interaction
-PHPUNIT = vendor/bin/phpunit 
-PHPUNIT_FLAGS = -c config/phpunit.xml
-PHPCS = vendor/bin/phpcs
-PHPCS_FLAGS = --standard=./config/phpcs_ruleset.xml --encoding=utf8 --extensions=php
-SAMI = vendor/bin/sami.php
-
-EXAMPLE_FILES = examples/*.php
-SOURCE_FILES = lib/EasyRdf.php \
-               lib/EasyRdf/*.php \
-               lib/EasyRdf/*/*.php
-TEST_FILES = test/*/*Test.php \
-             test/*/*/*Test.php
-TEST_SUPPORT = Makefile test/cli_example_wrapper.php \
-               test/TestHelper.php \
-               test/EasyRdf/TestCase.php \
-               test/EasyRdf/Http/MockClient.php \
-               test/EasyRdf/Serialiser/NtriplesArray.php \
-               test/fixtures/*
-DOC_FILES = composer.json \
-            doap.rdf \
-            docs/api \
-            README.md \
-            LICENSE.md \
-            CHANGELOG.md
-
-DISTFILES = $(EXAMPLE_FILES) $(SOURCE_FILES) $(TEST_FILES) \
-            $(TEST_SUPPORT) $(DOC_FILES)
-
-.DEFAULT: help
-all: help
-
-# TARGET:test                Run all the PHPUnit tests
-.PHONY: test
-test: $(PHPUNIT)
-	mkdir -p reports
-	$(PHP) $(PHPUNIT) $(PHPUNIT_FLAGS)
-
-# TARGET:test-examples       Run PHPUnit tests for each of the examples
-.PHONY: test-examples
-test-examples: $(PHPUNIT)
-	mkdir -p reports
-	$(PHP) $(PHPUNIT) $(PHPUNIT_FLAGS) --testsuite "EasyRdf Examples"
-
-# TARGET:test-lib            Run PHPUnit tests for the library
-.PHONY: test-lib
-test-lib: $(PHPUNIT)
-	mkdir -p reports
-	$(PHP) $(PHPUNIT) $(PHPUNIT_FLAGS) --testsuite "EasyRdf Library"
-
-# TARGET:coverage            Run the library tests and generate a code coverage report
-.PHONY: coverage
-coverage: $(PHPUNIT)
-	mkdir -p reports/coverage
-	$(PHP) $(PHPUNIT) $(PHPUNIT_FLAGS) --coverage-html ./reports/coverage --testsuite "EasyRdf Library"
-
-# TARGET:apidocs             Generate HTML API documentation
-.PHONY: apidocs
-apidocs: $(SAMI)
-	$(PHP) $(SAMI) update config/sami.php -n -v --force
-
-docs/api: apidocs
-
-doap.rdf: doap.php composer.json
-	$(PHP) doap.php > doap.rdf
-
-# TARGET:cs                  Check the code style of the PHP source code
-.PHONY: cs
-cs: $(PHPCS)
-	$(PHPCS) $(PHPCS_FLAGS) lib test
-
-# TARGET:lint                Perform basic PHP syntax check on all files
-.PHONY: lint
-lint: $(EXAMPLE_FILES) $(SOURCE_FILES) $(TEST_FILES)
-	@for file in $^; do  \
-	  $(PHP) -l $$file || exit -1; \
-	done
-
-# TARGET:dist                Build tarball for distribution
-.PHONY: dist
-dist: $(distdir)
-	tar zcf $(distdir).tar.gz $(distdir)
-	rm -Rf $(distdir)
-	@echo "Created $(distdir).tar.gz"
-
-$(distdir): $(DISTFILES)
-	@for file in $^; do  \
-		dir=$(distdir)/`dirname "$$file"`; \
-		test -d "$$dir" || mkdir -p "$$dir" || exit -1; \
-		cp -Rfp "$$file" "$(distdir)/$$file" || exit -1; \
-	done
-
-# TARGET:clean               Delete any temporary and generated files
-.PHONY: clean
-clean:
-	-rm -Rf $(distdir) reports vendor
-	-rm -Rf docs/api samicache
-	-rm -f composer.phar composer.lock
-	-rm -f doap.rdf
-
-# TARGET:check-fixme         Scan for files containing the words TODO or FIXME
-.PHONY: check-fixme
-check-fixme:
-	@git grep -n -E 'FIXME|TODO' || echo "No FIXME or TODO lines found."
-
-# TARGET:help                You're looking at it!
-.PHONY: help
-help:
-	# Usage:
-	#   make <target> [OPTION=value]
-	#
-	# Targets:
-	@egrep "^# TARGET:" [Mm]akefile | sed 's/^# TARGET:/#   /'
-	#
-	# Options:
-	#   PHP                 Path to php
-
-
-
-# Composer rules
-composer.phar:
-	curl -s -z composer.phar -o composer.phar http://getcomposer.org/composer.phar
-
-composer-install: composer.phar
-	$(PHP) composer.phar $(COMPOSER_FLAGS) install --dev
-
-composer-update: clean composer.phar
-	$(PHP) composer.phar $(COMPOSER_FLAGS) update --dev
-
-vendor/bin/phpunit: composer-install
-vendor/bin/phpcs: composer-install
-vendor/bin/sami.php: composer-install
diff --git a/core/vendor/easyrdf/easyrdf/README.md b/core/vendor/easyrdf/easyrdf/README.md
deleted file mode 100644
index 3a71ccd..0000000
--- a/core/vendor/easyrdf/easyrdf/README.md
+++ /dev/null
@@ -1,136 +0,0 @@
-EasyRdf
-=======
-EasyRdf is a PHP library designed to make it easy to consume and produce [RDF].
-It was designed for use in mixed teams of experienced and inexperienced RDF
-developers. It is written in Object Oriented PHP and has been tested
-extensively using PHPUnit.
-
-After parsing EasyRdf builds up a graph of PHP objects that can then be walked
-around to get the data to be placed on the page. Dump methods are available to
-inspect what data is available during development.
-
-Data is typically loaded into a [EasyRdf_Graph] object from source RDF
-documents, loaded from the web via HTTP. The [EasyRdf_GraphStore] class
-simplifies loading and saving data to a SPARQL 1.1 Graph Store.
-
-SPARQL queries can be made over HTTP to a Triplestore using the
-[EasyRdf_Sparql_Client] class. SELECT and ASK queries will return an
-[EasyRdf_Sparql_Result] object and CONSTRUCT and DESCRIBE queries will return
-an [EasyRdf_Graph] object.
-
-### Example ###
-
-    $foaf = new EasyRdf_Graph("http://njh.me/foaf.rdf");
-    $foaf->load();
-    $me = $foaf->primaryTopic();
-    echo "My name is: ".$me->get('foaf:name')."\n";
-
-
-Downloads
----------
-
-The latest version of EasyRdf can be [downloaded from GitHub].
-
-
-Links
------
-
-* [EasyRdf Homepage](http://www.easyrdf.org/)
-* [API documentation](http://www.easyrdf.org/docs/api/)
-* [Change Log](http://github.com/njh/easyrdf/blob/master/CHANGELOG.md)
-* Source Code: <http://github.com/njh/easyrdf>
-* Issue Tracker: <http://github.com/njh/easyrdf/issues>
-
-
-Requirements
-------------
-
-* PHP 5.2.8 or higher
-
-
-Features
---------
-
-* API documentation written in phpdoc
-* Extensive unit tests written using phpunit
-  * Automated testing against PHP 5.2, 5.3 and 5.4
-* Built-in parsers and serialisers: RDF/JSON, N-Triples, RDF/XML, Turtle
-* Optional parsing support for: [ARC2], [Redland Bindings], [rapper]
-* Optional support for [Zend_Http_Client]
-* No required external dependancies upon other libraries (PEAR, Zend, etc...)
-* Complies with Zend Framework coding style.
-* Type mapper - resources of type foaf:Person can be mapped into PHP object of class Foaf_Person
-* Support for visualisation of graphs using [GraphViz]
-* Comes with a number of examples
-
-
-Property Paths
---------------
-
-EasyRdf supports querying the data in a graph using basic property paths.
-This is a small subset of the property paths described in [SPARQL 1.1 query language].
-
-
-You may use the caret character (^) to get an inverse property, for example:
-
-    $person = $homepage->get('^foaf:homepage');
-
-You can use the pipe character (|) to get alternate properties, for example:
-
-    $title = $document->get('dc:title|dc11:title');
-
-You can use a forward slash (/) to follow a property sequence, for example to get
-the names of all my friends:
-
-    $names = $me->all('foaf:knows/foaf:name');
-
-Finally, in order to use a full property URI, enclose it in angle brackets:
-
-    $name = $me->get('<http://xmlns.com/foaf/0.1/name>');
-
-
-More Examples
--------------
-
-* [artistinfo.php](https://github.com/njh/easyrdf/blob/master/examples/artistinfo.php#slider) - Example of mapping an RDF class type to a PHP Class
-* [basic.php](https://github.com/njh/easyrdf/blob/master/examples/basic.php#slider) - Basic "Hello World" type example
-* [basic_sparql.php](https://github.com/njh/easyrdf/blob/master/examples/basic_sparql.php#slider) - Example of making a SPARQL SELECT query
-* [converter.php](https://github.com/njh/easyrdf/blob/master/examples/converter.php#slider) - Convert RDF from one format to another
-* [dump.php](https://github.com/njh/easyrdf/blob/master/examples/dump.php#slider) - Display the contents of a graph
-* [foafinfo.php](https://github.com/njh/easyrdf/blob/master/examples/foafinfo.php#slider) - Display the basic information in a FOAF document
-* [foafmaker.php](https://github.com/njh/easyrdf/blob/master/examples/foafmaker.php#slider) - Construct a FOAF document with a choice of serialisations
-* [graph_direct.php](https://github.com/njh/easyrdf/blob/master/examples/graph_direct.php#slider) - Example of using EasyRdf_Graph directly without EasyRdf_Resource
-* [graphstore.php](https://github.com/njh/easyrdf/blob/master/examples/graphstore.php#slider) - Store and retrieve data from a SPARQL 1.1 Graph Store
-* [graphviz.php](https://github.com/njh/easyrdf/blob/master/examples/graphviz.php#slider) - GraphViz rendering example
-* [html_tag_helpers.php](https://github.com/njh/easyrdf/blob/master/examples/html_tag_helpers.php#slider) - Rails Style html tag helpers to make the EasyRdf examples simplier
-* [httpget.php](https://github.com/njh/easyrdf/blob/master/examples/httpget.php#slider) - No RDF, just test EasyRdf_Http_Client
-* [serialise.php](https://github.com/njh/easyrdf/blob/master/examples/serialise.php#slider) - Basic serialisation example
-* [sparql_queryform.php](https://github.com/njh/easyrdf/blob/master/examples/sparql_queryform.php#slider) - Form to submit SPARQL queries and display the result
-* [uk_postcode.php](https://github.com/njh/easyrdf/blob/master/examples/uk_postcode.php#slider) - Example of resolving UK postcodes using uk-postcodes.com
-* [villages.php](https://github.com/njh/easyrdf/blob/master/examples/villages.php#slider) - Fetch and information about villages in Fife from dbpedialite.org
-* [zend_framework.php](https://github.com/njh/easyrdf/blob/master/examples/zend_framework.php#slider) - Example of using Zend_Http_Client and Zend_Loader_Autoloader with EasyRdf
-
-
-Licensing
----------
-
-The EasyRdf library and tests are licensed under the [BSD-3-Clause] license.
-The examples are in the public domain, for more information see [UNLICENSE].
-
-
-
-[EasyRdf_Graph]:http://www.easyrdf.org/docs/api/EasyRdf_Graph.html
-[EasyRdf_GraphStore]:http://www.easyrdf.org/docs/api/EasyRdf_GraphStore.html
-[EasyRdf_Sparql_Client]:http://www.easyrdf.org/docs/api/EasyRdf_Sparql_Client.html
-[EasyRdf_Sparql_Result]:http://www.easyrdf.org/docs/api/EasyRdf_Sparql_Result.html
-
-[ARC2]:http://github.com/semsol/arc2/
-[BSD-3-Clause]:http://www.opensource.org/licenses/BSD-3-Clause
-[downloaded from github]:https://github.com/njh/easyrdf/downloads
-[GraphViz]:http://www.graphviz.org/
-[rapper]:http://librdf.org/raptor/rapper.html
-[RDF]:http://en.wikipedia.org/wiki/Resource_Description_Framework
-[Redland Bindings]:http://librdf.org/bindings/
-[SPARQL 1.1 query language]:http://www.w3.org/TR/sparql11-query/
-[UNLICENSE]:http://unlicense.org/
-[Zend_Http_Client]:http://framework.zend.com/manual/en/zend.http.client.html
diff --git a/core/vendor/easyrdf/easyrdf/composer.json b/core/vendor/easyrdf/easyrdf/composer.json
deleted file mode 100644
index 8ce254e..0000000
--- a/core/vendor/easyrdf/easyrdf/composer.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-    "name": "easyrdf/easyrdf",
-    "description": "EasyRdf is a PHP library designed to make it easy to consume and produce RDF.",
-    "version": "0.8.0",
-    "type": "library",
-    "keywords": ["RDF", "Semantic Web", "Linked Data", "Turtle", "RDFa"],
-    "homepage": "http://www.easyrdf.org/",
-    "license": "BSD-3-Clause",
-    "authors": [
-        {
-            "name": "Nicholas Humfrey",
-            "email": "njh@aelius.com",
-            "homepage": "http://www.aelius.com/njh/",
-            "role": "Developer"
-        }
-    ],
-    "support": {
-        "forum": "http://groups.google.com/group/easyrdf/",
-        "issues": "http://github.com/njh/easyrdf/issues",
-        "irc": "irc://chat.freenode.net/easyrdf"
-    },
-    "require": {
-        "php": ">=5.2.8"
-    },
-    "require-dev": {
-        "phpunit/PHPUnit": ">=3.5.15",
-        "squizlabs/php_codesniffer": ">=1.4.3",
-        "sami/sami": "dev-master"
-    },
-    "replace": {
-        "njh/easyrdf": "self.version"
-    },
-    "autoload": {
-        "psr-0": { "EasyRdf_": "lib/" }
-    }
-}
diff --git a/core/vendor/easyrdf/easyrdf/doap.php b/core/vendor/easyrdf/easyrdf/doap.php
deleted file mode 100644
index 60274ff..0000000
--- a/core/vendor/easyrdf/easyrdf/doap.php
+++ /dev/null
@@ -1,46 +0,0 @@
-<?php
-    set_include_path(get_include_path() . PATH_SEPARATOR . './lib/');
-    require_once "EasyRdf.php";
-
-    // Load some properties from the composer file
-    $composer = json_decode(file_get_contents('composer.json'));
-
-    // Start building up a RDF graph
-    $doap = new EasyRdf_Graph($composer->homepage.'doap.rdf');
-    $easyrdf = $doap->resource('#easyrdf', 'doap:Project', 'foaf:Project');
-    $easyrdf->addLiteral('doap:name',  'EasyRDF');
-    $easyrdf->addLiteral('doap:shortname', 'easyrdf');
-    $easyrdf->addLiteral('doap:revision', $composer->version);
-    $easyrdf->addLiteral('doap:shortdesc', $composer->description, 'en');
-    $easyrdf->addResource('doap:homepage', $composer->homepage);
-
-    $easyrdf->addLiteral('doap:programming-language', 'PHP');
-    $easyrdf->addLiteral(
-        'doap:description', 'EasyRdf is a PHP library designed to make it easy to consume and produce RDF. '.
-        'It was designed for use in mixed teams of experienced and inexperienced RDF developers. '.
-        'It is written in Object Oriented PHP and has been tested extensively using PHPUnit.', 'en'
-    );
-    $easyrdf->addResource('doap:license', 'http://usefulinc.com/doap/licenses/bsd');
-    $easyrdf->addResource('doap:download-page', 'http://github.com/njh/easyrdf/downloads');
-    $easyrdf->addResource('doap:download-page', 'http://github.com/njh/easyrdf/downloads');
-    $easyrdf->addResource('doap:bug-database', 'http://github.com/njh/easyrdf/issues');
-    $easyrdf->addResource('doap:mailing-list', 'http://groups.google.com/group/easyrdf');
-
-    $easyrdf->addResource('doap:category', 'http://dbpedia.org/resource/Resource_Description_Framework');
-    $easyrdf->addResource('doap:category', 'http://dbpedia.org/resource/PHP');
-    $easyrdf->addResource('doap:category', 'http://dbpedialite.org/things/24131#id');
-    $easyrdf->addResource('doap:category', 'http://dbpedialite.org/things/53847#id');
-
-    $repository = $doap->newBNode('doap:GitRepository');
-    $repository->addResource('doap:browse', 'http://github.com/njh/easyrdf');
-    $repository->addResource('doap:location', 'git://github.com/njh/easyrdf.git');
-    $easyrdf->addResource('doap:repository', $repository);
-
-    $njh = $doap->resource('http://njh.me/', 'foaf:Person');
-    $njh->addLiteral('foaf:name', 'Nicholas J Humfrey');
-    $njh->addResource('foaf:homepage', 'http://www.aelius.com/njh/');
-    $easyrdf->add('doap:maintainer', $njh);
-    $easyrdf->add('doap:developer', $njh);
-    $easyrdf->add('foaf:maker', $njh);
-
-    print $doap->serialise('rdfxml');
diff --git a/core/vendor/guzzle/common/Guzzle/Common/Collection.php b/core/vendor/guzzle/common/Guzzle/Common/Collection.php
index d0857b2..b82df13 100644
--- a/core/vendor/guzzle/common/Guzzle/Common/Collection.php
+++ b/core/vendor/guzzle/common/Guzzle/Common/Collection.php
@@ -355,36 +355,21 @@ public function set($key, $value)
      */
     public function inject($input)
     {
-        $replace = array();
-        foreach ($this->data as $key => $val) {
-            $replace['{' . $key . '}'] = $val;
-        }
-
-        return strtr($input, $replace);
+        // Only perform the preg callback if needed
+        return strpos($input, '{') === false
+            ? $input
+            : preg_replace_callback('/{\s*([A-Za-z_\-\.0-9]+)\s*}/', array($this, 'getPregMatchValue'), $input);
     }
 
     /**
-     * Gets a value from the collection using an array path (e.g. foo/baz/bar would retrieve bar from two nested arrays)
+     * Return a collection value for a match array of a preg_replace function
      *
-     * @param string $path      Path to traverse and retrieve a value from
-     * @param string $separator Character used to add depth to the search
+     * @param array $matches preg_replace* matches
      *
-     * @return mixed|null
+     * @return mixed
      */
-    public function getPath($path, $separator = '/')
+    public function getPregMatchValue(array $matches)
     {
-        $parts = explode($separator, $path);
-        $data = &$this->data;
-
-        // Using an iterative approach rather than recursion for speed
-        while (null !== ($part = array_shift($parts))) {
-            // Return null if this path doesn't exist or if there's more depth and the value is not an array
-            if (!isset($data[$part]) || ($parts && !is_array($data[$part]))) {
-                return null;
-            }
-            $data = &$data[$part];
-        }
-
-        return $data;
+        return $this->get($matches[1]);
     }
 }
diff --git a/core/vendor/guzzle/common/Guzzle/Common/Exception/ExceptionCollection.php b/core/vendor/guzzle/common/Guzzle/Common/Exception/ExceptionCollection.php
index 76d499e..52473e8 100644
--- a/core/vendor/guzzle/common/Guzzle/Common/Exception/ExceptionCollection.php
+++ b/core/vendor/guzzle/common/Guzzle/Common/Exception/ExceptionCollection.php
@@ -13,20 +13,6 @@ class ExceptionCollection extends \Exception implements GuzzleException, \Iterat
     protected $exceptions = array();
 
     /**
-     * Set all of the exceptions
-     *
-     * @param array $exceptions Array of exceptions
-     *
-     * @return self
-     */
-    public function setExceptions(array $exceptions)
-    {
-        $this->exceptions = $exceptions;
-
-        return $this;
-    }
-
-    /**
      * Add exceptions to the collection
      *
      * @param ExceptionCollection|\Exception $e Exception to add
@@ -69,14 +55,4 @@ public function getIterator()
     {
         return new \ArrayIterator($this->exceptions);
     }
-
-    /**
-     * Get the first exception in the collection
-     *
-     * @return \Exception
-     */
-    public function getFirst()
-    {
-        return $this->exceptions ? $this->exceptions[0] : null;
-    }
 }
diff --git a/core/vendor/guzzle/common/Guzzle/Common/Version.php b/core/vendor/guzzle/common/Guzzle/Common/Version.php
index 8fd9512..5383311 100644
--- a/core/vendor/guzzle/common/Guzzle/Common/Version.php
+++ b/core/vendor/guzzle/common/Guzzle/Common/Version.php
@@ -7,5 +7,6 @@
  */
 class Version
 {
-    const VERSION = '3.1.0';
+    const VERSION = '3.0.5';
 }
+
diff --git a/core/vendor/guzzle/common/Guzzle/Common/composer.json b/core/vendor/guzzle/common/Guzzle/Common/composer.json
index 5693c4d..62431cc 100644
--- a/core/vendor/guzzle/common/Guzzle/Common/composer.json
+++ b/core/vendor/guzzle/common/Guzzle/Common/composer.json
@@ -11,10 +11,5 @@
     "autoload": {
         "psr-0": { "Guzzle\\Common": "" }
     },
-    "target-dir": "Guzzle/Common",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.0-dev"
-        }
-    }
+    "target-dir": "Guzzle/Common"
 }
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Client.php b/core/vendor/guzzle/http/Guzzle/Http/Client.php
index d38ae14..2bb814f 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Client.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Client.php
@@ -75,7 +75,7 @@ public function __construct($baseUrl = '', $config = null)
         // Allow ssl.certificate_authority config setting to control the certificate authority used by curl
         $authority = $this->config->get(self::SSL_CERT_AUTHORITY);
         // Use the system's cacert if in a phar (curl can't read from a phar stream wrapper)
-        if (strpos(__FILE__, 'phar://') !== false && (null === $authority || $authority === true)) {
+        if (strpos(__FILE__, 'phar://') === false && $authority === true) {
             $authority = 'system';
         }
         // Set the config setting to system to use the certificate authority bundle on your system
@@ -362,13 +362,18 @@ public function send($requests)
         try {
             $curlMulti->send();
         } catch (ExceptionCollection $e) {
-            throw $multipleRequests ? $e : $e->getFirst();
+            throw $multipleRequests ? $e : $e->getIterator()->offsetGet(0);
         }
 
         if (!$multipleRequests) {
             return end($requests)->getResponse();
         } else {
-            return array_map(function ($request) { return $request->getResponse(); }, $requests);
+            return array_map(
+                function ($request) {
+                    return $request->getResponse();
+                },
+                $requests
+            );
         }
     }
 
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlHandle.php b/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlHandle.php
index 53cfbfc..ffb704c 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlHandle.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlHandle.php
@@ -208,6 +208,7 @@ public static function factory(RequestInterface $request)
         // Apply the options to a new cURL handle.
         $handle = curl_init();
         curl_setopt_array($handle, $curlOptions);
+        $request->getParams()->set('curl.last_options', $curlOptions);
 
         if ($tempContentLength) {
             $request->setHeader('Content-Length', $tempContentLength);
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php b/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php
index ceceb90..3744d7c 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php
@@ -3,7 +3,7 @@
 namespace Guzzle\Http\Curl;
 
 use Guzzle\Common\AbstractHasDispatcher;
-use Guzzle\Http\Exception\MultiTransferException;
+use Guzzle\Common\Exception\ExceptionCollection;
 use Guzzle\Http\Exception\CurlException;
 use Guzzle\Http\Message\RequestInterface;
 
@@ -126,7 +126,7 @@ public function __construct()
         class_exists('Guzzle\Http\Message\Response');
         class_exists('Guzzle\Http\Exception\CurlException');
 
-        $this->createMultiHandle();
+        $this->createMutliHandle();
     }
 
     /**
@@ -246,7 +246,7 @@ public function reset($hard = false)
         }
 
         if ($hard) {
-            $this->createMultiHandle();
+            $this->createMutliHandle();
         }
     }
 
@@ -257,11 +257,10 @@ public function send()
     {
         $this->scope++;
         $this->state = self::STATE_SENDING;
-        $requestsInScope = empty($this->requests[$this->scope]) ? array() : $this->requests[$this->scope];
 
         // Only prepare and send requests that are in the current recursion scope
         // Only enter the main perform() loop if there are requests in scope
-        if ($requestsInScope) {
+        if (!empty($this->requests[$this->scope])) {
 
             // Any exceptions thrown from this event should break the entire flow of sending requests
             $this->dispatch(self::BEFORE_SEND, array(
@@ -277,14 +276,20 @@ public function send()
             try {
                 $this->perform();
             } catch (\Exception $e) {
-                $this->exceptions[] = array('request' => null, 'exception' => $e);
+                $this->exceptions[] = $e;
             }
         }
 
         $this->scope--;
 
-        // Aggregate exceptions into a MultiTransferException if needed
-        $multiException = $this->buildMultiTransferException($requestsInScope);
+        // Aggregate exceptions into an ExceptionCollection
+        $exceptionCollection = null;
+        if (!empty($this->exceptions)) {
+            $exceptionCollection = new ExceptionCollection('Errors during multi transfer');
+            while ($e = array_shift($this->exceptions)) {
+                $exceptionCollection->add($e);
+            }
+        }
 
         // Complete the transfer if this is not a nested scope
         if ($this->scope == -1) {
@@ -294,8 +299,8 @@ public function send()
         }
 
         // Throw any exceptions that were encountered
-        if ($multiException) {
-            throw $multiException;
+        if ($exceptionCollection) {
+            throw $exceptionCollection;
         }
     }
 
@@ -308,43 +313,6 @@ public function count()
     }
 
     /**
-     * Build a MultiTransferException if needed
-     *
-     * @param array $requestsInScope All requests in the previous scope
-     *
-     * @return MultiTransferException|null
-     */
-    protected function buildMultiTransferException(array $requestsInScope)
-    {
-        if (empty($this->exceptions)) {
-            return null;
-        }
-
-        // Keep a list of all requests, and remove errored requests from the list
-        $store = new \SplObjectStorage();
-        foreach ($requestsInScope as $request) {
-            $store->attach($request);
-        }
-
-        $multiException = new MultiTransferException('Errors during multi transfer');
-        while ($e = array_shift($this->exceptions)) {
-            $multiException->add($e['exception']);
-            if (isset($e['request'])) {
-                $multiException->addFailedRequest($e['request']);
-                // Remove from the total list so that it becomes a list of successful requests
-                unset($store[$e['request']]);
-            }
-        }
-
-        // Add successful requests
-        foreach ($store as $request) {
-            $multiException->addSuccessfulRequest($request);
-        }
-
-        return $multiException;
-    }
-
-    /**
      * Prepare for sending
      *
      * @param RequestInterface $request Request to prepare
@@ -411,53 +379,43 @@ protected function perform()
 
         // Create the polling event external to the loop
         $event = array('curl_multi' => $this);
-        $active = $this->executeHandles();
 
         while (1) {
 
-            $this->processMessages();
+            $active = $this->executeHandles();
+
+            // Get messages from curl handles
+            while ($done = curl_multi_info_read($this->multiHandle)) {
+                $request = $this->resourceHash[(int) $done['handle']];
+                $handle = $this->handles[$request];
+                try {
+                    $this->processResponse($request, $handle, $done);
+                } catch (\Exception $e) {
+                    $this->removeErroredRequest($request, $e);
+                }
+            }
+
+            // Notify each request as polling and handled queued responses
+            $scopedPolling = $this->scope <= 0 ? $this->all() : $this->requests[$this->scope];
 
             // Exit the function if there are no more requests to send
-            if (!($scopedPolling = $this->scope <= 0 ? $this->all() : $this->requests[$this->scope])) {
+            if (empty($scopedPolling)) {
                 break;
             }
 
-            // Notify each request as polling
-            $blocking = $total = 0;
+            // Notify all requests that requests are being polled
             foreach ($scopedPolling as $request) {
                 $event['request'] = $request;
                 $request->dispatch(self::POLLING_REQUEST, $event);
-                ++$total;
-                // The blocking variable just has to be non-falsey to block the loop
-                if ($request->getParams()->hasKey(self::BLOCKING)) {
-                    ++$blocking;
-                }
             }
 
-            if ($blocking == $total) {
-                // Sleep to prevent eating CPU because no requests are actually pending a select call
-                usleep(500);
-            } else {
+            if ($active) {
                 // Select the curl handles until there is any activity on any of the open file descriptors
                 // See https://github.com/php/php-src/blob/master/ext/curl/multi.c#L170
-                $active = $this->executeHandles(true, 0.02, $active);
-            }
-        }
-    }
-
-    /**
-     * Process any received curl multi messages
-     */
-    private function processMessages()
-    {
-        // Get messages from curl handles
-        while ($done = curl_multi_info_read($this->multiHandle)) {
-            try {
-                $request = $this->resourceHash[(int) $done['handle']];
-                $handle = $this->handles[$request];
-                $this->processResponse($request, $handle, $done);
-            } catch (\Exception $e) {
-                $this->removeErroredRequest($request, $e);
+                $active = $this->executeHandles(true, 0.1);
+            } else {
+                // Sleep to prevent eating CPU because no requests are actually pending a select call
+                usleep(500);
             }
         }
     }
@@ -467,27 +425,29 @@ private function processMessages()
      *
      * @param bool $select  Set to TRUE to select the file descriptors
      * @param int  $timeout Select timeout in seconds
-     * @param int  $active  Previous active value
      *
      * @return int Returns the number of active handles
      */
-    private function executeHandles($select = false, $timeout = 1, $active = 0)
+    private function executeHandles($select = false, $timeout = 1)
     {
+        $active = $selectResult = 0;
+
         do {
-            // @codeCoverageIgnoreStart
-            if ($select && $active && curl_multi_select($this->multiHandle, $timeout) == -1) {
-                // Perform a usleep if a previously executed select returned -1
-                // @see https://bugs.php.net/bug.php?id=61141
-                usleep(125);
+
+            if ($select) {
+                $selectResult = curl_multi_select($this->multiHandle, $timeout);
+            }
+
+            if ($selectResult === 0) {
+                do {
+                    $mrc = curl_multi_exec($this->multiHandle, $active);
+                } while ($mrc == CURLM_CALL_MULTI_PERFORM);
+                // Check the return value to ensure an error did not occur
+                $this->checkCurlResult($mrc);
             }
-            // @codeCoverageIgnoreEnd
-            do {
-                $mrc = curl_multi_exec($this->multiHandle, $active);
-            } while ($mrc == CURLM_CALL_MULTI_PERFORM);
-            // Check the return value to ensure an error did not occur
-            $this->checkCurlResult($mrc);
+
         // Poll once if not selecting, or poll until there are no handles with activity
-        } while ($select && $active);
+        } while ($select && $active && $selectResult == 0);
 
         return $active;
     }
@@ -500,7 +460,7 @@ private function executeHandles($select = false, $timeout = 1, $active = 0)
      */
     protected function removeErroredRequest(RequestInterface $request, \Exception $e)
     {
-        $this->exceptions[] = array('request' => $request, 'exception' => $e);
+        $this->exceptions[] = $e;
         $this->remove($request);
         $request->setState(RequestInterface::STATE_ERROR);
         $this->dispatch(self::MULTI_EXCEPTION, array(
@@ -530,7 +490,7 @@ protected function processResponse(RequestInterface $request, CurlHandle $handle
         $this->removeHandle($request);
 
         if (!$curlException) {
-            $request->setState(RequestInterface::STATE_COMPLETE, array('handle' => $handle));
+            $request->setState(RequestInterface::STATE_COMPLETE);
             // Only remove the request if it wasn't resent as a result of the state change
             if ($request->getState() != RequestInterface::STATE_TRANSFER) {
                 $this->remove($request);
@@ -592,11 +552,11 @@ private function isCurlException(RequestInterface $request, CurlHandle $handle,
         }
 
         $handle->setErrorNo($curl['result']);
-        $e = new CurlException(sprintf('[curl] %s: %s [url] %s',
-            $handle->getErrorNo(), $handle->getError(), $handle->getUrl()));
+        $e = new CurlException(sprintf('[curl] %s: %s [url] %s [info] %s [debug] %s',
+            $handle->getErrorNo(), $handle->getError(), $handle->getUrl(),
+            var_export($handle->getInfo(), true), $handle->getStderr()));
         $e->setCurlHandle($handle)
           ->setRequest($request)
-          ->setCurlInfo($handle->getInfo())
           ->setError($handle->getError(), $handle->getErrorNo());
 
         return $e;
@@ -612,17 +572,19 @@ private function isCurlException(RequestInterface $request, CurlHandle $handle,
     private function checkCurlResult($code)
     {
         if ($code != CURLM_OK && $code != CURLM_CALL_MULTI_PERFORM) {
-            throw new CurlException(isset($this->multiErrors[$code])
-                ? "cURL error: {$code} ({$this->multiErrors[$code][0]}): cURL message: {$this->multiErrors[$code][1]}"
-                : 'Unexpected cURL error: ' . $code
-            );
+            if (isset($this->multiErrors[$code])) {
+                $message = "cURL error: {$code} ({$this->multiErrors[$code][0]}): cURL message: {$this->multiErrors[$code][1]}";
+            } else {
+                $message = 'Unexpected cURL error: ' . $code;
+            }
+            throw new CurlException($message);
         }
     }
 
     /**
      * Create the new cURL multi handle with error checking
      */
-    private function createMultiHandle()
+    private function createMutliHandle()
     {
         if ($this->multiHandle && is_resource($this->multiHandle)) {
             curl_multi_close($this->multiHandle);
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMultiInterface.php b/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMultiInterface.php
index ff39a1a..17cd684 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMultiInterface.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Curl/CurlMultiInterface.php
@@ -17,7 +17,6 @@
     const ADD_REQUEST = 'curl_multi.add_request';
     const REMOVE_REQUEST = 'curl_multi.remove_request';
     const MULTI_EXCEPTION = 'curl_multi.exception';
-    const BLOCKING = 'curl_multi.blocking';
 
     const STATE_IDLE = 'idle';
     const STATE_SENDING = 'sending';
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Exception/CurlException.php b/core/vendor/guzzle/http/Guzzle/Http/Exception/CurlException.php
index a6a744a..39a5468 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Exception/CurlException.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Exception/CurlException.php
@@ -7,12 +7,11 @@
 /**
  * cURL request exception
  */
-class CurlException extends RequestException
+class CurlException extends BadResponseException
 {
     private $curlError;
     private $curlErrorNo;
     private $handle;
-    private $curlInfo = array();
 
     /**
      * Set the cURL error message
@@ -57,7 +56,7 @@ public function getCurlHandle()
     /**
      * Get the associated cURL error message
      *
-     * @return string|null
+     * @return string
      */
     public function getError()
     {
@@ -67,35 +66,10 @@ public function getError()
     /**
      * Get the associated cURL error number
      *
-     * @return int|null
+     * @return int
      */
     public function getErrorNo()
     {
         return $this->curlErrorNo;
     }
-
-    /**
-     * Returns curl information about the transfer
-     *
-     * @return array
-     */
-    public function getCurlInfo()
-    {
-        return $this->curlInfo;
-    }
-
-    /**
-     * Set curl transfer information
-     *
-     * @param array $info Array of curl transfer information
-     *
-     * @return self
-     * @link http://php.net/manual/en/function.curl-getinfo.php
-     */
-    public function setCurlInfo(array $info)
-    {
-        $this->curlInfo = $info;
-
-        return $this;
-    }
 }
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Exception/MultiTransferException.php b/core/vendor/guzzle/http/Guzzle/Http/Exception/MultiTransferException.php
deleted file mode 100644
index 27e4e58..0000000
--- a/core/vendor/guzzle/http/Guzzle/Http/Exception/MultiTransferException.php
+++ /dev/null
@@ -1,101 +0,0 @@
-<?php
-
-namespace Guzzle\Http\Exception;
-
-use Guzzle\Common\Exception\ExceptionCollection;
-use Guzzle\Http\Message\RequestInterface;
-
-/**
- * Exception encountered during a multi transfer
- */
-class MultiTransferException extends ExceptionCollection
-{
-    protected $successfulRequests = array();
-    protected $failedRequests = array();
-
-    /**
-     * Get all of the requests in the transfer
-     *
-     * @return array
-     */
-    public function getAllRequests()
-    {
-        return array_merge($this->successfulRequests, $this->failedRequests);
-    }
-
-    /**
-     * Add to the array of successful requests
-     *
-     * @param RequestInterface $request Successful request
-     *
-     * @return self
-     */
-    public function addSuccessfulRequest(RequestInterface $request)
-    {
-        $this->successfulRequests[] = $request;
-
-        return $this;
-    }
-
-    /**
-     * Add to the array of failed requests
-     *
-     * @param RequestInterface $request Failed request
-     *
-     * @return self
-     */
-    public function addFailedRequest(RequestInterface $request)
-    {
-        $this->failedRequests[] = $request;
-
-        return $this;
-    }
-
-    /**
-     * Set all of the successful requests
-     *
-     * @param array Array of requests
-     *
-     * @return self
-     */
-    public function setSuccessfulRequests(array $requests)
-    {
-        $this->successfulRequests = $requests;
-
-        return $this;
-    }
-
-    /**
-     * Set all of the failed requests
-     *
-     * @param array Array of requests
-     *
-     * @return self
-     */
-    public function setFailedRequests(array $requests)
-    {
-        $this->failedRequests = $requests;
-
-        return $this;
-    }
-
-    /**
-     * Get an array of successful requests sent in the multi transfer
-     *
-     * @return array
-     */
-    public function getSuccessfulRequests()
-    {
-        return $this->successfulRequests;
-    }
-
-    /**
-     * Get an array of failed requests sent in the multi transfer
-     *
-     * @return array
-     */
-    public function getFailedRequests()
-    {
-        return $this->failedRequests;
-    }
-}
diff --git a/core/vendor/guzzle/http/Guzzle/Http/IoEmittingEntityBody.php b/core/vendor/guzzle/http/Guzzle/Http/IoEmittingEntityBody.php
deleted file mode 100644
index 15193c1..0000000
--- a/core/vendor/guzzle/http/Guzzle/Http/IoEmittingEntityBody.php
+++ /dev/null
@@ -1,100 +0,0 @@
-<?php
-
-namespace Guzzle\Http;
-
-use Guzzle\Common\Event;
-use Guzzle\Common\HasDispatcherInterface;
-use Symfony\Component\EventDispatcher\EventDispatcher;
-use Symfony\Component\EventDispatcher\EventSubscriberInterface;
-use Symfony\Component\EventDispatcher\EventDispatcherInterface;
-
-/**
- * EntityBody decorator that emits events for read and write methods
- */
-class IoEmittingEntityBody extends AbstractEntityBodyDecorator implements HasDispatcherInterface
-{
-    /**
-     * @var EventDispatcherInterface
-     */
-    protected $eventDispatcher;
-
-    /**
-     * {@inheritdoc}
-     */
-    public static function getAllEvents()
-    {
-        return array('body.read', 'body.write');
-    }
-
-    /**
-     * {@inheritdoc}
-     * @codeCoverageIgnore
-     */
-    public function setEventDispatcher(EventDispatcherInterface $eventDispatcher)
-    {
-        $this->eventDispatcher = $eventDispatcher;
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getEventDispatcher()
-    {
-        if (!$this->eventDispatcher) {
-            $this->eventDispatcher = new EventDispatcher();
-        }
-
-        return $this->eventDispatcher;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function dispatch($eventName, array $context = array())
-    {
-        $this->getEventDispatcher()->dispatch($eventName, new Event($context));
-    }
-
-    /**
-     * {@inheritdoc}
-     * @codeCoverageIgnore
-     */
-    public function addSubscriber(EventSubscriberInterface $subscriber)
-    {
-        $this->getEventDispatcher()->addSubscriber($subscriber);
-
-        return $this;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function read($length)
-    {
-        $event = array(
-            'body'   => $this,
-            'length' => $length,
-            'read'   => $this->body->read($length)
-        );
-        $this->dispatch('body.read', $event);
-
-        return $event['read'];
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function write($string)
-    {
-        $event = array(
-            'body'   => $this,
-            'write'  => $string,
-            'result' => $this->body->write($string)
-        );
-        $this->dispatch('body.write', $event);
-
-        return $event['result'];
-    }
-}
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Message/EntityEnclosingRequest.php b/core/vendor/guzzle/http/Guzzle/Http/Message/EntityEnclosingRequest.php
index 46bd515..21019e4 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Message/EntityEnclosingRequest.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Message/EntityEnclosingRequest.php
@@ -61,9 +61,9 @@ public function __toString()
     /**
      * {@inheritdoc}
      */
-    public function setState($state, array $context = array())
+    public function setState($state)
     {
-        parent::setState($state, $context);
+        parent::setState($state);
         if ($state == self::STATE_TRANSFER && !$this->body && !count($this->postFields) && !count($this->postFiles)) {
             $this->setHeader('Content-Length', 0)->removeHeader('Transfer-Encoding');
         }
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Message/Request.php b/core/vendor/guzzle/http/Guzzle/Http/Message/Request.php
index a41b933..59b7b0d 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Message/Request.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Message/Request.php
@@ -5,7 +5,6 @@
 use Guzzle\Common\Event;
 use Guzzle\Common\Collection;
 use Guzzle\Common\Exception\RuntimeException;
-use Guzzle\Common\Exception\InvalidArgumentException;
 use Guzzle\Http\Utils;
 use Guzzle\Http\Exception\RequestException;
 use Guzzle\Http\Exception\BadResponseException;
@@ -457,13 +456,13 @@ public function getState()
     /**
      * {@inheritdoc}
      */
-    public function setState($state, array $context = array())
+    public function setState($state)
     {
         $this->state = $state;
         if ($this->state == self::STATE_NEW) {
             $this->response = null;
         } elseif ($this->state == self::STATE_COMPLETE) {
-            $this->processResponse($context);
+            $this->processResponse();
             $this->responseBody = null;
         }
 
@@ -543,18 +542,9 @@ public function setResponse(Response $response, $queued = false)
     /**
      * {@inheritdoc}
      */
-    public function setResponseBody($body)
+    public function setResponseBody(EntityBodyInterface $body)
     {
-        // Attempt to open a file for writing if a string was passed
-        if (is_string($body)) {
-            // @codeCoverageIgnoreStart
-            if (!($body = fopen($body, 'w+'))) {
-                throw new InvalidArgumentException('Could not open ' . $body . ' for writing');
-            }
-            // @codeCoverageIgnoreEnd
-        }
-
-        $this->responseBody = EntityBody::factory($body);
+        $this->responseBody = $body;
 
         return $this;
     }
@@ -725,11 +715,9 @@ protected function getEventArray()
     /**
      * Process a received response
      *
-     * @param array $context Contextual information
-     *
      * @throws BadResponseException on unsuccessful responses
      */
-    protected function processResponse(array $context = array())
+    protected function processResponse()
     {
         // Use the queued response if one is set
         if ($this->getParams()->get('queued_response')) {
@@ -746,7 +734,7 @@ protected function processResponse(array $context = array())
         $this->state = self::STATE_COMPLETE;
 
         // A request was sent, but we don't know if we'll send more or if the final response will be successful
-        $this->dispatch('request.sent', $this->getEventArray() + $context);
+        $this->dispatch('request.sent', $this->getEventArray());
 
         // Some response processors will remove the response or reset the state (example: ExponentialBackoffPlugin)
         if ($this->state == RequestInterface::STATE_COMPLETE) {
diff --git a/core/vendor/guzzle/http/Guzzle/Http/Message/RequestInterface.php b/core/vendor/guzzle/http/Guzzle/Http/Message/RequestInterface.php
index 3928e4e..05bafc5 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/Message/RequestInterface.php
+++ b/core/vendor/guzzle/http/Guzzle/Http/Message/RequestInterface.php
@@ -233,12 +233,11 @@ public function getState();
     /**
      * Set the state of the request
      *
-     * @param string $state   State of the request (complete, sending, or new)
-     * @param array  $context Contextual information about the state change
+     * @param string $state State of the request (complete, sending, or new)
      *
      * @return RequestInterface
      */
-    public function setState($state, array $context = array());
+    public function setState($state);
 
     /**
      * Get the cURL options that will be applied when the cURL handle is created
@@ -262,11 +261,11 @@ public function receiveResponseHeader($data);
      * This method should be invoked when you need to send the response's entity body somewhere other than the normal
      * php://temp buffer. For example, you can send the entity body to a socket, file, or some other custom stream.
      *
-     * @param EntityBodyInterface|string|resource $body Response body object. Pass a string to attempt to store the
-     *                                                  response body in a local file.
+     * @param EntityBodyInterface $body Response body object
+     *
      * @return Request
      */
-    public function setResponseBody($body);
+    public function setResponseBody(EntityBodyInterface $body);
 
     /**
      * Determine if the response body is repeatable (readable + seekable)
diff --git a/core/vendor/guzzle/http/Guzzle/Http/composer.json b/core/vendor/guzzle/http/Guzzle/Http/composer.json
index b824003..a55a855 100644
--- a/core/vendor/guzzle/http/Guzzle/Http/composer.json
+++ b/core/vendor/guzzle/http/Guzzle/Http/composer.json
@@ -13,7 +13,6 @@
     ],
     "require": {
         "php": ">=5.3.2",
-        "ext-curl": "*",
         "guzzle/common": "self.version",
         "guzzle/parser": "self.version",
         "guzzle/stream": "self.version"
@@ -21,10 +20,5 @@
     "autoload": {
         "psr-0": { "Guzzle\\Http": "" }
     },
-    "target-dir": "Guzzle/Http",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.0-dev"
-        }
-    }
+    "target-dir": "Guzzle/Http"
 }
diff --git a/core/vendor/guzzle/parser/Guzzle/Parser/UriTemplate/UriTemplate.php b/core/vendor/guzzle/parser/Guzzle/Parser/UriTemplate/UriTemplate.php
index 00d2310..93ee40b 100644
--- a/core/vendor/guzzle/parser/Guzzle/Parser/UriTemplate/UriTemplate.php
+++ b/core/vendor/guzzle/parser/Guzzle/Parser/UriTemplate/UriTemplate.php
@@ -186,7 +186,7 @@ private function expandMatch(array $matches)
 
                 if (empty($variable)) {
                     $actuallyUseQueryString = false;
-                } elseif ($value['modifier'] == '*') {
+                } else if ($value['modifier'] == '*') {
                     $expanded = implode($joiner, $kvp);
                     if ($isAssoc) {
                         // Don't prepend the value name when using the explode modifier with an associative array
diff --git a/core/vendor/guzzle/parser/Guzzle/Parser/composer.json b/core/vendor/guzzle/parser/Guzzle/Parser/composer.json
index 9c10342..898ff50 100644
--- a/core/vendor/guzzle/parser/Guzzle/Parser/composer.json
+++ b/core/vendor/guzzle/parser/Guzzle/Parser/composer.json
@@ -10,10 +10,5 @@
     "autoload": {
         "psr-0": { "Guzzle\\Parser": "" }
     },
-    "target-dir": "Guzzle/Parser",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.0-dev"
-        }
-    }
+    "target-dir": "Guzzle/Parser"
 }
diff --git a/core/vendor/guzzle/stream/Guzzle/Stream/composer.json b/core/vendor/guzzle/stream/Guzzle/Stream/composer.json
index 99edfe8..6c2cc38 100644
--- a/core/vendor/guzzle/stream/Guzzle/Stream/composer.json
+++ b/core/vendor/guzzle/stream/Guzzle/Stream/composer.json
@@ -18,10 +18,5 @@
     "autoload": {
         "psr-0": { "Guzzle\\Stream": "" }
     },
-    "target-dir": "Guzzle/Stream",
-    "extra": {
-        "branch-alias": {
-            "dev-master": "3.0-dev"
-        }
-    }
+    "target-dir": "Guzzle/Stream"
 }
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf.php b/core/vendor/njh/easyrdf/lib/EasyRdf.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Exception.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Exception.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Exception.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Exception.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Format.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Format.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Format.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Format.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Graph.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Graph.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Graph.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Graph.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/GraphStore.php b/core/vendor/njh/easyrdf/lib/EasyRdf/GraphStore.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/GraphStore.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/GraphStore.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Http.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Http.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Client.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Http/Client.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Client.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Http/Client.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Response.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Http/Response.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Http/Response.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Http/Response.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Boolean.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Boolean.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Boolean.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Boolean.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Date.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Date.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Date.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Date.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/DateTime.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/DateTime.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/DateTime.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/DateTime.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Decimal.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Decimal.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Decimal.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Decimal.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HTML.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/HTML.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HTML.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/HTML.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HexBinary.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/HexBinary.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/HexBinary.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/HexBinary.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Integer.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Integer.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/Integer.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/Integer.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/XML.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Literal/XML.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Literal/XML.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Literal/XML.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Namespace.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Namespace.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Namespace.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Namespace.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/ParsedUri.php b/core/vendor/njh/easyrdf/lib/EasyRdf/ParsedUri.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/ParsedUri.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/ParsedUri.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Arc.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Arc.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Arc.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Arc.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Json.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Json.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Json.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Json.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Ntriples.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Ntriples.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Ntriples.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Ntriples.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rapper.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Rapper.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rapper.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Rapper.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfPhp.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/RdfPhp.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfPhp.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/RdfPhp.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfXml.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/RdfXml.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/RdfXml.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/RdfXml.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rdfa.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Rdfa.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Rdfa.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Rdfa.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Redland.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Redland.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Redland.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Redland.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Turtle.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Turtle.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Parser/Turtle.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Parser/Turtle.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Resource.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Resource.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Resource.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Resource.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Arc.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Arc.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Arc.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Arc.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/GraphViz.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Json.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Json.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Json.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Json.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Ntriples.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Rapper.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Rapper.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Rapper.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Rapper.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/RdfPhp.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/RdfXml.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Turtle.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Turtle.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Serialiser/Turtle.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Serialiser/Turtle.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Client.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Sparql/Client.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Client.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Sparql/Client.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Result.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Sparql/Result.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Sparql/Result.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Sparql/Result.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/TypeMapper.php b/core/vendor/njh/easyrdf/lib/EasyRdf/TypeMapper.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/TypeMapper.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/TypeMapper.php
diff --git a/core/vendor/easyrdf/easyrdf/lib/EasyRdf/Utils.php b/core/vendor/njh/easyrdf/lib/EasyRdf/Utils.php
similarity index 100%
rename from core/vendor/easyrdf/easyrdf/lib/EasyRdf/Utils.php
rename to core/vendor/njh/easyrdf/lib/EasyRdf/Utils.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.gitignore b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.gitignore
deleted file mode 100644
index c089b09..0000000
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-phpunit.xml
-composer.lock
-/vendor/
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.travis.yml b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.travis.yml
index 48403e9..8bae46c 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.travis.yml
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.travis.yml
@@ -1,9 +1,5 @@
 language: php
 
-php:
-    - 5.3
-    - 5.4
-
 env:
   - SYMFONY_VERSION=2.1.*
   - SYMFONY_VERSION=dev-master
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php
index 0d09558..6160fc3 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php
@@ -135,7 +135,7 @@ public function match($url)
     {
         $methodNotAllowed = null;
 
-        /** @var $router RouterInterface */
+        /** @var $router ChainedRouterInterface */
         foreach ($this->all() as $router) {
             try {
                 return $router->match($url);
@@ -196,13 +196,13 @@ public function matchRequest(Request $request)
      */
     public function generate($name, $parameters = array(), $absolute = false)
     {
-        /** @var $router RouterInterface */
+        /** @var $router ChainedRouterInterface */
         foreach ($this->all() as $router) {
 
             // if $name and $router does not implement ChainedRouterInterface and $name is not a string, continue
             // if $name and $router does not implement ChainedRouterInterface and $name is string but does not match a default Symfony2 route name, continue
             if ($name && !$router instanceof ChainedRouterInterface) {
-                if (!is_string($name) || !preg_match(VersatileGeneratorInterface::CORE_NAME_PATTERN, $name)) {
+                if (!is_string($name) || !preg_match('/^[a-z0-9A-Z_.]+$/', $name)) {
                     continue;
                 }
             }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainedRouterInterface.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainedRouterInterface.php
index 0c6d192..a4247aa 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainedRouterInterface.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainedRouterInterface.php
@@ -5,9 +5,21 @@
 use Symfony\Component\Routing\RouterInterface;
 
 /**
- * Interface to combine the VersatileGeneratorInterface with the RouterInterface
+ * Use this interface on custom routers that can handle non-string route
+ * "names".
  */
-interface ChainedRouterInterface extends RouterInterface, VersatileGeneratorInterface
+interface ChainedRouterInterface extends RouterInterface
 {
-    // nothing new to add
+    /**
+     * Whether the router supports the thing in $name to generate a route.
+     *
+     * This check does not need to look if the specific instance can be
+     * resolved to a route, only whether the router can generate routes from
+     * objects of this class.
+
+     * @param mixed $name The route name or route object
+     *
+     * @return bool
+     */
+    public function supports($name);
 }
\ No newline at end of file
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DynamicRouter.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DynamicRouter.php
index 2a1b936..44407e0 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DynamicRouter.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DynamicRouter.php
@@ -18,7 +18,7 @@
  * A flexible router accepting matcher and generator through injection and
  * using the RouteEnhancer concept to generate additional data on the routes.
  *
- * @author Larry Garfield
+ * @author Crell
  * @author David Buchmann
  */
 class DynamicRouter implements RouterInterface, RequestMatcherInterface, ChainedRouterInterface
@@ -130,18 +130,14 @@ public function generate($name, $parameters = array(), $absolute = false)
     }
 
     /**
-     * Delegate to our generator
+     * Support any string as route name
      *
      * {@inheritDoc}
      */
     public function supports($name)
     {
-        if ($this->generator instanceof VersatileGeneratorInterface) {
-
-            return $this->generator->supports($name);
-        }
-
-        return (!is_string($name) || !preg_match(VersatileGeneratorInterface::CORE_NAME_PATTERN, $name));
+        // TODO: check $this->generator instanceof VersatileGeneratorInterface
+        return $this->generator->supports($name);
     }
 
     /**
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/ConfigurableUrlMatcher.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/ConfigurableUrlMatcher.php
index 40b7711..e1e17b5 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/ConfigurableUrlMatcher.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/ConfigurableUrlMatcher.php
@@ -36,19 +36,17 @@ public function finalMatch(RouteCollection $collection, Request $request)
         $attributes = $matcher->match($request->getPathInfo());
 
         // cleanup route attributes
-        if (! isset($attributes[RouteObjectInterface::ROUTE_OBJECT])
-            || ! $attributes[RouteObjectInterface::ROUTE_OBJECT] instanceof Route
-        ) {
-            $name = $attributes['_route']; // this is the field coming from symfony core
-            $route = $collection->get($name);
-            $attributes[RouteObjectInterface::ROUTE_OBJECT] = $route;
+        if (! isset($attributes['_route']) || ! $attributes['_route'] instanceof Route) {
+            $name = $attributes['_route'];
+            $route = $collection->get($attributes['_route']);
+            $attributes['_route'] = $route;
 
             if ($route instanceof RouteObjectInterface && is_string($route->getRouteKey())) {
                 $name = $route->getRouteKey();
             }
 
-            if (is_string($name)) {
-                $attributes[RouteObjectInterface::ROUTE_NAME] = $name;
+            if (empty($attributes['_route_name']) && is_string($name)) {
+                $attributes['_route_name'] = $name;
             }
         }
 
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/UrlMatcher.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/UrlMatcher.php
index aac6fe7..09bb2c4 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/UrlMatcher.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/UrlMatcher.php
@@ -39,8 +39,8 @@ protected function getAttributes(Route $route, $name, array $attributes)
         if ($route instanceof RouteObjectInterface && is_string($route->getRouteKey())) {
             $name = $route->getRouteKey();
         }
-        $attributes[RouteObjectInterface::ROUTE_NAME] = $name;
-        $attributes[RouteObjectInterface::ROUTE_OBJECT] = $route;
+        $attributes['_route_name'] = $name;
+        $attributes['_route'] = $route;
         return $this->mergeDefaults($attributes, $route->getDefaults());
     }
 }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ProviderBasedGenerator.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ProviderBasedGenerator.php
index 9607135..1c353f8 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ProviderBasedGenerator.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ProviderBasedGenerator.php
@@ -16,7 +16,7 @@
  *
  * @author Larry Garfield
  */
-class ProviderBasedGenerator extends UrlGenerator implements VersatileGeneratorInterface
+class ProviderBasedGenerator extends UrlGenerator
 {
     /**
      * The route provider for this generator.
@@ -46,13 +46,13 @@ public function generate($name, $parameters = array(), $absolute = false)
         $compiledRoute = $route->compile();
 
         // handle symfony 2.1 and 2.2
-        // getHostTokens exists only since 2.2
-        $hostTokens = null;
-        if (method_exists($compiledRoute, 'getHostTokens')) {
-            $hostTokens = $compiledRoute->getHostTokens();
+        // getHostnameTokens exists only since 2.2
+        $hostnameTokens = null;
+        if (method_exists($compiledRoute, 'getHostnameTokens')) {
+            $hostnameTokens = $compiledRoute->getHostnameTokens();
         }
 
-        return $this->doGenerate($compiledRoute->getVariables(), $route->getDefaults(), $route->getRequirements(), $compiledRoute->getTokens(), $parameters, $name, $absolute, $hostTokens);
+        return $this->doGenerate($compiledRoute->getVariables(), $route->getDefaults(), $route->getRequirements(), $compiledRoute->getTokens(), $parameters, $name, $absolute, $hostnameTokens);
     }
 
     /**
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteObjectInterface.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteObjectInterface.php
index cd455e1..496e3cc 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteObjectInterface.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteObjectInterface.php
@@ -17,16 +17,6 @@
 interface RouteObjectInterface
 {
     /**
-     * Field name that will hold the route name that was matched.
-     */
-    const ROUTE_NAME = '_route';
-
-    /**
-     * Field name of the route object that was matched.
-     */
-    const ROUTE_OBJECT = '_route_object';
-
-    /**
      * Constant for the field that is given to the ControllerAliasMapper.
      * The value must be configured in the controllers_by_alias mapping.
      *
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteContentEnhancerTest.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteContentEnhancerTest.php
index f097e85..df9008a 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteContentEnhancerTest.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteContentEnhancerTest.php
@@ -5,7 +5,6 @@
 use Symfony\Component\HttpFoundation\Request;
 
 use Symfony\Cmf\Component\Routing\Enhancer\RouteContentEnhancer;
-use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 
 use Symfony\Cmf\Component\Routing\Test\CmfUnitTestCase;
 
@@ -23,7 +22,7 @@ public function setUp()
         $this->document = $this->buildMock('Symfony\\Cmf\\Component\\Routing\\Tests\\Enhancer\\RouteObject',
                                             array('getRouteContent', 'getRouteDefaults', 'getUrl'));
 
-        $this->mapper = new RouteContentEnhancer(RouteObjectInterface::ROUTE_OBJECT, '_content');
+        $this->mapper = new RouteContentEnhancer('_route', '_content');
 
         $this->request = Request::create('/test');
     }
@@ -35,8 +34,8 @@ public function testContent()
             ->method('getRouteContent')
             ->will($this->returnValue($targetDocument));
 
-        $defaults = array(RouteObjectInterface::ROUTE_OBJECT => $this->document);
-        $expected = array(RouteObjectInterface::ROUTE_OBJECT => $this->document, '_content' => $targetDocument);
+        $defaults = array('_route' => $this->document);
+        $expected = array('_route' => $this->document, '_content' => $targetDocument);
 
         $this->assertEquals($expected, $this->mapper->enhance($defaults, $this->request));
     }
@@ -48,7 +47,7 @@ public function testFieldAlreadyThere()
             ->method('getRouteContent')
         ;
 
-        $defaults = array(RouteObjectInterface::ROUTE_OBJECT => $this->document, '_content' => 'foo');
+        $defaults = array('_route' => $this->document, '_content' => 'foo');
 
         $this->assertEquals($defaults, $this->mapper->enhance($defaults, $this->request));
     }
@@ -59,13 +58,13 @@ public function testNoContent()
             ->method('getRouteContent')
             ->will($this->returnValue(null));
 
-        $defaults = array(RouteObjectInterface::ROUTE_OBJECT => $this->document);
+        $defaults = array('_route' => $this->document);
         $this->assertEquals($defaults, $this->mapper->enhance($defaults, $this->request));
     }
 
     public function testNoCmfRoute()
     {
-        $defaults = array(RouteObjectInterface::ROUTE_OBJECT => $this->buildMock('Symfony\\Component\\Routing\\Route'));
+        $defaults = array('_route' => $this->buildMock('Symfony\\Component\\Routing\\Route'));
         $this->assertEquals($defaults, $this->mapper->enhance($defaults, $this->request));
     }
 }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/ConfigurableUrlMatcherTest.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/ConfigurableUrlMatcherTest.php
index 1d672ad..18bcae7 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/ConfigurableUrlMatcherTest.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/ConfigurableUrlMatcherTest.php
@@ -51,12 +51,7 @@ public function testMatch()
             ->method('getDefaults')
             ->will($this->returnValue(array('foo' => 'bar')))
         ;
-        $this->routeDocument->expects($this->any())
-            ->method('getRouteKey')
-            ->will($this->returnValue('/routes/company/more'))
-        ;
 
-        // add some other routes to the collection
         $mockCompiled = $this->buildMock('Symfony\\Component\\Routing\\CompiledRoute');
         $mockCompiled->expects($this->any())
             ->method('getStaticPrefix')
@@ -67,7 +62,6 @@ public function testMatch()
             ->method('compile')
             ->will($this->returnValue($mockCompiled))
         ;
-
         $routeCollection = new RouteCollection();
         $routeCollection->add('some', $mockRoute);
         $routeCollection->add('_company_more', $this->routeDocument);
@@ -75,10 +69,9 @@ public function testMatch()
 
         $results = $this->matcher->finalMatch($routeCollection, $this->request);
 
-        // the matched route returns a key
         $expected = array(
-            RouteObjectInterface::ROUTE_NAME => '/routes/company/more',
-            RouteObjectInterface::ROUTE_OBJECT => $this->routeDocument,
+            '_route_name' => '_company_more',
+            '_route' => $this->routeDocument,
             'foo' => 'bar',
         );
 
@@ -125,10 +118,9 @@ public function testMatchNoRouteObject()
 
         $results = $this->matcher->finalMatch($routeCollection, $this->request);
 
-        // the matched route does not return a key
         $expected = array(
-            RouteObjectInterface::ROUTE_NAME => '_company_more',
-            RouteObjectInterface::ROUTE_OBJECT => $this->routeDocument,
+            '_route_name' => '_company_more',
+            '_route' => $this->routeDocument,
             'foo' => 'bar',
         );
 
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/UrlMatcherTest.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/UrlMatcherTest.php
index 66e99d1..08a1dec 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/UrlMatcherTest.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/UrlMatcherTest.php
@@ -89,8 +89,8 @@ public function doTestMatchRouteKey($routeKey)
         $results = $this->matcher->finalMatch($routeCollection, $this->request);
 
         $expected = array(
-            RouteObjectInterface::ROUTE_NAME => ($routeKey) ? $routeKey : '_company_more',
-            RouteObjectInterface::ROUTE_OBJECT => $this->routeDocument,
+            '_route_name' => ($routeKey) ? $routeKey : '_company_more',
+            '_route' => $this->routeDocument,
             'foo' => 'bar',
         );
 
@@ -138,8 +138,8 @@ public function testMatchNoRouteObject()
         $results = $this->matcher->finalMatch($routeCollection, $this->request);
 
         $expected = array(
-            RouteObjectInterface::ROUTE_NAME => '_company_more',
-            RouteObjectInterface::ROUTE_OBJECT => $this->routeDocument,
+            '_route_name' => '_company_more',
+            '_route' => $this->routeDocument,
             'foo' => 'bar',
         );
 
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ContentAwareGeneratorTest.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ContentAwareGeneratorTest.php
index f597854..6ddf3c7 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ContentAwareGeneratorTest.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ContentAwareGeneratorTest.php
@@ -278,7 +278,7 @@ public function testSupports()
  */
 class TestableContentAwareGenerator extends ContentAwareGenerator
 {
-    protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $absolute, $hostTokens = null)
+    protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $absolute, $hostnameTokens = null)
     {
         return 'result_url';
     }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/DynamicRouterTest.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/DynamicRouterTest.php
index 6055697..af790a8 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/DynamicRouterTest.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/DynamicRouterTest.php
@@ -29,7 +29,7 @@ public function setUp()
         $this->routeDocument = $this->buildMock('Symfony\\Cmf\\Component\\Routing\\Tests\\Routing\\RouteMock', array('getDefaults'));
 
         $this->matcher = $this->buildMock('Symfony\\Component\\Routing\\Matcher\\UrlMatcherInterface');
-        $this->generator = $this->buildMock('Symfony\\Cmf\\Component\\Routing\\VersatileGeneratorInterface', array('supports', 'generate', 'setContext', 'getContext'));
+        $this->generator = $this->buildMock('Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface', array('supports', 'generate', 'setContext', 'getContext'));
         $this->enhancer = $this->buildMock('Symfony\\Cmf\\Component\\Routing\\Enhancer\\RouteEnhancerInterface', array('enhance'));
 
         $this->context = $this->buildMock('Symfony\\Component\\Routing\\RequestContext');
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ProviderBasedGeneratorTest.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ProviderBasedGeneratorTest.php
index 8f0861c..509232d 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ProviderBasedGeneratorTest.php
+++ b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ProviderBasedGeneratorTest.php
@@ -87,7 +87,7 @@ public function testSupports()
  */
 class TestableProviderBasedGenerator extends ProviderBasedGenerator
 {
-    protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $absolute, $hostTokens = null)
+    protected function doGenerate($variables, $defaults, $requirements, $tokens, $parameters, $name, $absolute, $hostnameTokens = null)
     {
         return 'result_url';
     }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/VersatileGeneratorInterface.php b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/VersatileGeneratorInterface.php
deleted file mode 100644
index 9895cf0..0000000
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/VersatileGeneratorInterface.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-
-namespace Symfony\Cmf\Component\Routing;
-
-use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
-
-/**
- * This generator is able to handle more than string route names as symfony
- * core supports them.
- */
-interface VersatileGeneratorInterface extends UrlGeneratorInterface
-{
-    /**
-     * If $name preg_match this pattern, the name is valid for symfony core
-     * compatible generators.
-     */
-    const CORE_NAME_PATTERN = '/^[a-z0-9A-Z_.]+$/';
-
-    /**
-     * Whether this generator supports the supplied $name.
-     *
-     * This check does not need to look if the specific instance can be
-     * resolved to a route, only whether the router can generate routes from
-     * objects of this class.
-     *
-     * @param mixed $name The route "name" which may also be an object or anything
-     *
-     * @return bool
-     */
-    public function supports($name);
-}
-
